diff --git a/core/src/main/java/com/boydti/fawe/object/HistoryExtent.java b/core/src/main/java/com/boydti/fawe/object/HistoryExtent.java
index ee4abd03..bb557290 100644
--- a/core/src/main/java/com/boydti/fawe/object/HistoryExtent.java
+++ b/core/src/main/java/com/boydti/fawe/object/HistoryExtent.java
@@ -4,10 +4,7 @@ import com.boydti.fawe.FaweCache;
 import com.boydti.fawe.object.changeset.FaweChangeSet;
 import com.boydti.fawe.object.exception.FaweException;
 import com.sk89q.jnbt.CompoundTag;
-import com.sk89q.worldedit.EditSession;
-import com.sk89q.worldedit.Vector;
-import com.sk89q.worldedit.Vector2D;
-import com.sk89q.worldedit.WorldEditException;
+import com.sk89q.worldedit.*;
 import com.sk89q.worldedit.blocks.BaseBlock;
 import com.sk89q.worldedit.entity.BaseEntity;
 import com.sk89q.worldedit.entity.Entity;
@@ -142,6 +139,17 @@ public class HistoryExtent extends AbstractDelegateExtent {
         }
     }
 
+    @Override
+    public boolean setBiome(int x, int y, int z, BaseBiome newBiome) {
+        BaseBiome oldBiome = this.getBiome(MutableBlockVector2D.get(x, z));
+        if (oldBiome.getId() != newBiome.getId()) {
+            this.changeSet.addBiomeChange(x, z, oldBiome, newBiome);
+            return getExtent().setBiome(x, y, z, newBiome);
+        } else {
+            return false;
+        }
+    }
+
     public class TrackedEntity implements Entity {
         private final Entity entity;
 
diff --git a/core/src/main/java/com/boydti/fawe/object/extent/BlockTranslateExtent.java b/core/src/main/java/com/boydti/fawe/object/extent/BlockTranslateExtent.java
index bc078325..87ca4d74 100644
--- a/core/src/main/java/com/boydti/fawe/object/extent/BlockTranslateExtent.java
+++ b/core/src/main/java/com/boydti/fawe/object/extent/BlockTranslateExtent.java
@@ -41,6 +41,11 @@ public class BlockTranslateExtent extends AbstractDelegateExtent {
         return super.setBiome(position.add(dx, dz), biome);
     }
 
+    @Override
+    public boolean setBiome(int x, int y, int z, BaseBiome biome) {
+        return super.setBiome(x + dx, y + dy, z + dz, biome);
+    }
+
     @Override
     public BaseBiome getBiome(Vector2D position) {
         return super.getBiome(position.add(dx, dz));
diff --git a/core/src/main/java/com/boydti/fawe/object/extent/EmptyExtent.java b/core/src/main/java/com/boydti/fawe/object/extent/EmptyExtent.java
index 7e0aa4e6..459934ff 100644
--- a/core/src/main/java/com/boydti/fawe/object/extent/EmptyExtent.java
+++ b/core/src/main/java/com/boydti/fawe/object/extent/EmptyExtent.java
@@ -62,6 +62,11 @@ public class EmptyExtent implements Extent {
         return false;
     }
 
+    @Override
+    public boolean setBiome(int x, int y, int z, BaseBiome biome) {
+        return false;
+    }
+
     @Nullable
     public Operation commit() {
         return null;
diff --git a/core/src/main/java/com/boydti/fawe/object/extent/FaweRegionExtent.java b/core/src/main/java/com/boydti/fawe/object/extent/FaweRegionExtent.java
index 192494d6..f94c86e4 100644
--- a/core/src/main/java/com/boydti/fawe/object/extent/FaweRegionExtent.java
+++ b/core/src/main/java/com/boydti/fawe/object/extent/FaweRegionExtent.java
@@ -86,6 +86,17 @@ public abstract class FaweRegionExtent extends ResettableExtent {
         return super.setBiome(position, biome);
     }
 
+    @Override
+    public boolean setBiome(int x, int y, int z, BaseBiome biome) {
+        if (!contains(x, y, z)) {
+            if (!limit.MAX_FAILS()) {
+                WEManager.IMP.cancelEditSafe(this, BBC.WORLDEDIT_CANCEL_REASON_OUTSIDE_REGION);
+            }
+            return false;
+        }
+        return super.setBiome(x, y, z, biome);
+    }
+
     @Override
     public BaseBiome getBiome(Vector2D position) {
         if (!contains(position)) {
diff --git a/core/src/main/java/com/boydti/fawe/object/extent/OffsetExtent.java b/core/src/main/java/com/boydti/fawe/object/extent/OffsetExtent.java
index 967e68fc..d88d49c2 100644
--- a/core/src/main/java/com/boydti/fawe/object/extent/OffsetExtent.java
+++ b/core/src/main/java/com/boydti/fawe/object/extent/OffsetExtent.java
@@ -24,6 +24,11 @@ public class OffsetExtent extends ResettableExtent {
         return getExtent().setBiome(mutable.setComponents(position.getBlockX() + dx, position.getBlockZ() + dz), biome);
     }
 
+    @Override
+    public boolean setBiome(int x, int y, int z, BaseBiome biome) {
+        return getExtent().setBiome(x + dx, y + dy, z + dz, biome);
+    }
+
     @Override
     public boolean setBlock(Vector location, BaseBlock block) throws WorldEditException {
         return getExtent().setBlock(location.getBlockX() + dx, location.getBlockY() + dy, location.getBlockZ() + dz, block);
diff --git a/core/src/main/java/com/boydti/fawe/object/pattern/BiomePattern.java b/core/src/main/java/com/boydti/fawe/object/pattern/BiomePattern.java
index 49f9aa7e..74e3af5a 100644
--- a/core/src/main/java/com/boydti/fawe/object/pattern/BiomePattern.java
+++ b/core/src/main/java/com/boydti/fawe/object/pattern/BiomePattern.java
@@ -23,8 +23,8 @@ public class BiomePattern extends ExistingPattern {
     }
 
     @Override
-    public boolean apply(Extent extent, Vector setPosition, Vector getPosition) throws WorldEditException {
-        return extent.setBiome(mutable.setComponents(setPosition.getBlockX(), setPosition.getBlockZ()), biome);
+    public boolean apply(Extent extent, Vector set, Vector getPosition) throws WorldEditException {
+        return extent.setBiome(set.getBlockX(), set.getBlockY(), set.getBlockZ(), biome);
     }
 
     public class BiomePatternException extends RuntimeException {
diff --git a/core/src/main/java/com/sk89q/worldedit/EditSession.java b/core/src/main/java/com/sk89q/worldedit/EditSession.java
index 07986fe8..6f968b1e 100644
--- a/core/src/main/java/com/sk89q/worldedit/EditSession.java
+++ b/core/src/main/java/com/sk89q/worldedit/EditSession.java
@@ -983,6 +983,12 @@ public class EditSession extends AbstractDelegateExtent implements HasFaweQueue,
         return this.extent.setBiome(position, biome);
     }
 
+    @Override
+    public boolean setBiome(int x, int y, int z, BaseBiome biome) {
+        this.changes++;
+        return this.extent.setBiome(x, y, z, biome);
+    }
+
     @Override
     public int getLight(int x, int y, int z) {
         return queue.getLight(x, y, z);
diff --git a/core/src/main/java/com/sk89q/worldedit/command/MaskCommands.java b/core/src/main/java/com/sk89q/worldedit/command/MaskCommands.java
index e8072d64..07a229ff 100644
--- a/core/src/main/java/com/sk89q/worldedit/command/MaskCommands.java
+++ b/core/src/main/java/com/sk89q/worldedit/command/MaskCommands.java
@@ -85,6 +85,22 @@ public class MaskCommands extends MethodCommands {
         return new LightMask(extent, (int) min, (int) max);
     }
 
+    @Command(
+            aliases = {"false"},
+            desc = "Always false"
+    )
+    public Mask falseMask(Extent extent) {
+        return Masks.alwaysFalse();
+    }
+
+    @Command(
+            aliases = {"true"},
+            desc = "Always true"
+    )
+    public Mask trueMask(Extent extent) {
+        return Masks.alwaysTrue();
+    }
+
     @Command(
             aliases = {"#skylight"},
             desc = "Restrict to specific sky light levels",
diff --git a/core/src/main/java/com/sk89q/worldedit/extent/Extent.java b/core/src/main/java/com/sk89q/worldedit/extent/Extent.java
index 7a709c56..a80e7b8b 100644
--- a/core/src/main/java/com/sk89q/worldedit/extent/Extent.java
+++ b/core/src/main/java/com/sk89q/worldedit/extent/Extent.java
@@ -7,11 +7,7 @@ import com.boydti.fawe.jnbt.anvil.generator.OreGen;
 import com.boydti.fawe.jnbt.anvil.generator.Resource;
 import com.boydti.fawe.jnbt.anvil.generator.SchemGen;
 import com.boydti.fawe.object.PseudoRandom;
-import com.sk89q.worldedit.EditSession;
-import com.sk89q.worldedit.MutableBlockVector;
-import com.sk89q.worldedit.Vector;
-import com.sk89q.worldedit.Vector2D;
-import com.sk89q.worldedit.WorldEditException;
+import com.sk89q.worldedit.*;
 import com.sk89q.worldedit.blocks.BaseBlock;
 import com.sk89q.worldedit.blocks.BlockID;
 import com.sk89q.worldedit.entity.BaseEntity;
@@ -22,6 +18,7 @@ import com.sk89q.worldedit.function.pattern.Pattern;
 import com.sk89q.worldedit.regions.Region;
 import com.sk89q.worldedit.session.ClipboardHolder;
 import com.sk89q.worldedit.util.Location;
+import com.sk89q.worldedit.world.biome.BaseBiome;
 import com.sk89q.worldedit.world.registry.WorldData;
 import java.util.ArrayList;
 import java.util.List;
@@ -70,6 +67,10 @@ public interface Extent extends InputExtent, OutputExtent {
         return 255;
     }
 
+    default boolean setBiome(int x, int y, int z, BaseBiome biome) {
+        return setBiome(MutableBlockVector2D.get(x, z), biome);
+    }
+
     default public int getNearestSurfaceLayer(int x, int z, int y, int minY, int maxY) {
         int clearanceAbove = maxY - y;
         int clearanceBelow = y - minY;