diff --git a/parser/CompConverter.js b/parser/CompConverter.js
index 2e6bcf0..8f69d3c 100644
--- a/parser/CompConverter.js
+++ b/parser/CompConverter.js
@@ -17,8 +17,8 @@
         if(!renderCancelled){
             var dataFile = new File(exportFolder.fullName+'/data.json');
             dataFile.open('w','TEXT','????');
-            //dataFile.write(JSON.stringify(compositionData)); //DO NOT ERASE, JSON UNFORMATTED
-            dataFile.write(JSON.stringify(compositionData, null, '  ')); //DO NOT ERASE, JSON FORMATTED
+            dataFile.write(JSON.stringify(compositionData)); //DO NOT ERASE, JSON UNFORMATTED
+            //dataFile.write(JSON.stringify(compositionData, null, '  ')); //DO NOT ERASE, JSON FORMATTED
             dataFile.close();
         }
         currentExportingComposition+=1;
@@ -104,8 +104,9 @@
                 currentExportingComposition+=1;
             }
         }
-        //If we get here there are no more compositions to render and callback is executed
-        helperFootage.remove();
+        //If it gets here there are no more compositions to render and callback is executed
+        //helperSolid.remove();
+        //helperFootage.remove();
         endCallback.apply();
     }
 
@@ -114,6 +115,14 @@
         var helperImportOptions = new ImportOptions();
         helperImportOptions.file = helperFile;
         helperFootage = mainProject.importFile(helperImportOptions);
+        var helperFolder = helperFootage.item(2);
+        var helperComp = helperFootage.item(1);
+        //helperSolid = helperComp.layers.addSolid([1.0,1.0,0], "helperSolid", 10, 10, 1);
+        //helperSolid = helperComp.layers.addNull(2);
+        //helperSolid.layerInfo.transform['Anchor Point']
+        //helperSolid.transform['Anchor Point'].expression = "velocityAtTime(time)";
+        //helperSolid.parentFolder = helperFolder;
+
         rqManager.setProject(app.project);
         LayerConverter.setCallback(layersConverted);
         currentExportingComposition = 0;
diff --git a/parser/DOMAnimationManager.js b/parser/DOMAnimationManager.js
index e103dca..b01d126 100644
--- a/parser/DOMAnimationManager.js
+++ b/parser/DOMAnimationManager.js
@@ -242,6 +242,9 @@
                 layerOb.ks.p = extrasInstance.roundNumber(layerInfo.transform.position.valueAtTime(0,false),3);
             }
             if(layerInfo.transform['Anchor Point'].numKeys>1){
+                /*if(lType == 'ShapeLayer'){
+                    prepareHelperSolid(layerInfo.transform['Anchor Point']);
+                }*/
                 extrasInstance.convertToBezierValues(layerInfo.transform['Anchor Point'], frameRate, layerOb.ks,'a');
             }else{
                 layerOb.ks.a = extrasInstance.roundNumber(layerInfo.transform['Anchor Point'].valueAtTime(0,false),3);
@@ -263,6 +266,23 @@
         }
     }
 
