fixes
diff --git a/extension/jsx/utils/effectsHelper.jsx b/extension/jsx/utils/effectsHelper.jsx
index 16def9f..0915fa5 100644
--- a/extension/jsx/utils/effectsHelper.jsx
+++ b/extension/jsx/utils/effectsHelper.jsx
@@ -24,7 +24,7 @@
         case 'ADBE Checkbox Control':
             return effectTypes.checkboxControl;
         default:
-            bm_eventDispatcher.log(name);
+            //bm_eventDispatcher.log(name);
             return '';
         }
     }
diff --git a/extension/jsx/utils/textAnimatorHelper.jsx b/extension/jsx/utils/textAnimatorHelper.jsx
index e6a02a3..6afb248 100644
--- a/extension/jsx/utils/textAnimatorHelper.jsx
+++ b/extension/jsx/utils/textAnimatorHelper.jsx
@@ -34,10 +34,6 @@
         if (selectorType === 0) {
             
             var advancedProperty = selectorProperty.property('ADBE Text Range Advanced');
-            len = advancedProperty.numProperties;
-            for (i = 0; i < len; i += 1) {
-                bm_eventDispatcher.log(advancedProperty.property(i + 1).matchName);
-            }
             ob.t = 0;
             ob.xe = bm_keyframeHelper.exportKeyframes(advancedProperty.property('ADBE Text Levels Max Ease'), frameRate);
             ob.ne = bm_keyframeHelper.exportKeyframes(advancedProperty.property('ADBE Text Levels Min Ease'), frameRate);
diff --git a/player/index.html b/player/index.html
index faf663a..ebe10c7 100644
--- a/player/index.html
+++ b/player/index.html
@@ -12,8 +12,8 @@
         }
         #bodymovin{
             background-color:#000;
-            width:250px;
-            height:250px;
+            width:800px;
+            height:800px;
             display:block;
             overflow: hidden;
             transform: translate3d(0,0,0);
@@ -21,6 +21,10 @@
             opacity: 1;
         }
 
+        rect{
+            opacity: .5!important;
+        }
+
     </style>
     <!-- build:js bodymovin.js -->
      <script src="js/main.js"></script>
@@ -82,7 +86,7 @@
 
     var animData = {
         container: document.getElementById('bodymovin'),
-        renderer: 'html',
+        renderer: 'svg',
         loop: false,
         prerender: false,
         autoplay: true,
diff --git a/player/js/animation/AnimationItem.js b/player/js/animation/AnimationItem.js
index 896d71f..38cbe6e 100644
--- a/player/js/animation/AnimationItem.js
+++ b/player/js/animation/AnimationItem.js
@@ -217,11 +217,11 @@
     this.frameRate = this.animationData.fr;
     this.firstFrame = Math.round(this.animationData.ip);
     this.frameMult = this.animationData.fr / 1000;
-    /*
-    this.firstFrame = 761;
-    this.totalFrames = 1;
-    this.animationData.tf = 1;
-    //this.frameMult = 10000/1000;
+    //*
+    this.firstFrame = 243;
+    this.totalFrames = 2;
+    this.animationData.tf = 2;
+    //this.frameMult = 1/100;
     //*/////
     this.trigger('config_ready');
     this.loadSegments();
diff --git a/player/js/mask.js b/player/js/mask.js
index 8ed4adb..5b1c26e 100644
--- a/player/js/mask.js
+++ b/player/js/mask.js
@@ -19,7 +19,7 @@
     var currentMasks = [];
     var j, jLen;
     var layerId = randomString(10);
-    var rect, expansor, feMorph;
+    var rect, expansor, feMorph,x;
     var maskType = 'clipPath', maskRef = 'clip-path';
     for (i = 0; i < len; i++) {
 
@@ -38,7 +38,7 @@
             currentMasks.push(rect);
         }
 
-        if(properties[i].mode == 'n') {
+        if(properties[i].mode == 'n' || properties[i].cl === false) {
             this.viewData[i] = {
                 prop: PropertyFactory.getShapeProp(this.element,properties[i],3,this.dynamicProperties,null)
             };
@@ -67,7 +67,7 @@
         if(properties[i].x.k !== 0){
             maskType = 'mask';
             maskRef = 'mask';
-            var x = PropertyFactory.getProp(this.element,properties[i].x,0,null,this.dynamicProperties);
+            x = PropertyFactory.getProp(this.element,properties[i].x,0,null,this.dynamicProperties);
             var filterID = 'fi_'+randomString(10);
             expansor = document.createElementNS(svgNS,'filter');
             expansor.setAttribute('id',filterID);
@@ -84,6 +84,7 @@
             }
         }else{
             feMorph = null;
+            x = null;
         }
 
 
@@ -157,7 +158,7 @@
 MaskElement.prototype.renderFrame = function () {
     var i, len = this.masksProperties.length;
     for (i = 0; i < len; i++) {
-        if(this.masksProperties[i].mode !== 'n'){
+        if(this.masksProperties[i].mode !== 'n' && this.masksProperties[i].cl !== false){
             if(this.viewData[i].prop.mdf || this.firstFrame){
                 this.drawPath(this.masksProperties[i],this.viewData[i].prop.v,this.viewData[i]);
             }
@@ -174,7 +175,6 @@
                         this.storedData[i].lastOperator = 'dilate';
                         this.storedData[i].elem.setAttribute('filter',null);
                     }
-                    console.log(this.storedData[i].x.v*2);
                     this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v*2);
 
                 }
diff --git a/player/js/utils/PropertyFactory.js b/player/js/utils/PropertyFactory.js
index 9b89cba..e3b8244 100644
--- a/player/js/utils/PropertyFactory.js
+++ b/player/js/utils/PropertyFactory.js
@@ -59,7 +59,7 @@
                         fnc = bez.getEasingCurve(keyData.o.x,keyData.o.y,keyData.i.x,keyData.i.y,keyData.n);
                         keyData.__fnct = fnc;
                     }
-                    perc = fnc('',(frameNum)-(keyData.t-this.offsetTime),0,1,(nextKeyData.t-this.offsetTime)-(keyData.t-this.offsetTime));
+                    perc = fnc((frameNum-(keyData.t-this.offsetTime))/((nextKeyData.t-this.offsetTime)-(keyData.t-this.offsetTime)));
                     var distanceInLine = bezierData.segmentLength*perc;
 
                     var segmentPerc;
@@ -146,7 +146,7 @@
                         }else if(frameNum < keyData.t-this.offsetTime){
                             perc = 0;
                         }else{
-                            perc = fnc('',(frameNum)-(keyData.t-this.offsetTime),0,1,(nextKeyData.t-this.offsetTime)-(keyData.t-this.offsetTime));
+                            perc = fnc((frameNum-(keyData.t-this.offsetTime))/((nextKeyData.t-this.offsetTime)-(keyData.t-this.offsetTime)));
                         }
                     }
 
