diff --git a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/BukkitMain.java b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/BukkitMain.java
index 78cd3a189..d58443025 100644
--- a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/BukkitMain.java
+++ b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/BukkitMain.java
@@ -180,46 +180,49 @@ public final class BukkitMain extends JavaPlugin implements Listener, IPlotMain
                     continue;
                 }
 
-                final PlotId id = PlotId.fromString(name);
-                if (id != null) {
-                    final Plot plot = area.getOwnedPlot(id);
-                    if (plot != null) {
-                        if (PlotPlayer.wrap(plot.owner) == null) {
-                            if (world.getKeepSpawnInMemory()) {
-                                world.setKeepSpawnInMemory(false);
-                                return;
+                PlotId id;
+                try {
+                    id = PlotId.fromString(name);
+                } catch (IllegalArgumentException ignored) {
+                    continue;
+                }
+                final Plot plot = area.getOwnedPlot(id);
+                if (plot != null) {
+                    if (PlotPlayer.wrap(plot.owner) == null) {
+                        if (world.getKeepSpawnInMemory()) {
+                            world.setKeepSpawnInMemory(false);
+                            return;
+                        }
+                        final Chunk[] chunks = world.getLoadedChunks();
+                        if (chunks.length == 0) {
+                            if (!Bukkit.unloadWorld(world, true)) {
+                                PlotSquared.debug("Failed to unload " + world.getName());
                             }
-                            final Chunk[] chunks = world.getLoadedChunks();
-                            if (chunks.length == 0) {
-                                if (!Bukkit.unloadWorld(world, true)) {
-                                    PlotSquared.debug("Failed to unload " + world.getName());
-                                }
-                                return;
-                            } else {
-                                int index = 0;
-                                do {
-                                    final Chunk chunkI = chunks[index++];
-                                    boolean result;
-                                    if (methodUnloadChunk0 != null) {
-                                        try {
-                                            result = (boolean) methodUnloadChunk0
-                                                .invoke(world, chunkI.getX(), chunkI.getZ(), true);
-                                        } catch (Throwable e) {
-                                            methodUnloadChunk0 = null;
-                                            e.printStackTrace();
-                                            continue outer;
-                                        }
-                                    } else {
-                                        result = world
-                                            .unloadChunk(chunkI.getX(), chunkI.getZ(), true, false);
-                                    }
-                                    if (!result) {
+                            return;
+                        } else {
+                            int index = 0;
+                            do {
+                                final Chunk chunkI = chunks[index++];
+                                boolean result;
+                                if (methodUnloadChunk0 != null) {
+                                    try {
+                                        result = (boolean) methodUnloadChunk0
+                                            .invoke(world, chunkI.getX(), chunkI.getZ(), true);
+                                    } catch (Throwable e) {
+                                        methodUnloadChunk0 = null;
+                                        e.printStackTrace();
                                         continue outer;
                                     }
-                                } while (index < chunks.length
-                                    && System.currentTimeMillis() - start < 5);
-                                return;
-                            }
+                                } else {
+                                    result = world
+                                        .unloadChunk(chunkI.getX(), chunkI.getZ(), true, false);
+                                }
+                                if (!result) {
+                                    continue outer;
+                                }
+                            } while (index < chunks.length
+                                && System.currentTimeMillis() - start < 5);
+                            return;
                         }
                     }
                 }
@@ -532,17 +535,17 @@ public final class BukkitMain extends JavaPlugin implements Listener, IPlotMain
     }
 
     @Override @Nullable
-    public final ChunkGenerator getDefaultWorldGenerator(final String world, final String id) {
+    public final ChunkGenerator getDefaultWorldGenerator(final String worldName, final String id) {
         final IndependentPlotGenerator result;
         if (id != null && id.equalsIgnoreCase("single")) {
             result = new SingleWorldGenerator();
         } else {
             result = PlotSquared.get().IMP.getDefaultGenerator();
-            if (!PlotSquared.get().setupPlotWorld(world, id, result)) {
+            if (!PlotSquared.get().setupPlotWorld(worldName, id, result)) {
                 return null;
             }
         }
-        return (ChunkGenerator) result.specify(world);
+        return (ChunkGenerator) result.specify(worldName);
     }
 
     @Override public void registerPlayerEvents() {
diff --git a/Core/src/main/java/com/github/intellectualsites/plotsquared/api/PlotAPI.java b/Core/src/main/java/com/github/intellectualsites/plotsquared/api/PlotAPI.java
index c966903be..a93f2fa26 100644
--- a/Core/src/main/java/com/github/intellectualsites/plotsquared/api/PlotAPI.java
+++ b/Core/src/main/java/com/github/intellectualsites/plotsquared/api/PlotAPI.java
@@ -37,7 +37,7 @@ import java.util.UUID;
 @SuppressWarnings({"unused", "WeakerAccess"}) @NoArgsConstructor public class PlotAPI {
 
     /**
-     * Get all plots.
+     * Gets all plots.
      *
      * @return all plots
      * @see PlotSquared#getPlots()
@@ -77,7 +77,7 @@ import java.util.UUID;
     }
 
     /**
-     * Get the PlotSquared storage file.
+     * Gets the PlotSquared storage file.
      *
      * @return storage configuration
      * @see PlotSquared#storage
@@ -87,7 +87,7 @@ import java.util.UUID;
     }
 
     /**
-     * Get the main class for this plugin. Only use this if you really need it.
+     * Gets the main class for this plugin. Only use this if you really need it.
      *
      * @return PlotSquared PlotSquared Main Class
      * @see PlotSquared
@@ -114,7 +114,7 @@ import java.util.UUID;
     }
 
     /**
-     * Get the block/biome set queue
+     * Gets the block/biome set queue
      *
      * @return GlobalBlockQueue.IMP
      */
@@ -145,7 +145,7 @@ import java.util.UUID;
     }
 
     /**
-     * Get a list of PlotAreas in the world.
+     * Gets a list of PlotAreas in the world.
      *
      * @param world The world to check for plot areas
      * @return A set of PlotAreas
@@ -198,7 +198,7 @@ import java.util.UUID;
     }
 
     /**
-     * Get the PlotPlayer for a UUID.
+     * Gets the PlotPlayer for a UUID.
      *
      * 
Please note that PlotSquared can be configured to provide
      * different UUIDs than bukkit
@@ -212,7 +212,7 @@ import java.util.UUID;
     }
 
     /**
-     * Get the PlotPlayer for a username.
+     * Gets the PlotPlayer for a username.
      *
      * @param player the player to wrap
      * @return a {@code PlotPlayer}
diff --git a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/PlotSquared.java b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/PlotSquared.java
index b73fd9426..c686b21de 100644
--- a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/PlotSquared.java
+++ b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/PlotSquared.java
@@ -288,7 +288,7 @@ import java.util.zip.ZipInputStream;
     }
 
     /**
-     * Get an instance of PlotSquared.
+     * Gets an instance of PlotSquared.
      *
      * @return instance of PlotSquared
      */
@@ -383,7 +383,7 @@ import java.util.zip.ZipInputStream;
     }
 
     /**
-     * Get the current PlotSquared version.
+     * Gets the current PlotSquared version.
      *
      * @return current version in config or null
      */
@@ -392,7 +392,7 @@ import java.util.zip.ZipInputStream;
     }
 
     /**
-     * Get the server platform this plugin is running on this is running on.
+     * Gets the server platform this plugin is running on this is running on.
      * 
      * 
This will be either Bukkit or Sponge
      *
@@ -507,7 +507,7 @@ import java.util.zip.ZipInputStream;
     }
 
     /**
-     * Get all the base plots in a single set (for merged plots it just returns
+     * Gets all the base plots in a single set (for merged plots it just returns
      * the bottom plot).
      *
      * @return Set of base Plots
@@ -806,7 +806,7 @@ import java.util.zip.ZipInputStream;
     }
 
     /**
-     * Get all the plots in a single set.
+     * Gets all the plots in a single set.
      *
      * @return Set of Plots
      */
@@ -842,7 +842,7 @@ import java.util.zip.ZipInputStream;
     }
 
     /**
-     * Get all the plots owned by a player name.
+     * Gets all the plots owned by a player name.
      *
      * @param world  the world
      * @param player the plot owner
@@ -854,7 +854,7 @@ import java.util.zip.ZipInputStream;
     }
 
     /**
-     * Get all the plots owned by a player name.
+     * Gets all the plots owned by a player name.
      *
      * @param area   the PlotArea
      * @param player the plot owner
@@ -866,7 +866,7 @@ import java.util.zip.ZipInputStream;
     }
 
     /**
-     * Get all plots by a PlotPlayer.
+     * Gets all plots by a PlotPlayer.
      *
      * @param world  the world
      * @param player the plot owner
@@ -877,7 +877,7 @@ import java.util.zip.ZipInputStream;
     }
 
     /**
-     * Get all plots by a PlotPlayer.
+     * Gets all plots by a PlotPlayer.
      *
      * @param area   the PlotArea
      * @param player the plot owner
@@ -888,7 +888,7 @@ import java.util.zip.ZipInputStream;
     }
 
     /**
-     * Get all plots by a UUID in a world.
+     * Gets all plots by a UUID in a world.
      *
      * @param world the world
      * @param uuid  the plot owner
@@ -905,7 +905,7 @@ import java.util.zip.ZipInputStream;
     }
 
     /**
-     * Get all plots by a UUID in an area.
+     * Gets all plots by a UUID in an area.
      *
      * @param area the {@code PlotArea}
      * @param uuid the plot owner
@@ -943,7 +943,7 @@ import java.util.zip.ZipInputStream;
     }
 
     /**
-     * Get the plots for a PlotPlayer.
+     * Gets the plots for a PlotPlayer.
      *
      * @param player the player to retrieve the plots for
      * @return Set of Plot
@@ -965,7 +965,7 @@ import java.util.zip.ZipInputStream;
     }
 
     /**
-     * Get the plots for a UUID.
+     * Gets the plots for a UUID.
      *
      * @param uuid the plot owner
      * @return Set of Plot's owned by the player
@@ -1000,7 +1000,7 @@ import java.util.zip.ZipInputStream;
     }
 
     /**
-     * Get the plots for a UUID.
+     * Gets the plots for a UUID.
      *
      * @param uuid the UUID of the owner
      * @return Set of Plot
@@ -1220,7 +1220,7 @@ import java.util.zip.ZipInputStream;
                 String name = split[0];
                 PlotId pos1 = PlotId.fromString(split[1]);
                 PlotId pos2 = PlotId.fromString(split[2]);
-                if (pos1 == null || pos2 == null || name.isEmpty()) {
+                if (name.isEmpty()) {
                     throw new IllegalArgumentException("Invalid Area identifier: " + areaId
                         + ". Expected form `--`");
                 }
@@ -1652,8 +1652,8 @@ import java.util.zip.ZipInputStream;
             Settings.COMMIT = "https://github.com/IntellectualSites/PlotSquared/commit/" + Integer
                 .toHexString(version.hash);
             System.out.println("Version is " + this.version);
-        } catch (Throwable ignore) {
-            ignore.printStackTrace();
+        } catch (Throwable throwable) {
+            throwable.printStackTrace();
         }
         Settings.save(configFile);
         config = YamlConfiguration.loadConfiguration(configFile);
@@ -1815,7 +1815,7 @@ import java.util.zip.ZipInputStream;
     }
 
     /**
-     * Get the Java version.
+     * Gets the Java version.
      *
      * @return the java version
      */
@@ -1889,7 +1889,7 @@ import java.util.zip.ZipInputStream;
     }
 
     /**
-     * Get a list of PlotArea objects.
+     * Gets a list of PlotArea objects.
      *
      * @param world the world
      * @return Collection of PlotArea objects
@@ -1901,7 +1901,7 @@ import java.util.zip.ZipInputStream;
     }
 
     /**
-     * Get the relevant plot area for a specified location.
+     * Gets the relevant plot area for a specified location.
      * 
      * - If there is only one plot area globally that will be returned.
      * 
 - If there is only one plot area in the world, it will return that.
@@ -1922,7 +1922,7 @@ import java.util.zip.ZipInputStream;
     }
 
     /**
-     * Get the {@code PlotArea} which contains a location.
+     * Gets the {@code PlotArea} which contains a location.
      * 
      * - If the plot area does not contain a location, null
      * will be returned.
@@ -1964,7 +1964,7 @@ import java.util.zip.ZipInputStream;
     }
 
     /**
-     * Get Plots based on alias
+     * Gets Plots based on alias
      *
      * @param alias     to search plots
      * @param worldname to filter alias to a specific world [optional] null means all worlds
diff --git a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Cluster.java b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Cluster.java
index 9145d1b3d..4cb20487b 100644
--- a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Cluster.java
+++ b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Cluster.java
@@ -84,10 +84,13 @@ import java.util.UUID;
                 if (currentClusters >= player.getAllowedPlots()) {
                     return sendMessage(player, C.CANT_CLAIM_MORE_CLUSTERS);
                 }
+                PlotId pos1;
+                PlotId pos2;
                 // check pos1 / pos2
-                PlotId pos1 = PlotId.fromString(args[2]);
-                PlotId pos2 = PlotId.fromString(args[3]);
-                if (pos1 == null || pos2 == null) {
+                try{
+                    pos1 = PlotId.fromString(args[2]);
+                    pos2 = PlotId.fromString(args[3]);
+                } catch (IllegalArgumentException ignored) {
                     MainUtil.sendMessage(player, C.NOT_VALID_PLOT_ID);
                     return false;
                 }
@@ -209,10 +212,13 @@ import java.util.UUID;
                         "/plot cluster resize  ");
                     return false;
                 }
+                PlotId pos1;
+                PlotId pos2;
                 // check pos1 / pos2
-                PlotId pos1 = PlotId.fromString(args[1]);
-                PlotId pos2 = PlotId.fromString(args[2]);
-                if (pos1 == null || pos2 == null) {
+                try{
+                    pos1 = PlotId.fromString(args[2]);
+                    pos2 = PlotId.fromString(args[3]);
+                } catch (IllegalArgumentException ignored) {
                     MainUtil.sendMessage(player, C.NOT_VALID_PLOT_ID);
                     return false;
                 }
diff --git a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Comment.java b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Comment.java
index 775450517..9755d7150 100644
--- a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Comment.java
+++ b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Comment.java
@@ -33,7 +33,13 @@ public class Comment extends SubCommand {
             return false;
         }
         Location loc = player.getLocation();
-        PlotId id = PlotId.fromString(args[1]);
+        PlotId id;
+        try {
+            id = PlotId.fromString(args[1]);
+        } catch (IllegalArgumentException ignored) {
+            MainUtil.sendMessage(player, C.NOT_VALID_PLOT_ID);
+            return false;
+        }
         Plot plot = MainUtil.getPlotFromString(player, args[1], false);
         int index;
         if (plot == null) {
diff --git a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Purge.java b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Purge.java
index b8b38e298..9500dec73 100644
--- a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Purge.java
+++ b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Purge.java
@@ -56,8 +56,9 @@ import java.util.UUID;
                     break;
                 case "plotid":
                 case "id":
-                    id = PlotId.fromString(split[1]);
-                    if (id == null) {
+                    try {
+                        id = PlotId.fromString(split[1]);
+                    } catch (IllegalArgumentException ignored) {
                         C.NOT_VALID_PLOT_ID.send(player, split[1]);
                         return false;
                     }
diff --git a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Setup.java b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Setup.java
index facea4952..412927526 100644
--- a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Setup.java
+++ b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/Setup.java
@@ -182,8 +182,9 @@ import java.util.Map.Entry;
                 MainUtil.sendMessage(player, "&6What should be the minimum Plot Id?");
                 break;
             case 3:  // min
-                object.min = PlotId.fromString(args[0]);
-                if (object.min == null) {
+                try {
+                    object.min = PlotId.fromString(args[0]);
+                } catch (IllegalArgumentException ignored) {
                     MainUtil.sendMessage(player, "&cYou must choose a valid minimum PlotId!");
                     return false;
                 }
@@ -192,8 +193,10 @@ import java.util.Map.Entry;
                 break;
             case 4:
                 // max
-                PlotId id = PlotId.fromString(args[0]);
-                if (id == null) {
+                PlotId id;
+                try {
+                    id = PlotId.fromString(args[0]);
+                } catch (IllegalArgumentException ignored) {
                     MainUtil.sendMessage(player, "&cYou must choose a valid maximum PlotId!");
                     return false;
                 }
diff --git a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/object/Plot.java b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/object/Plot.java
index 85349cd55..69d0e63ab 100644
--- a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/object/Plot.java
+++ b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/object/Plot.java
@@ -41,14 +41,13 @@ import java.util.concurrent.ConcurrentHashMap;
  */
 public class Plot {
 
+    private static final int MAX_HEIGHT = 256;
     /**
      * @deprecated raw access is deprecated
      */
     @Deprecated private static HashSet connected_cache;
     private static HashSet regions_cache;
-    /**
-     * The {@link PlotId}.
-     */
+
     private final PlotId id;
     /**
      * plot owner
@@ -91,9 +90,7 @@ public class Plot {
      * - The methods are more likely to be left unchanged from version changes
      */
     private PlotSettings settings;
-    /**
-     * The {@link PlotArea}.
-     */
+
     private PlotArea area;
     /**
      * Session only plot metadata (session is until the server stops)
@@ -188,7 +185,7 @@ public class Plot {
     }
 
     /**
-     * Get a plot from a string e.g. [area];[id]
+     * Gets a plot from a string e.g. [area];[id]
      *
      * @param defaultArea If no area is specified
      * @param string      plot id/area + id
@@ -199,7 +196,7 @@ public class Plot {
         if (split.length == 2) {
             if (defaultArea != null) {
                 PlotId id = PlotId.fromString(split[0] + ';' + split[1]);
-                return id != null ? defaultArea.getPlotAbs(id) : null;
+                return defaultArea.getPlotAbs(id);
             }
         } else if (split.length == 3) {
             PlotArea pa = PlotSquared.get().getPlotArea(split[0], null);
@@ -253,7 +250,7 @@ public class Plot {
     }
 
     /**
-     * Get the metadata for a key
+     * Gets the metadata for a key
      * 
      * For persistent metadata use the flag system
      *
@@ -281,7 +278,7 @@ public class Plot {
     }
 
     /**
-     * Get the cluster this plot is associated with
+     * Gets the cluster this plot is associated with
      *
      * @return the PlotCluster object, or null
      */
@@ -299,9 +296,9 @@ public class Plot {
     public List getPlayersInPlot() {
         ArrayList players = new ArrayList<>();
         for (Entry entry : UUIDHandler.getPlayers().entrySet()) {
-            PlotPlayer pp = entry.getValue();
-            if (this.equals(pp.getCurrentPlot())) {
-                players.add(pp);
+            PlotPlayer plotPlayer = entry.getValue();
+            if (this.equals(plotPlayer.getCurrentPlot())) {
+                players.add(plotPlayer);
             }
         }
         return players;
@@ -330,12 +327,7 @@ public class Plot {
             return false;
         }
         Set connected = getConnectedPlots();
-        for (Plot current : connected) {
-            if (uuid.equals(current.owner)) {
-                return true;
-            }
-        }
-        return false;
+        return connected.stream().anyMatch(current -> uuid.equals(current.owner));
     }
 
     public boolean isOwnerAbs(UUID uuid) {
@@ -343,7 +335,7 @@ public class Plot {
     }
 
     /**
-     * Get a immutable set of owner UUIDs for a plot (supports multi-owner mega-plots).
+     * Gets a immutable set of owner UUIDs for a plot (supports multi-owner mega-plots).
      *
      * @return the plot owners
      */
@@ -406,14 +398,16 @@ public class Plot {
     }
 
     /**
-     * Get the {@link PlotId}.
+     * Gets the {@link PlotId} of this plot.
+     *
+     * @return the PlotId for this plot
      */
     public PlotId getId() {
         return this.id;
     }
 
     /**
-     * Get the plot world object for this plot
+     * Gets the plot world object for this plot
      * - The generic PlotArea object can be casted to its respective class for more control (e.g. HybridPlotWorld)
      *
      * @return PlotArea
@@ -441,7 +435,7 @@ public class Plot {
     }
 
     /**
-     * Get the plot manager object for this plot
+     * Gets the plot manager object for this plot
      * - The generic PlotManager object can be casted to its respective class for more control (e.g. HybridPlotManager)
      *
      * @return PlotManager
@@ -451,7 +445,7 @@ public class Plot {
     }
 
     /**
-     * Get or create plot settings.
+     * Gets or create plot settings.
      *
      * @return PlotSettings
      * @deprecated use equivalent plot method;
@@ -518,7 +512,7 @@ public class Plot {
     }
 
     /**
-     * Get the timestamp of when the plot was created (unreliable)
+     * Gets the timestamp of when the plot was created (unreliable)
      * - not accurate if the plot was created before this was implemented
      * - Milliseconds since the epoch
      *
@@ -532,7 +526,7 @@ public class Plot {
     }
 
     /**
-     * Get if the plot is merged in a direction
+     * Gets if the plot is merged in a direction
      * ------- Actual -------
      * 0 = north
      * 1 = east
@@ -586,7 +580,7 @@ public class Plot {
     }
 
     /**
-     * Get the denied users.
+     * Gets the denied users.
      *
      * @return a set of denied users
      */
@@ -598,7 +592,7 @@ public class Plot {
     }
 
     /**
-     * Set the denied users for this plot.
+     * Sets the denied users for this plot.
      *
      * @param uuids uuids to deny
      */
@@ -618,7 +612,7 @@ public class Plot {
     }
 
     /**
-     * Get the trusted users.
+     * Gets the trusted users.
      *
      * @return a set of trusted users
      */
@@ -630,7 +624,7 @@ public class Plot {
     }
 
     /**
-     * Set the trusted users for this plot.
+     * Sets the trusted users for this plot.
      *
      * @param uuids uuids to trust
      */
@@ -650,7 +644,7 @@ public class Plot {
     }
 
     /**
-     * Get the members
+     * Gets the members
      *
      * @return a set of members
      */
@@ -662,7 +656,7 @@ public class Plot {
     }
 
     /**
-     * Set the members for this plot
+     * Sets the members for this plot.
      *
      * @param uuids uuids to set member status for
      */
@@ -721,7 +715,7 @@ public class Plot {
     }
 
     /**
-     * Set the plot owner (and update the database)
+     * Sets the plot owner (and update the database)
      *
      * @param owner uuid to set as owner
      */
@@ -747,7 +741,7 @@ public class Plot {
     }
 
     /**
-     * Set the plot owner (and update the database)
+     * Sets the plot owner (and update the database)
      *
      * @param owner     uuid to set as owner
      * @param initiator player initiating set owner
@@ -845,7 +839,7 @@ public class Plot {
     }
 
     /**
-     * Set the biome for a plot asynchronously
+     * Sets the biome for a plot asynchronously.
      *
      * @param biome    The biome e.g. "forest"
      * @param whenDone The task to run when finished, or null
@@ -947,7 +941,7 @@ public class Plot {
     }
 
     /**
-     * Set the sign for a plot to a specific name
+     * Sets the sign for a plot to a specific name
      *
      * @param name name
      */
@@ -992,7 +986,7 @@ public class Plot {
     }
 
     /**
-     * Set a flag for this plot
+     * Sets a flag for this plot
      *
      * @param flag  Flag to set
      * @param value Flag value
@@ -1015,7 +1009,7 @@ public class Plot {
     }
 
     /**
-     * Get the flag for a given key
+     * Gets the flag for a given key
      *
      * @param key Flag to get value for
      */
@@ -1024,7 +1018,7 @@ public class Plot {
     }
 
     /**
-     * Get the flag for a given key
+     * Gets the flag for a given key
      *
      * @param key          the flag
      * @param defaultValue if the key is null, the value to return
@@ -1118,7 +1112,7 @@ public class Plot {
     }
 
     /**
-     * Get the number of tracked running tasks for this plot
+     * Gets the number of tracked running tasks for this plot
      * - Used to track/limit the number of things a player can do on the plot at once
      *
      * @return number of tasks (int)
@@ -1217,7 +1211,7 @@ public class Plot {
     }
 
     /**
-     * Set the home location
+     * Sets the home location
      *
      * @param location location to set as home
      */
@@ -1235,7 +1229,7 @@ public class Plot {
     }
 
     /**
-     * Get the default home location for a plot
+     * Gets the default home location for a plot
      * - Ignores any home location set for that specific plot
      *
      * @return Location
@@ -1276,27 +1270,24 @@ public class Plot {
         for (RegionWrapper region : getRegions()) {
             count +=
                 (region.maxX - (double) region.minX + 1) * (region.maxZ - (double) region.minZ + 1)
-                    * 256;
+                    * MAX_HEIGHT;
         }
         return count;
     }
 
     /**
-     * Get the average rating of the plot. This is the value displayed in /plot info
+     * Gets the average rating of the plot. This is the value displayed in /plot info
      *
      * @return average rating as double
      */
     public double getAverageRating() {
-        double sum = 0;
         Collection ratings = this.getRatings().values();
-        for (Rating rating : ratings) {
-            sum += rating.getAverageRating();
-        }
+        double sum = ratings.stream().mapToDouble(Rating::getAverageRating).sum();
         return sum / ratings.size();
     }
 
     /**
-     * Set a rating for a user
+     * Sets a rating for a user
      * - If the user has already rated, the following will return false
      *
      * @param uuid   uuid of rater
@@ -1328,7 +1319,7 @@ public class Plot {
     }
 
     /**
-     * Get the ratings associated with a plot
+     * Gets the ratings associated with a plot
      * - The rating object may contain multiple categories
      *
      * @return Map of user who rated to the rating
@@ -1383,7 +1374,7 @@ public class Plot {
     }
 
     /**
-     * Set the plot sign if plot signs are enabled.
+     * Sets the plot sign if plot signs are enabled.
      */
     public void setSign() {
         if (this.owner == null) {
@@ -1502,7 +1493,7 @@ public class Plot {
     }
 
     /**
-     * Set components such as border, wall, floor.
+     * Sets components such as border, wall, floor.
      * (components are generator specific)
      */
     public boolean setComponent(String component, String blocks) {
@@ -1531,10 +1522,10 @@ public class Plot {
         return top;
     }
 
+    //TODO Better documentation needed.
     /**
      * Return the bottom location for the plot.
      *
-     * @return
      */
     public Location getBottomAbs() {
         Location loc = this.area.getPlotManager().getPlotBottomLocAbs(this.area, this.id);
@@ -1543,7 +1534,7 @@ public class Plot {
     }
 
     /**
-     * Swap the settings for two plots.
+     * Swaps the settings for two plots.
      *
      * @param plot     the plot to swap data with
      * @param whenDone the task to run at the end of this method.
@@ -1676,7 +1667,7 @@ public class Plot {
             Location bot = other.getBottomAbs();
             Location top = this.getTopAbs();
             Location pos1 = new Location(this.getWorldName(), top.getX(), 0, bot.getZ());
-            Location pos2 = new Location(this.getWorldName(), bot.getX(), 256, top.getZ());
+            Location pos2 = new Location(this.getWorldName(), bot.getX(), MAX_HEIGHT, top.getZ());
             ChunkManager.manager.regenerateRegion(pos1, pos2, true, null);
         } else {
             this.area.getPlotManager().removeRoadEast(this.area, this);
@@ -1729,7 +1720,7 @@ public class Plot {
     }
 
     /**
-     * Get plot display name.
+     * Gets plot display name.
      *
      * @return alias if set, else id
      */
@@ -1898,7 +1889,7 @@ public class Plot {
     }
 
     /**
-     * Get the plot hashcode
+     * Gets the plot hashcode
      * Note: The hashcode is unique if:
      * - Plots are in the same world
      * - The x,z coordinates are between Short.MIN_VALUE and Short.MAX_VALUE
@@ -1910,7 +1901,7 @@ public class Plot {
     }
 
     /**
-     * Get the flags specific to this plot
+     * Gets the flags specific to this plot
      * - Does not take default flags into account
      *
      * @return
@@ -1920,7 +1911,7 @@ public class Plot {
     }
 
     /**
-     * Set a flag for this plot.
+     * Sets a flag for this plot.
      *
      * @param flags
      */
@@ -1929,7 +1920,7 @@ public class Plot {
     }
 
     /**
-     * Get the plot alias.
+     * Gets the plot alias.
      * - Returns an empty string if no alias is set
      *
      * @return The plot alias
@@ -1942,7 +1933,7 @@ public class Plot {
     }
 
     /**
-     * Set the plot alias.
+     * Sets the plot alias.
      *
      * @param alias The alias
      */
@@ -1961,7 +1952,7 @@ public class Plot {
     }
 
     /**
-     * Set the raw merge data
+     * Sets the raw merge data
      * - Updates DB
      * - Does not modify terrain
      * ----------
@@ -1999,7 +1990,7 @@ public class Plot {
     }
 
     /**
-     * Get the merged array.
+     * Gets the merged array.
      *
      * @return boolean [ north, east, south, west ]
      */
@@ -2008,10 +1999,10 @@ public class Plot {
     }
 
     /**
-     * Set the raw merge data
+     * Sets the raw merge data
      * - Updates DB
      * - Does not modify terrain
-     * Get if the plot is merged in a direction
+     * Gets if the plot is merged in a direction
      * ----------
      * 0 = north
      * 1 = east
@@ -2038,7 +2029,7 @@ public class Plot {
     }
 
     /**
-     * Get the set home location or 0,0,0 if no location is set
+     * Gets the set home location or 0,0,0 if no location is set
      * - Does not take the default home location into account
      *
      * @return
@@ -2145,7 +2136,7 @@ public class Plot {
             Location bot = other.getBottomAbs();
             Location top = this.getTopAbs();
             Location pos1 = new Location(this.getWorldName(), bot.getX(), 0, top.getZ());
-            Location pos2 = new Location(this.getWorldName(), top.getX(), 256, bot.getZ());
+            Location pos2 = new Location(this.getWorldName(), top.getX(), MAX_HEIGHT, bot.getZ());
             ChunkManager.manager.regenerateRegion(pos1, pos2, true, null);
         } else {
             this.getManager().removeRoadSouth(this.area, this);
@@ -2248,11 +2239,11 @@ public class Plot {
      * Merge the plot settings
      * - Used when a plot is merged
      *
-     * @param b
+     * @param plot
      */
-    public void mergeData(Plot b) {
+    public void mergeData(Plot plot) {
         HashMap, Object> flags1 = this.getFlags();
-        HashMap, Object> flags2 = b.getFlags();
+        HashMap, Object> flags2 = plot.getFlags();
         if ((!flags1.isEmpty() || !flags2.isEmpty()) && !flags1.equals(flags2)) {
             boolean greater = flags1.size() > flags2.size();
             if (greater) {
@@ -2262,30 +2253,30 @@ public class Plot {
             }
             HashMap, Object> net = (greater ? flags1 : flags2);
             this.setFlags(net);
-            b.setFlags(net);
+            plot.setFlags(net);
         }
         if (!this.getAlias().isEmpty()) {
-            b.setAlias(this.getAlias());
-        } else if (!b.getAlias().isEmpty()) {
-            this.setAlias(b.getAlias());
+            plot.setAlias(this.getAlias());
+        } else if (!plot.getAlias().isEmpty()) {
+            this.setAlias(plot.getAlias());
         }
         for (UUID uuid : this.getTrusted()) {
-            b.addTrusted(uuid);
+            plot.addTrusted(uuid);
         }
-        for (UUID uuid : b.getTrusted()) {
+        for (UUID uuid : plot.getTrusted()) {
             this.addTrusted(uuid);
         }
         for (UUID uuid : this.getMembers()) {
-            b.addMember(uuid);
+            plot.addMember(uuid);
         }
-        for (UUID uuid : b.getMembers()) {
+        for (UUID uuid : plot.getMembers()) {
             this.addMember(uuid);
         }
 
         for (UUID uuid : this.getDenied()) {
-            b.addDenied(uuid);
+            plot.addDenied(uuid);
         }
-        for (UUID uuid : b.getDenied()) {
+        for (UUID uuid : plot.getDenied()) {
             this.addDenied(uuid);
         }
     }
@@ -2302,7 +2293,7 @@ public class Plot {
             Location pos1 = this.getTopAbs().add(1, 0, 1);
             Location pos2 = other.getBottomAbs().subtract(1, 0, 1);
             pos1.setY(0);
-            pos2.setY(256);
+            pos2.setY(MAX_HEIGHT);
             ChunkManager.manager.regenerateRegion(pos1, pos2, true, null);
         } else {
             this.area.getPlotManager().removeRoadSouthEast(this.area, this);
@@ -2310,7 +2301,7 @@ public class Plot {
     }
 
     /**
-     * Get the plot in a relative location
+     * Gets the plot in a relative location
      * Note: May be null if the partial plot area does not include the relative location
      *
      * @param x
@@ -2326,7 +2317,7 @@ public class Plot {
     }
 
     /**
-     * Get the plot in a relative direction
+     * Gets the plot in a relative direction
      * 0 = north
      * 1 = east
      * 2 = south
@@ -2341,7 +2332,7 @@ public class Plot {
     }
 
     /**
-     * Get a set of plots connected (and including) this plot
+     * Gets a set of plots connected (and including) this plot
      * - This result is cached globally
      *
      * @return
@@ -2640,7 +2631,7 @@ public class Plot {
     }
 
     /**
-     * Get all the corners of the plot (supports non-rectangular shapes).
+     * Gets all the corners of the plot (supports non-rectangular shapes).
      *
      * @return A list of the plot corners
      */
@@ -2722,7 +2713,7 @@ public class Plot {
     }
 
     /**
-     * Set a component for a plot to the provided blocks
+     * Sets a component for a plot to the provided blocks
      * - E.g. floor, wall, border etc.
      * - The available components depend on the generator being used
      *
diff --git a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/object/PlotId.java b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/object/PlotId.java
index 113495512..821a22327 100644
--- a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/object/PlotId.java
+++ b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/object/PlotId.java
@@ -1,5 +1,6 @@
 package com.github.intellectualsites.plotsquared.plot.object;
 
+import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 public class PlotId {
@@ -30,22 +31,13 @@ public class PlotId {
      * @param string to create id from
      * @return null if the string is invalid
      */
-    public static PlotId fromString(String string) {
-        if (string == null) {
-            return null;
-        }
+    public static PlotId fromString(@Nonnull String string) {
         String[] parts = string.split("[;|,]");
         if (parts.length < 2) {
-            return null;
-        }
-        int x;
-        int y;
-        try {
-            x = Integer.parseInt(parts[0]);
-            y = Integer.parseInt(parts[1]);
-        } catch (NumberFormatException ignored) {
-            return null;
+            throw new IllegalArgumentException("Cannot create PlotID. String invalid.");
         }
+        int x = Integer.parseInt(parts[0]);
+        int y = Integer.parseInt(parts[1]);
         return new PlotId(x, y);
     }
 
@@ -54,7 +46,7 @@ public class PlotId {
     }
 
     /**
-     * Get the PlotId from the HashCode
+     * Gets the PlotId from the HashCode
      * Note: Only accurate for small x,z values (short)
      *
      * @param hash