diff --git a/player/js/utils/PropertyFactory.js b/player/js/utils/PropertyFactory.js
index 4b3f7d0..508566c 100644
--- a/player/js/utils/PropertyFactory.js
+++ b/player/js/utils/PropertyFactory.js
@@ -47,9 +47,9 @@
                     for(k = 0; k < kLen; k += 1){
                         this.v[k] = this.mult ? bezierData.points[ind].point[k]*this.mult : bezierData.points[ind].point[k];
                         this.pv[k] = bezierData.points[ind].point[k];
-                        if(this.lastValue[k] !== this.v[k]) {
+                        if(this.lastPValue[k] !== this.pv[k]) {
                             this.mdf = true;
-                            this.lastValue[k] = this.v[k];
+                            this.lastPValue[k] = this.pv[k];
                         }
                     }
                 }else{
@@ -74,9 +74,9 @@
                             for(k=0;k<kLen;k+=1){
                                 this.v[k] = this.mult ? bezierData.points[j].point[k]*this.mult : bezierData.points[j].point[k];
                                 this.pv[k] = bezierData.points[j].point[k];
-                                if(this.lastValue[k] !== this.v[k]) {
+                                if(this.lastPValue[k] !== this.pv[k]) {
                                     this.mdf = true;
-                                    this.lastValue[k] = this.v[k];
+                                    this.lastPValue[k] = this.pv[k];
                                 }
                             }
                             break;
@@ -87,9 +87,9 @@
                                 this.v[k] = this.mult ? (bezierData.points[j].point[k] + (bezierData.points[j+1].point[k] - bezierData.points[j].point[k])*segmentPerc)*this.mult : bezierData.points[j].point[k] + (bezierData.points[j+1].point[k] - bezierData.points[j].point[k])*segmentPerc;
                                 this.pv[k] = bezierData.points[j].point[k] + (bezierData.points[j+1].point[k] - bezierData.points[j].point[k])*segmentPerc;
 
-                                if(this.lastValue[k] !== this.v[k]) {
+                                if(this.lastPValue[k] !== this.pv[k]) {
                                     this.mdf = true;
-                                    this.lastValue[k] = this.v[k];
+                                    this.lastPValue[k] = this.pv[k];
                                 }
                             }
                             break;
@@ -154,16 +154,16 @@
                     if(len === 1){
                         this.v = this.mult ? keyValue*this.mult : keyValue;
                         this.pv = keyValue;
-                        if(this.lastValue != this.v){
+                        if(this.lastPValue != this.pv){
                             this.mdf = true;
-                            this.lastValue = this.v;
+                            this.lastPValue = this.pv;
                         }
                     }else{
                         this.v[i] = this.mult ? keyValue*this.mult : keyValue;
                         this.pv[i] = keyValue;
-                        if(this.lastValue[i] !== this.v[i]){
+                        if(this.lastPValue[i] !== this.pv[i]){
                             this.mdf = true;
-                            this.lastValue[i] = this.v[i];
+                            this.lastPValue[i] = this.pv[i];
                         }
                     }
                 }
@@ -285,6 +285,7 @@
         this.keyframes = data.k;
         this.offsetTime = elem.data.st;
         this.lastValue = -99999;
+        this.lastPValue = -99999;
         this.frameId = -1;
         this.k = true;
         this.mult = mult;
@@ -309,6 +310,7 @@
         this.v = new Array(data.k[0].s.length);
         this.pv = new Array(data.k[0].s.length);
         this.lastValue = new Array(data.k[0].s.length);
+        this.lastPValue = new Array(data.k[0].s.length);
         this.lastFrame = initFrame;
         checkExpressions.bind(this)(elem,data);
     }
diff --git a/player/js/utils/expressions/ExpressionManager.js b/player/js/utils/expressions/ExpressionManager.js
index 73e3358..e0ed095 100644
--- a/player/js/utils/expressions/ExpressionManager.js
+++ b/player/js/utils/expressions/ExpressionManager.js
@@ -443,7 +443,7 @@
         var val = data.x;
         var transform,content,effect;
         var thisComp = elem.comp;
-        var fnStr = 'var fn = function(){'+val+';this.v = $bm_rt;this.mdf=true;}';
+        var fnStr = 'var fn = function(){'+val+';this.v = $bm_rt;}';
         eval(fnStr);
         var bindedFn = fn.bind(this);
         var numKeys = data.k.length;
@@ -499,16 +499,31 @@
             value = this.pv;
             time = this.comp.renderedFrame;
             bindedFn();
+            var i,len;
             if(this.mult){
                 if(typeof this.v === 'number'){
                     this.v *= this.mult;
                 }else{
-                    var i, len = this.v.length;
+                    len = this.v.length;
                     for(i = 0; i < len; i += 1){
                         this.v[i] *= this.mult;
                     }
                 }
             }
+            if(typeof this.v === 'number'){
+                if(this.lastValue !== this.v){
+                    this.lastValue = this.v;
+                    this.mdf = true;
+                }
+            }else{
+                len = this.v.length;
+                for(i = 0; i < len; i += 1){
+                    if(this.v[i] !== this.lastValue[i]){
+                        this.lastValue[i] = this.v[i];
+                        this.mdf = true;
+                    }
+                }
+            }
         }
         return execute;
     }
