diff --git a/nms-patches/MinecraftServer.patch b/nms-patches/MinecraftServer.patch
index ed8f4f6434..ea9982db97 100644
--- a/nms-patches/MinecraftServer.patch
+++ b/nms-patches/MinecraftServer.patch
@@ -1,5 +1,5 @@
---- ../work/decompile-8eb82bde//net/minecraft/server/MinecraftServer.java	2014-11-29 00:53:37.929134938 +0000
-+++ src/main/java/net/minecraft/server/MinecraftServer.java	2014-11-29 00:52:46.133136087 +0000
+--- ../work/decompile-8eb82bde//net/minecraft/server/MinecraftServer.java	Sat Nov 29 19:31:45 2014
++++ src/main/java/net/minecraft/server/MinecraftServer.java	Sat Nov 29 19:27:57 2014
 @@ -37,6 +37,18 @@
  import org.apache.logging.log4j.LogManager;
  import org.apache.logging.log4j.Logger;
@@ -98,7 +98,7 @@
          this.h = new long[this.worldServer.length][100];
          IDataManager idatamanager = this.convertable.a(s, true);
  
-@@ -152,37 +207,110 @@
+@@ -152,37 +207,112 @@
              worlddata.a(s1);
              worldsettings = new WorldSettings(worlddata);
          }
@@ -142,6 +142,7 @@
 +                if (worlddata == null) {
 +                    worlddata = new WorldData(worldsettings, s1);
 +                }
++                worlddata.checkName(s1); // CraftBukkit - Migration did not rewrite the level.dat; This forces 1.8 to take the last loaded world as respawn (in this case the end)
                  if (this.W()) {
 -                    this.worldServer[j] = (WorldServer) (new DemoWorldServer(this, idatamanager, worlddata, b0, this.methodProfiler)).b();
 +                    world = (WorldServer) (new DemoWorldServer(this, idatamanager, worlddata, dimension, this.methodProfiler)).b();
@@ -195,6 +196,7 @@
 +                if (worlddata == null) {
 +                    worlddata = new WorldData(worldsettings, name);
 +                }
++                worlddata.checkName(name); // CraftBukkit - Migration did not rewrite the level.dat; This forces 1.8 to take the last loaded world as respawn (in this case the end)
 +                world = (WorldServer) new SecondaryWorldServer(this, idatamanager, dimension, this.worlds.get(0), this.methodProfiler, worlddata, org.bukkit.World.Environment.getEnvironment(dimension), gen).b();
 +            }
 +
@@ -220,7 +222,7 @@
          this.a(this.getDifficulty());
          this.k();
      }
-@@ -197,25 +325,38 @@
+@@ -197,25 +327,38 @@
          this.b("menu.generatingTerrain");
          byte b0 = 0;
  
@@ -274,7 +276,7 @@
          this.q();
      }
  
-@@ -247,35 +388,42 @@
+@@ -247,35 +390,42 @@
      protected void q() {
          this.e = null;
          this.f = 0;
@@ -329,7 +331,7 @@
              if (this.ao() != null) {
                  this.ao().b();
              }
-@@ -290,11 +438,13 @@
+@@ -290,11 +440,13 @@
                  MinecraftServer.LOGGER.info("Saving worlds");
                  this.saveChunks(false);
  
@@ -343,7 +345,7 @@
              }
  
              if (this.m.d()) {
-@@ -335,6 +485,7 @@
+@@ -335,6 +487,7 @@
                      long k = j - this.ab;
  
                      if (k > 2000L && this.ab - this.R >= 15000L) {
@@ -351,7 +353,7 @@
                          MinecraftServer.LOGGER.warn("Can\'t keep up! Did the system time change, or is the server overloaded? Running {}ms behind, skipping {} tick(s)", new Object[] { Long.valueOf(k), Long.valueOf(k / 50L)});
                          k = 2000L;
                          this.R = this.ab;
-@@ -347,11 +498,12 @@
+@@ -347,11 +500,12 @@
  
                      i += k;
                      this.ab = j;
@@ -365,7 +367,7 @@
                              i -= 50L;
                              this.y();
                          }
-@@ -389,6 +541,12 @@
+@@ -389,6 +543,12 @@
              } catch (Throwable throwable1) {
                  MinecraftServer.LOGGER.error("Exception stopping the server", throwable1);
              } finally {
@@ -378,7 +380,7 @@
                  this.x();
              }
  
-@@ -428,7 +586,7 @@
+@@ -428,7 +588,7 @@
  
      protected void x() {}
  
@@ -387,7 +389,7 @@
          long i = System.nanoTime();
  
          ++this.ticks;
-@@ -454,7 +612,7 @@
+@@ -454,7 +614,7 @@
              this.r.b().a(agameprofile);
          }
  
@@ -396,7 +398,7 @@
              this.methodProfiler.a("save");
              this.v.savePlayers();
              this.saveChunks(true);
-@@ -493,20 +651,40 @@
+@@ -493,20 +653,40 @@
  
          this.methodProfiler.c("levels");
  
@@ -440,7 +442,7 @@
  
                  this.methodProfiler.a("tick");
  
-@@ -533,9 +711,9 @@
+@@ -533,9 +713,9 @@
                  worldserver.getTracker().updatePlayers();
                  this.methodProfiler.b();
                  this.methodProfiler.b();
@@ -452,7 +454,7 @@
          }
  
          this.methodProfiler.c("connection");
-@@ -559,10 +737,11 @@
+@@ -559,10 +739,11 @@
          this.o.add(iupdateplayerlistbox);
      }
  
@@ -465,7 +467,7 @@
              boolean flag = true;
              String s = null;
              String s1 = ".";
