updates
diff --git a/player/index.html b/player/index.html
index 1f307a7..fbb5f1e 100644
--- a/player/index.html
+++ b/player/index.html
@@ -11,11 +11,11 @@
         }
 
         #bodymovin{
-            background-color:#333;
-            width:800px;
-            height:800px;
-            width:1024px;
-            height:768px;
+            background-color:#000;
+            width:100%;
+            height:100%;
+/*            width:1820px;
+            height:275px;*/
             display:block;
             overflow: hidden;
             transform: translate3d(0,0,0);
@@ -25,6 +25,10 @@
             display:none
         }
 
+        * {
+            pointer-events: none;
+        }
+
     </style>
     <!-- build:js bodymovin.js -->
      <script src="js/main.js"></script>
@@ -114,145 +118,27 @@
 <div id="bodymovin"></div>
 
 <script>
+    var mouseCoords = {
+        x:0,
+        y:0
+    }
+    var windowInnerWidth = window.innerWidth, windowInnerHeight = window.innerHeight;
 
     var anim;
     var elem = document.getElementById('bodymovin')
     var animData = {
         container: elem,
-        renderer: 'canvas',
+        renderer: 'svg',
         loop: true,
         autoplay: true,
         rendererSettings: {
             progressiveLoad:false,
             dpr: 1
         },
-        path: 'exports/render/data.json'
+        path: 'exports/render/omanzano.json'
     };
     anim = bodymovin.loadAnimation(animData);
-    anim.addEventListener('DOMLoaded', function(){
-        window.addEventListener('mousemove', function(ev){
-            anim.renderer.globalData.mouseCoords.x = ev.offsetX || ev.pageX;
-            anim.renderer.globalData.mouseCoords.y = ev.offsetY || ev.pageY;
-        })
-        createDrawingCanvas();
-    })
-
-    function createDrawingCanvas(){
-
-        var canvasW, canvasH;
-        var currentAnimFrame = -1;
-        var isEven = false;
-        var maxOffset = 250;
-        var currentOffset = 0;
-        var offsetDir = -1;
-        var lastSecond = Number.NEGATIVE_INFINITY;
-        var xOffset = 0;
-        var newSegmentHeight = 40;
-        var pairs = [];
-        
-        function tick(time){
-            ////
-                /*// get svg data
-                var xml = new XMLSerializer().serializeToString(sourceSVG);
-
-                // make it base64
-                var svg64 = btoa(xml);
-                var b64Start = 'data:image/svg+xml;base64,';
-
-                // prepend a "header"
-                var image64 = b64Start + svg64;
-
-                // set it as the source of the img element
-                imgHelper.src = image64;*/
-            ////
-            isEven = !isEven;
-            if(isEven){
-                //canvasCtx.globalCompositeOperation = 'exclusion';
-            }else {
-                //canvasCtx.globalCompositeOperation = 'multiply';
-            }
-            if(offsetDir > 0){
-                currentOffset = currentOffset >= maxOffset ? maxOffset : currentOffset + offsetDir;
-            } else {
-                currentOffset = currentOffset <= 0 ? 0 : currentOffset + offsetDir;
-            }
-
-            if(anim.currentFrame !== currentAnimFrame){
-                var newPairs = false;
-                if(time - lastSecond > 1000){
-                   newPairs = true;
-                   pairs.length = 0;
-                }
-                currentAnimFrame = anim.currentFrame;
-                var currentH = 0, currentPair = 0;
-                while(currentH < canvasH){
-                    if(newPairs){
-                        newSegmentHeight = 2 + Math.round(20*Math.random());
-                        if(currentH + newSegmentHeight > canvasH){
-                            newSegmentHeight = canvasH - currentH;
-                        }
-                        xOffset = Math.round(Math.random()*(canvasW - 1));
-                        pairs.push([newSegmentHeight, xOffset]);
-                    } else {
-                        newSegmentHeight = pairs[currentPair][0];
-                        xOffset = pairs[currentPair][1];
-                        currentPair += 1;
-                    }
-                    //var xOffset = 1 + Math.round(Math.random()*currentOffset);
-                    //xOffset = 0;
-                    bufferCanvasCtx.drawImage(source, xOffset, currentH, canvasW - xOffset, newSegmentHeight, 0 , currentH, canvasW - xOffset, newSegmentHeight);
-                    bufferCanvasCtx.drawImage(source, 0, currentH, xOffset, newSegmentHeight, canvasW - xOffset , currentH, xOffset, newSegmentHeight);
-                    currentH += newSegmentHeight;
-                }
-                canvasCtx.drawImage(bufferCanvas, 0, 0);
-                if(newPairs){
-                    lastSecond = time;
-                }
-            }
-
-            requestAnimationFrame(tick);
-        }
-
-        function elemDownHandler(){
-            offsetDir = 2;
-        }
-
-        function elemUpHandler(){
-            offsetDir = -5;
-        }
-
-        var source;
-        ///
-        var sourceCanvas = elem.getElementsByTagName('canvas')[0];
-        sourceCanvas.style.display = 'none';
-        source = sourceCanvas;
-        canvasW = sourceCanvas.width;
-        canvasH = sourceCanvas.height;
-        ///
-        /*var sourceSVG = elem.getElementsByTagName('svg')[0];
-        sourceSVG.style.display = 'none';
-        var imgHelper = document.createElement('img');
-        source = imgHelper;
-        canvasW = 1024;
-        canvasH = 768;*/
-        ///
-        var canvas = document.createElement('canvas');
-        var bufferCanvas = document.createElement('canvas');
-        var canvasCtx = canvas.getContext('2d');
-        var bufferCanvasCtx = bufferCanvas.getContext('2d');
-        canvas.width = canvasW;
-        canvas.height = canvasH;
-        bufferCanvas.width = canvasW;
-        bufferCanvas.height = canvasH;
-        //canvasCtx.globalCompositeOperation = 'darken';
-        elem.appendChild(canvas);
-        elem.addEventListener('mousedown', elemDownHandler);
-        elem.addEventListener('mouseup', elemUpHandler);
-        requestAnimationFrame(tick);
-
-
-    }
-
+    
 </script>
 </body>
 </html>
