(function(Hammer) {
  'use strict';
  
  /**
   * enable multitouch on the desktop by pressing the shiftkey
   * the other touch goes in the opposite direction so the center keeps at its place
   * it's recommended to enable Hammer.debug.showTouches for this one
   * 
   * @usage
   * just call `Hammer.plugins.fakeMultitouch()` and you're done.
   */
  Hammer.plugins.fakeMultitouch = function() {
    // no need to fake it if it already is possible!
    var maxTouchPoints = navigator.maxTouchPoints || navigator.msMaxTouchPoints;
    if(Hammer.HAS_TOUCHEVENTS || (Hammer.HAS_POINTEREVENTS && maxTouchPoints > 1)) {
      return;
    }


    
    // keeps the start position to keep it centered
    var start_pos = false;
    
    /**
     * overwrites Hammer.event.getTouchList.
     * @method getTouchList
     * @param {Event} ev
     * @param {String} eventType
     * @return {Array} Touches
     */
    Hammer.event.getTouchList = function(ev, eventType) {
      var touchlist = [];

      // reset on start of a new touch
      if(eventType == Hammer.EVENT_START) {
        start_pos = false;
      }

      // when the shift key is pressed, multitouch is possible on desktop
      // why shift? because ctrl and alt are taken by osx and linux
      if(ev.shiftKey) {
        // on touchstart we store the position of the mouse for multitouch
        if(!start_pos) {
          start_pos = {
            pageX: ev.pageX,
            pageY: ev.pageY,
            clientX: ev.clientX,
            clientY: ev.clientY
          };
          
          // new touch came up
          touchlist.trigger = Hammer.EVENT_TOUCH;
        }

        var distance_x = start_pos.pageX - ev.pageX;
        var distance_y = start_pos.pageY - ev.pageY;

        // fake second touch in the opposite direction
        touchlist.push({
            identifier: 1,
            pageX     : start_pos.pageX - distance_x - 50,
            pageY     : start_pos.pageY - distance_y + 50,
            clientX   : start_pos.clientX - distance_x - 50,
            clientY   : start_pos.clientY - distance_y + 50,
            target    : ev.target
          },{
            identifier: 2,
            pageX     : start_pos.pageX + distance_x + 50,
            pageY     : start_pos.pageY + distance_y - 50,
            clientX   : start_pos.clientX + distance_x + 50,
            clientY   : start_pos.clientY + distance_y - 50,
            target    : ev.target
          });
      }
      // normal single touch
      else {
        // we came from multitouch, trigger a release event
        if(start_pos) {
          touchlist.trigger = Hammer.EVENT_RELEASE;
        }
        
        start_pos = false;
        touchlist.push({
            identifier: 1,
            pageX     : ev.pageX,
            pageY     : ev.pageY,
            clientX   : ev.clientX,
            clientY   : ev.clientY,
            target    : ev.target
          });
      }

      ev.touches = touchlist;
      ev.changedTouches = touchlist;
      return touchlist;
    };
  };

})(window.Hammer);
@@ -29,18 +29,16 @@
 trict';%0A
-  
 %0A  /**%0A 
@@ -258,17 +258,16 @@
 one%0A   *
- 
 %0A   * @u
@@ -631,21 +631,16 @@
     %7D%0A%0A%0A
-    %0A
     // k
@@ -710,20 +710,16 @@
  false;%0A
-    
 %0A    /**
@@ -962,20 +962,49 @@
 ar touch
-list
+es = %5B%5D;%0A      var changedTouches
  = %5B%5D;%0A%0A
@@ -1548,26 +1548,16 @@
      %7D;%0A
-          
 %0A       
@@ -1587,36 +1587,34 @@
 %0A          touch
-list
+es
 .trigger = Hamme
@@ -1806,36 +1806,34 @@
 on%0A        touch
-list
+es
 .push(%7B%0A        
@@ -2445,32 +2445,67 @@
 et%0A          %7D);
+%0A%0A        changedTouches = touches;
 %0A      %7D%0A      /
@@ -2551,199 +2551,15 @@
     
-// we came from multitouch, trigger a release event%0A        if(start_pos) %7B%0A          touchlist.trigger = Hammer.EVENT_RELEASE;%0A        %7D%0A        %0A        start_pos = false;%0A        touchlist
+touches
 .pus
@@ -2781,45 +2781,406 @@
 %7D);%0A
+%0A  
       
-%7D%0A%0A      ev.touches = touchlist
+// we came from multitouch, trigger a release event%0A        // and use the changed touches from the multitouch%0A        if(start_pos) %7B%0A          touches.trigger = Hammer.EVENT_RELEASE;%0A        %7D%0A        // use the touches as changedTouches, because we are in a move%0A        else %7B%0A          changedTouches = touches;%0A        %7D%0A        start_pos = false;%0A      %7D%0A%0A      ev.touches = touches
 ;%0A  
@@ -3203,25 +3203,30 @@
 uches = 
-touchlist
+changedTouches
 ;%0A      
@@ -3241,12 +3241,10 @@
 ouch
-list
+es
 ;%0A  

fix changedtouches