fixes
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);
                     }