diff --git a/player/js/3rd_party/transformation-matrix.js b/player/js/3rd_party/transformation-matrix.js
index 6a06af2..667a7fb 100644
--- a/player/js/3rd_party/transformation-matrix.js
+++ b/player/js/3rd_party/transformation-matrix.js
@@ -253,7 +253,7 @@
         return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];
     }
 
-    function inversePoints(pts){
+    function inversePoint(pt){
         //var determinant = this.a * this.d - this.b * this.c;
         var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];
         var a = this.props[5]/determinant;
@@ -262,9 +262,13 @@
         var d = this.props[0]/determinant;
         var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12])/determinant;
         var f = - (this.props[0] * this.props[13] - this.props[1] * this.props[12])/determinant;
+        return [pt[0] * a + pt[1] * c + e, pt[0] * b + pt[1] * d + f, 0];
+    }
+
+    function inversePoints(pts){
         var i, len = pts.length, retPts = [];
         for(i=0;i<len;i+=1){
-            retPts[i] = [pts[i][0] * a + pts[i][1] * c + e, pts[i][0] * b + pts[i][1] * d + f, 0]
+            retPts[i] = inversePoint(pts[i]);
         }
         return retPts;
     }
@@ -329,6 +333,7 @@
         this.clone = clone;
         this.cloneFromProps = cloneFromProps;
         this.inversePoints = inversePoints;
+        this.inversePoint = inversePoint;
         this._t = this.transform;
 
         this.props = [1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];
