diff --git a/ui (gen4)/lib/widget/browse2.html b/ui (gen4)/lib/widget/browse2.html
index 5c94620a..7ad41ec9 100755
--- a/ui (gen4)/lib/widget/browse2.html	
+++ b/ui (gen4)/lib/widget/browse2.html	
@@ -260,6 +260,7 @@ requirejs([
 				'buttonAction: item button focused -- example button action...'],
 			['□', 
 				function(){ console.log('BUTTON:', ...arguments) }],
+			'ToggleDisabled',
 		],
 	})
 
diff --git a/ui (gen4)/lib/widget/browse2.js b/ui (gen4)/lib/widget/browse2.js
index 7b0a75be..7f4c7fd1 100755
--- a/ui (gen4)/lib/widget/browse2.js	
+++ b/ui (gen4)/lib/widget/browse2.js	
@@ -160,6 +160,35 @@ Items.nest = function(item, list, options){
 
 
 
+//---------------------------------------------------------------------
+// Buttons...
+var buttons = Items.buttons = {}
+
+
+buttons.ToggleDisabled = [
+	function(item){
+		return item.disabled ? 
+			'☐' 
+			: '☑' },
+	'toggleDisabled: item',
+	true]
+
+buttons.ToggleHidden = [
+	function(item){
+		return item.hidden ? 
+			'☐' 
+			: '☑' },
+	'toggleHidden: item']
+
+buttons.ToggleSelected = [
+	function(item){
+		return item.selected ? 
+			'☐' 
+			: '☑' },
+	'toggleSelect: item']
+
+
+
 //---------------------------------------------------------------------
 // wrappers...
 
@@ -2682,6 +2711,7 @@ var BaseBrowserPrototype = {
 				&& (item.focused = true) },
 		default_item: function(){ return this.get(0) },
 		options: { 
+			// XXX get this from options...
 			skipDisabled: true,
 		},
 		getter: 'get' }),
@@ -3114,9 +3144,13 @@ var BrowserPrototype = {
 		// 		//		- number/string/list/object
 		// 		//						- any values...
 		// 		//
+		// 		//		(optional, bool), of true the button will 
+		// 		//	be active while the item is disabled...
+		// 		//
 		// 		// NOTE: for more doc see keyboard.Keyboard.parseStringHandler(..)
 		// 		['html', 
-		// 			':  .. -- comment'],
+		// 			':  .. -- comment',
+		// 			],
 		//
 		// 		...
 		// 	]
@@ -3695,17 +3729,27 @@ var BrowserPrototype = {
 		// buttons...
 		// XXX migrate the default buttons functionality and button inheritance...
 		var buttons = (item.buttons || options.itemButtons || [])
+			// resolve buttons from library...
+			.map(function(button){
+				return button instanceof Array ?
+					button
+					: Items.buttons[button] || button })
 			.slice()
 			// NOTE: keep the order unsurprising...
 			.reverse()
 		var stopPropagation = function(evt){ evt.stopPropagation() }
 		buttons
-			.forEach(function([html, handler]){
+			// XXX add option to use a shortcut key...
+			// XXX use keyword to inherit buttons...
+			.forEach(function([html, handler, force, keyword]){
 				var button = document.createElement('div')
 				button.classList.add('button')
-				button.innerHTML = html
-				// XXX should buttons be active in disabled state???
-				if(!item.disabled){
+
+				button.innerHTML = html instanceof Function ?
+					html.call(that, item)
+					: html
+
+				if(force || !item.disabled){
 					button.setAttribute('tabindex', '0')
 					// events to keep in buttons...
 					;(options.buttonLocalEvents || options.localEvents || [])
@@ -3747,7 +3791,7 @@ var BrowserPrototype = {
 								var k = keyboard.event2key(evt)
 								if(k.includes('Enter')){
 									event.stopPropagation()
-									func.call(that, evt) } }) } 
+									func.call(that, evt, item) } }) } 
 				}
 				elem.appendChild(button)
 			})