-@@ -636,6 +815,27 @@
+@@ -636,6 +817,27 @@
  
              dedicatedserver.B();
              Runtime.getRuntime().addShutdownHook(new ThreadShutdown("Server Shutdown Thread", dedicatedserver));
@@ -493,7 +495,7 @@
          } catch (Exception exception) {
              MinecraftServer.LOGGER.fatal("Failed to start the minecraft server", exception);
          }
-@@ -643,8 +843,10 @@
+@@ -643,8 +845,10 @@
      }
  
      public void B() {
@@ -504,7 +506,7 @@
      }
  
      public File d(String s) {
-@@ -660,7 +862,14 @@
+@@ -660,7 +864,14 @@
      }
  
      public WorldServer getWorldServer(int i) {
@@ -520,7 +522,7 @@
      }
  
      public String C() {
-@@ -696,17 +905,62 @@
+@@ -696,17 +907,62 @@
      }
  
      public String getPlugins() {
@@ -590,7 +592,7 @@
      }
  
      public void h(String s) {
-@@ -721,7 +975,7 @@
+@@ -721,7 +977,7 @@
      }
  
      public String getServerModName() {
@@ -599,7 +601,7 @@
      }
  
      public CrashReport b(CrashReport crashreport) {
-@@ -734,6 +988,7 @@
+@@ -734,6 +990,7 @@
      }
  
      public List tabCompleteCommand(ICommandListener icommandlistener, String s, BlockPosition blockposition) {
@@ -607,7 +609,7 @@
          ArrayList arraylist = Lists.newArrayList();
  
          if (s.startsWith("/")) {
-@@ -772,6 +1027,9 @@
+@@ -772,6 +1029,9 @@
  
              return arraylist;
          }
@@ -617,7 +619,7 @@
      }
  
      public static MinecraftServer getServer() {
-@@ -779,7 +1037,7 @@
+@@ -779,7 +1039,7 @@
      }
  
      public boolean N() {
@@ -626,7 +628,7 @@
      }
  
      public String getName() {
-@@ -835,8 +1093,10 @@
+@@ -835,8 +1095,10 @@
      }
  
      public void a(EnumDifficulty enumdifficulty) {
@@ -639,7 +641,7 @@
  
              if (worldserver != null) {
                  if (worldserver.getWorldData().isHardcore()) {
-@@ -878,15 +1138,17 @@
+@@ -878,15 +1140,17 @@
          this.N = true;
          this.getConvertable().d();
  
@@ -660,7 +662,7 @@
          this.safeShutdown();
      }
  
-@@ -919,9 +1181,11 @@
+@@ -919,9 +1183,11 @@
          int i = 0;
  
          if (this.worldServer != null) {
@@ -675,7 +677,7 @@
                      WorldData worlddata = worldserver.getWorldData();
  
                      mojangstatisticsgenerator.a("world[" + i + "][dimension]", Integer.valueOf(worldserver.worldProvider.getDimension()));
-@@ -954,7 +1218,7 @@
+@@ -954,7 +1220,7 @@
      public abstract boolean ad();
  
      public boolean getOnlineMode() {
@@ -684,7 +686,7 @@
      }
  
      public void setOnlineMode(boolean flag) {
-@@ -1024,8 +1288,10 @@
+@@ -1024,8 +1290,10 @@
      }
  
      public void setGamemode(EnumGamemode enumgamemode) {
@@ -697,7 +699,7 @@
          }
  
      }
-@@ -1057,7 +1323,7 @@
+@@ -1057,7 +1325,7 @@
      }
  
      public World getWorld() {
@@ -706,7 +708,7 @@
      }
  
      public Entity f() {
-@@ -1125,11 +1391,10 @@
+@@ -1125,11 +1393,10 @@
      }
  
      public Entity a(UUID uuid) {
@@ -722,7 +724,7 @@
  
              if (worldserver != null) {
                  Entity entity = worldserver.getEntity(uuid);
-@@ -1144,7 +1409,7 @@
+@@ -1144,7 +1411,7 @@
      }
  
      public boolean getSendCommandFeedback() {
diff --git a/nms-patches/WorldData.patch b/nms-patches/WorldData.patch
new file mode 100644
index 0000000000..41e2509723
--- /dev/null
+++ b/nms-patches/WorldData.patch
@@ -0,0 +1,15 @@
+--- ../work/decompile-8eb82bde//net/minecraft/server/WorldData.java	Sat Nov 29 19:36:33 2014
++++ src/main/java/net/minecraft/server/WorldData.java	Sat Nov 29 19:35:56 2014
+@@ -645,4 +645,12 @@
+     static boolean q(WorldData worlddata) {
+         return worlddata.x;
+     }
++
++    // CraftBukkit start - Check if the name stored in NBT is the correct one
++    public void checkName( String name ) {
++        if ( !this.n.equals( name ) ) {
++            this.n = name;
++        }
++    }
++    // CraftBukkit end
+ }
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index f2bbe1b78a..fa1fe206a1 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -849,6 +849,7 @@ public final class CraftServer implements Server {
         if (worlddata == null) {
             worlddata = new WorldData(new WorldSettings(creator.seed(), EnumGamemode.getById(getDefaultGameMode().getValue()), generateStructures, hardcore, type), name);
         }
+        worlddata.checkName(name); // CraftBukkit - Migration did not rewrite the level.dat; This forces 1.8 to take the last loaded world as respawn (in this case the end)
         WorldServer internal = (WorldServer) new WorldServer(console, sdm, worlddata, dimension, console.methodProfiler, creator.environment(), generator).b();
 
         if (!(worlds.containsKey(name.toLowerCase()))) {