Index: /var/www/html/wordpress-trunk/trunk/wp-admin/js/post.dev.js
===================================================================
--- /var/www/html/wordpress-trunk/trunk/wp-admin/js/post.dev.js	(revision 17137)
+++ /var/www/html/wordpress-trunk/trunk/wp-admin/js/post.dev.js	(working copy)
@@ -453,6 +453,23 @@
 		});
 
 		$('.save-post-visibility', '#post-visibility-select').click(function () { // crazyhorse - multiple ok cancels
+                        // hack - check if "Password protected" is checked but password is not set                        
+                        if ( $("#visibility-radio-password").attr('checked') && $('#post_password').val() == '' ) {
+                            $('#post_password').addClass('form-invalid');
+                            // if password is blank, the slide-up event won't happen and so, the post visibility won't be updated...                            
+                            $('#publish').val( postL10n.update );
+                            postStatus = $('#post_status');
+                            optPublish = $('option[value=publish]', postStatus);                            
+                            if ( optPublish.length == 0 ) {
+				postStatus.append('<option value="publish">' + postL10n.privatelyPublished + '</option>');
+                            } else {
+                            	optPublish.html( postL10n.privatelyPublished );
+                            }
+                            $('option[value=publish]', postStatus).attr('selected', true);                            
+                            return false;
+                        } else {
+                            $('#post_password').removeClass('form-invalid');                             
+                        }
 			var pvSelect = $('#post-visibility-select');
 
 			pvSelect.slideUp("normal");
===================================================================
--- /var/www/html/wordpress-trunk/trunk/wp-admin/includes/post.php	(revision 17137)
+++ /var/www/html/wordpress-trunk/trunk/wp-admin/includes/post.php	(working copy)
@@ -167,6 +167,10 @@
 				$post_data['post_password'] = '';
 				break;
 			case 'password' :
+                                // if password is not set, revert post status to what it was
+                                if( empty( $post_data['post_password'] ) ) {
+                                    $post_data['post_status'] = $post_data['hidden_post_status'];
+                                }                                
 				unset( $post_data['sticky'] );
 				break;
 			case 'private' :
