 			return model.visible;
 		}
 		
+		public function set mask(mask:Layoutable):void {
+			model.mask = mask;	
+		}
+		
+		public function get mask():Layoutable {
+			return model.mask;
+		}
+		
 		public function set mouseChildren(mouseChildren:Boolean):void {
 			model.mouseChildren = mouseChildren;
 		}
 		
 		public function get mouseChildren():Boolean {
 			return model.mouseChildren;
+		}
+		
+		protected function validateMask(newValue:*, oldValue:*):void {
+			if(newValue) {
+				trace(">> updating mask with: " + viewPath(), "and", viewPath(newValue.view));
+				view.mask = newValue.view;
+			}
+			else if(oldValue) {
+				view.mask = null;
+			}
+		}
+		
+		private function viewPath(v:DisplayObject=null):String {
+			v = (v) ? v : view;
+			var path:String = v.name;
+			while(v && v.parent) {
+				path = v.parent.name + '/' + path;
+				v = v.parent;
+			}
+			return '/' + path;
 		}
 		
 		protected function validateMouseChildren(newValue:*, oldValue:*):void {

			}
			return null;
		}
		
		public function get numChildren():int {
			return children.length;
		}

			model = new DynamicModel(this);
			model.validate_mouseChildren = validateMouseChildren;
			model.validate_mouseEnabled = validateMouseEnabled;
			model.validate_mask = validateMask;

			children = new SelectableList();
			childrenHash = new Dictionary();
