diff --git a/player/index.html b/player/index.html
index 3c1e4df..4c6f63b 100644
--- a/player/index.html
+++ b/player/index.html
@@ -12,8 +12,8 @@
         }
         #bodymovin{
             background-color:#333;
-            width:500px;
-            height:600px;
+            width:700px;
+            height:700px;
             /*width:800px;
             height:500px;*/
             display:block;
diff --git a/player/js/elements/htmlElements/HCameraElement.js b/player/js/elements/htmlElements/HCameraElement.js
index bae1d78..c1e3396 100644
--- a/player/js/elements/htmlElements/HCameraElement.js
+++ b/player/js/elements/htmlElements/HCameraElement.js
@@ -33,6 +33,7 @@
         comp = this.comp.threeDElements[i];
         comp[0].style.perspective = comp[0].style.webkitPerspective = this.pe.v+'px';
         comp[1].style.transformOrigin = comp[1].style.mozTransformOrigin = comp[1].style.webkitTransformOrigin = "0px 0px 0px";
+        comp[0].style.transform = comp[0].style.webkitTransform = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';
     }
 };
 
diff --git a/player/js/utils/PropertyFactory.js b/player/js/utils/PropertyFactory.js
index a6fa72d..feb334c 100644
--- a/player/js/utils/PropertyFactory.js
+++ b/player/js/utils/PropertyFactory.js
@@ -328,6 +328,21 @@
     }
 
     function KeyframedMultidimensionalProperty(elem, data, mult){
+        console.log(data);
+        var i, len = data.k.length;
+        var s, e,to,ti;
+        for(i=0;i<len-1;i+=1){
+            if(data.k[i].to && data.k[i].s && data.k[i].e ){
+                s = data.k[i].s;
+                e = data.k[i].e;
+                to = data.k[i].to;
+                ti = data.k[i].ti;
+                if(bez.pointOnLine3D(s[0],s[1],s[2],e[0],e[1],e[2],s[0] + to[0],s[1] + to[1],s[2] + to[2]) && bez.pointOnLine3D(s[0],s[1],s[2],e[0],e[1],e[2],e[0] + ti[0],e[1] + ti[1],e[2] + ti[2])){
+                    data.k[i].to = null;
+                    data.k[i].ti = null;
+                }
+            }
+        }
         this.keyframes = data.k;
         this.offsetTime = elem.data.st;
         this.k = true;
diff --git a/player/js/utils/bez.js b/player/js/utils/bez.js
index 6d8f10b..ad04cbb 100644
--- a/player/js/utils/bez.js
+++ b/player/js/utils/bez.js
@@ -7,6 +7,21 @@
         return bm_abs(((x2 - x1) * (y3 - y1)) - ((x3 - x1) * (y2 - y1))) < 0.00001;
     }
 
+    function pointOnLine3D(x1,y1,z1, x2,y2,z2, x3,y3,z3){
+        /* x1 y1 1   x1 y1
+           x2 y2 1   x2 y2
+           x3 y3 1   x3 y3
+
+         x1 z1 1
+         x2 z2 1
+         x3 z3 1
+
+         */
+        var det1 = (x1*y2) + (y1*x3) + (x2*y3) - (x3*y2) - (y3*x1) - (x2*y1);
+        var det2 = (x1*z2) + (z1*x3) + (x2*z3) - (x3*z2) - (z3*x1) - (x2*z1);
+        return det1 > -0.0001 && det1 < 0.00001 && det2 > -0.00001 && det2 < 0.00001;
+    }
+
     function getEasingCurve(aa,bb,cc,dd,encodedFuncName) {
         if(!encodedFuncName){
             encodedFuncName = ('bez_' + aa+'_'+bb+'_'+cc+'_'+dd).replace(/\./g, 'p');
@@ -198,7 +213,9 @@
         getEasingCurve : getEasingCurve,
         getBezierLength : getBezierLength,
         getNewSegment : getNewSegment,
-        buildBezierData : buildBezierData
+        buildBezierData : buildBezierData,
+        pointOnLine2D : pointOnLine2D,
+        pointOnLine3D : pointOnLine3D
     };
 }
 
