Index: wp-includes/default-widgets.php
===================================================================
--- wp-includes/default-widgets.php	(revision 2383)
+++ wp-includes/default-widgets.php	(working copy)
@@ -873,14 +873,21 @@
 
 	if ( !empty($error) )
 		echo '<p class="widget-error"><strong>' . sprintf( __('RSS Error: %s'), $error) . '</strong></p>';
-
+	
+	global $wp_widget_control_number;
+	if ( !empty($wp_widget_control_number) ) {
+		$widget_title_id = 'widget-' . $wp_widget_control_number . '_rss-' . $number . '-title';
+	} else {
+		$widget_title_id = 'rss-title-' . $number;
+	}
+	
 	if ( $inputs['url'] ) :
 ?>
 	<p><label for="rss-url-<?php echo $number; ?>"><?php _e('Enter the RSS feed URL here:'); ?></label>
 	<input class="widefat" id="rss-url-<?php echo $number; ?>" name="widget-rss[<?php echo $number; ?>][url]" type="text" value="<?php echo $url; ?>" /></p>
 <?php endif; if ( $inputs['title'] ) : ?>
-	<p><label for="rss-title-<?php echo $number; ?>"><?php _e('Give the feed a title (optional):'); ?></label>
-	<input class="widefat" id="rss-title-<?php echo $number; ?>" name="widget-rss[<?php echo $number; ?>][title]" type="text" value="<?php echo $title; ?>" /></p>
+	<p><label for="<?php echo $widget_title_id; ?>"><?php _e('Give the feed a title (optional):'); ?></label>
+	<input class="widefat" id="<?php echo $widget_title_id; ?>" name="widget-rss[<?php echo $number; ?>][title]" type="text" value="<?php echo $title; ?>" /></p>
 <?php endif; if ( $inputs['items'] ) : ?>
 	<p><label for="rss-items-<?php echo $number; ?>"><?php _e('How many items would you like to display?'); ?></label>
 	<select id="rss-items-<?php echo $number; ?>" name="widget-rss[<?php echo $number; ?>][items]">
Index: wp-includes/widgets.php
===================================================================
--- wp-includes/widgets.php	(revision 2383)
+++ wp-includes/widgets.php	(working copy)
@@ -119,7 +119,12 @@
 	 * @return string ID attribute for $field_name
 	 */
 	function get_field_id($field_name) {
-		return 'widget-' . $this->id_base . '-' . $this->number . '-' . $field_name;
+		global $wp_widget_control_number;
+		if ( !empty($wp_widget_control_number) ) {
+			return 'widget-' . $wp_widget_control_number . '_' . $this->id_base . '-' . $this->number . '-' . $field_name;
+		} else {
+			return 'widget-' . $this->id_base . '-' . $this->number . '-' . $field_name;
+		}
 	}
 
 	// Private Functions. Don't worry about these.