diff --git a/player/js/animation/AnimationItem.js b/player/js/animation/AnimationItem.js
index 4433605..c9e35cf 100644
--- a/player/js/animation/AnimationItem.js
+++ b/player/js/animation/AnimationItem.js
@@ -30,8 +30,59 @@
     this.pendingSegment = false;
     this._idle = true;
     this.projectInterface = ProjectInterface();
+    this.wrapperSize = {
+        w: 1,
+        h: 1
+    }
 };
 
+AnimationItem.prototype.measureWrapper = function() {
+    this.wrapperSize.w = this.wrapper.clientWidth;
+    this.wrapperSize.h = this.wrapper.clientHeight;
+}
+
+AnimationItem.prototype.createWrapperTransformObject = function(){
+    return {
+        mProp: {
+            v: {
+                inversePoint: function inversePoint(pt){
+                    var sc = 1;
+                    var svgRel = this.animationData.w / this.animationData.h;
+                    var elemRel = this.wrapperSize.w/this.wrapperSize.h;
+                    if(elemRel > svgRel) {
+                        sc = this.wrapperSize.h/this.animationData.h;
+                    } else {
+                        sc = this.wrapperSize.w/this.animationData.w;
+                    }
+                    var props13 = (this.wrapperSize.h - this.animationData.h*sc)/2;
+                    var props12 = (this.wrapperSize.w - this.animationData.w*sc)/2;
+                    var determinant = sc * sc;
+                    var a = sc/determinant;
+                    var d = sc/determinant;
+                    var e = (-sc * props12)/determinant;
+                    var f = -(sc * props13)/determinant;
+                    return [pt[0] * a + e, pt[1] * d + f, 0];
+                }.bind(this),
+
+                applyToPointArray: function applyToPointArray(x,y){
+                    var sc = 1;
+                    var svgRel = this.animationData.w / this.animationData.h;
+                    var elemRel = this.wrapper.clientWidth/this.wrapper.clientHeight;
+                    if(elemRel > svgRel) {
+                        sc = this.wrapper.clientHeight/this.animationData.h;
+                    } else {
+                        sc = this.wrapper.clientWidth/this.animationData.w;
+                    }
+                    var props13 = (this.wrapper.clientHeight - this.animationData.h*sc)/2;
+                    var props12 = (this.wrapper.clientWidth - this.animationData.w*sc)/2;
+
+                    return [x * sc + props12, y * sc + props13];
+                }.bind(this)
+            }
+        }
+    }
+}
+
 AnimationItem.prototype.setParams = function(params) {
     var self = this;
     if(params.context){
@@ -54,6 +105,14 @@
             this.renderer = new HybridRenderer(this, params.rendererSettings);
             break;
     }
+
+    this._wrapperTransformObject = this.createWrapperTransformObject();
+
+    Object.defineProperty(this.renderer, 'finalTransform',{
+        get: function(){
+            return this._wrapperTransformObject
+        }.bind(this)
+    })
     this.renderer.setProjectInterface(this.projectInterface);
     this.animType = animType;
 
@@ -134,7 +193,6 @@
     if(prerender === 'false'){
         params.prerender = false;
     }
-    console.log('animElements:', params)
     this.setParams(params);
 };
 
