Index: trunk/src/gui/gui_environment.cc
===================================================================
--- trunk/src/gui/gui_environment.cc	(revision 491)
+++ trunk/src/gui/gui_environment.cc	(revision 492)
@@ -182,4 +182,7 @@
 		{ 
 			handle h = get_element( position( ev.mbutton.x, ev.mbutton.y ) );
+			element* e = m_elements.get( h );
+			if ( e->m_on_click ) e->m_on_click();
+
 			set_selected( h );
 			return true;
@@ -312,4 +315,13 @@
 }
 
+void nv::gui::environment::set_on_click( handle e, const function< void() >& on_click )
+{
+	element* ep = m_elements.get( e );
+	if ( ep != nullptr )
+	{
+		ep->m_on_click = on_click;
+	}
+}
+
 void nv::gui::environment::set_text( handle e, const string_twine& text )
 {
Index: trunk/src/gui/gui_gfx_renderer.cc
===================================================================
--- trunk/src/gui/gui_gfx_renderer.cc	(revision 491)
+++ trunk/src/gui/gui_gfx_renderer.cc	(revision 492)
@@ -249,6 +249,6 @@
 		const char* stext[] = { "", "selected", "hover" };
 		const char* selector = stext[border];
-		if ( e->m_flags[HOVER] )    selector = stext[2];
-		if ( e->m_flags[SELECTED] ) selector = stext[1];
+		if ( e->m_flags[HOVER] && e->m_flags[DIRTY_HOVER] )    selector = stext[2];
+		if ( e->m_flags[SELECTED] && e->m_flags[DIRTY_SELECT] ) selector = stext[1];
 
 		if ( m_style.get( e, "skin", selector, path ) )
