diff --git a/player/index.html b/player/index.html
index c8fa16b..988814d 100644
--- a/player/index.html
+++ b/player/index.html
@@ -191,7 +191,7 @@
     var animData = {
         container: elem,
         renderer: 'svg',
-        loop: true,
+        loop: false,
         autoplay: true,
         rendererSettings: {
             progressiveLoad:false,
diff --git a/player/js/elements/helpers/shapes/SVGShapeData.js b/player/js/elements/helpers/shapes/SVGShapeData.js
index 50d7fa1..f052677 100644
--- a/player/js/elements/helpers/shapes/SVGShapeData.js
+++ b/player/js/elements/helpers/shapes/SVGShapeData.js
@@ -5,4 +5,13 @@
     this.lStr = '';
     this.sh = shape;
     this.lvl = level;
+    this._isAnimated = !!shape.k;
+    var i = 0, len = transformers.length;
+    while(i < len) {
+    	if(transformers[i].k) {
+    		this._isAnimated = true;
+    		break;
+    	}
+    	i += 1;
+    }
 }
\ No newline at end of file
diff --git a/player/js/elements/svgElements/SVGShapeElement.js b/player/js/elements/svgElements/SVGShapeElement.js
index cc99fff..df49a89 100644
--- a/player/js/elements/svgElements/SVGShapeElement.js
+++ b/player/js/elements/svgElements/SVGShapeElement.js
@@ -104,9 +104,6 @@
     }
     var shapeProperty = ShapePropertyFactory.getShapeProp(this,data,ty,this);
     var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);
-    if (elementData._isAnimated) {
-
-    }
     this.shapes.push(elementData.sh);
     this.addShapeToModifiers(elementData);
     this.addToAnimatedContents(data, elementData);
@@ -241,7 +238,7 @@
     for(i=0;i<len;i+=1){
         this.stylesList[i].reset();
     }
-    this.renderShape2();
+    this.renderShape();
 
     for (i = 0; i < len; i += 1) {
         if (this.stylesList[i]._mdf || this._isFirstFrame) {
@@ -278,40 +275,16 @@
     }
 }
 
-SVGShapeElement.prototype.renderShape2 = function() {
+SVGShapeElement.prototype.renderShape = function() {
     var i, len = this.animatedContents.length;
     var animatedContent;
     for(i = 0; i < len; i += 1) {
         animatedContent = this.animatedContents[i];
-        animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);
-    }
-}
-
-SVGShapeElement.prototype.renderShape = function(items, data) {
-    var i, len = items.length - 1;
-    var ty;
-    for(i=0;i<=len;i+=1){
-        ty = items[i].ty;
-        if(ty == 'tr'){
-        }else if(items[i]._render && (ty == 'sh' || ty == 'el' || ty == 'rc' || ty == 'sr')){
-            this.renderPath(items[i],data[i]);
-        }else if(ty == 'fl'){
-            this.renderFill(items[i],data[i]);
-        }else if(ty == 'gf'){
-            this.renderGradient(items[i],data[i]);
-        }else if(ty == 'gs'){
-            this.renderGradient(items[i],data[i]);
-            this.renderStroke(items[i],data[i]);
-        }else if(ty == 'st'){
-            this.renderStroke(items[i],data[i]);
-        }else if(ty == 'gr'){
-            this.renderShape(items[i].it,data[i].it);
-        }else if(ty == 'tm'){
-            //
+        if(this._isFirstFrame || animatedContent.element._isAnimated) {
+            animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);
         }
     }
-
-};
+}
 
 SVGShapeElement.prototype.renderContentTransform = function(styleData, itemData, isFirstFrame) {
     if(isFirstFrame || itemData.transform.op._mdf){
diff --git a/player/js/utils/shapes/ShapeProperty.js b/player/js/utils/shapes/ShapeProperty.js
index 2c64fd1..4661b0e 100644
--- a/player/js/utils/shapes/ShapeProperty.js
+++ b/player/js/utils/shapes/ShapeProperty.js
@@ -209,6 +209,7 @@
             if(this.dynamicProperties.length){
                 this.k = true;
             }else{
+                this.k = false;
                 this.convertEllToPath();
             }
         };
@@ -305,6 +306,7 @@
             if(this.dynamicProperties.length){
                 this.k = true;
             }else{
+                this.k = false;
                 this.convertToPath();
             }
         };
@@ -417,6 +419,7 @@
             if(this.dynamicProperties.length){
                 this.k = true;
             }else{
+                this.k = false;
                 this.convertRectToPath();
             }
         };
