 			move(menuLocation.x, menuLocation.y);
 		}
 		
+		private function isItemEnabled(item:SubMenuItem, ..._):Boolean
+		{
+			return getLabel(item) && (item.shown == null || item.shown());
+		}
+		
 		private const tempBounds:Bounds2D = new Bounds2D();
 	}
 }

		 * @param label The Label string (or function that returns a string) to show when the menu is open.
		 * @param listener The function to call when the item is clicked.
		 * @param params An Array of parameters to pass to the listener function.
		 * @return An object containing the three parameters (label, listener, params) which can be modified later.
		 */
		public function addSubMenuItem(label:Object, listener:Function, params:Array = null):Object
		{
			var menuItem:SubMenuItem = new SubMenuItem();
			menuItem.label = label;
			menuItem.listener = listener;
			menuItem.params = params;
			subMenuDataProvider.push(menuItem);
			return menuItem;
		}

		public static const LABEL:String = 'label';
		public static const LISTENER:String = 'listener';
		public static const PARAMS:String = 'params';
		public static const SHOWN:String = 'shown';
		
		/**
		 * Removes all menu items