+    function prepareHelperSolid(property){
+        var helperAnchorPoint = helperSolid.transform["Anchor Point"];
+        var j,jLen = helperAnchorPoint.numKeys;
+        while(jLen > 0){
+            helperAnchorPoint.removeKey(1);
+            jLen -= 1;
+        }
+        jLen = property.numKeys;
+        for(j = 0;j<jLen; j += 1){
+            var keyIn = property.keyInTemporalEase(j+1);
+            var keyOut = property.keyOutTemporalEase(j+1);
+            helperAnchorPoint.addKey(property.keyTime(j+1));
+            helperAnchorPoint.setValueAtKey(j+1,property.keyValue(j+1));
+            //helperAnchorPoint.setTemporalEaseAtKey(j+1, keyIn, keyOut);
+        }
+    }
+
     function createLayers(compo, layersData, frameRate){
         var i, len = compo.layers.length;
         for(i = 0;i<len;i++){
diff --git a/parser/extras.js b/parser/extras.js
index d795605..dbb4d63 100644
--- a/parser/extras.js
+++ b/parser/extras.js
@@ -545,10 +545,10 @@
                 if(property.propertyValueType == PropertyValueType.ThreeD_SPATIAL || property.propertyValueType == PropertyValueType.TwoD_SPATIAL || property.propertyValueType == PropertyValueType.SHAPE ){
                     property.expression = propertyExpression;
                 }
-                bezierIn.x = extrasInstance.roundNumber(bezierIn.x,3);
+                /*bezierIn.x = extrasInstance.roundNumber(bezierIn.x,3);
                 bezierIn.y = extrasInstance.roundNumber(bezierIn.y,3);
                 bezierOut.x = extrasInstance.roundNumber(bezierOut.x,3);
-                bezierOut.y = extrasInstance.roundNumber(bezierOut.y,3);
+                bezierOut.y = extrasInstance.roundNumber(bezierOut.y,3);*/
                 segmentOb.i = bezierIn;
                 segmentOb.o = bezierOut;
                 segmentOb.n = (bezierIn.x.toString()+'_'+bezierIn.y.toString()+'_'+bezierOut.x.toString()+'_'+bezierOut.y.toString()).replace(/\./g, 'p');
diff --git a/parser/global.js b/parser/global.js
index ac9dab9..3ca83c7 100644
--- a/parser/global.js
+++ b/parser/global.js
@@ -1,5 +1,7 @@
 /****** INIT Var Declarations ******/
 var helperFootage;
+//Solid for anchor point fix on shape layers
+var helperSolid;
 //Destination export folder
 var exportFolder;
 //Interval objects container
diff --git a/player/index.html b/player/index.html
index 60c1ee9..a0416b8 100644
--- a/player/index.html
+++ b/player/index.html
@@ -4,6 +4,7 @@
     <!-- build:js bodymovin.js -->
     <script src="js/main.js"></script>
     <script src="js/3rd_party/transformation-matrix.js"></script>
+    <script src="js/3rd_party/BezierEasing.js"></script>
     <script src="js/utils/MatrixManager.js"></script>
     <script src="js/utils/animationFramePolyFill.js"></script>
     <script src="js/utils/common.js"></script>
diff --git a/player/js/elements/canvasElements/CVBaseElement.js b/player/js/elements/canvasElements/CVBaseElement.js
index b49059d..57c2c2b 100644
--- a/player/js/elements/canvasElements/CVBaseElement.js
+++ b/player/js/elements/canvasElements/CVBaseElement.js
@@ -59,7 +59,7 @@
     ctx.globalAlpha = ctx.globalAlpha*this.currentAnimData.tr.o;
     matrixValue = this.currentAnimData.matrixArray;
      ctx.transform(matrixValue[0], matrixValue[1], matrixValue[2], matrixValue[3], matrixValue[4], matrixValue[5]);
-    console.log('this.currentAnimData.tr.a: ',this.currentAnimData.tr.a);
+    ///console.log('this.currentAnimData.tr.a: ',this.currentAnimData.tr.a);
      ctx.translate(-this.currentAnimData.tr.a[0],-this.currentAnimData.tr.a[1]);
     if(this.data.hasMask){
         this.maskManager.draw();
diff --git a/player/js/elements/canvasElements/CVShapeItemElement.js b/player/js/elements/canvasElements/CVShapeItemElement.js
index 241bb08..978d8b5 100644
--- a/player/js/elements/canvasElements/CVShapeItemElement.js
+++ b/player/js/elements/canvasElements/CVShapeItemElement.js
@@ -70,6 +70,7 @@
         var matrixValue = tr.mtArr;
         if(matrixValue[0] !== 1 || matrixValue[1] !== 0 || matrixValue[2] !== 0 || matrixValue[3] !== 1 || matrixValue[4] !== 0 || matrixValue[5] !== 0){
             ctx.save();
+            console.log('matrixValue: ',matrixValue);
             ctx.transform(matrixValue[0], matrixValue[1], matrixValue[2], matrixValue[3], matrixValue[4], matrixValue[5]);
             flag = true;
         }
diff --git a/player/js/utils/DataManager.js b/player/js/utils/DataManager.js
index ebeb75f..5347db6 100644
--- a/player/js/utils/DataManager.js
+++ b/player/js/utils/DataManager.js
@@ -669,9 +669,15 @@
                 keyData.__fnct = fnc;
             }
             perc = fnc('',(frameNum)-(keyData.t-offsetTime),0,1,(nextKeyData.t-offsetTime)-(keyData.t-offsetTime));
+            //var easing = new BezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y);
+            //var prePerc = ((frameNum)-(keyData.t-offsetTime))/((nextKeyData.t-offsetTime)-(keyData.t-offsetTime));
+            //console.log('prePerc: ',prePerc);
+            //console.log('easing: ',easing(prePerc));
             ///perc = 0;
             ///var distanceInLine = 0;
             var distanceInLine = bezierData.segmentLength*perc;
+            //console.log('perc: ',perc);
+
             var segmentPerc;
             var addedLength = 0;
             dir = 1;
@@ -701,8 +707,8 @@
                     }else{
                         propertyArray = bezierData.points[j].point;
                     }
-                    keyData.__lastPoint = j;
-                    keyData.__lastDistanceInLine = distanceInLine;
+                    //keyData.__lastPoint = j;
+                    //keyData.__lastDistanceInLine = distanceInLine;
                     break;
                 }else if(j == bezierData.points.length - 1){
                     if(interpolatedParams.type == 'p'){
@@ -954,7 +960,8 @@
             interpolatedParams.arrayFlag = false;
             interpolatedParams.type = 'default';
             if(renderType == 'canvas'){
-                renderedData.an.matrixArray = matrixInstance.getMatrixArrayFromParams(r,sx,sy,px,py);
+                //renderedData.an.matrixArray = matrixInstance.getMatrixArrayFromParams(r,sx,sy,px,py);
+                renderedData.an.matrixArray = matrixInstance.getMatrixArrayFromParams(matrixParams.r,matrixParams.sx,matrixParams.sy,matrixParams.px,matrixParams.py);
             }else{
                 renderedData.an.matrixValue = matrixInstance.getMatrix2FromParams(r,sx,sy,px,py);
             }
@@ -1097,7 +1104,8 @@
                     interpolatedParams.arrayFlag = false;
                     interpolatedParams.type = 'default';
                     if(renderType == 'canvas'){
-                        shapeTrOb.mtArr = matrixInstance.getMatrixArrayFromParams(r,sx,sy,px,py);
+                        shapeTrOb.mtArr = matrixInstance.getMatrixArrayFromParams(matrixParams.r,matrixParams.sx,matrixParams.sy,matrixParams.px,matrixParams.py);
+                        ///shapeTrOb.mtArr = matrixInstance.getMatrixArrayFromParams(r,sx,sy,px,py);
                     }else{
                         shapeTrOb.mt = matrixInstance.getMatrix2FromParams(r,sx,sy,px,py);
                     }
