diff --git a/ui/widget.js b/ui/widget.js
index 30034f5924e..47d6886ee9f 100644
--- a/ui/widget.js
+++ b/ui/widget.js
@@ -590,7 +590,9 @@ $.Widget.prototype = {
 			delegateElement = this.widget();
 		} else {
 			element = delegateElement = $( element );
-			this.bindings = this.bindings.add( element );
+			if ( !this.bindings.find( element ).length ) {
+				this.bindings = this.bindings.add( element );
+			}
 		}
 
 		$.each( handlers, function( event, handler ) {
diff --git a/ui/widgets/selectable.js b/ui/widgets/selectable.js
index ed980cc493e..959930eb1d0 100644
--- a/ui/widgets/selectable.js
+++ b/ui/widgets/selectable.js
@@ -139,31 +139,28 @@ return $.widget( "ui.selectable", $.ui.mouse, {
 			}
 		} );
 
-		$( event.target ).parents().addBack().each( function() {
-			var doSelect,
-				selectee = $.data( this, "selectable-item" );
-			if ( selectee ) {
+		var element = $( event.target ).closest( ":data(selectable-item)" );
+		if ( element.length ) {
+			var selectee = element.data( "selectable-item" ),
 				doSelect = ( !event.metaKey && !event.ctrlKey ) ||
 					!selectee.$element.hasClass( "ui-selected" );
-				that._removeClass( selectee.$element, doSelect ? "ui-unselecting" : "ui-selected" )
-					._addClass( selectee.$element, doSelect ? "ui-selecting" : "ui-unselecting" );
-				selectee.unselecting = !doSelect;
-				selectee.selecting = doSelect;
-				selectee.selected = doSelect;
-
-				// selectable (UN)SELECTING callback
-				if ( doSelect ) {
-					that._trigger( "selecting", event, {
-						selecting: selectee.element
-					} );
-				} else {
-					that._trigger( "unselecting", event, {
-						unselecting: selectee.element
-					} );
-				}
-				return false;
+			that._removeClass( selectee.$element, doSelect ? "ui-unselecting" : "ui-selected" )
+				._addClass( selectee.$element, doSelect ? "ui-selecting" : "ui-unselecting" );
+			selectee.unselecting = !doSelect;
+			selectee.selecting = doSelect;
+			selectee.selected = doSelect;
+
+			// selectable (UN)SELECTING callback
+			if ( doSelect ) {
+				that._trigger( "selecting", event, {
+					selecting: selectee.element
+				} );
+			} else {
+				that._trigger( "unselecting", event, {
+					unselecting: selectee.element
+				} );
 			}
-		} );
+		}
 
 	},