diff --git a/extension/jsx/renderManager.jsx b/extension/jsx/renderManager.jsx
index 6f811d8..05f390f 100644
--- a/extension/jsx/renderManager.jsx
+++ b/extension/jsx/renderManager.jsx
@@ -5,13 +5,6 @@
     'use strict';
     
     var ob = {}, pendingLayers = [], pendingComps = [], destinationPath, fsDestinationPath, currentCompID, totalLayers, currentLayer, currentCompSettings, hasExpressionsFlag;
-
-    function verifyTrackLayer(layerData, comp, pos) {
-        var nextLayerInfo = comp.layers[pos + 2];
-        if (nextLayerInfo.isTrackMatte) {
-            layerData.td = 0;
-        }
-    }
     
     function restoreParents(layers) {
         
@@ -27,6 +20,12 @@
                     if (!parentData.isValid) {
                         parentData.isValid = true;
                     }
+                    if(parentData.tt){
+                        delete parentData.tt;
+                    }
+                    if(parentData.td){
+                        delete parentData.td;
+                    }
                 }
             }
         }
@@ -37,6 +36,7 @@
     
     function createLayers(comp, layers, framerate) {
         var i, len = comp.layers.length, layerInfo, layerData, prevLayerData;
+        bm_eventDispatcher.log('createLayers');
         for (i = 0; i < len; i += 1) {
             layerInfo = comp.layers[i + 1];
             layerData = bm_layerElement.prepareLayer(layerInfo, i);
@@ -51,9 +51,10 @@
                     if (prevLayerData.enabled === false) {
                         prevLayerData.render = false;
                     }
-                    prevLayerData.td = false;
+                    delete prevLayerData.td;
+                    delete layerData.tt;
                 } else if (prevLayerData.render === false) {
-                    layerData.tt = false;
+                    delete layerData.tt;
                 }
             }
             if(currentCompSettings.hiddens && layerData.enabled === false){
diff --git a/player/js/elements/ShapeElement.js b/player/js/elements/ShapeElement.js
index 2ddaa31..d763aad 100644
--- a/player/js/elements/ShapeElement.js
+++ b/player/js/elements/ShapeElement.js
@@ -29,7 +29,7 @@
     //TODO check if I can use symbol so i can set its viewBox
     this._parent.createElements.call(this);
     this.searchShapes(this.shapesData,this.viewData,this.dynamicProperties);
-    if(!this.data.hd){
+    if(!this.data.hd || this.data.td){
         this.layerElement.appendChild(this.shapesContainer);
         styleUnselectableDiv(this.layerElement);
         styleUnselectableDiv(this.shapesContainer);
diff --git a/player/js/elements/svgElements/SVGBaseElement.js b/player/js/elements/svgElements/SVGBaseElement.js
index c423230..7fb4b32 100644
--- a/player/js/elements/svgElements/SVGBaseElement.js
+++ b/player/js/elements/svgElements/SVGBaseElement.js
@@ -12,7 +12,7 @@
 createElement(BaseElement, SVGBaseElement);
 
 SVGBaseElement.prototype.appendNodeToParent = function(node) {
-    if(this.data.hd){
+    if(this.data.hd && !this.data.td){
         return;
     }
     if(this.placeholder){
diff --git a/player/js/utils/expressions/LayerInterface.js b/player/js/utils/expressions/LayerInterface.js
index 31eba90..22c92f6 100644
--- a/player/js/utils/expressions/LayerInterface.js
+++ b/player/js/utils/expressions/LayerInterface.js
@@ -72,6 +72,7 @@
             }
         });
         Object.defineProperty(_thisLayerFunction, "_name", { value:elem.data.nm });
+        Object.defineProperty(_thisLayerFunction, "name", { value:elem.data.nm });
         Object.defineProperty(_thisLayerFunction, "content", {
             get: function(){
                 return _thisLayerFunction.shapeInterface;
diff --git a/player/js/utils/expressions/ShapeInterface.js b/player/js/utils/expressions/ShapeInterface.js
index 145bdcc..8cb919a 100644
--- a/player/js/utils/expressions/ShapeInterface.js
+++ b/player/js/utils/expressions/ShapeInterface.js
@@ -132,6 +132,11 @@
                     return shape.nm;
                 }
             });
+            Object.defineProperty(interfaceFunction, 'name', {
+                get: function(){
+                    return shape.nm;
+                }
+            });
             //interfaceFunction.name = shape.nm;
             interfaceFunction.content = interfaceFunction;
             interfaceFunction.nm = shape.nm;
@@ -156,7 +161,8 @@
                     }
                     return view.o.v;
                 },
-                _name: shape.nm
+                _name: shape.nm,
+                name: shape.nm
             };
             return ob;
         }
@@ -200,7 +206,8 @@
                     }
                     return this.dashOb;
                 },
-                _name: shape.nm
+                _name: shape.nm,
+                name: shape.nm
             };
             return ob;
         }
@@ -261,6 +268,11 @@
                     return shape.nm;
                 }
             });
+            Object.defineProperty(interfaceFunction, 'name', {
+                get: function(){
+                    return shape.nm;
+                }
+            });
             return interfaceFunction;
         }
     }());
@@ -373,6 +385,11 @@
                     return shape.nm;
                 }
             });
+            Object.defineProperty(interfaceFunction, 'name', {
+                get: function(){
+                    return shape.nm;
+                }
+            });
             interfaceFunction.ty = 'tr';
             return interfaceFunction;
         }
@@ -420,6 +437,11 @@
                     return shape.nm;
                 }
             });
+            Object.defineProperty(interfaceFunction, 'name', {
+                get: function(){
+                    return shape.nm;
+                }
+            });
             return interfaceFunction;
         }
     }());
@@ -536,6 +558,11 @@
                     return shape.nm;
                 }
             });
+            Object.defineProperty(interfaceFunction, 'name', {
+                get: function(){
+                    return shape.nm;
+                }
+            });
             return interfaceFunction;
         }
     }());
@@ -557,7 +584,8 @@
                     }
                     return prop.v;
                 },
-                _name: shape.nm
+                _name: shape.nm,
+                name: shape.nm
             }
             return ob;
         }
