 			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;
		}

		protected function get inferredMinHeight():Number {
			var result:Number = 0;
			children.forEach(function(child:Layoutable, index:int, items:Array):void {
				if(!child.excludeFromLayout) {
					result = Math.max(result, child.minHeight);
				}
			});
			return result + verticalPadding;
		}
