Index: includes/SpecialBlockip.php
===================================================================
--- includes/SpecialBlockip.php	(revision 35977)
+++ includes/SpecialBlockip.php	(working copy)
@@ -32,8 +32,10 @@
 	} else if ( $wgRequest->wasPosted() && 'submit' == $action &&
 		$wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ) ) ) {
 		$ipb->doSubmit();
+	} else if ( $ipb->AlreadyBlocked ) {
+		$ipb->showForm( wfMsg('ipb_already_blocked', $ipb->BlockAddress ) );
 	} else {
-		$ipb->showForm( '' );
+		$ipb->showForm('');
 	}
 }
 
@@ -47,10 +49,32 @@
 #	var $BlockEmail;
 
 	function IPBlockForm( $par ) {
-		global $wgRequest, $wgUser;
+		global $wgRequest, $wgUser, $wgLang;
 
 		$this->BlockAddress = $wgRequest->getVal( 'wpBlockAddress', $wgRequest->getVal( 'ip', $par ) );
 		$this->BlockAddress = strtr( $this->BlockAddress, '_', ' ' );
+		$this->AlreadyBlocked = false;
+
+		if( $this->BlockAddress && !$wgRequest->wasPosted() ){
+			$this->mBlock = new Block();
+			if( $this->mBlock->load($this->BlockAddress) ) {
+				$this->AlreadyBlocked = true;
+				$this->BlockReason = wfMsgForContent( 'ipb_modifying_block' );
+				$this->BlockReasonList = $wgRequest->getText( 'wpBlockReasonList' );
+				$this->BlockExpiry = wfMsg('ipbotheroption');
+				$this->BlockOther = $wgLang->timeanddate( $this->mBlock->mExpiry );
+				$this->BlockAnonOnly = $wgRequest->getBool( 'wpAnonOnly', true );
+				$this->BlockCreateAccount = $wgRequest->getBool( 'wpCreateAccount', true );
+				$this->BlockEnableAutoblock = $wgRequest->getBool( 'wpEnableAutoblock', true );
+				$this->BlockEmail = $wgRequest->getBool( 'wpEmailBan', false );
+				$this->BlockEmail = $this->mBlock->mBlockEmail;
+				$this->BlockWatchUser = $wgRequest->getBool( 'wpWatchUser', false );
+				# Re-check user's rights to hide names, very serious, defaults to 0
+				$this->BlockHideName = ( $this->mBlock->mHideName && $wgUser->isAllowed( 'hideuser' ) ) ? 1 : 0;
+				return true;
+			}
+		}
+		
 		$this->BlockReason = $wgRequest->getText( 'wpBlockReason' );
 		$this->BlockReasonList = $wgRequest->getText( 'wpBlockReasonList' );
 		$this->BlockExpiry = $wgRequest->getVal( 'wpBlockExpiry', wfMsg('ipbotheroption') );
@@ -69,7 +93,7 @@
 	}
 
 	function showForm( $err ) {
-		global $wgOut, $wgUser, $wgSysopUserBans;
+		global $wgOut, $wgUser, $wgSysopUserBans, $wgRequest;
 
 		$wgOut->setPagetitle( wfMsg( 'blockip' ) );
 		$wgOut->addWikiMsg( 'blockiptext' );
@@ -86,8 +110,10 @@
 
 		$titleObj = SpecialPage::getTitleFor( 'Blockip' );
 
+		if ( $wgRequest->wasPosted() ) {
+			$wgOut->setSubtitle( wfMsgHtml( 'formerror' ) );
+		}
 		if ( "" != $err ) {
-			$wgOut->setSubtitle( wfMsgHtml( 'formerror' ) );
 			$wgOut->addHTML( Xml::tags( 'p', array( 'class' => 'error' ), $err ) );
 		}
 
@@ -358,7 +384,10 @@
 		if (wfRunHooks('BlockIp', array(&$block, &$wgUser))) {
 
 			if ( !$block->insert() ) {
-				return array('ipb_already_blocked', htmlspecialchars($this->BlockAddress));
+				// Block already exists. Silently delete the existing block and insert it again
+				$oldblock = Block::newFromDB( $this->BlockAddress );
+				$oldblock->delete();
+				$block->insert();
 			}
 
 			wfRunHooks('BlockIpComplete', array($block, $wgUser));