@@ -222,7 +222,7 @@
                     }else if(frameNum < keyData.t-this.offsetTime){
                         perc = 0;
                     }else{
-                        perc = fnc('',(frameNum)-(keyData.t-this.offsetTime),0,1,(nextKeyData.t-this.offsetTime)-(keyData.t-this.offsetTime));
+                        perc = fnc((frameNum-(keyData.t-this.offsetTime))/((nextKeyData.t-this.offsetTime)-(keyData.t-this.offsetTime)));
                     }
                     keyPropE = keyData.e[0];
                 }
@@ -483,6 +483,8 @@
             this.pv.v[i] = new Array(jLen);
         }
         this.lastFrame = initFrame;
+        var shapeData = type === 3 ? data.pt : data.ks;
+        checkExpressions.bind(this)(elem,shapeData);
     }
 
     var EllShapeProperty = (function(){
@@ -1100,7 +1102,7 @@
                 }else{
                     mult = max(0,min(0.5/(e-s) + (ind-s)/(e-s),1));
                 }
-                mult = easer('',mult,0,1,1);
+                mult = easer(mult);
             }else if(type == 3){
                 if(e === s){
                     mult = ind >= e ? 0 : 1;
@@ -1108,7 +1110,7 @@
                     mult = 1 - max(0,min(0.5/(e-s) + (ind-s)/(e-s),1));
                 }
 
-                mult = easer('',mult,0,1,1);
+                mult = easer(mult);
             }else if(type == 4){
                 if(e === s){
                     mult = ind >= e ? 0 : 1;
diff --git a/player/js/utils/bez.js b/player/js/utils/bez.js
index cc6fe4c..bb0e006 100644
--- a/player/js/utils/bez.js
+++ b/player/js/utils/bez.js
@@ -16,9 +16,8 @@
         }
         var A0, B0, C0;
         var A1, B1, C1;
-        easingFunctions[encodedFuncName] = function(x, t, b, c, d) {
-            var tt = t/d;
-            x = tt;
+        easingFunctions[encodedFuncName] = function(tt) {
+            var x = tt;
             var i = 0, z;
             while (++i < 20) {
                 C0 = 3 * aa;
diff --git a/player/js/utils/common.js b/player/js/utils/common.js
index ca93c69..c1ac63b 100644
--- a/player/js/utils/common.js
+++ b/player/js/utils/common.js
@@ -1,4 +1,4 @@
-var subframeEnabled = true;
+var subframeEnabled = false;
 var cachedColors = {};
 var bm_rounder = Math.round;
 var bm_rnd;
diff --git a/player/js/utils/expressions/ExpressionManager.js b/player/js/utils/expressions/ExpressionManager.js
index 45f3868..608b6d3 100644
--- a/player/js/utils/expressions/ExpressionManager.js
+++ b/player/js/utils/expressions/ExpressionManager.js
@@ -201,8 +201,12 @@
                     this.lastValue = this.v;
                     this.mdf = true;
                 }
+            }else if(this.v.i){
+                // Todo Improve validation for masks and shapes
+                this.mdf = true;
             }else{
                 len = this.v.length;
+                console.log(this.v);
                 for(i = 0; i < len; i += 1){
                     if(this.v[i] !== this.lastValue[i]){
                         this.lastValue[i] = this.v[i];