diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java
index d32f7cdaf1..9f92709e50 100644
--- a/core/src/mindustry/content/Blocks.java
+++ b/core/src/mindustry/content/Blocks.java
@@ -981,7 +981,7 @@ public class Blocks implements ContentList{
             consumes.power(1.75f);
         }};
 
-        massConveyor = new MassConveyor("mass-conveyor"){{
+        massConveyor = new PayloadConveyor("mass-conveyor"){{
             requirements(Category.distribution, ItemStack.with(Items.copper, 1));
         }};
 
diff --git a/core/src/mindustry/graphics/Pixelator.java b/core/src/mindustry/graphics/Pixelator.java
index 18846c3e67..225843c1ae 100644
--- a/core/src/mindustry/graphics/Pixelator.java
+++ b/core/src/mindustry/graphics/Pixelator.java
@@ -6,7 +6,6 @@ import arc.graphics.Texture.*;
 import arc.graphics.g2d.*;
 import arc.graphics.gl.*;
 import arc.util.*;
-import mindustry.gen.*;
 
 import static arc.Core.*;
 import static mindustry.Vars.renderer;
@@ -44,7 +43,8 @@ public class Pixelator implements Disposable{
         Draw.rect(buffer);
         Draw.blend();
 
-        Groups.drawNames();
+        //TODO set all of this up
+        //Groups.drawNames();
 
         Core.camera.position.set(px, py);
         renderer.setScale(pre);
diff --git a/core/src/mindustry/world/blocks/BuildBlock.java b/core/src/mindustry/world/blocks/BuildBlock.java
index 278b1b49fb..aeb7704c61 100644
--- a/core/src/mindustry/world/blocks/BuildBlock.java
+++ b/core/src/mindustry/world/blocks/BuildBlock.java
@@ -36,7 +36,6 @@ public class BuildBlock extends Block{
         this.size = size;
         update = true;
         health = 20;
-        layer = Layer.placement;
         consumesTap = true;
         solidifes = true;
         buildBlocks[size - 1] = this;
@@ -180,23 +179,23 @@ public class BuildBlock extends Block{
             if(Core.atlas.isFound(previous.icon(Cicon.full))){
                 Draw.rect(previous.icon(Cicon.full), x, y, previous.rotate ? tile.rotation() * 90 : 0);
             }
-        }
 
-        @Override
-        public void drawLayer(){
-            Shaders.blockbuild.color = Pal.accent;
+            Draw.draw(Layer.blockBuilding, () -> {
+                Draw.shader(Shaders.blockbuild);
+                Shaders.blockbuild.color = Pal.accent;
 
-            Block target = cblock == null ? previous : cblock;
+                Block target = cblock == null ? previous : cblock;
 
-            if(target == null) return;
+                if(target == null) return;
 
-            for(TextureRegion region : target.getGeneratedIcons()){
-                Shaders.blockbuild.region = region;
-                Shaders.blockbuild.progress = progress;
+                for(TextureRegion region : target.getGeneratedIcons()){
+                    Shaders.blockbuild.region = region;
+                    Shaders.blockbuild.progress = progress;
 
-                Draw.rect(region, x, y, target.rotate ? tile.rotation() * 90 : 0);
-                Draw.flush();
-            }
+                    Draw.rect(region, x, y, target.rotate ? tile.rotation() * 90 : 0);
+                    Draw.flush();
+                }
+            });
         }
 
         public boolean construct(Unitc builder, @Nullable Tilec core, float amount, boolean configured){
diff --git a/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java b/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java
index f9285e86e6..4175bc994e 100644
--- a/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java
+++ b/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java
@@ -50,8 +50,8 @@ public class LiquidTurret extends Turret{
     public class LiquidTurretEntity extends TurretEntity{
 
         @Override
-        public void drawLayer(){
-            super.drawLayer();
+        public void draw(){
+            super.draw();
             
             if(Core.atlas.isFound(reg(liquidRegion))){
                 Draw.color(liquids.current().color);
diff --git a/core/src/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/mindustry/world/blocks/defense/turrets/Turret.java
index a5ceee4e05..96a3f6300f 100644
--- a/core/src/mindustry/world/blocks/defense/turrets/Turret.java
+++ b/core/src/mindustry/world/blocks/defense/turrets/Turret.java
@@ -68,7 +68,6 @@ public abstract class Turret extends Block{
         priority = TargetPriority.turret;
         update = true;
         solid = true;
-        layer = Layer.turret;
         group = BlockGroup.turrets;
         flags = EnumSet.of(BlockFlag.turret);
         outlineIcon = true;
@@ -127,10 +126,9 @@ public abstract class Turret extends Block{
         public void draw(){
             Draw.rect(baseRegion, x, y);
             Draw.color();
-        }
 
-        @Override
-        public void drawLayer(){
+            Draw.z(Layer.turret);
+
             tr2.trns(rotation, -recoil);
 
             drawer.get(this);
diff --git a/core/src/mindustry/world/blocks/distribution/ExtendingItemBridge.java b/core/src/mindustry/world/blocks/distribution/ExtendingItemBridge.java
index 4e89218604..dfa40c76b1 100644
--- a/core/src/mindustry/world/blocks/distribution/ExtendingItemBridge.java
+++ b/core/src/mindustry/world/blocks/distribution/ExtendingItemBridge.java
@@ -4,6 +4,7 @@ import arc.*;
 import arc.graphics.g2d.*;
 import arc.math.*;
 import arc.math.geom.*;
+import mindustry.graphics.*;
 import mindustry.world.*;
 
 import static mindustry.Vars.*;
@@ -17,7 +18,11 @@ public class ExtendingItemBridge extends ItemBridge{
     
     public class ExtendingItemBridgeEntity extends ItemBridgeEntity{
         @Override
-        public void drawLayer(){
+        public void draw(){
+            super.draw();
+
+            Draw.z(Layer.power);
+
             Tile other = world.tile(link);
             if(!linkValid(tile, other)) return;
 
diff --git a/core/src/mindustry/world/blocks/distribution/ItemBridge.java b/core/src/mindustry/world/blocks/distribution/ItemBridge.java
index b5438c62ea..c8786d1d47 100644
--- a/core/src/mindustry/world/blocks/distribution/ItemBridge.java
+++ b/core/src/mindustry/world/blocks/distribution/ItemBridge.java
@@ -229,7 +229,11 @@ public class ItemBridge extends Block{
         }
 
         @Override
-        public void drawLayer(){
+        public void draw(){
+            super.draw();
+
+            Draw.z(Layer.power);
+
             Tile other = world.tile(link);
             if(!linkValid(tile, other)) return;
 
diff --git a/core/src/mindustry/world/blocks/distribution/MassDriver.java b/core/src/mindustry/world/blocks/distribution/MassDriver.java
index 1bded3cd96..6c4429819d 100644
--- a/core/src/mindustry/world/blocks/distribution/MassDriver.java
+++ b/core/src/mindustry/world/blocks/distribution/MassDriver.java
@@ -37,10 +37,9 @@ public class MassDriver extends Block{
         solid = true;
         configurable = true;
         hasItems = true;
-        layer = Layer.turret;
         hasPower = true;
         outlineIcon = true;
-    //point2 is relative
+        //point2 is relative
         config(Point2.class, (tile, point) -> ((MassDriverEntity)tile).link = Point2.pack(point.x + tile.tileX(), point.y + tile.tileY()));
         config(Integer.class, (tile, point) -> ((MassDriverEntity)tile).link = point);
     }
@@ -187,10 +186,9 @@ public class MassDriver extends Block{
         @Override
         public void draw(){
             Draw.rect(baseRegion, x, y);
-        }
 
-        @Override
-        public void drawLayer(){
+            Draw.z(Layer.turret);
+
             Draw.rect(region,
             x + Angles.trnsx(rotation + 180f, reload * knockback),
             y + Angles.trnsy(rotation + 180f, reload * knockback), rotation - 90);
diff --git a/core/src/mindustry/world/blocks/distribution/MassConveyor.java b/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java
similarity index 96%
rename from core/src/mindustry/world/blocks/distribution/MassConveyor.java
rename to core/src/mindustry/world/blocks/distribution/PayloadConveyor.java
index ed66c7dcfd..b6a37b015f 100644
--- a/core/src/mindustry/world/blocks/distribution/MassConveyor.java
+++ b/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java
@@ -17,15 +17,14 @@ import mindustry.world.blocks.payloads.*;
 import static mindustry.Vars.*;
 
 //TODO rename
-public class MassConveyor extends Block{
+public class PayloadConveyor extends Block{
     public float moveTime = 70f;
     public TextureRegion topRegion, edgeRegion;
     public Interpolation interp = Interpolation.pow5;
 
-    public MassConveyor(String name){
+    public PayloadConveyor(String name){
         super(name);
 
-        layer = Layer.overlay;
         size = 3;
         rotate = true;
         update = true;
@@ -161,14 +160,8 @@ public class MassConveyor extends Block{
                     Draw.rect(edgeRegion, x, y, i * 90);
                 }
             }
-        }
 
-        @Override
-        public void drawLayer(){
-            //fract:
-            //0: arriving
-            //0.5: middle
-            //1: leaving
+            Draw.z(Layer.blockOver);
 
             if(animation > fract()){
                 animation = Mathf.lerp(animation, 0.8f, 0.15f);
@@ -177,7 +170,7 @@ public class MassConveyor extends Block{
             animation = Math.max(animation, fract());
 
             float fract = animation;
-            float rot = Mathf.slerp(itemRotation, rotation() * 90, fract);
+            rot = Mathf.slerp(itemRotation, rotation() * 90, fract);
 
             if(fract < 0.5f){
                 Tmp.v1.trns(itemRotation + 180, (0.5f - fract) * tilesize * size);
diff --git a/core/src/mindustry/world/blocks/environment/TreeBlock.java b/core/src/mindustry/world/blocks/environment/TreeBlock.java
index fe90e449a0..afc367270f 100644
--- a/core/src/mindustry/world/blocks/environment/TreeBlock.java
+++ b/core/src/mindustry/world/blocks/environment/TreeBlock.java
@@ -11,15 +11,12 @@ public class TreeBlock extends Block{
     public TreeBlock(String name){
         super(name);
         solid = true;
-        layer = Layer.power;
         expanded = true;
     }
 
     @Override
-    public void drawBase(Tile tile){}
-
-    @Override
-    public void drawLayer(Tile tile){
+    public void drawBase(Tile tile){
+        Draw.z(Layer.power + 1);
         Draw.rect(region, tile.worldx(), tile.worldy(), Mathf.randomSeed(tile.pos(), 0, 4) * 90);
     }
 }
diff --git a/core/src/mindustry/world/blocks/power/PowerNode.java b/core/src/mindustry/world/blocks/power/PowerNode.java
index d0f65c6737..59fdb42d15 100644
--- a/core/src/mindustry/world/blocks/power/PowerNode.java
+++ b/core/src/mindustry/world/blocks/power/PowerNode.java
@@ -33,7 +33,6 @@ public class PowerNode extends PowerBlock{
     public PowerNode(String name){
         super(name);
         expanded = true;
-        layer = Layer.power;
         configurable = true;
         consumesPower = false;
         outputsPower = false;
@@ -372,9 +371,13 @@ public class PowerNode extends PowerBlock{
         }
 
         @Override
-        public void drawLayer(){
+        public void draw(){
+            super.draw();
+
             if(Core.settings.getInt("lasersopacity") == 0) return;
 
+            Draw.z(Layer.power);
+
             for(int i = 0; i < power.links.size; i++){
                 Tilec link = world.ent(power.links.get(i));
 
diff --git a/core/src/mindustry/world/blocks/production/Drill.java b/core/src/mindustry/world/blocks/production/Drill.java
index 94e9c97040..12cb1fa3f9 100644
--- a/core/src/mindustry/world/blocks/production/Drill.java
+++ b/core/src/mindustry/world/blocks/production/Drill.java
@@ -57,7 +57,6 @@ public class Drill extends Block{
         super(name);
         update = true;
         solid = true;
-        layer = Layer.overlay;
         group = BlockGroup.drills;
         hasLiquids = true;
         liquidCapacity = 5f;
diff --git a/core/src/mindustry/world/blocks/production/Pump.java b/core/src/mindustry/world/blocks/production/Pump.java
index f8a7f0f0f8..625b1c5861 100644
--- a/core/src/mindustry/world/blocks/production/Pump.java
+++ b/core/src/mindustry/world/blocks/production/Pump.java
@@ -3,7 +3,6 @@ package mindustry.world.blocks.production;
 import arc.*;
 import arc.graphics.*;
 import arc.graphics.g2d.*;
-import mindustry.graphics.*;
 import mindustry.type.*;
 import mindustry.ui.*;
 import mindustry.world.*;
@@ -20,7 +19,6 @@ public class Pump extends LiquidBlock{
 
     public Pump(String name){
         super(name);
-        layer = Layer.overlay;
         group = BlockGroup.liquids;
         floating = true;
     }
diff --git a/core/src/mindustry/world/blocks/storage/CoreBlock.java b/core/src/mindustry/world/blocks/storage/CoreBlock.java
index 1b73576797..65d30f114e 100644
--- a/core/src/mindustry/world/blocks/storage/CoreBlock.java
+++ b/core/src/mindustry/world/blocks/storage/CoreBlock.java
@@ -193,8 +193,11 @@ public class CoreBlock extends StorageBlock{
         }
 
         @Override
-        public void drawLayer(){
+        public void draw(){
+            super.draw();
+
             if(heat > 0.001f){
+                Draw.z(Layer.blockOver);
                 Drawf.drawRespawn(this, heat, progress, time, unitType, lastRequested);
             }
         }
diff --git a/core/src/mindustry/world/blocks/units/RepairPoint.java b/core/src/mindustry/world/blocks/units/RepairPoint.java
index e74fcd8b67..93cd7466a9 100644
--- a/core/src/mindustry/world/blocks/units/RepairPoint.java
+++ b/core/src/mindustry/world/blocks/units/RepairPoint.java
@@ -31,8 +31,6 @@ public class RepairPoint extends Block{
         update = true;
         solid = true;
         flags = EnumSet.of(BlockFlag.repair);
-        layer = Layer.turret;
-        layer2 = Layer.power;
         hasPower = true;
         outlineIcon = true;
     }
@@ -75,17 +73,12 @@ public class RepairPoint extends Block{
         @Override
         public void draw(){
             Draw.rect(baseRegion, x, y);
-        }
 
-        @Override
-        public void drawLayer(){
+            Draw.z(Layer.turret);
             Draw.rect(region, x, y, rotation - 90);
-        }
 
-        @Override
-        public void drawLayer2(){
-            if(target != null &&
-            Angles.angleDist(angleTo(target), rotation) < 30f){
+            if(target != null && Angles.angleDist(angleTo(target), rotation) < 30f){
+                Draw.z(Layer.power);
                 float ang = angleTo(target);
                 float len = 5f;
 
diff --git a/gradle.properties b/gradle.properties
index 2a30384661..a70d554204 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,3 +1,3 @@
 org.gradle.daemon=true
 org.gradle.jvmargs=-Xms256m -Xmx1024m
-archash=7c888f92ae770e9dc3b07439c32f64cc67c2a6a6
+archash=ea82048b8e19cab088c1adff13e631599469ad12