      public GuiScreenBook(EntityPlayer player, ItemStack book, boolean isUnsigned)
      {
          this.editingPlayer = player;
-@@ -120,6 +129,9 @@ public class GuiScreenBook extends GuiScreen
+@@ -120,6 +131,9 @@ public class GuiScreenBook extends GuiScreen
              this.buttonList.add(this.buttonDone = new GuiButton(0, this.width / 2 + 2, 4 + this.bookImageHeight, 98, 20, I18n.format("gui.done", new Object[0])));
              this.buttonList.add(this.buttonFinalize = new GuiButton(5, this.width / 2 - 100, 4 + this.bookImageHeight, 98, 20, I18n.format("book.finalizeButton", new Object[0])));
              this.buttonList.add(this.buttonCancel = new GuiButton(4, this.width / 2 + 2, 4 + this.bookImageHeight, 98, 20, I18n.format("gui.cancel", new Object[0])));

         logger.info("[CHAT] " + field_184062_f.join(field_184061_a.split(chatComponent.getUnformattedText())));
     }
diff --git a/src/net/minecraft/client/gui/GuiScreenBook.java b/src/net/minecraft/client/gui/GuiScreenBook.java
index 884aeb0..36eb022 100644
--- a/src/net/minecraft/client/gui/GuiScreenBook.java
+++ b/src/net/minecraft/client/gui/GuiScreenBook.java
@@ -1,10 +1,10 @@

     }
 
     public int getButtonWidth()
diff --git a/src/net/minecraft/client/gui/GuiDisconnected.java b/src/net/minecraft/client/gui/GuiDisconnected.java
index 4a7f37e..a4a75f7 100644
--- a/src/net/minecraft/client/gui/GuiDisconnected.java
+++ b/src/net/minecraft/client/gui/GuiDisconnected.java
@@ -2,6 +2,11 @@ package net.minecraft.client.gui;
 
 import java.io.IOException;
 import java.util.List;
+
+import org.apache.logging.log4j.LogManager;
+
+import tk.wurst_client.WurstClient;
+import tk.wurst_client.hooks.ServerHook;
 import net.minecraft.client.resources.I18n;
 import net.minecraft.util.text.ITextComponent;
 
@@ -13,11 +18,20 @@ public class GuiDisconnected extends GuiScreen
     private final GuiScreen parentScreen;
     private int field_175353_i;
     
+    //TODO: Client
+	private int autoReconnectTimer;
+
     public GuiDisconnected(GuiScreen screen, String reasonLocalizationKey, ITextComponent chatComp)
     {
         this.parentScreen = screen;
         this.reason = I18n.format(reasonLocalizationKey, new Object[0]);
         this.message = chatComp;
+
+        //TODO: Client
+		LogManager.getLogger().info(
+			"Disconnected.\n    Message: "
+				+ (message == null ? null : message.getUnformattedText())
+				+ "\n    Reason: " + reason);
     }
 
     /**
@@ -38,6 +52,58 @@ public class GuiDisconnected extends GuiScreen
         this.multilineMessage = this.fontRendererObj.listFormattedStringToWidth(this.message.getFormattedText(), this.width - 50);
         this.field_175353_i = this.multilineMessage.size() * this.fontRendererObj.FONT_HEIGHT;
         this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 2 + this.field_175353_i / 2 + this.fontRendererObj.FONT_HEIGHT, I18n.format("gui.toMenu", new Object[0])));
+        
+		// TODO: Client
+		this.buttonList.add(new GuiButton(1, this.width / 2 - 100, this.height
+			/ 2 + this.field_175353_i / 2 + this.fontRendererObj.FONT_HEIGHT
+			+ 24, "Reconnect"));
+		this.buttonList.add(new GuiButton(2, this.width / 2 - 100, this.height
+			/ 2 + this.field_175353_i / 2 + this.fontRendererObj.FONT_HEIGHT
+			+ 48, "AutoReconnect"));
+		if(message.getUnformattedText().toLowerCase().contains("whitelist")
+			|| message.getUnformattedText().toLowerCase()
+				.contains("white-list"))
+			if(parentScreen instanceof GuiMultiplayer
+				&& ((GuiMultiplayer)parentScreen).serverListSelector
+					.getSelectedServer() != -1)
+				this.buttonList.add(new GuiButton(3, this.width / 2 - 100,
+					this.height / 2 + this.field_175353_i / 2
+						+ this.fontRendererObj.FONT_HEIGHT + 72,
+					"4Delete Serverr"));
+		if(WurstClient.INSTANCE.options.autoReconnect)
+			this.autoReconnectTimer = 100;
+    }
+
+    //TODO: Client
+    /**
+     * Called from the main game loop to update the screen.
+     */
+    public void updateScreen()
+    {
+        super.updateScreen();
+        if(WurstClient.INSTANCE.options.autoReconnect)
+		{
+			if(buttonList.size() < 2)
+				return;
+			((GuiButton)this.buttonList.get(2)).displayString =
+				"AutoReconnect (" + ((this.autoReconnectTimer / 20) + 1) + ")";
+			if(this.autoReconnectTimer > 0)
+				this.autoReconnectTimer--;
+			else
+			{
+				try
+				{
+					this.actionPerformed((GuiButton)this.buttonList.get(1));
+				}catch(IOException e)
+				{
+					e.printStackTrace();
+				}
+			}
+		}
+        else
+        {
+        	((GuiButton)this.buttonList.get(2)).displayString = "AutoReconnect";
+        }
     }
 
     /**
@@ -48,6 +114,27 @@ public class GuiDisconnected extends GuiScreen
         if (button.id == 0)
         {
             this.mc.displayGuiScreen(this.parentScreen);
+            
+			// TODO: Client
+		}else if(button.id == 1)
+		{
+			ServerHook.reconnectToLastServer(this);
+		}else if(button.id == 2)
+		{
+			WurstClient.INSTANCE.options.autoReconnect =
+				!WurstClient.INSTANCE.options.autoReconnect;
+			WurstClient.INSTANCE.files.saveOptions();
+			if(WurstClient.INSTANCE.options.autoReconnect)
+				this.autoReconnectTimer = 100;
+		}else if(button.id == 3)
+		{
+			GuiMultiplayer servers = (GuiMultiplayer)parentScreen;
+			servers.savedServerList.removeServerData(servers.serverListSelector
+				.getSelectedServer());
+			servers.savedServerList.saveServerList();
+			servers.serverListSelector.setSelectedSlotIndex(-1);
+			servers.serverListSelector.func_148195_a(servers.savedServerList);
+			mc.displayGuiScreen(servers);
 		}
     }
 
diff --git a/src/net/minecraft/client/gui/GuiGameOver.java b/src/net/minecraft/client/gui/GuiGameOver.java
index 08d7720..0404908 100644
--- a/src/net/minecraft/client/gui/GuiGameOver.java
