 			return _bounds;
 		}
 
-		protected var content:*;
-		protected var layout:*;
-
 
 		// >>> STATIC PUBLIC METHODS
+		static public function append_before_filter (c:Class, name:String) :void
+		{
+/*			Logger.info('append_before_filter: ' + c + '#' + name);*/
+			before_filters[c] ||= new Array;
+			before_filters[c].push(name);
+		}
+
 		static public function controller (name:String) :*
 		{
 			var className:String = 'controllers.' + Inflector.camelize(name) + 'Controller';



		// >>> PROTECTED METHODS
		protected function before_filter (f:Function) :Boolean
		{
			return true;
		}

		private function new_view (template:String, options:Hash) :*
		{
			var after_hide:String = (options.hide ? options.remove('hide') : 'hide_view');

		// >>> PRIVATE METHODS
		// replaces default context menu with custom, empty menu
		// add items to menu with new_context_menu_item()
		private function apply_before_filters (f:Function) :Boolean
		{
			var ok:Boolean = true;
			for (var c:* in before_filters)
			{
				if (! (this is c)) continue;
				for (var i:uint = 0; i < before_filters[c].length; i++)
				{
					ok = this[before_filters[c][i]](f);
					if (! ok) break;
				}
				if (! ok) break;
			}
			return ok;
		}

		private function create_context_menu () :void
		{
			contextMenu = new ContextMenu();