Index: wp-admin/includes/widgets.php
===================================================================
--- wp-admin/includes/widgets.php	(revision 2383)
+++ wp-admin/includes/widgets.php	(working copy)
@@ -76,14 +76,16 @@
  */
 function wp_list_widget_controls_dynamic_sidebar( $params ) {
 	global $wp_registered_widgets;
-	static $i = 0;
-	$i++;
+	global $wp_widget_control_number;
+	if ( empty($wp_widget_control_number) )
+		$wp_widget_control_number = 0;
+	$wp_widget_control_number++;
 
 	$widget_id = $params[0]['widget_id'];
 	$id = isset($params[0]['_temp_id']) ? $params[0]['_temp_id'] : $widget_id;
 	$hidden = isset($params[0]['_hide']) ? ' style="display:none;"' : '';
 
-	$params[0]['before_widget'] = "<div id='widget-${i}_$id' class='widget'$hidden>";
+	$params[0]['before_widget'] = "<div id='widget-${wp_widget_control_number}_$id' class='widget'$hidden>";
 	$params[0]['after_widget'] = "</div>";
 	$params[0]['before_title'] = "%BEG_OF_TITLE%"; // deprecated
 	$params[0]['after_title'] = "%END_OF_TITLE%"; // deprecated
Index: wp-admin/js/common.dev.js
===================================================================
--- wp-admin/js/common.dev.js	(revision 2383)
+++ wp-admin/js/common.dev.js	(working copy)
@@ -2,18 +2,22 @@
 (function($){
 // sidebar admin menu
 adminMenu = {
-
 	init : function() {
-		$('#adminmenu div.wp-menu-toggle').each( function() {
-			if ( $(this).siblings('.wp-submenu').length )
-				$(this).click(function(){ adminMenu.toggle( $(this).siblings('.wp-submenu') ); });
+		$('.wp-menu-toggle', '#adminmenu')
+		.each( function() {
+			var t = $(this);
+			if ( t.siblings('.wp-submenu').length )
+				t.click(function(){ adminMenu.toggle( $(this).siblings('.wp-submenu') ); });
 			else
-				$(this).hide();
+				t.hide();
 		});
-
+		//$.log('wp-menu-toggle');
+		
 		this.favorites();
-
-		$('a.separator').click(function(){
+		//$.log('favorites');
+		
+		$('.separator', '#adminmenu')
+		.click(function(){
 			if ( $('body').hasClass('folded') ) {
 				adminMenu.fold(1);
 				deleteUserSetting( 'mfold' );
@@ -23,28 +27,38 @@
 			}
 			return false;
 		});
-
+		//$.log('admin menu - separator');
+		
 		if ( $('body').hasClass('folded') ) {
 			this.fold();
 		}
+		//$.log('admin menu - fold');
+		
 		this.restoreMenuState();
+		//$.log('admin menu - restore state');
 	},
 
 	restoreMenuState : function() {
-		$('#adminmenu li.wp-has-submenu').each(function(i, e) {
+		$('.wp-has-submenu', '#adminmenu')
+		.each(function(i, e) {
 			var v = getUserSetting( 'm'+i );
-			if ( $(e).hasClass('wp-has-current-submenu') ) return true; // leave the current parent open
+			if ( $(e).hasClass('wp-has-current-submenu') )
+				return true; // leave the current parent open
 
-			if ( 'o' == v ) $(e).addClass('wp-menu-open');
-			else if ( 'c' == v ) $(e).removeClass('wp-menu-open');
+			if ( 'o' == v )
+				$(e).addClass('wp-menu-open');
+			else if ( 'c' == v )
+				$(e).removeClass('wp-menu-open');
 		});
 	},
 
 	toggle : function(el) {
+		el['slideToggle'](150, function() {
+			el.css('display','');
+		}).parent().toggleClass( 'wp-menu-open' );
 
-		el['slideToggle'](150, function(){el.css('display','');}).parent().toggleClass( 'wp-menu-open' );
-
-		$('#adminmenu li.wp-has-submenu').each(function(i, e) {
+		$('.wp-has-submenu', '#adminmenu')
+		.each(function(i, e) {
 			var v = $(e).hasClass('wp-menu-open') ? 'o' : 'c';
 			setUserSetting( 'm'+i, v );
 		});
@@ -55,13 +69,14 @@
 	fold : function(off) {
 		if (off) {
 			$('body').removeClass('folded');
-			$('#adminmenu li.wp-has-submenu').unbind();
+			$('li.wp-has-submenu', '#adminmenu').unbind();
 		} else {
 			$('body').addClass('folded');
-			$('#adminmenu li.wp-has-submenu').hoverIntent({
-				over: function(e){
+			$('li.wp-has-submenu', '#adminmenu')
+			.hoverIntent({
+				over: function(e) {
 					var m, b, h, o, f;
-					m = $(this).find('.wp-submenu');
+					m = $('.wp-submenu', this);
 					b = m.parent().offset().top + m.height() + 1; // Bottom offset of the menu
 					h = $('#wpwrap').height(); // Height of the entire page
 					o = 60 + b - h;
@@ -76,29 +91,51 @@
 					}
 					m.addClass('sub-open');
 				},
-				out: function(){ $(this).find('.wp-submenu').removeClass('sub-open').css({'marginTop':''}); },
+				out: function() {
+					$('.wp-submenu', this).removeClass('sub-open').css({'marginTop':''});
+				},
 				timeout: 220,
 				sensitivity: 8,
 				interval: 100
 			});
-
 		}
 	},
 
 	favorites : function() {
-		$('#favorite-inside').width($('#favorite-actions').width()-4);
-		$('#favorite-toggle, #favorite-inside').bind( 'mouseenter', function(){$('#favorite-inside').removeClass('slideUp').addClass('slideDown'); setTimeout(function(){if ( $('#favorite-inside').hasClass('slideDown') ) { $('#favorite-inside').slideDown(100); $('#favorite-first').addClass('slide-down'); }}, 200) } );
-
-		$('#favorite-toggle, #favorite-inside').bind( 'mouseleave', function(){$('#favorite-inside').removeClass('slideDown').addClass('slideUp'); setTimeout(function(){if ( $('#favorite-inside').hasClass('slideUp') ) { $('#favorite-inside').slideUp(100, function(){ $('#favorite-first').removeClass('slide-down'); } ); }}, 300) } );
+		$('#favorite-inside').width($('#favorite-actions').width() - 4);
+		
+		$('#favorite-toggle, #favorite-inside')
+		.bind('mouseenter', function() {
+			$('#favorite-inside').removeClass('slideUp').addClass('slideDown');
+			setTimeout(function() {
+				if ( $('#favorite-inside').hasClass('slideDown') ) {
+					$('#favorite-inside').slideDown(100);
+					$('#favorite-first').addClass('slide-down');
+				}
+			}, 200);
+		}).bind('mouseleave', function() {
+			$('#favorite-inside').removeClass('slideDown').addClass('slideUp');
+			setTimeout(function() {
+				if ( $('#favorite-inside').hasClass('slideUp') ) {
+					$('#favorite-inside').slideUp(100, function() {
+						$('#favorite-first').removeClass('slide-down');
+					});
+				}
+			}, 300);
+		});
 	}
 };
 
-$(document).ready(function(){adminMenu.init();});
+$(document).ready(function(){
+	//$.log('common.js - start');
+	adminMenu.init();
+});
 
 // show/hide/save table columns
 columns = {
 	init : function() {
-		$('.hide-column-tog').click( function() {
+		$('.hide-column-tog', '#adv-settings')
+		.click( function() {
 			var column = $(this).val(), show = $(this).attr('checked');
 			if ( show ) {
 				$('.column-' + column).show();
@@ -106,11 +143,14 @@
 				$('.column-' + column).hide();
 			}
 			columns.save_manage_columns_state();
-		} );
+		});
+		//$.log('table columns init');
 	},
 
 	save_manage_columns_state : function() {
-		var hidden = $('.manage-column').filter(':hidden').map(function() { return this.id; }).get().join(',');
+		var hidden = $('.manage-column').filter(':hidden')
+		.map(function() { return this.id; })
+		.get().join(',');
 		$.post(ajaxurl, {
 			action: 'hidden-columns',
 			hidden: hidden,
@@ -120,8 +160,9 @@
 	}
 }
 
-$(document).ready(function(){columns.init();});
-
+$(document).ready(function(){
+	columns.init();
+});
 })(jQuery);
 
 // stub for doing better warnings
@@ -144,68 +185,101 @@
 	var lastClicked = false, checks, first, last, checked;
 
 	// pulse
-	$('.fade').animate( { backgroundColor: '#ffffe0' }, 300).animate( { backgroundColor: '#fffbcc' }, 300).animate( { backgroundColor: '#ffffe0' }, 300).animate( { backgroundColor: '#fffbcc' }, 300);
+	$('div.fade').animate( { backgroundColor: '#ffffe0' }, 300)
+	.animate( { backgroundColor: '#fffbcc' }, 300)
+	.animate( { backgroundColor: '#ffffe0' }, 300)
+	.animate( { backgroundColor: '#fffbcc' }, 300);
+	//$.log('fade');
 
 	// Move .updated and .error alert boxes
-	$('div.wrap h2 ~ div.updated, div.wrap h2 ~ div.error').addClass('below-h2');
-	$('div.updated, div.error').not('.below-h2').insertAfter('div.wrap h2:first');
+	$('div.wrap').children('h2:first').nextAll('div.updated, div.error')
+	.addClass('below-h2');
+	//$.log('lock div.updated, div.error')
 
+	$('div.updated, div.error').not('.below-h2')
+	.insertAfter($('div.wrap').children('h2:first'));
+	//$.log('move div.updated, div.error');
+
 	// show warnings
-	$('#doaction, #doaction2').click(function(){
+	$('#doaction, #doaction2').click(function () {
 		if ( $('select[name="action"]').val() == 'delete' || $('select[name="action2"]').val() == 'delete' ) {
 			return showNotice.warn();
 		}
 	});
+	//$.log('doaction')
 
 	// screen settings tab
-	$('#show-settings-link').click(function () {
+	$('#show-settings-link')
+	.click(function () {
 		if ( ! $('#screen-options-wrap').hasClass('screen-options-open') ) {
 			$('#contextual-help-link-wrap').css('visibility', 'hidden');
 		}
-		$('#screen-options-wrap').slideToggle('fast', function(){
+		
+		$('#screen-options-wrap')
+		.slideToggle('fast', function(){
 			if ( $(this).hasClass('screen-options-open') ) {
-				$('#show-settings-link').css({'backgroundImage':'url("images/screen-options-right.gif")'});
+				$('#show-settings-link')
+				.css({'backgroundImage':'url("images/screen-options-right.gif")'});
+				
 				$('#contextual-help-link-wrap').css('visibility', '');
 				$(this).removeClass('screen-options-open');
 			} else {
-				$('#show-settings-link').css({'backgroundImage':'url("images/screen-options-right-up.gif")'});
+				$('#show-settings-link')
+				.css({'backgroundImage':'url("images/screen-options-right-up.gif")'});
+				
 				$(this).addClass('screen-options-open');
 			}
 		});
 		return false;
 	});
-
+	//$.log('show-settings-link')
+	
 	// help tab
-	$('#contextual-help-link').click(function () {
+	$('#contextual-help-link')
+	.click(function () {
 		if ( ! $('#contextual-help-wrap').hasClass('contextual-help-open') ) {
 			$('#screen-options-link-wrap').css('visibility', 'hidden');
 		}
-		$('#contextual-help-wrap').slideToggle('fast', function(){
+		
+		$('#contextual-help-wrap')
+		.slideToggle('fast', function() {
 			if ( $(this).hasClass('contextual-help-open') ) {
-				$('#contextual-help-link').css({'backgroundImage':'url("images/screen-options-right.gif")'});
+				$('#contextual-help-link')
+				.css({'backgroundImage':'url("images/screen-options-right.gif")'});
+				
 				$('#screen-options-link-wrap').css('visibility', '');
 				$(this).removeClass('contextual-help-open');
 			} else {
-				$('#contextual-help-link').css({'backgroundImage':'url("images/screen-options-right-up.gif")'});
+				$('#contextual-help-link')
+				.css({'backgroundImage':'url("images/screen-options-right-up.gif")'});
+				
 				$(this).addClass('contextual-help-open');
 			}
 		});
 		return false;
 	});
-	$('#contextual-help-link-wrap, #screen-options-link-wrap').show();
+	//$.log('contextual-help-link');
+	
+	// this one is already taken care of by the hide-if-no-js class
+	// show() and :hidden are extremely slow on slow rendering engines
+	// e.g. Opera 9 with a 400kb widgets page gets:
+	// 6ms -- $('#contextual-help-link-wrap')
+	// 6071ms -- $('#contextual-help-link-wrap:hidden')
+	// $('#contextual-help-link-wrap, #screen-options-link-wrap').show();
 
 	// check all checkboxes
-	$( 'table:visible tbody .check-column :checkbox' ).click( function(e) {
+	$('tbody').children().children('.check-column').find(':checkbox')
+	.click( function(e) {
 		if ( 'undefined' == e.shiftKey ) { return true; }
 		if ( e.shiftKey ) {
 			if ( !lastClicked ) { return true; }
-			checks = $( lastClicked ).parents( 'form:first' ).find( ':checkbox' );
+			checks = $( lastClicked ).closest( 'form' ).find( ':checkbox' );
 			first = checks.index( lastClicked );
 			last = checks.index( this );
 			checked = $(this).attr('checked');
 			if ( 0 < first && 0 < last && first != last ) {
 				checks.slice( first, last ).attr( 'checked', function(){
-					if ( $(this).parents('tr').is(':visible') )
+					if ( $(this).closest('tr').is(':visible') )
 						return checked ? 'checked' : '';
 
 					return '';
@@ -214,13 +288,18 @@
 		}
 		lastClicked = this;
 		return true;
-	} );
-	$( 'thead :checkbox, tfoot :checkbox' ).click( function(e) {
-		var c = $(this).attr('checked'), kbtoggle = 'undefined' == typeof toggleWithKeyboard ? false : toggleWithKeyboard, toggle = e.shiftKey || kbtoggle;
-
-
-		$(this).parents( 'form:first' ).find( 'table tbody:visible' ).find( '.check-column :checkbox' ).attr( 'checked', function() {
-			if ( $(this).parents('tr').is(':hidden') )
+	});
+	//$.log('tbody checkboxes');
+	
+	$('thead, tfoot').find(':checkbox').click( function(e) {
+		var c = $(this).attr('checked'),
+			kbtoggle = 'undefined' == typeof toggleWithKeyboard ? false : toggleWithKeyboard,
+			toggle = e.shiftKey || kbtoggle;
+		
+		$(this).closest( 'table' ).children( 'tbody' ).filter(':visible')
+		.children().children('.check-column').find(':checkbox')
+		.attr('checked', function() {
+			if ( $(this).closest('tr').is(':hidden') )
 				return '';
 			if ( toggle )
 				return $(this).attr( 'checked' ) ? '' : 'checked';
@@ -228,7 +307,10 @@
 				return 'checked';
 			return '';
 		});
-		$(this).parents( 'form:first' ).find( 'table thead:visible, table tfoot:visible').find( '.check-column :checkbox' ).attr( 'checked', function() {
+		
+		$(this).closest('table').children('thead,  tfoot').filter(':visible')
+		.children().children('.check-column').find(':checkbox')
+		.attr('checked', function() {
 			if ( toggle )
 				return '';
 			else if (c)
@@ -236,17 +318,18 @@
 			return '';
 		});
 	});
+	//$.log('thead, tfoot checkboxes');
+	
 	$('#default-password-nag-no').click( function() {
 		setUserSetting('default_password_nag', 'hide');
 		$('div.default-password-nag').hide();
 		return false;
 	});
-	
-	
+	//$.log('password nag');
 });
 
 jQuery(document).ready( function($){
-	var turboNag = $('.turbo-nag');
+	var turboNag = $('span.turbo-nag');
 
 	if ( !turboNag.length || ('undefined' != typeof(google) && google.gears) )
 		return;
@@ -263,5 +346,6 @@
 	}
 
 	turboNag.show();
-
-});
+	//$.log('turbo');
+	//$.log('common.js - stop');
+});
\ No newline at end of file
Index: wp-admin/js/utils.dev.js
===================================================================
--- wp-admin/js/utils.dev.js	(revision 2383)
+++ wp-admin/js/utils.dev.js	(working copy)
@@ -163,4 +163,4 @@
 		return {};
 
 	return wpCookies.getHash('wp-settings-' + userSettings.uid) || {};
-}
+}
\ No newline at end of file
Index: wp-admin/js/widgets.dev.js
===================================================================
--- wp-admin/js/widgets.dev.js	(revision 2383)
+++ wp-admin/js/widgets.dev.js	(working copy)
@@ -1,74 +1,77 @@
-
 var wpWidgets;
 (function($) {
 
 wpWidgets = {
+	sortables : null,
+	
 	init : function() {
-        var rem;
-
+		var rem;
+		//wpWidgets.sortables = $('div.widgets-sortables');
+		
 		if ( $('body').hasClass('widgets_access') ) {
 			return;
 		}
-
-		$('#widgets-right div.sidebar-name').click(function(){
-            var c = $(this).siblings('.widgets-sortables');
-			if ( c.is(':visible') ) {
+		//$.log('check widgets_access');
+		
+		var availableWidgets = $('#widget-list').children('.widget');
+		//$.log('availble widgets - find');
+		
+		var droppableSidebar = $('#available-widgets');
+		//$.log('droppable sidebar - find');
+		
+		var sortableSidebars = $('div.widgets-sortables');
+		//$.log('sortable sidebars - find');
+		
+		$('#widgets-right').children('.widgets-holder-wrap').children('.sidebar-name')
+		//.log('find widgets-right sidebar name')
+		.click(function(){
+			var c = $(this).siblings('.widgets-sortables'), p = $(this).parent();
+			if ( !p.hasClass('closed') ) {
 				c.sortable('disable');
-				$(this).parent().addClass('closed');
+				p.addClass('closed');
 			} else {
-				$(this).parent().removeClass('closed');
+				p.removeClass('closed');
 				c.sortable('enable').sortable('refresh');
 			}
-        });
-
-        $('#widgets-left div.sidebar-name').click(function(){
-			if ( $(this).siblings('.widget-holder').is(':visible') ) {
-				$(this).parent().addClass('closed');
-			} else {
-				$(this).parent().removeClass('closed');
-			}
-        });
-
-		$('#widgets-right .widget, #wp_inactive_widgets .widget').each(function(){
+		});
+		//$.log('widgets-right sidebar name');
+		
+		$('#widgets-left').children('.widgets-holder-wrap').children('.sidebar-name')
+		//.log('find widgets-left sidebar name')
+		.click(function() {
+			$(this).siblings('.widget-holder').parent().toggleClass('closed');
+		});
+		//$.log('widgets-left sidebar name');
+		
+		sortableSidebars.not('#wp_inactive_widgets')
+		.each(function(){
+			var h = 50, H = $(this).children('.widget').length;
+			h = h + parseInt(H * 48, 10);
+			$(this).css( 'minHeight', h + 'px' );
+		});
+		//$.log('sidebars - resize');
+		
+		sortableSidebars.children('.widget')
+		//.log('widgets - find active widgets')
+		.each(function() {
+			wpWidgets.addEvents(this);
+		})
+		//.log('widgets - attach events')
+		.each(function() {
 			wpWidgets.appendTitle(this);
 		});
-
-		this.addEvents();
-        $('.widget-error').parents('.widget').find('a.widget-action').click();
-
-		$('#available-widgets').droppable({
-			tolerance: 'pointer',
-			accept: function(o){
-				return $(o).parent().attr('id') != 'widget-list';
-			},
-			drop: function(e,ui) {
-				ui.draggable.addClass('deleting');
-				$('#removing-widget').hide().children('span').html('');
-			},
-			over: function(e,ui) {
-				ui.draggable.addClass('deleting');
-				$('.widget-placeholder').hide();
-
-				if ( ui.draggable.hasClass('ui-sortable-helper') )
-					$('#removing-widget').show().children('span').html( ui.draggable.find('.widget-title h4').html() );
-			},
-			out: function(e,ui) {
-				ui.draggable.removeClass('deleting');
-				$('.widget-placeholder').show();
-				$('#removing-widget').hide().children('span').html('');
-			}
-		});
-
-		$('#widget-list .widget').draggable({
-			connectToSortable: '.widgets-sortables',
-			handle: '.widget-title',
+		//$.log('widgets - set title');
+		
+		availableWidgets.draggable({
+			connectToSortable: 'div.widgets-sortables',
+			handle: '> .widget-top > .widget-title',
 			distance: 2,
 			helper: 'clone',
 			zIndex: 5,
 			containment: 'document',
 			start: function(e,ui) {
 				wpWidgets.fixWebkit(1);
-				ui.helper.find('.widget-description').hide();
+				ui.helper.find('div.widget-description').hide();
 			},
 			stop: function(e,ui) {
 				if ( rem )
@@ -77,18 +80,18 @@
 				wpWidgets.fixWebkit();
 			}
 		});
-
-        $('.widgets-sortables').sortable({
+		//$.log('available widgets - make draggable');
+				
+		sortableSidebars.sortable({
 			placeholder: 'widget-placeholder',
-			connectWith: '.widgets-sortables',
-			items: '.widget',
-			handle: '.widget-title',
+			items: '> .widget',
+			handle: '> .widget-top > .widget-title',
 			cursor: 'move',
 			distance: 2,
 			containment: 'document',
 			start: function(e,ui) {
 				wpWidgets.fixWebkit(1);
-				ui.item.find('.widget-inside').hide();
+				ui.item.children('.widget-inside').hide();
 				ui.item.css({'marginLeft':'','width':''});
 			},
 			stop: function(e,ui) {
@@ -101,7 +104,10 @@
 					return;
 				}
 
-				var add = ui.item.find('input.add_new').val(), n = ui.item.find('input.multi_number').val(), id = ui.item.attr('id'), sb = $(this).attr('id');
+				var add = ui.item.find('input.add_new').val(),
+					n = ui.item.find('input.multi_number').val(),
+					id = ui.item.attr('id'),
+					sb = $(this).attr('id');
 
 				ui.item.css({'marginLeft':'','width':''});
 				wpWidgets.fixWebkit();
@@ -127,14 +133,49 @@
 				if ( !$(this).is(':visible') )
 					$(this).sortable('cancel');
 			}
-		}).not(':visible').sortable('disable');
-		wpWidgets.resize();
-		wpWidgets.fixLabels();
+		})
+		//.log('sortable sidebars - enable sortables')
+		.sortable('option', 'connectWith', 'div.widgets-sortables')
+		//.log('sortable sidebars - set connectWith')
+		.parent().filter('.closed').children('.widgets-sortables')
+		//.log('sortable sidebars - find hidden')
+		.sortable('disable');
+		//$.log('sortable sidebars - disable sortables if hidden');
+		
+		droppableSidebar.droppable({
+			tolerance: 'pointer',
+			accept: function(o){
+				return $(o).parent().attr('id') != 'widget-list';
+			},
+			drop: function(e,ui) {
+				ui.draggable.addClass('deleting');
+				$('#removing-widget').hide().children('span').html('');
+			},
+			over: function(e,ui) {
+				ui.draggable.addClass('deleting');
+				$('div.widget-placeholder').hide();
+
+				if ( ui.draggable.hasClass('ui-sortable-helper') )
+					$('#removing-widget').show().children('span')
+					.html( ui.draggable.find('div.widget-title').children('h4').html() );
+			},
+			out: function(e,ui) {
+				ui.draggable.removeClass('deleting');
+				$('div.widget-placeholder').show();
+				$('#removing-widget').hide().children('span').html('');
+			}
+		});
+		//$.log('droppable sidebar - enable droppable');
+		
+		$('p.widget-error').closest('div.widget').find('a.widget-action').click();
+		//$.log('widgets - open if errors');
 	},
 
 	saveOrder : function(sb) {
-		if ( sb )
-			$('#' + sb).parents('.widgets-holder-wrap').find('.ajax-feedback').css('visibility', 'visible');
+		if ( sb ) {
+			$('#' + sb).closest('div.widgets-holder-wrap').find('img.ajax-feedback')
+			.css('visibility', 'visible');
+		}
 
 		var a = {
 			action: 'widgets-order',
@@ -142,18 +183,21 @@
 			sidebars: []
 		};
 
-		$('.widgets-sortables').each( function() {
+		$('div.widgets-sortables').each( function() {
 			a['sidebars[' + $(this).attr('id') + ']'] = $(this).sortable('toArray').join(',');
 		});
 
 		$.post( ajaxurl, a, function() {
-			$('.ajax-feedback').css('visibility', 'hidden');
+			$('img.ajax-feedback').css('visibility', 'hidden');
 		});
+		
 		this.resize();
 	},
 
 	save : function(widget, del, animate, order) {
-		var sb = widget.parents('.widgets-sortables').attr('id'), data = widget.find('form').serialize(), a;
+		var sb = widget.closest('div.widgets-sortables').attr('id'),
+			data = widget.find('form').serialize(),
+			a;
 		widget = $(widget);
 		widget.find('.ajax-feedback').css('visibility', 'visible');
 
@@ -172,11 +216,12 @@
 			var id;
 
 			if ( del ) {
-				if ( !$('.widget_number', widget).val() ) {
-					id = $('.widget-id', widget).val();
-					$('#available-widgets .widget-id').each(function(){
+				if ( !$('input.widget_number', widget).val() ) {
+					id = $('input.widget-id', widget).val();
+					$('#available-widgets').find('input.widget-id')
+					.each(function(){
 						if ( $(this).val() == id )
-							$(this).parents('.widget').show();
+							$(this).closest('div.widget').show();
 					});
 				}
 
@@ -193,7 +238,7 @@
 			} else {
 				$('.ajax-feedback').css('visibility', 'hidden');
 				if ( r && r.length > 2 ) {
-					$('.widget-content', widget).html(r);
+					$('div.widget-content', widget).html(r);
 					wpWidgets.appendTitle(widget);
 					wpWidgets.fixLabels(widget);
 				}
@@ -204,20 +249,22 @@
 	},
 
 	appendTitle : function(widget) {
-		$('input[type="text"]', widget).each(function(){
-			var title;
-			if ( this.id.indexOf('title') != -1 ) {
-				title = $(this).val().replace(/<[^<>]+>/g, '').replace(/</g, '&lt;').replace(/>/g, '&gt;');
-				if ( title )
-					$('.widget-title .in-widget-title', widget).html(': ' + title);
-				return false;
-			}
+		$('#' + widget.id + '-title').each(function() {
+			var title = $(this).val().replace(/<[^<>]+>/g, '')
+			.replace(/</g, '&lt;').replace(/>/g, '&gt;');
+			
+			if ( title )
+				$(widget).children('.widget-top')
+				.children('.widget-title').children().children('.in-widget-title')
+				.html(': ' + title);
 		});
 	},
 
 	resize : function() {
-		$('.widgets-sortables').not('#wp_inactive_widgets').each(function(){
-			var h = 50, H = $('.widget', this).length;
+		$('div.widgets-sortables').not('#wp_inactive_widgets')
+		//.log('find resizables')
+		.each(function(){
+			var h = 50, H = $(this).children('.widget').length;
 			h = h + parseInt(H * 48, 10);
 			$(this).css( 'minHeight', h + 'px' );
 		});
@@ -231,10 +278,8 @@
 		});
     },
     
-    fixLabels : function(sc) {
-		sc = sc || document;
-
-		$('.widget-inside label', sc).each(function(){
+    fixLabels : function(widget) {
+		widget.children('.widget-inside').find('label').each(function(){
 			var f = $(this).attr('for');
 
 			if ( f && f == $('input', this).attr('id') )
@@ -243,42 +288,55 @@
 	},
     
     close : function(widget) {
-		widget.find('.widget-inside').slideUp('fast', function(){
+		widget.children('.widget-inside').slideUp('fast', function(){
 			widget.css({'width':'','marginLeft':''});
 		});
 	},
 
     addEvents : function(sc) {
 		sc = sc || document;
+		
 		$('a.widget-action', sc).click(function(){
-            var w = parseInt( $(this).parents('.widget').find('.widget-width').val(), 10 ), css = {}, inside = $(this).parents('.widget-top').siblings('.widget-inside');
+			var css = {},
+				widget = $(this).closest('div.widget'),
+				inside = widget.children('.widget-inside'),
+				w = parseInt( widget.find('input.widget-width').val(), 10 );
+			
 			if ( inside.is(':hidden') ) {
-				if ( w > 250 && inside.parents('.widgets-sortables').length ) {
+				if ( w > 250 && inside.closest('div.widgets-sortables').length ) {
 					css['width'] = w + 30 + 'px';
-					if ( inside.parents('.widget-liquid-right').length )
+					if ( inside.closest('div.widget-liquid-right').length )
 						css['marginLeft'] = 235 - w + 'px';
-					inside.parents('.widget').css(css);
+					widget.css(css);
 				}
+				wpWidgets.fixLabels(widget);
 				inside.slideDown('fast');
 			} else {
-				inside.slideUp('fast', function(){ inside.parents('.widget').css({'width':'','marginLeft':''}); });
+				inside.slideUp('fast', function() {
+					widget.css({'width':'','marginLeft':''});
+				});
 			}
-            return false;
-        });
-        $('.widget-control-save', sc).click(function(){
-			wpWidgets.save( $(this).parents('.widget'), 0, 1, 0 );
 			return false;
 		});
-		$('.widget-control-remove', sc).click(function(){
-			wpWidgets.save( $(this).parents('.widget'), 1, 1, 0 );
+		// todo: optimize this further by using a button tag instead
+		$('input.widget-control-save', sc).click(function(){
+			wpWidgets.save( $(this).closest('div.widget'), 0, 1, 0 );
 			return false;
 		});
-		$('.widget-control-close', sc).click(function(){
-			wpWidgets.close( $(this).parents('.widget') );
+		$('a.widget-control-remove', sc).click(function(){
+			wpWidgets.save( $(this).closest('div.widget'), 1, 1, 0 );
 			return false;
 		});
+		$('a.widget-control-close', sc).click(function(){
+			wpWidgets.close( $(this).closest('div.widget') );
+			return false;
+		});
 	}
 };
-$(document).ready(function(){wpWidgets.init();});
+$(document).ready(function($){
+	//$.log('widgets.js - start');
+	wpWidgets.init();
+	//$.log('widgets.js - done');
+});
 
-})(jQuery);
+})(jQuery);
\ No newline at end of file