@@ -220,38 +278,6 @@
 
 AnimationItem.prototype.configAnimation = function (animData) {
     //ERASE
-    console.log(animData);
-    // two_dance
-    for(var i =0; i < animData.assets[0].layers.length; i += 1){
-        //animData.layers[i].shapes.push({"ty": "ms","maxDist":50,"dc":0.95}); /// OPTION C 2
-        //animData.layers[i].shapes.push({"ty": "ms","maxDist":250,"dc":0.25}); /// OPTION A 1
-        //animData.layers[i].shapes.push({"ty": "ms","maxDist":300,"dc":.75}); /// OPTION A 2
-        //animData.layers[i].shapes.push({"ty": "ms","maxDist":300,"dc":.95}); /// OPTION A 3
-        //animData.layers[i].shapes.push({"ty": "ms","maxDist":250,"dc":.999}); /// OPTION A 4
-        if(animData.assets[0].layers[i].ty === 4){
-            animData.assets[0].layers[i].shapes.push({"ty": "ms","dc":1, "ss": 140, "mx": 15}); /// OPTION B 1
-        }
-    }
-    for(var i =0; i < animData.assets[1].layers.length; i += 1){
-        //animData.layers[i].shapes.push({"ty": "ms","maxDist":50,"dc":0.95}); /// OPTION C 2
-        //animData.layers[i].shapes.push({"ty": "ms","maxDist":250,"dc":0.25}); /// OPTION A 1
-        //animData.layers[i].shapes.push({"ty": "ms","maxDist":300,"dc":.75}); /// OPTION A 2
-        //animData.layers[i].shapes.push({"ty": "ms","maxDist":300,"dc":.95}); /// OPTION A 3
-        //animData.layers[i].shapes.push({"ty": "ms","maxDist":250,"dc":.999}); /// OPTION A 4
-        animData.assets[1].layers[i].shapes.push({"ty": "ms","dc":1, "ss": 140, "mx": 15}); /// OPTION B 1
-    }
-
-    // DANCING DARWIN
-    /*for(var i =0; i < 32; i+= 1){
-        //animData.layers[i].shapes.push({"ty": "ms","maxDist":50,"dc":0.95}); /// OPTION C 2
-        //animData.layers[i].shapes.push({"ty": "ms","maxDist":250,"dc":0.25}); /// OPTION A 1
-        //animData.layers[i].shapes.push({"ty": "ms","maxDist":300,"dc":.75}); /// OPTION A 2
-        //animData.layers[i].shapes.push({"ty": "ms","maxDist":300,"dc":.95}); /// OPTION A 3
-        //animData.layers[i].shapes.push({"ty": "ms","maxDist":250,"dc":.999}); /// OPTION A 4
-        animData.layers[i].shapes.push({"ty": "ms","dc":1, "ss": 140, "mx": 15}); /// OPTION B 1
-    }*/
-    // CIRCLE
-    //animData.assets[1].layers[1].shapes.push({"ty": "ms","dc":.5, "ss": 140, "mx": 15});
 
     ////
     if(this.renderer && this.renderer.destroyed){
diff --git a/player/js/elements/BaseElement.js b/player/js/elements/BaseElement.js
index 73ed5c2..8b28932 100644
--- a/player/js/elements/BaseElement.js
+++ b/player/js/elements/BaseElement.js
@@ -86,7 +86,7 @@
     var flag = true;
     var comp = this.comp;
     while(flag){
-        if(comp.finalTransform){
+        if(comp){
             transforms.push(comp.finalTransform);
             if(comp.hierarchy){
                 i = 0;
@@ -128,7 +128,7 @@
     var flag = true;
     var comp = this.comp;
     while(flag){
-        if(comp.finalTransform){
+        if(comp){
             transforms.splice(0,0,comp.finalTransform);
             if(comp.hierarchy){
                 len = comp.hierarchy.length;
@@ -145,12 +145,12 @@
     }
     len = transforms.length;
     for(i=0;i<len;i+=1){
-        pt = transforms[i].mProp.v.inversePoints([pt])[0];
+        pt = transforms[i].mProp.v.inversePoint(pt);
     }
     if(extraTransforms){
         len = extraTransforms.length;
         for(i = 0;i < len; i += 1){
-            pt = extraTransforms[i].mProps.v.inversePoints([pt])[0];
+            pt = extraTransforms[i].mProps.v.inversePoint(pt);
         }
     }
     return pt;
diff --git a/player/js/elements/canvasElements/CVShapeElement.js b/player/js/elements/canvasElements/CVShapeElement.js
index f28fd2d..46abf0e 100644
--- a/player/js/elements/canvasElements/CVShapeElement.js
+++ b/player/js/elements/canvasElements/CVShapeElement.js
@@ -17,7 +17,7 @@
 CVShapeElement.prototype.createElements = function(){
 
     this._parent.createElements.call(this);
-    this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.dynamicProperties, true);
+    this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.dynamicProperties,[], true);
 };
 
 CVShapeElement.prototype.createStyleElement = function(data, dynamicProperties){
@@ -85,10 +85,11 @@
     return elementData;
 }
 
-CVShapeElement.prototype.createShapeElement = function(data, dynamicProperties) {
+CVShapeElement.prototype.createShapeElement = function(data, ownTransformers, dynamicProperties) {
     var elementData = {
         nodes:[],
         trNodes:[],
+        transformers: ownTransformers,
         tr:[0,0,0,0,0,0]
     };
     var ty = 4;
@@ -125,7 +126,7 @@
     for(i=0;i<len;i+=1){
         this.prevViewData[i] = this.itemsData[i];
     }
-    this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.dynamicProperties, true);
+    this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.dynamicProperties, [], true);
     var i, len = this.dynamicProperties.length;
     for(i=0;i<len;i+=1){
         this.dynamicProperties[i].getValue();
@@ -133,7 +134,8 @@
     this.renderModifiers();
 }
 
-CVShapeElement.prototype.searchShapes = function(arr,itemsData, prevViewData,dynamicProperties, render){
+CVShapeElement.prototype.searchShapes = function(arr,itemsData, prevViewData,dynamicProperties, transformers, render){
+    var ownTransformers = [].concat(transformers);
     var i, len = arr.length - 1;
     var j, jLen;
     var ownArrays = [], ownModifiers = [], processedPos;
@@ -161,14 +163,15 @@
                     itemsData[i].prevViewData[j] = itemsData[i].it[j];
                 }
             }
-            this.searchShapes(arr[i].it,itemsData[i].it,itemsData[i].prevViewData,dynamicProperties, render);
+            this.searchShapes(arr[i].it,itemsData[i].it,itemsData[i].prevViewData,dynamicProperties, ownTransformers, render);
         }else if(arr[i].ty == 'tr'){
             if(!processedPos){
                 itemsData[i] = this.createTransformElement(arr[i], dynamicProperties);
             }
+            ownTransformers.push(itemsData[i].transform);
         }else if(arr[i].ty == 'sh' || arr[i].ty == 'rc' || arr[i].ty == 'el' || arr[i].ty == 'sr'){
             if(!processedPos){
-                itemsData[i] = this.createShapeElement(arr[i], dynamicProperties);
+                itemsData[i] = this.createShapeElement(arr[i], ownTransformers, dynamicProperties);
             }
             
         }else if(arr[i].ty == 'tm' || arr[i].ty == 'rd' || arr[i].ty == 'ms'){
diff --git a/player/js/renderers/SVGRenderer.js b/player/js/renderers/SVGRenderer.js
index 25acbc0..58b6e47 100644
--- a/player/js/renderers/SVGRenderer.js
+++ b/player/js/renderers/SVGRenderer.js
@@ -52,6 +52,7 @@
     this.layerElement.setAttribute('preserveAspectRatio',this.renderConfig.preserveAspectRatio);
     this.layerElement.style.width = '100%';
     this.layerElement.style.height = '100%';
+    this.svgElement = this.layerElement;
     //this.layerElement.style.transform = 'translate3d(0,0,0)';
     //this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = "0px 0px 0px";
     this.animationItem.wrapper.appendChild(this.layerElement);
diff --git a/player/js/utils/shapes/MouseModifier.js b/player/js/utils/shapes/MouseModifier.js
index 0256a03..0bc781c 100644
--- a/player/js/utils/shapes/MouseModifier.js
+++ b/player/js/utils/shapes/MouseModifier.js
@@ -79,9 +79,9 @@
         positions.i[i][1] = Math.sin(theta) * Math.max(0,this.data.maxDist-positions.distI[i])/2 + (path.i[i][1]);
 
         /////OPTION 1
-        // cloned_path.setTripleAt(positions.v[i][0],positions.v[i][1]
-        //     ,positions.o[i][0],positions.o[i][1]
-        //     ,positions.i[i][0],positions.i[i][1], i);
+        cloned_path.setTripleAt(positions.v[i][0],positions.v[i][1]
+            ,positions.o[i][0],positions.o[i][1]
+            ,positions.i[i][0],positions.i[i][1], i);
 
 
 
@@ -107,7 +107,7 @@
 
 
     //// OPTION B
-    /*for(i=0;i<len;i+=1){
+    for(i=0;i<len;i+=1){
         if(!positions.v[i]){
             positions.v[i] = [path.v[i][0],path.v[i][1]];
             positions.o[i] = [path.o[i][0],path.o[i][1]];
@@ -156,10 +156,11 @@
         positions.i[i][0] += Math.cos(theta) * distance + (path.i[i][0] - positions.i[i][0]) * this.data.dc;
         positions.i[i][1] += Math.sin(theta) * distance + (path.i[i][1] - positions.i[i][1]) * this.data.dc;
 
+
         /////OPTION 1
-        cloned_path.setTripleAt(positions.v[i][0],positions.v[i][1]
-            ,positions.o[i][0],positions.o[i][1]
-            ,positions.i[i][0],positions.i[i][1], i);
+        // cloned_path.setTripleAt(positions.v[i][0],positions.v[i][1]
+        //     ,positions.o[i][0],positions.o[i][1]
+        //     ,positions.i[i][0],positions.i[i][1], i);
 
 
 
@@ -171,16 +172,16 @@
 
 
         /////OPTION 3
-        //vValues.push(positions.v[i]);
-        //iValues.push(path.i[i]);
-        //oValues.push(path.o[i]);
+        // cloned_path.setTripleAt(positions.v[i][0],positions.v[i][1]
+        //      ,path.i[i][0],path.i[i][1]
+        //      ,path.o[i][0],path.o[i][1], i);
 
 
         /////OPTION 4
-        //vValues.push(path.v[i]);
-        // oValues.push(positions.o[i]);
-        // iValues.push(positions.i[i]);
-    }*/
+        cloned_path.setTripleAt(path.v[i][0],path.v[i][1]
+             ,positions.o[i][0],positions.o[i][1]
+             ,positions.i[i][0],positions.i[i][1], i);
+    }
 
     ////OPTION C
 
@@ -196,28 +197,28 @@
         perc = Math.min(1,distance/maxDist);
 
         //// OPTION 1
-        if(distance < maxDist){
-            cloned_path.setTripleAt(path.v[i][0],path.v[i][1]
-            ,path.v[i][0]+(path.o[i][0] - path.v[i][0])*perc,path.v[i][1]+(path.o[i][1] - path.v[i][1])*perc
-            ,path.v[i][0]+(path.i[i][0] - path.v[i][0])*perc,path.v[i][1]+(path.i[i][1] - path.v[i][1])*perc, i);
-        } else {
-            cloned_path.setTripleAt(path.v[i][0],path.v[i][1]
-            ,path.o[i][0],path.o[i][1]
-            ,path.i[i][0],path.i[i][1], i);
-        }
-
-        //// OPTION 2
-        // perc = 1 - perc*5;
         // if(distance < maxDist){
-        //     cloned_path.setTripleAt(path.v[i][0] * perc,path.v[i][1] * perc
-        //     ,path.o[i][0] * perc,path.o[i][1] * perc
-        //     ,path.i[i][0] * perc,path.i[i][1] * perc, i);
+        //     cloned_path.setTripleAt(path.v[i][0],path.v[i][1]
+        //     ,path.v[i][0]+(path.o[i][0] - path.v[i][0])*perc,path.v[i][1]+(path.o[i][1] - path.v[i][1])*perc
+        //     ,path.v[i][0]+(path.i[i][0] - path.v[i][0])*perc,path.v[i][1]+(path.i[i][1] - path.v[i][1])*perc, i);
         // } else {
         //     cloned_path.setTripleAt(path.v[i][0],path.v[i][1]
         //     ,path.o[i][0],path.o[i][1]
         //     ,path.i[i][0],path.i[i][1], i);
         // }
 
+        //// OPTION 2
+        perc = 1 - perc*2;
+        if(distance < maxDist){
+            cloned_path.setTripleAt(path.v[i][0] * perc,path.v[i][1] * perc
+            ,path.o[i][0] * perc,path.o[i][1] * perc
+            ,path.i[i][0] * perc,path.i[i][1] * perc, i);
+        } else {
+            cloned_path.setTripleAt(path.v[i][0],path.v[i][1]
+            ,path.o[i][0],path.o[i][1]
+            ,path.i[i][0],path.i[i][1], i);
+        }
+
         //// OPTION 3
         // perc = 1 - perc;
         // if(distance < maxDist){
@@ -233,7 +234,8 @@
     }*/
 
     ////OPTION D
-    var localMouseCoords = this.elem.globalToLocal(mouseCoords, transformers);
+    /*var localMouseCoords = this.elem.globalToLocal(mouseCoords, transformers);
+    //console.log(localMouseCoords);
 
     var maxDist = this.data.maxDist;
     var perc, distance;
@@ -242,24 +244,40 @@
         //globalPt = this.elem.localToGlobal(path.v[i],transformers);
 
         x = path.v[i][0] - localMouseCoords[0];
-        y =path.v[i][1] - localMouseCoords[1];
+        y = path.v[i][1] - localMouseCoords[1];
         distance = Math.sqrt( (x * x) + (y * y) );
-        var mult = -0.15*(distance/200);
-        //var mult = -.55*(Math.exp(distance/300)-1);
-        //var mult = -.55*(Math.log(distance/250));
-        //mult = -0.55*Math.cos(distance*Math.PI/180);
+        var mult = 0.2*(distance/200);
+        var mult = .95*(Math.exp(distance/400)-1);
+        var mult = .25*(Math.log(distance/450));
+        //mult = -0.15*Math.cos(distance*3*Math.PI/180);
+
+        //var mult = .75*(Math.exp(distance/400)-1); // OPTION 2
+        // mult = -0.75*Math.cos(distance/3*Math.PI/180); //OPTION 2
+        //var mult = .45*(Math.log(distance*5/450)); // OPTION 2
+        //var mult = .95*(Math.exp(distance/400)-1); // OPTION 3
+        //var mult = .25*(Math.log(distance/450)); OPTION 3
 
         //// OPTION 1
-        cloned_path.setTripleAt(path.v[i][0] + (localMouseCoords[0] - path.v[i][0]) * mult, path.v[i][1] + (localMouseCoords[1] - path.v[i][1]) * mult
-            ,path.o[i][0],path.o[i][1]
-            ,path.i[i][0],path.i[i][1], i);
+        // cloned_path.setTripleAt(path.v[i][0] + (localMouseCoords[0] - path.v[i][0]) * mult, path.v[i][1] + (localMouseCoords[1] - path.v[i][1]) * mult
+        //     ,path.o[i][0],path.o[i][1]
+        //     ,path.i[i][0],path.i[i][1], i);
 
         //// OPTION 2
         // cloned_path.setTripleAt(path.v[i][0] + (localMouseCoords[0] - path.v[i][0]) * mult, path.v[i][1] + (localMouseCoords[1] - path.v[i][1]) * mult
         //     ,path.o[i][0] + (localMouseCoords[0] - path.o[i][0]) * mult, path.o[i][1] + (localMouseCoords[1] - path.o[i][1]) * mult
         //     ,path.i[i][0] + (localMouseCoords[0] - path.i[i][0]) * mult, path.i[i][1] + (localMouseCoords[1] - path.i[i][1]) * mult, i);
 
-    }
+        //// OPTION 3
+        cloned_path.setTripleAt(path.v[i][0] + (localMouseCoords[0] + path.v[i][0]) * mult, path.v[i][1] + (localMouseCoords[1] + path.v[i][1]) * mult
+            ,path.o[i][0] + (localMouseCoords[0] + path.o[i][0]) * mult, path.o[i][1] + (localMouseCoords[1] + path.o[i][1]) * mult
+            ,path.i[i][0] + (localMouseCoords[0] + path.i[i][0]) * mult, path.i[i][1] + (localMouseCoords[1] + path.i[i][1]) * mult, i);
+
+        //// OPTION 4
+        // cloned_path.setTripleAt(path.v[i][0] - (localMouseCoords[0] - path.v[i][0]) * mult, path.v[i][1] - (localMouseCoords[1] - path.v[i][1]) * mult
+        //     ,path.o[i][0] - (localMouseCoords[0] - path.o[i][0]) * mult, path.o[i][1] - (localMouseCoords[1] - path.o[i][1]) * mult
+        //     ,path.i[i][0] - (localMouseCoords[0] - path.i[i][0]) * mult, path.i[i][1] - (localMouseCoords[1] - path.i[i][1]) * mult, i);
+
+    }*/
 
 
     //return shape_pool.clone(path);
@@ -272,42 +290,36 @@
     var shapePaths;
     var i, len = this.shapes.length;
     var j, jLen;
-
-    if(mouseX){
-
-        var shapeData, newPaths, localShapeCollection, localMouseCoords;
-        for(i=0;i<len;i+=1){
-            shapeData = this.shapes[i];
-            //localMouseCoords = this.elem.localToGlobal([mouseX,mouseY], shapeData.transformers);
-            localMouseCoords = [mouseX,mouseY];
-            newPaths = shapeData.shape.paths;
-            localShapeCollection = shapeData.localShapeCollection;
-            if(!(!shapeData.shape.mdf && !this.mdf)){
-                localShapeCollection.releaseShapes();
-                shapeData.shape.mdf = true;
-                shapePaths = shapeData.shape.paths;
-                jLen = shapePaths._length;
-                for(j=0;j<jLen;j+=1){
-                    if(!this.positions[i][j]){
-                        this.positions[i][j] = {
-                            v:[],
-                            o:[],
-                            i:[],
-                            distV:[],
-                            distO:[],
-                            distI:[]
-                        };
-                    }
-                    localShapeCollection.addShape(this.processPath(shapePaths.shapes[j],localMouseCoords,shapeData.transformers, this.positions[i][j]));
+    var shapeData, newPaths, localShapeCollection, localMouseCoords;
+    for(i=0;i<len;i+=1){
+        shapeData = this.shapes[i];
+        //localMouseCoords = this.elem.localToGlobal([mouseX,mouseY], shapeData.transformers);
+        localMouseCoords = [mouseX,mouseY];
+        newPaths = shapeData.shape.paths;
+        localShapeCollection = shapeData.localShapeCollection;
+        if(!(!shapeData.shape.mdf && !this.mdf)){
+            localShapeCollection.releaseShapes();
+            shapeData.shape.mdf = true;
+            shapePaths = shapeData.shape.paths;
+            jLen = shapePaths._length;
+            for(j=0;j<jLen;j+=1){
+                if(!this.positions[i][j]){
+                    this.positions[i][j] = {
+                        v:[],
+                        o:[],
+                        i:[],
+                        distV:[],
+                        distO:[],
+                        distI:[]
+                    };
                 }
-                for(j=0;j<jLen;j+=1){
-                }
-                shapeData.shape.paths = shapeData.localShapeCollection;
+                localShapeCollection.addShape(this.processPath(shapePaths.shapes[j],localMouseCoords,shapeData.transformers, this.positions[i][j]));
             }
+            for(j=0;j<jLen;j+=1){
+            }
+            shapeData.shape.paths = shapeData.localShapeCollection;
         }
-
     }
-
 }
 
 MouseModifier.prototype.initModifierProperties = function(elem,data){