Index: trunk/as3/com/jeroenwijering/utils/Draw.as
===================================================================
--- trunk/as3/com/jeroenwijering/utils/Draw.as (revision 1)
+++ trunk/as3/com/jeroenwijering/utils/Draw.as (revision 2)
@@ -5,5 +5,7 @@
 
 
+import flash.display.DisplayObject;
 import flash.display.Sprite;
+import flash.geom.Rectangle;
 import flash.text.TextField;
 import flash.text.TextFormat;
@@ -11,4 +13,41 @@
 
 public class Draw {
+
+
+	/** 
+	* Completely clear the contents of a displayobject.
+	*
+	* @param tgt	Displayobject to clear.
+	**/
+	public static function clear(tgt:Sprite) {
+		var len = tgt.numChildren;
+		for(var i=0; i<len; i++) {
+			tgt.removeChildAt(0);
+		}
+		tgt.scaleX = tgt.scaleY = 1;
+	};
+
+
+	/** 
+	* Clone a displayobject.
+	*
+	* @param tgt	Displayobject to clone.
+	*
+	* @return		The clone; not yet added to the displaystack.
+	**/
+	public static function clone(tgt:DisplayObject):DisplayObject {
+		var cls:Class = Object(tgt).constructor;
+		var dup:DisplayObject = new cls();
+		dup.transform = tgt.transform;
+		dup.filters = tgt.filters;
+		dup.cacheAsBitmap = tgt.cacheAsBitmap;
+		dup.opaqueBackground = tgt.opaqueBackground;
+		if(tgt.scale9Grid) {
+			var rct:Rectangle = tgt.scale9Grid;
+			rct.x /= 20, rct.y /= 20, rct.width /= 20, rct.height /= 20;
+			dup.scale9Grid = rct;
+		}
+	    return dup;
+	};
 
 
@@ -65,18 +104,4 @@
 
 
-	/** 
-	* Completely clear the contents of a displayobject.
-	*
-	* @param tgt	Displayobject to clear.
-	**/
-	public static function clear(tgt:Sprite) {
-		var len = tgt.numChildren;
-		for(var i=0; i<len; i++) {
-			tgt.removeChildAt(0);
-		}
-		tgt.scaleX = tgt.scaleY = 1;
-	};
-
-
 }
 
Index: trunk/as3/com/jeroenwijering/utils/Skinner.as
===================================================================
--- trunk/as3/com/jeroenwijering/utils/Skinner.as (revision 1)
+++ trunk/as3/com/jeroenwijering/utils/Skinner.as (revision 2)
@@ -20,4 +20,6 @@
 	/** SWF skin loader reference **/
 	private var loader:Loader;
+	/** Skinnable elements **/
+	private var ELEMENTS:Array = new Array("controlbar","display","playlist");
 
 
@@ -62,9 +64,12 @@
 	private function loaderHandler(evt:Event) {
 		var cnt = MovieClip(loader.content);
-		while(cnt.numChildren > 0) {
-			var ncd = cnt.getChildAt(0);
+		for(var i=0; i<cnt.numChildren; i++) {
+			var ncd = cnt.getChildAt(i);
 			var ocd = skin.getChildByName(ncd.name);
-			skin.removeChild(ocd);
-			skin.addChild(ncd);
+			if(ocd) {
+				skin.removeChild(ocd);
+				skin.addChild(ncd);
+				skin[ncd.name] = ncd;
+			}
 		}
 		dispatchEvent(new Event(Event.COMPLETE));
