diff --git a/color datagen/essence_storage.sh b/color datagen/essence_storage.sh
new file mode 100644
index 000000000..bc868578e
--- /dev/null
+++ b/color datagen/essence_storage.sh	
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+node ./base_with_mask.js block/essence_storage block/essence_storage_mask essence_storage
diff --git a/src/bb/bread_monster.bbmodel b/src/bb/bread_monster.bbmodel
new file mode 100644
index 000000000..8d914607a
--- /dev/null
+++ b/src/bb/bread_monster.bbmodel
@@ -0,0 +1 @@
+{"meta":{"format_version":"4.10","model_format":"modded_entity","box_uv":true},"name":"bread_monster","model_identifier":"","modded_entity_entity_class":"","modded_entity_version":"1.17","modded_entity_flip_y":true,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"timeline_setups":[],"unhandled_root_fields":{},"resolution":{"width":64,"height":32},"elements":[{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-4,0,-5],"to":[4,6,1],"autouv":0,"color":3,"origin":[0,0,0],"faces":{"north":{"uv":[6,6,14,12],"texture":0},"east":{"uv":[0,6,6,12],"texture":0},"south":{"uv":[20,6,28,12],"texture":0},"west":{"uv":[14,6,20,12],"texture":0},"up":{"uv":[14,6,6,0],"texture":0},"down":{"uv":[22,0,14,6],"texture":0}},"type":"cube","uuid":"fa4523a4-8d01-c733-0b32-e6e9110d7e28"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-4,0,-7],"to":[4,3,-3],"autouv":0,"color":4,"inflate":0.1,"origin":[0,-2,-5],"uv_offset":[26,24],"faces":{"north":{"uv":[30,28,38,31],"texture":0},"east":{"uv":[26,28,30,31],"texture":0},"south":{"uv":[42,28,50,31],"texture":0},"west":{"uv":[38,28,42,31],"texture":0},"up":{"uv":[38,28,30,24],"texture":0},"down":{"uv":[46,24,38,28],"texture":0}},"type":"cube","uuid":"88abdc70-43b2-eae1-76fc-438ae188e456"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-4,3,-7],"to":[4,6,-2],"autouv":0,"color":4,"inflate":0.1,"origin":[0,1,-5],"uv_offset":[0,24],"faces":{"north":{"uv":[5,29,13,32],"texture":0},"east":{"uv":[0,29,5,32],"texture":0},"south":{"uv":[18,29,26,32],"texture":0},"west":{"uv":[13,29,18,32],"texture":0},"up":{"uv":[13,29,5,24],"texture":0},"down":{"uv":[21,24,13,29],"texture":0}},"type":"cube","uuid":"4045e434-568f-31c9-42c3-5129a8a4e558"},{"name":"cube","box_uv":true,"rescale":false,"locked":false,"light_emission":0,"render_order":"default","allow_mirror_modeling":true,"from":[-4,0,0.9],"to":[4,6,6.9],"autouv":0,"color":3,"inflate":-0.1,"origin":[0,0,4.9],"uv_offset":[0,12],"faces":{"north":{"uv":[6,18,14,24],"texture":0},"east":{"uv":[0,18,6,24],"texture":0},"south":{"uv":[20,18,28,24],"texture":0},"west":{"uv":[14,18,20,24],"texture":0},"up":{"uv":[14,18,6,12],"texture":0},"down":{"uv":[22,12,14,18],"texture":0}},"type":"cube","uuid":"578bc61b-3bb2-8b53-b3e6-153dd51261bd"}],"outliner":[{"name":"root","origin":[0,0,0],"color":0,"uuid":"5859ff96-7f22-f022-5634-74e9ddbda30f","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":[{"name":"Body","origin":[0,3,0],"color":0,"uuid":"88720699-c6d7-c408-8ec2-c5ddd7227f0b","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["fa4523a4-8d01-c733-0b32-e6e9110d7e28",{"name":"Ljaw","origin":[0,1,-3],"color":0,"uuid":"2232c700-b7a6-4729-b081-78ff34dfbc41","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["88abdc70-43b2-eae1-76fc-438ae188e456"]},{"name":"UJaw","origin":[0,4,-3],"color":0,"uuid":"51b17377-4d34-1e21-ed59-71314a4858c4","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["4045e434-568f-31c9-42c3-5129a8a4e558"]},{"name":"tail","origin":[0,3,1],"color":0,"uuid":"6502f144-0905-ef6d-77a4-4d6f6c832582","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["578bc61b-3bb2-8b53-b3e6-153dd51261bd"]}]}]}],"textures":[{"path":"L:\\overdrive_that_matters\\src\\main\\resources\\assets\\overdrive_that_matters\\textures\\models\\bread_monster\\bread_monster.png","name":"bread_monster.png","folder":"block","namespace":"","id":"0","group":"","width":64,"height":32,"uv_width":64,"uv_height":64,"particle":false,"use_as_default":false,"layers_enabled":false,"sync_to_project":"","render_mode":"default","render_sides":"auto","pbr_channel":"color","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":true,"uuid":"ab77f55b-7cd7-1d48-08ad-38d2efaed5e6","relative_path":"../main/resources/assets/overdrive_that_matters/textures/models/bread_monster/bread_monster.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAAAAXNSR0IArs4c6QAAA8ZJREFUaEPlWU1IVFEUPoM2QzlajX/4VwahErUKy2ihYJEQQdgiIjBd1LJFBNIqWoURLVrmInPnIjdhOdUii8iSNgb+ETg16uBP/mtoxYvvDud1fd4785jR4c10NvPm3fPuu+c7P/c797lII69byg0M+bzppkbgcCaV7M+ghY4xah1cpazpdd3j1No16dIOOmhAu0gGgEGYXf4tlv1+RxodOZpFL+6NRjQj6QFov3XQmPqh9nBetpve9S8pAVjMdYvISHoAVCnAFiMaOt7Op34ERLJQFwH8TNJHQLQU6AqtaYsg0qCjLZgcRZBDfWL+DxXuSSP8QpD/w+NrNLsU/s/iy0yj8iIPoQ5A+BlvXQ5l9c5Fre+nmocdBYxLrvZsPKxAiA+OhSu/Vc4fzzABYBBkHXke+T7ASgoA4P0PQ6s0uSCowCbJ3+2iExW7NkSBFQDrDoKIcSQAfYFaI/hthZa7Z8zQx4UdAKDHhjEAcgrJoEBvNNdNt28MOCsFOnuqhJu/fF6kjKFlc83+iTX6GVSnwM6SdDpT6BG6XAtkY1X8YaXCK1QcB8CdB4cEAGw8Ch+qOGR2Zn0TCDDelxMer3Tbd6ZjAVAmOREBGFBeXWXXEaGUYYKoDQDneWeIznn+eZp7gpRnglwcURtkAERq/A9UGMURxp/8FSZC3BbLEcDhrkqjlKfC3AvoQEh6AMAQ5cMQ9jIORVAYU6YGMA/ASQ8TIjA2O8L9gx1d6CxW7aX66l77e6fdiePQE70AFgaBZ3HNW18kTh/rOx3XC6Dt1XkcAOg4vRUAK1jWOXm84e5XZ0UAAJCN4YVH4vTQhx6fD3IfES0qAObNR9+dBcD9a/tMAJjXo2mR6bHVMNaDQaC4cg8BXdU9nsNxAFw9m2/ggCNeQQ/BUlybrQQQOk7bHpXhqNsCmQQlopDBMQyoimtsFZBaAGT2xwtJNACIpIH+JeXZ47YDoCJB3AckIgIuNpaYEaD6ArWtAIAcgQvIIMhfhhJxqMEAqIzfylNnZQrozgKw7R2YXqdY9nJst/5AMTVeqafTddfFe191PzRwjd9QaJwamlrENY+3P242hkfGqZx6Y3qnncK+4VQYLBAdIER1GMIA8MQy2YmWFiisgluUXaCCgiJ60/OJAoExAQiMh/hffhT/IXxvdO6Z6EijzW/HWJWOCQCMG+nLo9LSYqqpPmYuQl5U25PODQumkaeCEEGiLVD+/sA8g0HGu7ntlp2AaLM7f1wAsGcQggg7eIhDkkNVDlG+vnypxiirnNpWD8VqmN3n/gLOMT4/WuItIgAAAABJRU5ErkJggg=="}],"animations":[{"uuid":"d7bf1cb6-1a54-3b38-f7f3-f6cbfa366f4b","name":"idle","loop":"loop","override":false,"length":1.44,"snapping":25,"selected":false,"anim_time_update":"","blend_weight":"","start_delay":"","loop_delay":"","animators":{"88720699-c6d7-c408-8ec2-c5ddd7227f0b":{"name":"Body","type":"bone","keyframes":[{"channel":"rotation","data_points":[{"x":"0","y":"-2.5","z":"0"}],"uuid":"5a668d16-f5c6-8e39-03af-670568968123","time":0,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"0","y":"3.33","z":"0"}],"uuid":"6f8863cd-46f7-50cb-d5ae-ad498c99f650","time":0.72,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"0","y":"-2.5","z":"0"}],"uuid":"0432cfdd-65d3-56ec-d02e-92f96e3ca66c","time":1.44,"color":-1,"interpolation":"linear"}]},"2232c700-b7a6-4729-b081-78ff34dfbc41":{"name":"Ljaw","type":"bone","keyframes":[{"channel":"rotation","data_points":[{"x":"2.5","y":"0","z":"0"}],"uuid":"69d0bbcc-3b05-3660-2cff-5364785da4c7","time":0,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"5","y":"0","z":"0"}],"uuid":"b146f64a-62d8-3799-587c-08b0388298b8","time":0.72,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"2.5","y":"0","z":"0"}],"uuid":"ce4020e4-c2ce-c65f-d716-b92f8b196ad3","time":1.44,"color":-1,"interpolation":"linear"}]},"51b17377-4d34-1e21-ed59-71314a4858c4":{"name":"UJaw","type":"bone","keyframes":[{"channel":"rotation","data_points":[{"x":"-2.5","y":"0","z":"0"}],"uuid":"a12df9b3-1bb5-f85f-cd29-c1d833a4083b","time":0,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"-5","y":"0","z":"0"}],"uuid":"2caeda6c-3904-7e9a-ac45-278c455a00b8","time":0.72,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"-2.5","y":"0","z":"0"}],"uuid":"7b2a6773-0830-e658-b98f-a24f691d59cf","time":1.44,"color":-1,"interpolation":"linear"}]},"6502f144-0905-ef6d-77a4-4d6f6c832582":{"name":"tail","type":"bone","keyframes":[{"channel":"rotation","data_points":[{"x":"0","y":"5","z":"0"}],"uuid":"de793c8b-db32-6813-ab51-c0da733c8178","time":0,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"0","y":"5","z":"0"}],"uuid":"d8ac39a5-dc82-fc1b-a448-88ffe3fbf45a","time":1.44,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"0","y":"-7.5","z":"0"}],"uuid":"5e01c8c4-d7a6-98c8-d3e7-d99930c8a74e","time":0.72,"color":-1,"interpolation":"linear"}]}}},{"uuid":"6b67c492-b0cc-1672-3b1c-5de6c2d23e77","name":"move","loop":"loop","override":false,"length":1.44,"snapping":25,"selected":false,"anim_time_update":"","blend_weight":"","start_delay":"","loop_delay":"","animators":{"5859ff96-7f22-f022-5634-74e9ddbda30f":{"name":"root","type":"bone","keyframes":[{"channel":"position","data_points":[{"x":"1","y":"0","z":"2"}],"uuid":"8cda900f-d10c-7618-92f5-c1cd6c9ae5c4","time":0,"color":-1,"interpolation":"linear"},{"channel":"position","data_points":[{"x":"0","y":"5","z":"-1"}],"uuid":"b6463f24-0648-6ae0-88b7-e841c01b730d","time":0.12,"color":-1,"interpolation":"linear"},{"channel":"position","data_points":[{"x":"-1","y":"0","z":"-1"}],"uuid":"86a97c35-5faa-d7ef-982b-d7ca7b8c177d","time":0.24,"color":-1,"interpolation":"linear"},{"channel":"position","data_points":[{"x":"-2","y":"0","z":"2"}],"uuid":"2fd43a6d-c710-e031-9732-94d86746502b","time":0.72,"color":-1,"interpolation":"linear"},{"channel":"position","data_points":[{"x":"0","y":"5","z":"-1"}],"uuid":"57b6a1ef-0c55-269c-1f00-afdc0918b181","time":0.84,"color":-1,"interpolation":"linear"},{"channel":"position","data_points":[{"x":"1","y":"0","z":"-1"}],"uuid":"2dd5e925-6cb6-8d81-4f8d-48f65b4ec006","time":0.96,"color":-1,"interpolation":"linear"},{"channel":"position","data_points":[{"x":"1","y":"0","z":"2"}],"uuid":"63c9dfd6-9898-8511-9473-954817e9cf8e","time":1.44,"color":-1,"interpolation":"linear"}]},"88720699-c6d7-c408-8ec2-c5ddd7227f0b":{"name":"Body","type":"bone","keyframes":[{"channel":"rotation","data_points":[{"x":"7.5283207965","y":"4.95711679","z":"0.6542642739"}],"uuid":"1671ea6a-b095-a26b-7304-e5df39c97022","time":0.12,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"0","y":"0","z":"0"}],"uuid":"ca91aedc-1796-55d6-b2b9-9c32f9b90934","time":0,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"7.5283207965","y":"-4.95711679","z":"-0.6542642739"}],"uuid":"5808eaf7-4d3b-f0d2-f00e-51494ef2132c","time":0.84,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"0","y":"0","z":"0"}],"uuid":"0404b1b0-0255-0e90-f33f-ab06776eec70","time":0.24,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"0","y":"0","z":"0"}],"uuid":"4114f4e6-ce10-38c8-4935-20c25720bdf7","time":0.72,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"0","y":"0","z":"0"}],"uuid":"c34130e9-1ac6-c643-efdb-50f8fc31a6fb","time":0.96,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"12.5094402655","y":"1.6523722633","z":"0.2180880913"}],"uuid":"4f1744db-52a0-7b22-e54d-ecd7f53af326","time":0.2,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"15.018880531","y":"-3.3047445267","z":"-0.4361761826"}],"uuid":"4320bd01-5d42-6eae-aa32-d7df4dbf25d3","time":0.92,"color":-1,"interpolation":"linear"}]},"2232c700-b7a6-4729-b081-78ff34dfbc41":{"name":"Ljaw","type":"bone","keyframes":[{"channel":"rotation","data_points":[{"x":"25","y":"0","z":"0"}],"uuid":"cca380c4-1702-bbf4-ec96-384d19a85ea0","time":0.12,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"0","y":"0","z":"0"}],"uuid":"311d826c-e7ad-1d2f-3c1c-64d7982f2300","time":0,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"0","y":"0","z":"0"}],"uuid":"a2222357-8425-ae5f-c8da-bea86f996c53","time":0.32,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"0","y":"0","z":"0"}],"uuid":"ef6ef43f-85be-8663-357d-8c206c2ac565","time":0.72,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"0","y":"0","z":"0"}],"uuid":"1d9ce2b8-a33f-fad7-a9be-735d10333cf9","time":1.04,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"25","y":"0","z":"0"}],"uuid":"9263e391-0ad4-6cfc-2b49-800ae8ed7cf4","time":0.84,"color":-1,"interpolation":"linear"}]},"51b17377-4d34-1e21-ed59-71314a4858c4":{"name":"UJaw","type":"bone","keyframes":[{"channel":"rotation","data_points":[{"x":"-25","y":"0","z":"0"}],"uuid":"15c13b71-07df-b6b2-5591-7093cd4b061e","time":0.12,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"0","y":"0","z":"0"}],"uuid":"c17e2a73-a449-1cb7-d681-cd72470f7221","time":0,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"0","y":"0","z":"0"}],"uuid":"585b7866-7eba-d2bb-88d9-deae443066e3","time":0.32,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"0","y":"0","z":"0"}],"uuid":"0355a961-3968-b49a-b1ce-bf4454ca53c5","time":0.72,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"0","y":"0","z":"0"}],"uuid":"cc959d9d-4c32-f5c4-a0ec-42643ea67784","time":1.04,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"-30","y":"0","z":"0"}],"uuid":"8f37bb68-e309-6fa3-7b6d-a103f9422944","time":0.84,"color":-1,"interpolation":"linear"}]},"6502f144-0905-ef6d-77a4-4d6f6c832582":{"name":"tail","type":"bone","keyframes":[{"channel":"rotation","data_points":[{"x":"-10.0374230459","y":"-4.9238497548","z":"0.870384675"}],"uuid":"b62ac8a4-efef-23b6-71bd-ecbfd6c13431","time":0.12,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"0","y":"0","z":"0"}],"uuid":"303a465c-d181-26bc-48d3-a41ff92f8c26","time":0,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"-12.5462389525","y":"4.8811889482","z":"-1.08482395"}],"uuid":"0e612eb6-23db-4b47-8412-eb2785018bd7","time":0.84,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"0","y":"0","z":"0"}],"uuid":"fed0b380-5b3c-0864-56c1-75b377c7395b","time":0.24,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"0","y":"0","z":"0"}],"uuid":"b5f10a67-6e22-19d1-25b6-ca94d7613fec","time":0.72,"color":-1,"interpolation":"linear"},{"channel":"rotation","data_points":[{"x":"0","y":"0","z":"0"}],"uuid":"9a91e2da-a5a3-8d02-b1a3-82bd0ba78809","time":0.96,"color":-1,"interpolation":"linear"}]}}}]}
\ No newline at end of file
diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt
index ef839348e..37cd0efe8 100644
--- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt
+++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt
@@ -93,6 +93,11 @@ object DataGen {
 		blockStateProvider.simpleBlockM(*blocks)
 	}
 
+	fun decorativeCubeAllCutout(vararg blocks: Block) {
+		blockModelProvider.decorativeCubeAllCutout(*blocks)
+		blockStateProvider.simpleBlockM(*blocks)
+	}
+
 	fun decorativeCubeAll(subdir: String, vararg blocks: Block) {
 		blockModelProvider.decorativeCubeAll(subdir, *blocks)
 		blockStateProvider.simpleBlockM(*blocks)
diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DecorativeData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DecorativeData.kt
index 886c9ce79..44f383f0f 100644
--- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DecorativeData.kt
+++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DecorativeData.kt
@@ -35,6 +35,7 @@ fun addDecorativeData(blockStateProvider: MatteryBlockStateProvider, itemModelPr
 	}
 
 	DataGen.decorativeCubeAll(MBlocks.CARBON_FIBRE_BLOCK)
+	DataGen.decorativeCubeAllCutout(MBlocks.METAL_MESH)
 
 	DataGen.decoratives(MRegistry.TRITANIUM_BLOCK)
 
diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt
index 28e75c3a4..bbf8da1e4 100644
--- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt
+++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt
@@ -23,16 +23,25 @@ fun addBlockModels(provider: MatteryBlockModelProvider) {
 		cubeAll(MBlocks.FLYWHEEL_HOUSING)
 		column(MBlocks.FLYWHEEL_BEARING, "block/flywheel_bearing","block/flywheel_bearing_top")
 		column(MBlocks.FLYWHEEL_SHAFT, "block/flywheel_shaft","block/flywheel_shaft_top")
+		orientable(MBlocks.FLYWHEEL_BATTERY,"block/flywheel_housing","block/flywheel_controller")
 
 		column(MBlocks.GENERATOR_BLOCK, "block/generator_block","block/generator_block_top")
+		cubeAllFramed("modular_frame", "block/modular_frame")
+		cubeAllFramed("heavy_modular_frame", "block/heavy_modular_frame")
+
 		cubeAll(MBlocks.ENERGY_INPUT_INTERFACE)
 		cubeAll(MBlocks.ENERGY_OUTPUT_INTERFACE)
 
-		orientable(MBlocks.MATTER_INPUT_HATCH,"block/hatch","block/matter_input_hatch")
-		orientable(MBlocks.MATTER_OUTPUT_HATCH,"block/hatch","block/matter_output_hatch")
+		cubeAll(MBlocks.TRITANIUM_HULL)
 
-		orientable(MBlocks.ENERGY_INPUT_HATCH,"block/hatch","block/energy_input_hatch")
-		orientable(MBlocks.ENERGY_OUTPUT_HATCH,"block/hatch","block/energy_output_hatch")
+		orientable(MBlocks.MATTER_INPUT_HATCH,"block/tritanium_hull","block/matter_input_hatch")
+		orientable(MBlocks.MATTER_OUTPUT_HATCH,"block/tritanium_hull","block/matter_output_hatch")
+
+		orientable(MBlocks.ENERGY_INPUT_HATCH,"block/tritanium_hull","block/energy_input_hatch")
+		orientable(MBlocks.ENERGY_OUTPUT_HATCH,"block/tritanium_hull","block/energy_output_hatch")
+
+		orientable(MBlocks.ITEM_INPUT_HATCH,"block/tritanium_hull","block/item_input_hatch")
+		orientable(MBlocks.ITEM_OUTPUT_HATCH,"block/tritanium_hull","block/item_output_hatch")
 
 		cable("crude_energy_cable", "block/power_cable_0", powered = true)
 		cable("regular_energy_cable", "block/power_cable_1", powered = true)
diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt
index 480e06e0e..597b94ab4 100644
--- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt
+++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt
@@ -31,7 +31,6 @@ fun addBlockStates(provider: MatteryBlockStateProvider) {
 	provider.ore(MBlocks.TRITANIUM_ORE)
 	provider.ore(MBlocks.TRITANIUM_RAW_BLOCK)
 	provider.block(MBlocks.TRITANIUM_INGOT_BLOCK)
-	provider.block(MBlocks.METAL_MESH)
 
 	provider.ore(MBlocks.DILITHIUM_ORE)
 	provider.ore(MBlocks.DEEPSLATE_DILITHIUM_ORE)
@@ -105,6 +104,7 @@ fun addBlockStates(provider: MatteryBlockStateProvider) {
 
 	provider.block(MBlocks.MATTER_DECOMPOSER.values)
 	provider.block(MBlocks.MATTER_REPLICATOR.values)
+	provider.block(MBlocks.MATTER_ENTANGLER)
 	provider.block(MBlocks.PLATE_PRESS.values)
 	provider.block(MBlocks.TWIN_PLATE_PRESS.values)
 	provider.block(MBlocks.GRAVITATION_STABILIZER)
@@ -335,11 +335,18 @@ fun addBlockStates(provider: MatteryBlockStateProvider) {
 			return@forAllStates generated.toTypedArray()
 		}
 	}
+
+	provider.block(MBlocks.TRITANIUM_HULL)
+
 	provider.block(MBlocks.FLYWHEEL_HOUSING)
 	provider.block(MBlocks.FLYWHEEL_BEARING)
 	provider.block(MBlocks.FLYWHEEL_SHAFT)
+	provider.block(MBlocks.FLYWHEEL_BATTERY)
 
 	provider.block(MBlocks.GENERATOR_BLOCK)
+	provider.block(MBlocks.MODULAR_FRAME)
+	provider.block(MBlocks.HEAVY_MODULAR_FRAME)
+
 	provider.block(MBlocks.ENERGY_INPUT_INTERFACE)
 	provider.block(MBlocks.ENERGY_OUTPUT_INTERFACE)
 
@@ -348,4 +355,8 @@ fun addBlockStates(provider: MatteryBlockStateProvider) {
 
 	provider.block(MBlocks.MATTER_INPUT_HATCH)
 	provider.block(MBlocks.MATTER_OUTPUT_HATCH)
+
+	provider.block(MBlocks.ITEM_INPUT_HATCH)
+	provider.block(MBlocks.ITEM_OUTPUT_HATCH)
+
 }
diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt
index 497866bfb..87984511b 100644
--- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt
+++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt
@@ -192,6 +192,7 @@ fun addItemModels(provider: MatteryItemModelProvider) {
 	provider.coloredWithBaseBlock(MItems.MATTER_BOTTLER, "matter_bottler", "_idle")
 	provider.coloredWithBaseBlock(MItems.MATTER_SCANNER, "matter_scanner", "_idle")
 	provider.coloredWithBaseBlock(MItems.MATTER_REPLICATOR, "matter_replicator", "_idle")
+	provider.block(MItems.MATTER_ENTANGLER, "matter_entangler_idle")
 	provider.coloredWithBaseBlock(MItems.DRIVE_VIEWER, "drive_viewer", "_idle")
 	provider.coloredWithBaseBlock(MItems.MATTER_DECOMPOSER, "matter_decomposer", "_idle")
 	provider.coloredWithBaseBlock(MItems.ENERGY_SERVO, "energy_servo")
@@ -237,6 +238,9 @@ fun addItemModels(provider: MatteryItemModelProvider) {
 	provider.block(MItems.FLYWHEEL_HOUSING)
 	provider.block(MItems.FLYWHEEL_BEARING)
 	provider.block(MItems.FLYWHEEL_SHAFT)
+	provider.block(MItems.FLYWHEEL_BATTERY)
+
+	provider.block(MItems.TRITANIUM_HULL)
 
 	provider.block(MItems.GENERATOR_BLOCK)
 	provider.block(MItems.ENERGY_INPUT_INTERFACE)
@@ -248,6 +252,12 @@ fun addItemModels(provider: MatteryItemModelProvider) {
 	provider.block(MItems.MATTER_INPUT_HATCH)
 	provider.block(MItems.MATTER_OUTPUT_HATCH)
 
+	provider.block(MItems.ITEM_INPUT_HATCH)
+	provider.block(MItems.ITEM_OUTPUT_HATCH)
+
+	provider.block(MItems.MODULAR_FRAME)
+	provider.block(MItems.HEAVY_MODULAR_FRAME)
+
 	MItems.TRITANIUM_ANVIL.values.forEach { provider.blocks(it) }
 
 	for ((color, item) in MItems.CARGO_CRATE_MINECARTS) {
diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt
index 45f548eb3..b60fdaff0 100644
--- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt
+++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt
@@ -549,13 +549,12 @@ private fun blocks(provider: MatteryLanguageProvider) {
 		addBlock(MBlocks.DRIVE_VIEWER.values, "Drive Viewer")
 
 		add(MBlocks.BLACK_HOLE, "Local Anomalous Spacetime Dilation Singular Point")
-		add(MBlocks.BLACK_HOLE_GENERATOR, "Matter Acceleration Power Generator")
 
 		add(MBlocks.FLYWHEEL_SHAFT, "Flywheel Shaft")
 		add(MBlocks.FLYWHEEL_SHAFT, "desc", "Placed between bearings, safe for decoration")
 
 		add(MBlocks.FLYWHEEL_BEARING, "Flywheel Bearing")
-		add(MBlocks.FLYWHEEL_BEARING, "desc", "Replaces center block of housing at bottom and top, safe for decoration")
+		add(MBlocks.FLYWHEEL_BEARING, "desc", "Replaces top and bottom housing blocks in the center, safe for decoration")
 
 		add(MBlocks.FLYWHEEL_BATTERY, "Flywheel Controller")
 		add(MBlocks.FLYWHEEL_BATTERY, "desc", "Multiblock controller, requires housing, bearing, shaft, generator and core material of choice")
@@ -570,7 +569,10 @@ private fun blocks(provider: MatteryLanguageProvider) {
 		add(MBlocks.FLYWHEEL_HOUSING, "desc", "5xNx5 multiblock casing, safe for decoration")
 
 		add(MBlocks.GENERATOR_BLOCK, "Generator Block")
-		add(MBlocks.GENERATOR_BLOCK, "desc", "Part of multiblock, safe for decoration")
+		add(MBlocks.GENERATOR_BLOCK, "desc", "Part of a multiblock, safe for decoration")
+
+		add(MBlocks.MODULAR_FRAME, "Modular Frame")
+		add(MBlocks.HEAVY_MODULAR_FRAME, "Heavy Modular Frame")
 
 		add(MBlocks.ENERGY_INPUT_INTERFACE, "Energy Input Interface")
 		add(MBlocks.ENERGY_OUTPUT_INTERFACE, "Energy Output Interface")
@@ -582,6 +584,9 @@ private fun blocks(provider: MatteryLanguageProvider) {
 		add(MBlocks.ITEM_OUTPUT_HATCH, "Item Output Hatch")
 		add(MBlocks.MATTER_OUTPUT_HATCH, "Matter Output Hatch")
 
+		add(MBlocks.BLACK_HOLE_GENERATOR, "Matter Acceleration Power Generator")
+		add(MBlocks.TRITANIUM_HULL, "Tritanium Hull")
+		add(MBlocks.TRITANIUM_HULL, "desc", "A sturdy part of a multiblock, safe for decoration")
 		add(MBlocks.MATTER_INJECTOR, "Matter Injector")
 		add(MBlocks.ANTIMATTER_INJECTOR, "Antimatter Injector")
 		add(MBlocks.HIGH_ENERGY_PARTICLE_COLLECTOR, "High Energy Particle Collector")
@@ -809,6 +814,8 @@ private fun items(provider: MatteryLanguageProvider) {
 		add(MItems.MIRROR, "desc", "I can clearly see my own reflection in this mirror")
 		add(MItems.REINFORCED_TRITANIUM_PLATE, "Reinforced Tritanium Plate")
 		add(MItems.REINFORCED_TRITANIUM_PLATE, "desc", "An armor plate, reinforced to withstand great kinetic forces")
+		add(MItems.REINFORCED_IRON_PLATE, "Reinforced Iron Plate")
+		add(MItems.REINFORCED_IRON_PLATE, "desc", "A sturdier and more durable Iron Plate")
 		add(MItems.ARMOR_ASSEMBLY, "Armor assembly")
 		add(MItems.CARBON_MESH, "Carbon Mesh")
 
diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt
index 5aa057e8f..d4867917a 100644
--- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt
+++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt
@@ -555,13 +555,12 @@ private fun blocks(provider: MatteryLanguageProvider) {
 		add(MBlocks.INFINITE_WATER_SOURCE, "desc", "Выталкивает воду в соседние блоки автоматически")
 
 		add(MBlocks.BLACK_HOLE, "Локализированная сингулярная точка аномального искажения пространства-времени")
-		add(MBlocks.BLACK_HOLE_GENERATOR, "Генератор энергии ускорением материи")
 
 		add(MBlocks.FLYWHEEL_SHAFT, "Маховый вал")
 		add(MBlocks.FLYWHEEL_SHAFT, "desc", "Устанавливается между подшипников")
 
 		add(MBlocks.FLYWHEEL_BEARING, "Маховый подшипник")
-		add(MBlocks.FLYWHEEL_BEARING, "desc", "Заменяет центральный блок корпуса снизу и сверху")
+		add(MBlocks.FLYWHEEL_BEARING, "desc", "Заменяет центральный блок корпуса сверху и снизу")
 
 		add(MBlocks.FLYWHEEL_BATTERY, "Блок управления маховым хранилищем энергии")
 		add(MBlocks.FLYWHEEL_BATTERY, "desc", "Мультиблок, который требует подшипники, корпус, вал, блоки генераторов и ядро из материала на ваше усмотрение")
@@ -575,8 +574,11 @@ private fun blocks(provider: MatteryLanguageProvider) {
 		add(MBlocks.FLYWHEEL_HOUSING, "Корпус махового хранилища энергии")
 		add(MBlocks.FLYWHEEL_HOUSING, "desc", "Мультиблок структура с размерностью 5xNx5")
 
-		add(MBlocks.GENERATOR_BLOCK, "Generator Block")
-		add(MBlocks.GENERATOR_BLOCK, "desc", "Part of multiblock, safe for decoration")
+		add(MBlocks.GENERATOR_BLOCK, "Генераторный блок")
+		add(MBlocks.GENERATOR_BLOCK, "desc", "Часть мультиблока, безопасна в качестве декорации")
+
+		add(MBlocks.MODULAR_FRAME, "Модульный каркас")
+		add(MBlocks.HEAVY_MODULAR_FRAME, "Тяжёлый модульный каркас")
 
 		add(MBlocks.ENERGY_INPUT_INTERFACE, "Входной энергетический интерфейс")
 		add(MBlocks.ENERGY_OUTPUT_INTERFACE, "Выходной энергетический интерфейс")
@@ -588,6 +590,9 @@ private fun blocks(provider: MatteryLanguageProvider) {
 		add(MBlocks.ITEM_OUTPUT_HATCH, "Выходной предметный клапан")
 		add(MBlocks.MATTER_OUTPUT_HATCH, "Выходной клапан материи")
 
+		add(MBlocks.BLACK_HOLE_GENERATOR, "Генератор энергии ускорением материи")
+		add(MBlocks.TRITANIUM_HULL, "Тритановый корпус")
+		add(MBlocks.TRITANIUM_HULL, "desc", "Прочная часть мультиблока, безопасна в качестве декорации")
 		add(MBlocks.MATTER_INJECTOR, "Инжектор материи")
 		add(MBlocks.ANTIMATTER_INJECTOR, "Инжектор анти-материи")
 		add(MBlocks.HIGH_ENERGY_PARTICLE_COLLECTOR, "Коллектор высокоэнергичных частиц")
@@ -802,6 +807,8 @@ private fun items(provider: MatteryLanguageProvider) {
 		add(MItems.MIRROR, "desc", "Я могу очень отчётливо видеть своё отражение в этом зеркале")
 		add(MItems.REINFORCED_TRITANIUM_PLATE, "Укреплённая тритановая пластина")
 		add(MItems.REINFORCED_TRITANIUM_PLATE, "desc", "Бронированная пластина, усиленная чтобы выдержать большие кинетические силы")
+		add(MItems.REINFORCED_IRON_PLATE, "Укреплённая железная пластина")
+		add(MItems.REINFORCED_IRON_PLATE, "desc", "Более надёжная и прочная железная пластина")
 		add(MItems.ARMOR_ASSEMBLY, "Стройка брони")
 		add(MItems.CARBON_MESH, "Углеродная сетка")
 
diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/DecorativeLoot.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/DecorativeLoot.kt
index 53b969cc1..4fe3eb50b 100644
--- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/DecorativeLoot.kt
+++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/DecorativeLoot.kt
@@ -35,6 +35,8 @@ fun addDecorativeLoot(lootTables: LootTables) {
 	lootTables.dropsSelf(MBlocks.METAL_MESH) { condition(ExplosionCondition.survivesExplosion()) }
 	lootTables.dropsSelf(MBlocks.METAL_RAILING) { condition(ExplosionCondition.survivesExplosion()) }
 
+	lootTables.dropsSelf(MBlocks.METAL_JUNK) { condition(ExplosionCondition.survivesExplosion()) }
+
 	lootTables.dropsSelf(MBlocks.TRITANIUM_RAW_BLOCK) { condition(ExplosionCondition.survivesExplosion()) }
 	lootTables.dropsSelf(MBlocks.TRITANIUM_STRIPED_BLOCK.values) { condition(ExplosionCondition.survivesExplosion()) }
 	lootTables.dropsSelf(MBlocks.TRITANIUM_STRIPED_WALL.values) { condition(ExplosionCondition.survivesExplosion()) }
@@ -48,7 +50,12 @@ fun addDecorativeLoot(lootTables: LootTables) {
 	lootTables.dropsSelf(MBlocks.TRITANIUM_INGOT_BLOCK) { condition(ExplosionCondition.survivesExplosion()) }
 	lootTables.dropsSelf(MBlocks.TRITANIUM_BARS) { condition(ExplosionCondition.survivesExplosion()) }
 
+	lootTables.dropsSelf(MBlocks.TRITANIUM_HULL) { condition(ExplosionCondition.survivesExplosion()) }
+
 	lootTables.dropsSelf(MBlocks.GENERATOR_BLOCK) { condition(ExplosionCondition.survivesExplosion()) }
+	lootTables.dropsSelf(MBlocks.MODULAR_FRAME) { condition(ExplosionCondition.survivesExplosion()) }
+	lootTables.dropsSelf(MBlocks.HEAVY_MODULAR_FRAME) { condition(ExplosionCondition.survivesExplosion()) }
+
 	lootTables.dropsSelf(MBlocks.FLYWHEEL_SHAFT) { condition(ExplosionCondition.survivesExplosion()) }
 	lootTables.dropsSelf(MBlocks.FLYWHEEL_HOUSING) { condition(ExplosionCondition.survivesExplosion()) }
 	lootTables.dropsSelf(MBlocks.FLYWHEEL_BEARING) { condition(ExplosionCondition.survivesExplosion()) }
diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/MachineLoot.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/MachineLoot.kt
index f82416f55..f0b185bf4 100644
--- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/MachineLoot.kt
+++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/MachineLoot.kt
@@ -59,6 +59,7 @@ fun addMachineLoot(lootTables: LootTables) {
 	lootTables.tile(MBlocks.MATTER_BOTTLER.values)
 
 	lootTables.tile(MBlocks.BLACK_HOLE_GENERATOR)
+
 	lootTables.tile(MBlocks.FLYWHEEL_BATTERY)
 
 	lootTables.dropsSelf(listOf(
@@ -69,10 +70,13 @@ fun addMachineLoot(lootTables: LootTables) {
 
 	lootTables.tile(MBlocks.ITEM_INPUT_HATCH)
 	lootTables.tile(MBlocks.ITEM_OUTPUT_HATCH)
+
 	lootTables.tile(MBlocks.ENERGY_INPUT_HATCH)
 	lootTables.tile(MBlocks.ENERGY_OUTPUT_HATCH)
+
 	lootTables.tile(MBlocks.MATTER_INPUT_HATCH)
 	lootTables.tile(MBlocks.MATTER_OUTPUT_HATCH)
+
 	lootTables.tile(MBlocks.ENERGY_INPUT_INTERFACE)
 	lootTables.tile(MBlocks.ENERGY_OUTPUT_INTERFACE)
 }
diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt
index 645325e3a..29d81d18d 100644
--- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt
+++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt
@@ -34,6 +34,22 @@ class MatteryBlockModelProvider(event: GatherDataEvent) : BlockModelProvider(eve
 		}
 	}
 
+	fun cubeAllCutout(vararg blocks: Block) {
+		for (block in blocks) {
+			exec {
+				cubeAll(block.registryName!!.path, modLocation("block/${block.registryName!!.path}")).renderType("cutout_mipped")
+			}
+		}
+	}
+
+	fun cubeAllFramed(modelName: String, textureName: String) {
+		exec {
+			withExistingParent(modelName, modLocation("block/frame_block"))
+				.texture("texture", textureName)
+				.renderType("cutout_mipped")
+		}
+	}
+
 	fun decorativeGlassAll(blocks: Collection<Block>) {
 		for (block in blocks) {
 			exec {
@@ -58,6 +74,14 @@ class MatteryBlockModelProvider(event: GatherDataEvent) : BlockModelProvider(eve
 		}
 	}
 
+	fun decorativeCubeAllCutout(vararg blocks: Block) {
+		for (block in blocks) {
+			exec {
+				cubeAll(block.registryName!!.path, modLocation("block/decorative/${block.registryName!!.path}")).renderType("cutout_mipped")
+			}
+		}
+	}
+
 	fun decorativeCubeAll(subdir: String, vararg blocks: Block) {
 		for (block in blocks) {
 			exec {
diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt
index 5ba4a2ce6..2389b6cb9 100644
--- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt
+++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt
@@ -262,11 +262,19 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) {
 		.build(consumer)
 
 	MatteryRecipe(MItems.REINFORCED_TRITANIUM_PLATE, category = RecipeCategory.MISC)
-			.rowB(MItemTags.CARBON_PLATES)
-			.row(MItemTags.CARBON_PLATES, MItemTags.TRITANIUM_PLATES, MItemTags.CARBON_PLATES)
-			.rowB(MItemTags.CARBON_PLATES)
-			.unlockedBy(MItemTags.TRITANIUM_PLATES)
-			.build(consumer)
+		.rowB(MItemTags.CARBON_PLATES)
+		.row(MItemTags.CARBON_PLATES, MItemTags.TRITANIUM_PLATES, MItemTags.CARBON_PLATES)
+		.rowB(MItemTags.CARBON_PLATES)
+		.unlockedBy(MItemTags.TRITANIUM_PLATES)
+		.build(consumer)
+
+	MatteryRecipe(MItems.REINFORCED_IRON_PLATE, category = RecipeCategory.MISC)
+		.rowB(MItemTags.CARBON_PLATES)
+		.row(MItemTags.CARBON_PLATES, MItemTags.IRON_PLATES, MItemTags.CARBON_PLATES)
+		.rowB(MItemTags.CARBON_PLATES)
+		.unlockedBy(MItemTags.IRON_PLATES)
+		.build(consumer)
+
 	MatteryRecipe(MItems.ARMOR_ASSEMBLY, category = RecipeCategory.MISC)
 		.row(MItemTags.CARBON_PLATES, MItemTags.IRON_PLATES, MItemTags.CARBON_PLATES)
 		.row(MItemTags.IRON_PLATES, Items.DIAMOND, MItemTags.IRON_PLATES)
diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/MultiblockRecipes.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/MultiblockRecipes.kt
index 224df8dea..433218a58 100644
--- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/MultiblockRecipes.kt
+++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/MultiblockRecipes.kt
@@ -116,6 +116,18 @@ fun addMultiblockRecipes(consumer: RecipeOutput) {
 		.row(MItems.ELECTRIC_PARTS, MItems.ELECTROMOTOR, MItems.ELECTRIC_PARTS)
 		.build(consumer)
 
+	MatteryRecipe(MItems.MODULAR_FRAME, count = 4, category = machinesCategory)
+		.row(MItemTags.IRON_PLATES, Tags.Items.INGOTS_IRON, MItemTags.IRON_PLATES)
+		.rowAC(Tags.Items.INGOTS_IRON, Tags.Items.INGOTS_IRON)
+		.row(MItemTags.IRON_PLATES, Tags.Items.INGOTS_IRON, MItemTags.IRON_PLATES)
+		.build(consumer)
+
+	MatteryRecipe(MItems.HEAVY_MODULAR_FRAME, count = 2, category = machinesCategory)
+		.rowB(MItems.REINFORCED_IRON_PLATE)
+		.row(MItems.REINFORCED_IRON_PLATE, MItems.MODULAR_FRAME, MItems.REINFORCED_IRON_PLATE)
+		.rowB(MItems.REINFORCED_IRON_PLATE)
+		.build(consumer)
+
 	// blackhole generator
 	MatteryRecipe(MItems.BLACK_HOLE_GENERATOR, category = machinesCategory)
 		.row(MItemTags.ADVANCED_CIRCUIT, MItems.BLACK_HOLE_SCANNER, MItemTags.ADVANCED_CIRCUIT)
@@ -123,6 +135,12 @@ fun addMultiblockRecipes(consumer: RecipeOutput) {
 		.row(MItems.MATTER_CAPACITOR_PARTS, Tags.Items.GEMS_DIAMOND, MItems.MATTER_CAPACITOR_PARTS)
 		.build(consumer)
 
+	MatteryRecipe(MItems.TRITANIUM_HULL, count = 4, category = machinesCategory)
+		.row(MItemTags.TRITANIUM_PLATES, MItemTags.IRON_PLATES, MItemTags.TRITANIUM_PLATES)
+		.row(MItemTags.IRON_PLATES, MItems.MODULAR_FRAME, MItemTags.IRON_PLATES)
+		.row(MItemTags.TRITANIUM_PLATES, MItemTags.IRON_PLATES, MItemTags.TRITANIUM_PLATES)
+		.build(consumer)
+
 	MatteryRecipe(MItems.MATTER_INJECTOR, category = machinesCategory)
 		.row(MItemTags.ADVANCED_CIRCUIT, MItems.MATTER_TRANSFORM_MATRIX, MItemTags.ADVANCED_CIRCUIT)
 		.row(MItemTags.DILITHIUM_GEMS, MItems.MACHINE_FRAME, MItemTags.DILITHIUM_GEMS)
diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/MineableTags.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/MineableTags.kt
index 48cd4aada..f89bde310 100644
--- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/MineableTags.kt
+++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/MineableTags.kt
@@ -64,10 +64,12 @@ fun addMineableTags(tagsProvider: TagsProvider) {
 		MBlocks.FLUID_TANK,
 		*MBlocks.ANDROID_CHARGER.values.toTypedArray(),
 
+		MBlocks.TRITANIUM_HULL,
 		MBlocks.BLACK_HOLE_GENERATOR,
 		MBlocks.MATTER_INJECTOR,
 		MBlocks.ANTIMATTER_INJECTOR,
 		MBlocks.HIGH_ENERGY_PARTICLE_COLLECTOR,
+
 		MBlocks.ITEM_INPUT_HATCH,
 		MBlocks.ITEM_OUTPUT_HATCH,
 		MBlocks.ENERGY_INPUT_HATCH,
@@ -81,7 +83,10 @@ fun addMineableTags(tagsProvider: TagsProvider) {
 		MBlocks.FLYWHEEL_BEARING,
 		MBlocks.FLYWHEEL_HOUSING,
 		MBlocks.FLYWHEEL_BATTERY,
+
 		MBlocks.GENERATOR_BLOCK,
+		MBlocks.MODULAR_FRAME,
+		MBlocks.HEAVY_MODULAR_FRAME,
 
 		MBlocks.REINFORCED_REDSTONE_LAMP,
 		MBlocks.REINFORCED_REDSTONE_LAMP_INVERTED,
diff --git a/src/main/java/ru/dbotthepony/mc/otm/shapes/BlockShapes.java b/src/main/java/ru/dbotthepony/mc/otm/shapes/BlockShapes.java
index 93243d876..e2e199955 100644
--- a/src/main/java/ru/dbotthepony/mc/otm/shapes/BlockShapes.java
+++ b/src/main/java/ru/dbotthepony/mc/otm/shapes/BlockShapes.java
@@ -99,16 +99,6 @@ public class BlockShapes {
 	public static final BlockShape MATTER_REPLICATOR = new BlockShape(
 		new SimpleCuboid(0.9375d, 0d, 0d, 1d, 0.6875d, 1d),
 		new SimpleCuboid(0d, 0d, 0d, 0.0625d, 0.6875d, 1d),
-		new SimpleCuboid(0d, 0.6875d, 0.0625d, 0.5d, 1d, 0.375d),
-		new SimpleCuboid(0.5d, 0.6875d, 0d, 1d, 1d, 0.375d),
-		new SimpleCuboid(0.1875d, 0.6875d, 0.6875d, 0.9375d, 0.9375d, 0.9375d),
-		new SimpleCuboid(0.1875d, 0.6875d, 0.375d, 0.9375d, 0.9375d, 0.625d),
-		new SimpleCuboid(0.0625d, 0.6875d, 0.4375d, 0.1875d, 0.875d, 0.5625d),
-		new SimpleCuboid(0.0625d, 0.6875d, 0.75d, 0.1875d, 0.875d, 0.875d),
-		new SimpleCuboid(0d, 0.6875d, 0.9375d, 0.03125d, 1d, 1d),
-		new SimpleCuboid(0.96875d, 0.6875d, 0.9375d, 1d, 1d, 1d),
-		new SimpleCuboid(0.96875d, 0.9375d, 0.375d, 1d, 1d, 0.9375d),
-		new SimpleCuboid(0d, 0.9375d, 0.375d, 0.03125d, 1d, 0.9375d),
 		new SimpleCuboid(0.0625d, 0d, 0d, 0.9375d, 0.0625d, 1d),
 		new SimpleCuboid(0.5d, 0.4375d, 0d, 0.9375d, 0.6875d, 0.0625d),
 		new SimpleCuboid(0.0625d, 0.5625d, 0d, 0.5d, 0.6875d, 0.0625d),
@@ -117,7 +107,36 @@ public class BlockShapes {
 		new SimpleCuboid(0.125d, 0.0625d, 0d, 0.875d, 0.125d, 0.0625d),
 		new SimpleCuboid(0.0625d, 0.625d, 0.0625d, 0.9375d, 0.6875d, 0.9375d),
 		new SimpleCuboid(0.0625d, 0.0625d, 0.9375d, 0.9375d, 0.6875d, 1d),
-		new SimpleCuboid(0.1875d, 0.0625d, 0.1875d, 0.8125d, 0.125d, 0.8125d)
+		new SimpleCuboid(0.15625d, 0.0625d, 0.15625d, 0.84375d, 0.125d, 0.84375d),
+		new SimpleCuboid(0.15625d, 0.5625d, 0.15625d, 0.84375d, 0.625d, 0.84375d),
+		new SimpleCuboid(0.5d, 0.6875d, 0d, 1d, 1d, 0.375d),
+		new SimpleCuboid(0d, 0.6875d, 0.0625d, 0.5d, 1d, 0.375d),
+		new SimpleCuboid(0d, 0.6875d, 0.375d, 1d, 1d, 1d),
+		new SimpleCuboid(0.5625d, 0.5d, -0.00625d, 0.9375d, 0.8125d, -0.00625d),
+		new SimpleCuboid(0.1875d, 0.25d, 1.00625d, 0.8125d, 0.3125d, 1.00625d),
+		new SimpleCuboid(0.71875d, 0.128125d, 0.21875d, 0.78125d, 0.128125d, 0.28125d),
+		new SimpleCuboid(0.21875d, 0.128125d, 0.21875d, 0.28125d, 0.128125d, 0.28125d),
+		new SimpleCuboid(0.21875d, 0.128125d, 0.71875d, 0.28125d, 0.128125d, 0.78125d),
+		new SimpleCuboid(0.71875d, 0.128125d, 0.71875d, 0.78125d, 0.128125d, 0.78125d),
+		new SimpleCuboid(0.1875d, 0.375d, 1.00625d, 0.8125d, 0.4375d, 1.00625d)
+	);
+
+	public static final BlockShape MATTER_ENTANGLER = new BlockShape(
+		new SimpleCuboid(0d, 0d, 0d, 1d, 0.3125d, 0.875d),
+		new SimpleCuboid(0d, 0d, 0.875d, 0.125d, 0.3125d, 1d),
+		new SimpleCuboid(0.875d, 0d, 0.875d, 1d, 0.3125d, 1d),
+		new SimpleCuboid(0.1875d, 0.375d, 0.1875d, 0.8125d, 1d, 0.8125d),
+		new SimpleCuboid(0d, 0.4375d, 0.25d, 0.125d, 0.9375d, 0.75d),
+		new SimpleCuboid(0.125d, 0.5d, 0.3125d, 0.1875d, 0.875d, 0.6875d),
+		new SimpleCuboid(0.8125d, 0.5d, 0.3125d, 0.875d, 0.875d, 0.6875d),
+		new SimpleCuboid(0.875d, 0.4375d, 0.25d, 1d, 0.9375d, 0.75d),
+		new SimpleCuboid(0d, 0.3125d, 0.875d, 1d, 0.4375d, 1d),
+		new SimpleCuboid(0d, 0.3125d, 0d, 1d, 0.4375d, 0.125d),
+		new SimpleCuboid(0d, 0.3125d, 0.125d, 0.125d, 0.4375d, 0.875d),
+		new SimpleCuboid(0.875d, 0.3125d, 0.125d, 1d, 0.4375d, 0.875d),
+		new SimpleCuboid(0.125d, 0.0625d, 0.84375d, 0.1875d, 0.25d, 0.96875d),
+		new SimpleCuboid(0.8125d, 0.0625d, 0.84375d, 0.875d, 0.25d, 0.96875d),
+		new SimpleCuboid(0.1875d, 0.0625d, 0.84375d, 0.8125d, 0.25d, 0.96875d)
 	);
 
 	public static final BlockShape MATTER_DECOMPOSER = new BlockShape(
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterEntanglerBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterEntanglerBlock.kt
index 9ba4d4452..9c7d9bbf5 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterEntanglerBlock.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterEntanglerBlock.kt
@@ -1,14 +1,23 @@
 package ru.dbotthepony.mc.otm.block.matter
 
 import net.minecraft.core.BlockPos
+import net.minecraft.world.level.BlockGetter
 import net.minecraft.world.level.Level
+import net.minecraft.world.level.block.Block
 import net.minecraft.world.level.block.EntityBlock
 import net.minecraft.world.level.block.entity.BlockEntity
 import net.minecraft.world.level.block.entity.BlockEntityTicker
 import net.minecraft.world.level.block.entity.BlockEntityType
 import net.minecraft.world.level.block.state.BlockState
+import net.minecraft.world.level.block.state.StateDefinition
+import net.minecraft.world.phys.shapes.CollisionContext
+import net.minecraft.world.phys.shapes.VoxelShape
 import ru.dbotthepony.mc.otm.block.RotatableMatteryBlock
+import ru.dbotthepony.mc.otm.block.entity.WorkerState
 import ru.dbotthepony.mc.otm.block.entity.matter.MatterEntanglerBlockEntity
+import ru.dbotthepony.mc.otm.block.getShapeForEachState
+import ru.dbotthepony.mc.otm.core.get
+import ru.dbotthepony.mc.otm.shapes.BlockShapes
 
 class MatterEntanglerBlock : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBlock {
 	init {
@@ -20,8 +29,25 @@ class MatterEntanglerBlock : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES),
 		return MatterEntanglerBlockEntity(blockPos, blockState)
 	}
 
+	override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
+		super.createBlockStateDefinition(builder)
+		builder.add(WorkerState.WORKER_STATE)
+	}
+
 	override fun <T : BlockEntity?> getTicker(p_153212_: Level, p_153213_: BlockState, p_153214_: BlockEntityType<T>): BlockEntityTicker<T>? {
 		if (p_153212_.isClientSide) return null
 		return BlockEntityTicker { _, _, _, tile -> if (tile is MatterEntanglerBlockEntity) tile.tick() }
 	}
+
+	private val shapes = getShapeForEachState(rotationProperty) { BlockShapes.MATTER_ENTANGLER.rotateFromNorth(it[rotationProperty]).computeShape() }
+
+	@Suppress("override_deprecation")
+	override fun getShape(
+		state: BlockState,
+		blockGetter: BlockGetter,
+		pos: BlockPos,
+		context: CollisionContext
+	): VoxelShape {
+		return shapes[state]!!
+	}
 }
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/BlackHoleGeneratorBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/BlackHoleGeneratorBlock.kt
index 857f013a5..b52cd2e81 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/BlackHoleGeneratorBlock.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/BlackHoleGeneratorBlock.kt
@@ -5,6 +5,7 @@ import net.minecraft.core.SectionPos
 import net.minecraft.world.item.context.BlockPlaceContext
 import net.minecraft.world.level.Level
 import net.minecraft.world.level.block.EntityBlock
+import net.minecraft.world.level.block.SoundType
 import net.minecraft.world.level.block.entity.BlockEntity
 import net.minecraft.world.level.block.entity.BlockEntityTicker
 import net.minecraft.world.level.block.entity.BlockEntityType
@@ -17,7 +18,7 @@ import ru.dbotthepony.mc.otm.core.math.BlockRotationFreedom
 import ru.dbotthepony.mc.otm.core.math.plus
 import ru.dbotthepony.mc.otm.core.math.times
 
-class BlackHoleGeneratorBlock : RotatableMatteryBlock(Properties.of().mapColor(MapColor.METAL).requiresCorrectToolForDrops().destroyTime(2.5f).explosionResistance(160.0f)), EntityBlock {
+class BlackHoleGeneratorBlock : RotatableMatteryBlock(Properties.of().mapColor(MapColor.METAL).sound(SoundType.NETHERITE_BLOCK).requiresCorrectToolForDrops().destroyTime(2.5f).explosionResistance(160.0f)), EntityBlock {
 	override fun newBlockEntity(blockPos: BlockPos, blockState: BlockState): BlockEntity {
 		return BlackHoleGeneratorBlockEntity(blockPos, blockState)
 	}
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/HatchBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/HatchBlock.kt
index 6a9871af4..d0b1cd89c 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/HatchBlock.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/HatchBlock.kt
@@ -5,6 +5,7 @@ import net.minecraft.core.BlockPos
 import net.minecraft.world.item.context.BlockPlaceContext
 import net.minecraft.world.level.Level
 import net.minecraft.world.level.block.EntityBlock
+import net.minecraft.world.level.block.SoundType
 import net.minecraft.world.level.block.entity.BlockEntity
 import net.minecraft.world.level.block.entity.BlockEntityTicker
 import net.minecraft.world.level.block.entity.BlockEntityType
@@ -14,7 +15,8 @@ import ru.dbotthepony.mc.otm.block.RotatableMatteryBlock
 import ru.dbotthepony.mc.otm.block.entity.MatteryBlockEntity
 import ru.dbotthepony.mc.otm.core.TranslatableComponent
 
-class HatchBlock(val factory: BlockEntityType.BlockEntitySupplier<out MatteryBlockEntity>, val needsTicking: Boolean = false) : RotatableMatteryBlock(Properties.of().mapColor(MapColor.METAL).requiresCorrectToolForDrops().destroyTime(2.5f).explosionResistance(80.0f)), EntityBlock {
+class HatchBlock(val factory: BlockEntityType.BlockEntitySupplier<out MatteryBlockEntity>, val needsTicking: Boolean = false) : RotatableMatteryBlock(Properties.of().mapColor(MapColor.METAL).sound(
+	SoundType.VAULT).requiresCorrectToolForDrops().destroyTime(2.5f).explosionResistance(80.0f)), EntityBlock {
 	override fun newBlockEntity(blockPos: BlockPos, blockState: BlockState): BlockEntity {
 		return factory.create(blockPos, blockState)
 	}
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MNames.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MNames.kt
index 12b1734de..5a4218d0a 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MNames.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MNames.kt
@@ -32,6 +32,7 @@ object MNames {
 	const val MATTER_OUTPUT_HATCH = "matter_output_hatch"
 	const val PAINTER = "painter"
 	const val MATTER_ENTANGLER = "matter_entangler"
+	const val TRITANIUM_HULL = "tritanium_hull"
 
 	// blocks
 	const val ANDROID_STATION = "android_station"
@@ -65,7 +66,10 @@ object MNames {
 	const val FLYWHEEL_BEARING = "flywheel_bearing"
 	const val FLYWHEEL_SHAFT = "flywheel_shaft"
 	const val FLYWHEEL_HOUSING = "flywheel_housing"
+
 	const val GENERATOR_BLOCK = "generator_block"
+	const val MODULAR_FRAME = "modular_frame"
+	const val HEAVY_MODULAR_FRAME = "heavy_modular_frame"
 
 	const val STORAGE_CABLE = "storage_cable" // нужен рецепт
 	const val STORAGE_POWER_SUPPLIER = "storage_power_supplier" // нужен рецепт
@@ -200,6 +204,7 @@ object MNames {
 	const val CARBON_MESH = "carbon_mesh"
 	const val ARMOR_ASSEMBLY = "armor_assembly"
 	const val REINFORCED_TRITANIUM_PLATE = "reinforced_tritanium_plate"
+	const val REINFORCED_IRON_PLATE = "reinforced_iron_plate"
 
 	const val QUANTUM_TRANSCEIVER = "quantum_transceiver"
 	const val ELECTROMAGNET = "electromagnet"
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MBlocks.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MBlocks.kt
index 1fd3cd3fd..5df204d9a 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MBlocks.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MBlocks.kt
@@ -188,10 +188,17 @@ object MBlocks {
 		MatteryBlock(BlockBehaviour.Properties.of().sound(SoundType.NETHERITE_BLOCK).explosionResistance(40f).mapColor(MapColor.COLOR_GRAY).destroyTime(2f).requiresCorrectToolForDrops())
 			.addSimpleDescription()
 	}
+
 	val GENERATOR_BLOCK by registry.register(MNames.GENERATOR_BLOCK) {
 		MatteryBlock(BlockBehaviour.Properties.of().sound(SoundType.NETHERITE_BLOCK).explosionResistance(30f).mapColor(MapColor.COLOR_GRAY).destroyTime(2.5f).requiresCorrectToolForDrops())
 			.addSimpleDescription()
 	}
+	val MODULAR_FRAME by registry.register(MNames.MODULAR_FRAME) { TransparentBlock(
+		BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_GRAY).noOcclusion().sound(SoundType.METAL).requiresCorrectToolForDrops().explosionResistance(30f).destroyTime(2f)
+	)}
+	val HEAVY_MODULAR_FRAME by registry.register(MNames.HEAVY_MODULAR_FRAME) { TransparentBlock(
+		BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_GRAY).noOcclusion().sound(SoundType.NETHERITE_BLOCK).requiresCorrectToolForDrops().explosionResistance(60f).destroyTime(2.5f)
+	)}
 
 	val STORAGE_BUS: Block by registry.register(MNames.STORAGE_BUS, ::StorageBusBlock)
 	val STORAGE_IMPORTER: Block by registry.register(MNames.STORAGE_IMPORTER, ::StorageImporterBlock)
@@ -214,9 +221,14 @@ object MBlocks {
 	val DEV_CHEST: DevChestBlock by registry.register(MNames.DEV_CHEST) { DevChestBlock() }
 
 	val BLACK_HOLE_GENERATOR by registry.register(MNames.BLACK_HOLE_GENERATOR) { BlackHoleGeneratorBlock() }
-	val MATTER_INJECTOR by registry.register(MNames.MATTER_INJECTOR) { RotatableMatteryBlock(BlockBehaviour.Properties.of().mapColor(MapColor.METAL).requiresCorrectToolForDrops().destroyTime(2.5f).explosionResistance(160.0f)) }
-	val ANTIMATTER_INJECTOR by registry.register(MNames.ANTIMATTER_INJECTOR) { RotatableMatteryBlock(BlockBehaviour.Properties.of().mapColor(MapColor.METAL).requiresCorrectToolForDrops().destroyTime(2.5f).explosionResistance(160.0f)) }
-	val HIGH_ENERGY_PARTICLE_COLLECTOR by registry.register(MNames.HIGH_ENERGY_PARTICLE_COLLECTOR) { RotatableMatteryBlock(BlockBehaviour.Properties.of().mapColor(MapColor.METAL).requiresCorrectToolForDrops().destroyTime(2.5f).explosionResistance(160.0f)) }
+	val TRITANIUM_HULL by registry.register(MNames.TRITANIUM_HULL) {
+		MatteryBlock(BlockBehaviour.Properties.of().sound(SoundType.VAULT).explosionResistance(80f).mapColor(MapColor.COLOR_LIGHT_BLUE).destroyTime(2.5f).requiresCorrectToolForDrops())
+			.addSimpleDescription()
+	}
+	val MATTER_INJECTOR by registry.register(MNames.MATTER_INJECTOR) { RotatableMatteryBlock(BlockBehaviour.Properties.of().mapColor(MapColor.METAL).sound(SoundType.NETHERITE_BLOCK).requiresCorrectToolForDrops().destroyTime(2.5f).explosionResistance(160.0f)) }
+	val ANTIMATTER_INJECTOR by registry.register(MNames.ANTIMATTER_INJECTOR) { RotatableMatteryBlock(BlockBehaviour.Properties.of().mapColor(MapColor.METAL).sound(SoundType.NETHERITE_BLOCK).requiresCorrectToolForDrops().destroyTime(2.5f).explosionResistance(160.0f)) }
+	val HIGH_ENERGY_PARTICLE_COLLECTOR by registry.register(MNames.HIGH_ENERGY_PARTICLE_COLLECTOR) { RotatableMatteryBlock(BlockBehaviour.Properties.of().mapColor(MapColor.METAL).sound(SoundType.NETHERITE_BLOCK).requiresCorrectToolForDrops().destroyTime(2.5f).explosionResistance(160.0f)) }
+
 	val ITEM_INPUT_HATCH by registry.register(MNames.ITEM_INPUT_HATCH) { HatchBlock(ItemHatchBlockEntity::input) }
 	val ITEM_OUTPUT_HATCH by registry.register(MNames.ITEM_OUTPUT_HATCH) { HatchBlock(ItemHatchBlockEntity::output) }
 	val ENERGY_INPUT_HATCH by registry.register(MNames.ENERGY_INPUT_HATCH) { HatchBlock(EnergyHatchBlockEntity::input, true) }
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MCreativeTabs.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MCreativeTabs.kt
index 5e979ea79..0b762632e 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MCreativeTabs.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MCreativeTabs.kt
@@ -184,7 +184,10 @@ private fun addMainCreativeTabItems(consumer: CreativeModeTab.Output) {
 		accept(MItems.FLYWHEEL_BEARING)
 
 		accept(MItems.GENERATOR_BLOCK)
+		accept(MItems.MODULAR_FRAME)
+		accept(MItems.HEAVY_MODULAR_FRAME)
 
+		accept(MItems.TRITANIUM_HULL)
 		accept(MItems.BLACK_HOLE_GENERATOR)
 		accept(MItems.MATTER_INJECTOR)
 		accept(MItems.ANTIMATTER_INJECTOR)
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MItems.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MItems.kt
index 4719fdd34..b200f0536 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MItems.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MItems.kt
@@ -153,14 +153,18 @@ object MItems {
 	val FLYWHEEL_HOUSING by registry.register(MNames.FLYWHEEL_HOUSING) { BlockItem(MBlocks.FLYWHEEL_HOUSING, DEFAULT_PROPERTIES) }
 
 	val GENERATOR_BLOCK  by registry.register(MNames.GENERATOR_BLOCK)  { BlockItem(MBlocks.GENERATOR_BLOCK, DEFAULT_PROPERTIES) }
+	val MODULAR_FRAME by registry.register(MNames.MODULAR_FRAME) { BlockItem(MBlocks.MODULAR_FRAME, DEFAULT_PROPERTIES) }
+	val HEAVY_MODULAR_FRAME by registry.register(MNames.HEAVY_MODULAR_FRAME) { BlockItem(MBlocks.HEAVY_MODULAR_FRAME, DEFAULT_PROPERTIES) }
 
 	val DEV_CHEST: BlockItem by registry.register(MNames.DEV_CHEST) { BlockItem(MBlocks.DEV_CHEST, DEFAULT_PROPERTIES) }
 	val PAINTER: BlockItem by registry.register(MNames.PAINTER) { BlockItem(MBlocks.PAINTER, DEFAULT_PROPERTIES) }
 	val MATTER_ENTANGLER: BlockItem by registry.register(MNames.MATTER_ENTANGLER) { BlockItem(MBlocks.MATTER_ENTANGLER, DEFAULT_PROPERTIES) }
 
+	val TRITANIUM_HULL by registry.register(MNames.TRITANIUM_HULL) { BlockItem(MBlocks.TRITANIUM_HULL, DEFAULT_PROPERTIES) }
 	val BLACK_HOLE_GENERATOR by registry.register(MNames.BLACK_HOLE_GENERATOR) { BlockItem(MBlocks.BLACK_HOLE_GENERATOR, DEFAULT_PROPERTIES) }
 	val MATTER_INJECTOR by registry.register(MNames.MATTER_INJECTOR) { BlockItem(MBlocks.MATTER_INJECTOR, DEFAULT_PROPERTIES) }
 	val ANTIMATTER_INJECTOR by registry.register(MNames.ANTIMATTER_INJECTOR) { BlockItem(MBlocks.ANTIMATTER_INJECTOR, DEFAULT_PROPERTIES) }
+
 	val HIGH_ENERGY_PARTICLE_COLLECTOR by registry.register(MNames.HIGH_ENERGY_PARTICLE_COLLECTOR) { BlockItem(MBlocks.HIGH_ENERGY_PARTICLE_COLLECTOR, DEFAULT_PROPERTIES) }
 	val ITEM_INPUT_HATCH by registry.register(MNames.ITEM_INPUT_HATCH) { BlockItem(MBlocks.ITEM_INPUT_HATCH, DEFAULT_PROPERTIES) }
 	val ITEM_OUTPUT_HATCH by registry.register(MNames.ITEM_OUTPUT_HATCH) { BlockItem(MBlocks.ITEM_OUTPUT_HATCH, DEFAULT_PROPERTIES) }
@@ -535,6 +539,9 @@ object MItems {
 	val REINFORCED_TRITANIUM_PLATE: Item by registry.register(MNames.REINFORCED_TRITANIUM_PLATE) { MatteryItem(
 		DEFAULT_PROPERTIES
 	).addSimpleDescription() }
+	val REINFORCED_IRON_PLATE: Item by registry.register(MNames.REINFORCED_IRON_PLATE) { MatteryItem(
+		DEFAULT_PROPERTIES
+	).addSimpleDescription() }
 
 	val QUANTUM_TRANSCEIVER: Item by registry.register(MNames.QUANTUM_TRANSCEIVER) { Item(DEFAULT_PROPERTIES) }
 	val ELECTROMAGNET: Item by registry.register(MNames.ELECTROMAGNET) { Item(DEFAULT_PROPERTIES) }
@@ -608,6 +615,7 @@ object MItems {
 		MItems::CARBON_MESH,
 		MItems::ARMOR_ASSEMBLY,
 		MItems::REINFORCED_TRITANIUM_PLATE,
+		MItems::REINFORCED_IRON_PLATE,
 	)
 
 	val CARGO_CRATE_MINECARTS = registry.coloredWithBase(MNames.MINECART_CARGO_CRATE, ::MinecartCargoCrateItem)
diff --git a/src/main/resources/assets/overdrive_that_matters/models/block/frame_block.json b/src/main/resources/assets/overdrive_that_matters/models/block/frame_block.json
new file mode 100644
index 000000000..5aea3aa89
--- /dev/null
+++ b/src/main/resources/assets/overdrive_that_matters/models/block/frame_block.json
@@ -0,0 +1,33 @@
+{
+	"parent": "block/block",
+	"textures": {
+		"particle": "#texture"
+	},
+	"elements": [
+		{
+			"from": [0, 0, 0],
+			"to": [16, 16, 16],
+			"faces": {
+				"north": {"uv": [0, 0, 16, 16], "texture": "#texture", "cullface": "north"},
+				"east": {"uv": [0, 0, 16, 16], "texture": "#texture", "cullface": "east"},
+				"south": {"uv": [0, 0, 16, 16], "texture": "#texture", "cullface": "south"},
+				"west": {"uv": [0, 0, 16, 16], "texture": "#texture", "cullface": "west"},
+				"up": {"uv": [0, 0, 16, 16], "texture": "#texture", "cullface": "up"},
+				"down": {"uv": [0, 0, 16, 16], "texture": "#texture", "cullface": "down"}
+			}
+		},
+		{
+			"from": [15.99995, 15.99995, 15.99995],
+			"to": [0.00005, 0.00005, 0.00005],
+			"rotation": {"angle": 0, "axis": "y", "origin": [16, 16, 16]},
+			"faces": {
+				"north": {"uv": [0, 0, 16, 16], "texture": "#texture", "cullface": "south"},
+				"east": {"uv": [0, 0, 16, 16], "texture": "#texture", "cullface": "west"},
+				"south": {"uv": [0, 0, 16, 16], "texture": "#texture", "cullface": "north"},
+				"west": {"uv": [0, 0, 16, 16], "texture": "#texture", "cullface": "east"},
+				"up": {"uv": [0, 0, 16, 16], "texture": "#texture", "cullface": "down"},
+				"down": {"uv": [0, 0, 16, 16], "texture": "#texture", "cullface": "up"}
+			}
+		}
+	]
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/overdrive_that_matters/models/block/matter_entangler.json b/src/main/resources/assets/overdrive_that_matters/models/block/matter_entangler.json
new file mode 100644
index 000000000..286480624
--- /dev/null
+++ b/src/main/resources/assets/overdrive_that_matters/models/block/matter_entangler.json
@@ -0,0 +1,453 @@
+{
+	"credit": "Made with Blockbench",
+	"parent": "block/block",
+	"render_type": "cutout",
+	"texture_size": [32, 32],
+	"textures": {
+		"0": "overdrive_that_matters:block/machine_base",
+		"1": "overdrive_that_matters:block/matter_entangler",
+		"2": "overdrive_that_matters:block/matter_entangler_details",
+		"particle": "overdrive_that_matters:block/matter_entangler",
+		"status": "overdrive_that_matters:block/screen_status_ok"
+	},
+	"elements": [
+		{
+			"name": "base",
+			"from": [0, 0, 0],
+			"to": [16, 5, 14],
+			"faces": {
+				"north": {"uv": [8, 9, 16, 11.5], "texture": "#1"},
+				"east": {"uv": [1, 1, 8, 3.5], "texture": "#1"},
+				"south": {"uv": [0, 8.5, 8, 11], "texture": "#1"},
+				"west": {"uv": [0, 1, 7, 3.5], "texture": "#1"},
+				"up": {"uv": [8, 0, 16, 8], "texture": "#1"},
+				"down": {"uv": [0, 2, 16, 16], "texture": "#0"}
+			}
+		},
+		{
+			"name": "base",
+			"from": [0, 0, 14],
+			"to": [2, 5, 16],
+			"rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 14]},
+			"faces": {
+				"east": {"uv": [0, 1, 1, 3.5], "texture": "#1"},
+				"south": {"uv": [0, 8.5, 1, 11], "texture": "#1"},
+				"west": {"uv": [7, 1, 8, 3.5], "texture": "#1"},
+				"down": {"uv": [0, 0, 2, 2], "texture": "#0"}
+			}
+		},
+		{
+			"name": "base",
+			"from": [14, 0, 14],
+			"to": [16, 5, 16],
+			"rotation": {"angle": 0, "axis": "y", "origin": [14, 0, 14]},
+			"faces": {
+				"east": {"uv": [0, 1, 1, 3.5], "texture": "#1"},
+				"south": {"uv": [0, 8.5, 1, 11], "texture": "#1"},
+				"west": {"uv": [7, 1, 8, 3.5], "texture": "#1"},
+				"down": {"uv": [14, 0, 16, 2], "texture": "#0"}
+			}
+		},
+		{
+			"name": "chamber",
+			"from": [3, 6, 3],
+			"to": [13, 16, 13],
+			"rotation": {"angle": 0, "axis": "y", "origin": [7, 6, 7]},
+			"faces": {
+				"north": {"uv": [0, 5, 5, 10], "texture": "#2"},
+				"east": {"uv": [5, 5, 10, 10], "texture": "#2"},
+				"south": {"uv": [5, 0, 10, 5], "texture": "#2"},
+				"west": {"uv": [5, 5, 10, 10], "texture": "#2"},
+				"up": {"uv": [0, 0, 5, 5], "rotation": 180, "texture": "#2"},
+				"down": {"uv": [10, 0, 15, 5], "texture": "#2"}
+			}
+		},
+		{
+			"name": "chamber",
+			"from": [13, 6, 3],
+			"to": [3, 16, 13],
+			"rotation": {"angle": 0, "axis": "y", "origin": [17, 6, 7]},
+			"faces": {
+				"north": {"uv": [0, 5, 5, 10], "texture": "#2"},
+				"east": {"uv": [5, 5, 10, 10], "texture": "#2"},
+				"south": {"uv": [5, 0, 10, 5], "texture": "#2"},
+				"west": {"uv": [5, 5, 10, 10], "texture": "#2"},
+				"up": {"uv": [0, 0, 5, 5], "rotation": 180, "texture": "#2"},
+				"down": {"uv": [10, 0, 15, 5], "texture": "#2"}
+			}
+		},
+		{
+			"name": "base",
+			"from": [0, 7, 4],
+			"to": [2, 15, 12],
+			"rotation": {"angle": 0, "axis": "y", "origin": [0, 5, 4]},
+			"faces": {
+				"north": {"uv": [4, 4.5, 8, 5.5], "rotation": 90, "texture": "#1"},
+				"east": {"uv": [0, 3.5, 4, 7.5], "texture": "#1"},
+				"south": {"uv": [4, 4.5, 8, 5.5], "rotation": 90, "texture": "#1"},
+				"west": {"uv": [0, 3.5, 4, 7.5], "texture": "#1"},
+				"up": {"uv": [4, 3.5, 8, 4.5], "rotation": 90, "texture": "#1"}
+			}
+		},
+		{
+			"from": [2, 8, 5],
+			"to": [3, 14, 11],
+			"rotation": {"angle": 0, "axis": "y", "origin": [1, 5, 4]},
+			"faces": {
+				"north": {"uv": [0.5, 4, 1, 7], "texture": "#1"},
+				"south": {"uv": [0.5, 4, 1, 7], "texture": "#1"},
+				"up": {"uv": [0.5, 4, 1, 7], "texture": "#1"},
+				"down": {"uv": [0.5, 4, 1, 7], "texture": "#1"}
+			}
+		},
+		{
+			"from": [13, 8, 5],
+			"to": [14, 14, 11],
+			"rotation": {"angle": 0, "axis": "y", "origin": [12, 4, 4]},
+			"faces": {
+				"north": {"uv": [0.5, 4, 1, 7], "texture": "#1"},
+				"south": {"uv": [0.5, 4, 1, 7], "texture": "#1"},
+				"up": {"uv": [0.5, 4, 1, 7], "texture": "#1"},
+				"down": {"uv": [0.5, 4, 1, 7], "texture": "#1"}
+			}
+		},
+		{
+			"name": "base",
+			"from": [14, 7, 4],
+			"to": [16, 15, 12],
+			"rotation": {"angle": 0, "axis": "y", "origin": [14, 5, 4]},
+			"faces": {
+				"north": {"uv": [4, 4.5, 8, 5.5], "rotation": 90, "texture": "#1"},
+				"east": {"uv": [0, 3.5, 4, 7.5], "texture": "#1"},
+				"south": {"uv": [4, 4.5, 8, 5.5], "rotation": 90, "texture": "#1"},
+				"west": {"uv": [0, 3.5, 4, 7.5], "texture": "#1"},
+				"up": {"uv": [4, 3.5, 8, 4.5], "rotation": 90, "texture": "#1"}
+			}
+		},
+		{
+			"name": "base",
+			"from": [0, 5, 14],
+			"to": [16, 7, 16],
+			"rotation": {"angle": 0, "axis": "y", "origin": [0, 5, 14]},
+			"faces": {
+				"north": {"uv": [8, 7, 16, 8], "texture": "#1"},
+				"east": {"uv": [0, 0, 1, 1], "texture": "#1"},
+				"south": {"uv": [0, 7.5, 8, 8.5], "texture": "#1"},
+				"west": {"uv": [7, 0, 8, 1], "texture": "#1"},
+				"up": {"uv": [8, 7, 16, 8], "texture": "#1"},
+				"down": {"uv": [0, 7.5, 8, 8.5], "rotation": 180, "texture": "#1"}
+			}
+		},
+		{
+			"name": "base",
+			"from": [0, 5, 0],
+			"to": [16, 7, 2],
+			"rotation": {"angle": 0, "axis": "y", "origin": [0, 5, 0]},
+			"faces": {
+				"north": {"uv": [8, 8, 16, 9], "texture": "#1"},
+				"east": {"uv": [7, 0, 8, 1], "texture": "#1"},
+				"south": {"uv": [8, 7, 16, 8], "texture": "#1"},
+				"west": {"uv": [0, 0, 1, 1], "texture": "#1"},
+				"up": {"uv": [8, 0, 16, 1], "texture": "#1"}
+			}
+		},
+		{
+			"name": "base",
+			"from": [0, 5, 2],
+			"to": [2, 7, 14],
+			"rotation": {"angle": 0, "axis": "y", "origin": [0, 5, 2]},
+			"faces": {
+				"east": {"uv": [9, 7, 15, 8], "texture": "#1"},
+				"west": {"uv": [1, 0, 7, 1], "texture": "#1"},
+				"up": {"uv": [8, 1, 9, 7], "texture": "#1"}
+			}
+		},
+		{
+			"name": "base",
+			"from": [14, 5, 2],
+			"to": [16, 7, 14],
+			"rotation": {"angle": 0, "axis": "y", "origin": [14, 5, 2]},
+			"faces": {
+				"east": {"uv": [1, 0, 7, 1], "texture": "#1"},
+				"west": {"uv": [9, 7, 15, 8], "texture": "#1"},
+				"up": {"uv": [15, 1, 16, 7], "texture": "#1"}
+			}
+		},
+		{
+			"name": "keyboard",
+			"from": [2, 7, -1],
+			"to": [10, 8, 2],
+			"rotation": {"angle": -45, "axis": "x", "origin": [6, 7.5, 0.5]},
+			"faces": {
+				"north": {"uv": [5, 15.5, 9, 16], "texture": "#2"},
+				"east": {"uv": [4.5, 14, 5, 15.5], "rotation": 90, "texture": "#2"},
+				"south": {"uv": [5, 13.5, 9, 14], "texture": "#2"},
+				"west": {"uv": [9, 14, 9.5, 15.5], "rotation": 90, "texture": "#2"},
+				"up": {"uv": [5, 14, 9, 15.5], "rotation": 180, "texture": "#2"},
+				"down": {"uv": [0, 14.5, 4, 16], "texture": "#2"}
+			}
+		},
+		{
+			"name": "screen",
+			"from": [11, 6, 0],
+			"to": [15, 10, 1],
+			"rotation": {"angle": 45, "axis": "x", "origin": [12.5, 7.5, 0.5]},
+			"faces": {
+				"north": {"uv": [0, 10, 2, 12], "rotation": 180, "texture": "#2"},
+				"east": {"uv": [2, 12, 4, 12.5], "rotation": 90, "texture": "#2"},
+				"south": {"uv": [2, 12.5, 4, 14.5], "texture": "#2"},
+				"west": {"uv": [2, 12, 4, 12.5], "rotation": 270, "texture": "#2"},
+				"up": {"uv": [2, 12, 4, 12.5], "texture": "#2"},
+				"down": {"uv": [2, 12, 4, 12.5], "rotation": 180, "texture": "#2"}
+			}
+		},
+		{
+			"name": "screen_glow",
+			"from": [11, 6.05, -0.05],
+			"to": [15, 10.05, -0.05],
+			"rotation": {"angle": 45, "axis": "x", "origin": [12.5, 7.5, 0.5]},
+			"faces": {
+				"north": {"uv": [0, 0, 16, 16], "texture": "#status", "neoforge_data": {"block_light": 15}}
+			}
+		},
+		{
+			"name": "shield",
+			"from": [0, 8, 12],
+			"to": [16, 14, 14],
+			"rotation": {"angle": 0, "axis": "y", "origin": [0, 11, 12]},
+			"faces": {
+				"east": {"uv": [8, 11.5, 7, 14.5], "texture": "#1"},
+				"south": {"uv": [8, 11.5, 16, 14.5], "texture": "#1"},
+				"west": {"uv": [7, 11.5, 8, 14.5], "texture": "#1"}
+			}
+		},
+		{
+			"name": "shield",
+			"from": [0, 14, 12],
+			"to": [16, 8, 14],
+			"rotation": {"angle": 0, "axis": "y", "origin": [0, 17, 12]},
+			"faces": {
+				"east": {"uv": [8, 11.5, 7, 14.5], "texture": "#1"},
+				"south": {"uv": [8, 11.5, 16, 14.5], "texture": "#1"},
+				"west": {"uv": [7, 11.5, 8, 14.5], "texture": "#1"}
+			}
+		},
+		{
+			"name": "lower",
+			"from": [6.91342, 11.3806, 9.3],
+			"to": [8.91342, 15.3806, 10],
+			"rotation": {"angle": 22.5, "axis": "z", "origin": [8, 12, 9.675]},
+			"faces": {
+				"north": {"uv": [13.5, 6.5, 15.5, 7.5], "rotation": 90, "texture": "#2"},
+				"east": {"uv": [13.5, 7.5, 15.5, 8], "rotation": 270, "texture": "#2"},
+				"south": {"uv": [13.5, 6.5, 15.5, 7.5], "rotation": 270, "texture": "#2"},
+				"west": {"uv": [13.5, 6, 15.5, 6.5], "rotation": 270, "texture": "#2"},
+				"up": {"uv": [13, 6.5, 13.5, 7.5], "rotation": 270, "texture": "#2"},
+				"down": {"uv": [13, 6.5, 13.5, 7.5], "rotation": 270, "texture": "#2"}
+			}
+		},
+		{
+			"name": "lower",
+			"from": [6.24264, 8.58579, 5.9],
+			"to": [10.24264, 10.58579, 6.6],
+			"rotation": {"angle": -45, "axis": "z", "origin": [10, 9, 6.275]},
+			"faces": {
+				"north": {"uv": [13.5, 6.5, 15.5, 7.5], "texture": "#2"},
+				"east": {"uv": [13, 6.5, 13.5, 7.5], "texture": "#2"},
+				"south": {"uv": [13.5, 6.5, 15.5, 7.5], "texture": "#2"},
+				"west": {"uv": [13, 6.5, 13.5, 7.5], "texture": "#2"},
+				"up": {"uv": [13.5, 6, 15.5, 6.5], "texture": "#2"},
+				"down": {"uv": [13.5, 7.5, 15.5, 8], "texture": "#2"}
+			}
+		},
+		{
+			"name": "joint",
+			"from": [2, 11, 8.7],
+			"to": [4, 13, 10.7],
+			"rotation": {"angle": -22.5, "axis": "z", "origin": [3, 12, 9.675]},
+			"faces": {
+				"north": {"uv": [11, 5, 12, 6], "texture": "#2"},
+				"east": {"uv": [10, 5, 11, 6], "texture": "#2"},
+				"south": {"uv": [11, 5, 12, 6], "texture": "#2"},
+				"west": {"uv": [10, 5, 11, 6], "texture": "#2"},
+				"up": {"uv": [10, 5, 11, 6], "texture": "#2"},
+				"down": {"uv": [10, 5, 11, 6], "texture": "#2"}
+			}
+		},
+		{
+			"name": "joint",
+			"from": [12, 12, 5.3],
+			"to": [14, 14, 7.3],
+			"rotation": {"angle": 45, "axis": "z", "origin": [13, 13, 6.275]},
+			"faces": {
+				"north": {"uv": [11, 5, 12, 6], "texture": "#2"},
+				"east": {"uv": [10, 5, 11, 6], "texture": "#2"},
+				"south": {"uv": [11, 5, 12, 6], "texture": "#2"},
+				"west": {"uv": [10, 5, 11, 6], "texture": "#2"},
+				"up": {"uv": [10, 5, 11, 6], "texture": "#2"},
+				"down": {"uv": [10, 5, 11, 6], "texture": "#2"}
+			}
+		},
+		{
+			"name": "upper",
+			"from": [3, 12, 9.2],
+			"to": [8, 14, 10.2],
+			"rotation": {"angle": -22.5, "axis": "z", "origin": [3, 12, 9.675]},
+			"faces": {
+				"north": {"uv": [10.5, 6.5, 13, 7.5], "texture": "#2"},
+				"east": {"uv": [10, 6.5, 10.5, 7.5], "texture": "#2"},
+				"south": {"uv": [10.5, 6.5, 13, 7.5], "texture": "#2"},
+				"west": {"uv": [10, 6.5, 10.5, 7.5], "texture": "#2"},
+				"up": {"uv": [10.5, 6, 13, 6.5], "texture": "#2"},
+				"down": {"uv": [10.5, 7.5, 13, 8], "texture": "#2"}
+			}
+		},
+		{
+			"name": "upper",
+			"from": [11, 8, 5.8],
+			"to": [13, 13, 6.8],
+			"rotation": {"angle": -22.5, "axis": "z", "origin": [13, 13, 6.275]},
+			"faces": {
+				"north": {"uv": [10.5, 6.5, 13, 7.5], "rotation": 90, "texture": "#2"},
+				"east": {"uv": [10.5, 7.5, 13, 8], "rotation": 270, "texture": "#2"},
+				"south": {"uv": [10.5, 6.5, 13, 7.5], "rotation": 270, "texture": "#2"},
+				"west": {"uv": [10.5, 6, 13, 6.5], "rotation": 270, "texture": "#2"},
+				"up": {"uv": [10, 6.5, 10.5, 7.5], "rotation": 270, "texture": "#2"},
+				"down": {"uv": [10, 6.5, 10.5, 7.5], "rotation": 270, "texture": "#2"}
+			}
+		},
+		{
+			"name": "upper",
+			"from": [6.77817, 6.87868, 5.8],
+			"to": [8.77817, 11.87868, 6.8],
+			"rotation": {"angle": -22.5, "axis": "z", "origin": [8, 12, 6.275]},
+			"faces": {
+				"north": {"uv": [10.5, 6.5, 13, 7.5], "rotation": 90, "texture": "#2"},
+				"east": {"uv": [10.5, 7.5, 13, 8], "rotation": 270, "texture": "#2"},
+				"south": {"uv": [10.5, 6.5, 13, 7.5], "rotation": 270, "texture": "#2"},
+				"west": {"uv": [10.5, 6, 13, 6.5], "rotation": 270, "texture": "#2"},
+				"up": {"uv": [10, 6.5, 10.5, 7.5], "rotation": 270, "texture": "#2"},
+				"down": {"uv": [10, 6.5, 10.5, 7.5], "rotation": 270, "texture": "#2"}
+			}
+		},
+		{
+			"name": "upper",
+			"from": [6.68925, 14.22628, 9.2],
+			"to": [11.68925, 16.22628, 10.2],
+			"rotation": {"angle": -45, "axis": "z", "origin": [7, 15, 9.675]},
+			"faces": {
+				"north": {"uv": [10.5, 6.5, 13, 7.5], "texture": "#2"},
+				"east": {"uv": [10, 6.5, 10.5, 7.5], "texture": "#2"},
+				"south": {"uv": [10.5, 6.5, 13, 7.5], "texture": "#2"},
+				"west": {"uv": [10, 6.5, 10.5, 7.5], "texture": "#2"},
+				"up": {"uv": [10.5, 6, 13, 6.5], "texture": "#2"},
+				"down": {"uv": [10.5, 7.5, 13, 8], "texture": "#2"}
+			}
+		},
+		{
+			"name": "pointer",
+			"from": [9.22628, 10.55339, 9.3],
+			"to": [10.22628, 11.55339, 10.1],
+			"rotation": {"angle": 0, "axis": "y", "origin": [10, 12, 9.675]},
+			"faces": {
+				"north": {"uv": [10.5, 8.5, 11, 9], "texture": "#2"},
+				"east": {"uv": [10, 8.5, 10.4, 9], "texture": "#2"},
+				"south": {"uv": [10.5, 8.5, 11, 9], "texture": "#2"},
+				"west": {"uv": [10, 8.5, 10.4, 9], "texture": "#2"},
+				"up": {"uv": [10.5, 8, 11, 8.4], "texture": "#2"}
+			}
+		},
+		{
+			"name": "pointer_glow",
+			"from": [9.22628, 9.55339, 9.3],
+			"to": [10.22628, 10.55339, 10.1],
+			"rotation": {"angle": 0, "axis": "y", "origin": [10, 12, 9.675]},
+			"faces": {
+				"north": {"uv": [10.5, 9, 11, 9.5], "texture": "#2", "neoforge_data": {"block_light": 15}},
+				"east": {"uv": [10, 9, 10.4, 9.5], "texture": "#2", "neoforge_data": {"block_light": 15}},
+				"south": {"uv": [10.5, 9, 11, 9.5], "texture": "#2", "neoforge_data": {"block_light": 15}},
+				"west": {"uv": [10, 9, 10.4, 9.5], "texture": "#2", "neoforge_data": {"block_light": 15}},
+				"down": {"uv": [10.5, 9.5, 11, 9.9], "texture": "#2", "neoforge_data": {"block_light": 15}}
+			}
+		},
+		{
+			"name": "pointer",
+			"from": [7.77817, 5.87868, 5.9],
+			"to": [8.77817, 6.87868, 6.7],
+			"rotation": {"angle": -22.5, "axis": "z", "origin": [8, 12, 6.275]},
+			"faces": {
+				"north": {"uv": [10.5, 8.5, 11, 9], "texture": "#2"},
+				"east": {"uv": [10, 8.5, 10.4, 9], "texture": "#2"},
+				"south": {"uv": [10.5, 8.5, 11, 9], "texture": "#2"},
+				"west": {"uv": [10, 8.5, 10.4, 9], "texture": "#2"},
+				"up": {"uv": [10.5, 8, 11, 8.4], "texture": "#2"}
+			}
+		},
+		{
+			"name": "pointer_glow",
+			"from": [7.77817, 4.87868, 5.9],
+			"to": [8.77817, 5.87868, 6.7],
+			"rotation": {"angle": -22.5, "axis": "z", "origin": [8, 12, 6.275]},
+			"faces": {
+				"north": {"uv": [10.5, 9, 11, 9.5], "texture": "#2", "neoforge_data": {"block_light": 15}},
+				"east": {"uv": [10, 9, 10.4, 9.5], "texture": "#2", "neoforge_data": {"block_light": 15}},
+				"south": {"uv": [10.5, 9, 11, 9.5], "texture": "#2", "neoforge_data": {"block_light": 15}},
+				"west": {"uv": [10, 9, 10.4, 9.5], "texture": "#2", "neoforge_data": {"block_light": 15}},
+				"down": {"uv": [10.5, 9.5, 11, 9.9], "texture": "#2", "neoforge_data": {"block_light": 15}}
+			}
+		},
+		{
+			"name": "canister",
+			"from": [2, 1, 13.5],
+			"to": [3, 4, 15.5],
+			"rotation": {"angle": 0, "axis": "y", "origin": [2, 2, 13.5]},
+			"faces": {
+				"south": {"uv": [4.5, 12, 5, 13.5], "texture": "#2"},
+				"up": {"uv": [4.5, 11, 5, 12], "texture": "#2"},
+				"down": {"uv": [4.5, 12, 5, 11], "texture": "#2"}
+			}
+		},
+		{
+			"name": "canister",
+			"from": [13, 1, 13.5],
+			"to": [14, 4, 15.5],
+			"rotation": {"angle": 0, "axis": "y", "origin": [13, 2, 13.5]},
+			"faces": {
+				"south": {"uv": [10, 12, 10.5, 13.5], "texture": "#2"},
+				"up": {"uv": [10, 11, 10.5, 12], "texture": "#2"},
+				"down": {"uv": [10, 12, 10.5, 11], "texture": "#2"}
+			}
+		},
+		{
+			"name": "canister_glow",
+			"from": [3, 1, 13.5],
+			"to": [13, 4, 15.5],
+			"rotation": {"angle": 0, "axis": "y", "origin": [2, 2, 13.5]},
+			"faces": {
+				"south": {"uv": [5, 12, 10, 13.5], "texture": "#2", "neoforge_data": {"block_light": 15}},
+				"up": {"uv": [5, 11, 10, 12], "texture": "#2", "neoforge_data": {"block_light": 15}},
+				"down": {"uv": [5, 13.5, 10, 12.5], "texture": "#2", "neoforge_data": {"block_light": 15}}
+			}
+		},
+		{
+			"name": "wires",
+			"from": [15, 9, 11],
+			"to": [15, 17, 17],
+			"rotation": {"angle": 22.5, "axis": "y", "origin": [15, 13, 12]},
+			"faces": {
+				"east": {"uv": [10.5, 12, 13.5, 16], "texture": "#2"},
+				"west": {"uv": [13.5, 12, 10.5, 16], "texture": "#2"}
+			}
+		},
+		{
+			"name": "wires",
+			"from": [15, 10, 11],
+			"to": [15, 18, 17],
+			"rotation": {"angle": 0, "axis": "y", "origin": [15, 14, 12]},
+			"faces": {
+				"east": {"uv": [11, 8, 14, 12], "texture": "#2"},
+				"west": {"uv": [14, 8, 11, 12], "texture": "#2"}
+			}
+		}
+	]
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/overdrive_that_matters/models/block/matter_entangler_error.json b/src/main/resources/assets/overdrive_that_matters/models/block/matter_entangler_error.json
new file mode 100644
index 000000000..fd3dc6733
--- /dev/null
+++ b/src/main/resources/assets/overdrive_that_matters/models/block/matter_entangler_error.json
@@ -0,0 +1,7 @@
+{
+	"parent": "overdrive_that_matters:block/matter_entangler,
+	"texture_size": [32, 32],
+	"textures": {
+		"status": "overdrive_that_matters:block/screen_status_error"
+	}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/overdrive_that_matters/models/block/matter_entangler_idle.json b/src/main/resources/assets/overdrive_that_matters/models/block/matter_entangler_idle.json
new file mode 100644
index 000000000..4ea3ac6cf
--- /dev/null
+++ b/src/main/resources/assets/overdrive_that_matters/models/block/matter_entangler_idle.json
@@ -0,0 +1,7 @@
+{
+	"parent": "overdrive_that_matters:block/matter_entangler",
+	"texture_size": [32, 32],
+	"textures": {
+		"status": "overdrive_that_matters:block/screen_status_offline"
+	}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/overdrive_that_matters/models/block/matter_entangler_working.json b/src/main/resources/assets/overdrive_that_matters/models/block/matter_entangler_working.json
new file mode 100644
index 000000000..1db035e11
--- /dev/null
+++ b/src/main/resources/assets/overdrive_that_matters/models/block/matter_entangler_working.json
@@ -0,0 +1,7 @@
+{
+	"parent": "overdrive_that_matters:block/matter_entangler",
+	"texture_size": [32, 32],
+	"textures": {
+		"status": "overdrive_that_matters:block/screen_status_ok"
+	}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/overdrive_that_matters/models/block/matter_replicator.json b/src/main/resources/assets/overdrive_that_matters/models/block/matter_replicator.json
index 6aa7e9bd7..5dfb18b6e 100644
--- a/src/main/resources/assets/overdrive_that_matters/models/block/matter_replicator.json
+++ b/src/main/resources/assets/overdrive_that_matters/models/block/matter_replicator.json
@@ -292,9 +292,9 @@
 		},
 		{
 			"name": "monitor",
-			"from": [9, 8, 0],
-			"to": [15, 13, 0],
-			"rotation": {"angle": 0, "axis": "y", "origin": [13, 11, -2]},
+			"from": [9, 8, -0.1],
+			"to": [15, 13, -0.1],
+			"rotation": {"angle": 0, "axis": "y", "origin": [13, 11, -2.05]},
 			"faces": {
 				"north": {"uv": [0, 3.2, 9.56, 11.14], "texture": "#status", "neoforge_data": {"block_light": 15}}
 			}
diff --git a/src/main/resources/assets/overdrive_that_matters/models/block/metal_mesh.json b/src/main/resources/assets/overdrive_that_matters/models/block/metal_mesh.json
deleted file mode 100644
index b18a8d695..000000000
--- a/src/main/resources/assets/overdrive_that_matters/models/block/metal_mesh.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "parent": "minecraft:block/cube_all",
-  "render_type": "cutout",
-  "textures": {
-    "all": "overdrive_that_matters:block/decorative/metal_mesh"
-  }
-}
\ No newline at end of file
diff --git a/src/main/resources/assets/overdrive_that_matters/models/bread_monster.animation.json b/src/main/resources/assets/overdrive_that_matters/models/bread_monster.animation.json
new file mode 100644
index 000000000..5f5ed8ce2
--- /dev/null
+++ b/src/main/resources/assets/overdrive_that_matters/models/bread_monster.animation.json
@@ -0,0 +1,98 @@
+{
+	"format_version": "1.8.0",
+	"animations": {
+		"idle": {
+			"loop": true,
+			"animation_length": 1.44,
+			"bones": {
+				"Body": {
+					"rotation": {
+						"0.0": [0, -2.5, 0],
+						"0.72": [0, 3.33, 0],
+						"1.44": [0, -2.5, 0]
+					}
+				},
+				"Ljaw": {
+					"rotation": {
+						"0.0": [2.5, 0, 0],
+						"0.72": [5, 0, 0],
+						"1.44": [2.5, 0, 0]
+					}
+				},
+				"UJaw": {
+					"rotation": {
+						"0.0": [-2.5, 0, 0],
+						"0.72": [-5, 0, 0],
+						"1.44": [-2.5, 0, 0]
+					}
+				},
+				"tail": {
+					"rotation": {
+						"0.0": [0, 5, 0],
+						"0.72": [0, -7.5, 0],
+						"1.44": [0, 5, 0]
+					}
+				}
+			}
+		},
+		"move": {
+			"loop": true,
+			"animation_length": 1.44,
+			"bones": {
+				"root": {
+					"position": {
+						"0.0": [1, 0, 2],
+						"0.12": [0, 5, -1],
+						"0.24": [-1, 0, -1],
+						"0.72": [-2, 0, 2],
+						"0.84": [0, 5, -1],
+						"0.96": [1, 0, -1],
+						"1.44": [1, 0, 2]
+					}
+				},
+				"Body": {
+					"rotation": {
+						"0.0": [0, 0, 0],
+						"0.12": [7.52832, 4.95712, 0.65426],
+						"0.2": [12.50944, 1.65237, 0.21809],
+						"0.24": [0, 0, 0],
+						"0.72": [0, 0, 0],
+						"0.84": [7.52832, -4.95712, -0.65426],
+						"0.92": [15.01888, -3.30474, -0.43618],
+						"0.96": [0, 0, 0]
+					}
+				},
+				"Ljaw": {
+					"rotation": {
+						"0.0": [0, 0, 0],
+						"0.12": [25, 0, 0],
+						"0.32": [0, 0, 0],
+						"0.72": [0, 0, 0],
+						"0.84": [25, 0, 0],
+						"1.04": [0, 0, 0]
+					}
+				},
+				"UJaw": {
+					"rotation": {
+						"0.0": [0, 0, 0],
+						"0.12": [-25, 0, 0],
+						"0.32": [0, 0, 0],
+						"0.72": [0, 0, 0],
+						"0.84": [-30, 0, 0],
+						"1.04": [0, 0, 0]
+					}
+				},
+				"tail": {
+					"rotation": {
+						"0.0": [0, 0, 0],
+						"0.12": [-10.03742, -4.92385, 0.87038],
+						"0.24": [0, 0, 0],
+						"0.72": [0, 0, 0],
+						"0.84": [-12.54624, 4.88119, -1.08482],
+						"0.96": [0, 0, 0]
+					}
+				}
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/overdrive_that_matters/models/bread_monster.java b/src/main/resources/assets/overdrive_that_matters/models/bread_monster.java
new file mode 100644
index 000000000..5926248d2
--- /dev/null
+++ b/src/main/resources/assets/overdrive_that_matters/models/bread_monster.java
@@ -0,0 +1,49 @@
+// Made with Blockbench 4.12.3
+// Exported for Minecraft version 1.17 or later with Mojang mappings
+// Paste this class into your mod and generate all required imports
+
+
+public class bread_monster<T extends Entity> extends EntityModel<T> {
+	// This layer location should be baked with EntityRendererProvider.Context in the entity renderer and passed into this model's constructor
+	public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(new ResourceLocation("modid", "bread_monster"), "main");
+	private final ModelPart root;
+	private final ModelPart Body;
+	private final ModelPart Ljaw;
+	private final ModelPart UJaw;
+	private final ModelPart tail;
+
+	public bread_monster(ModelPart root) {
+		this.root = root.getChild("root");
+		this.Body = this.root.getChild("Body");
+		this.Ljaw = this.Body.getChild("Ljaw");
+		this.UJaw = this.Body.getChild("UJaw");
+		this.tail = this.Body.getChild("tail");
+	}
+
+	public static LayerDefinition createBodyLayer() {
+		MeshDefinition meshdefinition = new MeshDefinition();
+		PartDefinition partdefinition = meshdefinition.getRoot();
+
+		PartDefinition root = partdefinition.addOrReplaceChild("root", CubeListBuilder.create(), PartPose.offset(0.0F, 24.0F, 0.0F));
+
+		PartDefinition Body = root.addOrReplaceChild("Body", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -3.0F, -5.0F, 8.0F, 6.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, -3.0F, 0.0F));
+
+		PartDefinition Ljaw = Body.addOrReplaceChild("Ljaw", CubeListBuilder.create().texOffs(26, 24).addBox(-4.0F, -2.0F, -4.0F, 8.0F, 3.0F, 4.0F, new CubeDeformation(0.1F)), PartPose.offset(0.0F, 2.0F, -3.0F));
+
+		PartDefinition UJaw = Body.addOrReplaceChild("UJaw", CubeListBuilder.create().texOffs(0, 24).addBox(-4.0F, -2.0F, -4.0F, 8.0F, 3.0F, 5.0F, new CubeDeformation(0.1F)), PartPose.offset(0.0F, -1.0F, -3.0F));
+
+		PartDefinition tail = Body.addOrReplaceChild("tail", CubeListBuilder.create().texOffs(0, 12).addBox(-4.0F, -3.0F, -0.1F, 8.0F, 6.0F, 6.0F, new CubeDeformation(-0.1F)), PartPose.offset(0.0F, 0.0F, 1.0F));
+
+		return LayerDefinition.create(meshdefinition, 64, 32);
+	}
+
+	@Override
+	public void setupAnim(Entity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) {
+
+	}
+
+	@Override
+	public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) {
+		root.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha);
+	}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/energy_input_hatch.png b/src/main/resources/assets/overdrive_that_matters/textures/block/energy_input_hatch.png
index 1c015fbd7..c147872cc 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/energy_input_hatch.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/energy_input_hatch.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/energy_output_hatch.png b/src/main/resources/assets/overdrive_that_matters/textures/block/energy_output_hatch.png
index e728d0122..1f1389d5a 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/energy_output_hatch.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/energy_output_hatch.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/black.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/black.png
index 0c76753ce..4a94e8d1e 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/black.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/black.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/blue.png
index 90cc6fa92..9d8f5d85f 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/blue.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/blue.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/brown.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/brown.png
index 3bfde41bf..1a84c2a7c 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/brown.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/brown.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/cyan.png
index a0b70f47e..ce0e954ac 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/cyan.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/cyan.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/gray.png
index 5f74405fa..71bdbe0e9 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/gray.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/gray.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/green.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/green.png
index 103cac4e8..d82f7e417 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/green.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/green.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/light_blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/light_blue.png
index cbf458e94..88f705651 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/light_blue.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/light_blue.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/light_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/light_gray.png
index c93546b87..5f89f4943 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/light_gray.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/light_gray.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/lime.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/lime.png
index be42ad657..3cab89547 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/lime.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/lime.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/magenta.png
index 3809cf5cb..e68bc862a 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/magenta.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/magenta.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/orange.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/orange.png
index 54c5b75fd..1bbc690c6 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/orange.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/orange.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/pink.png
index 1e0559b7f..404d83077 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/pink.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/pink.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/purple.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/purple.png
index d278320e7..7981639ce 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/purple.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/purple.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/red.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/red.png
index f6fa2764b..1c92eb73c 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/red.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/red.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/white.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/white.png
index 79a8ae9ec..e89d0cf81 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/white.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/white.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/yellow.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/yellow.png
index 66005cda3..d6a428eb5 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/yellow.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/yellow.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/generator_block.png b/src/main/resources/assets/overdrive_that_matters/textures/block/generator_block.png
index 61e59a0ff..73e183d31 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/generator_block.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/generator_block.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/generator_block_top.png b/src/main/resources/assets/overdrive_that_matters/textures/block/generator_block_top.png
index 2c2eac5d8..6ffc2ea24 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/generator_block_top.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/generator_block_top.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/heavy_modular_frame.png b/src/main/resources/assets/overdrive_that_matters/textures/block/heavy_modular_frame.png
new file mode 100644
index 000000000..1f5295b47
Binary files /dev/null and b/src/main/resources/assets/overdrive_that_matters/textures/block/heavy_modular_frame.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/item_input_hatch.png b/src/main/resources/assets/overdrive_that_matters/textures/block/item_input_hatch.png
new file mode 100644
index 000000000..daac2e093
Binary files /dev/null and b/src/main/resources/assets/overdrive_that_matters/textures/block/item_input_hatch.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/item_output_hatch.png b/src/main/resources/assets/overdrive_that_matters/textures/block/item_output_hatch.png
new file mode 100644
index 000000000..89007c06e
Binary files /dev/null and b/src/main/resources/assets/overdrive_that_matters/textures/block/item_output_hatch.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_entangler.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_entangler.png
new file mode 100644
index 000000000..8ee48bedc
Binary files /dev/null and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_entangler.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_entangler_details.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_entangler_details.png
new file mode 100644
index 000000000..f4bea2d0b
Binary files /dev/null and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_entangler_details.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_input_hatch.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_input_hatch.png
index 97995e7d5..7e554035f 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_input_hatch.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_input_hatch.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_output_hatch.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_output_hatch.png
index 8ef02fe56..8cbad6b5e 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_output_hatch.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_output_hatch.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor.png
index 854ab7991..4ce929ff8 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator.png
index d61b67e7e..526989bde 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/black.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/black.png
index dab140444..41159397d 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/black.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/black.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/blue.png
index 500bd685a..e81f09860 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/blue.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/blue.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/brown.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/brown.png
index 80f9f49fe..81819efd1 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/brown.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/brown.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/cyan.png
index 1430faf97..5db7745c3 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/cyan.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/cyan.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/gray.png
index 8abb7268c..2423c7938 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/gray.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/gray.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/green.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/green.png
index 6a9dbbaff..f974ee543 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/green.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/green.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/light_blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/light_blue.png
index 519ea8f83..2e5df5204 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/light_blue.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/light_blue.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/light_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/light_gray.png
index 0eda21fc4..ac441bb24 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/light_gray.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/light_gray.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/lime.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/lime.png
index d0e4f92cf..e636b7269 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/lime.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/lime.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/magenta.png
index 500baf8e6..dffac3307 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/magenta.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/magenta.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/orange.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/orange.png
index 48112da37..648e672fc 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/orange.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/orange.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/pink.png
index 9fa3116c1..048c8e692 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/pink.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/pink.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/purple.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/purple.png
index 8c0e6dbe7..490bd5180 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/purple.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/purple.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/red.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/red.png
index f2a5ae0d7..839c8f7b9 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/red.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/red.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/white.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/white.png
index b790bb1c4..2b44db7d8 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/white.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/white.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/yellow.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/yellow.png
index 77a982df8..691a12a03 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/yellow.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/yellow.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/black.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/black.png
index 8a13286ce..2e6512a82 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/black.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/black.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/blue.png
index 3f57c7eb6..0b4ea350c 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/blue.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/blue.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/brown.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/brown.png
index f8684a49c..03852a70c 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/brown.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/brown.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/cyan.png
index 8141db55f..ee72b8db4 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/cyan.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/cyan.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/gray.png
index 6eaa71dad..ddc1d6f54 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/gray.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/gray.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/green.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/green.png
index a8515a148..dab6bf0a5 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/green.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/green.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/light_blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/light_blue.png
index 2ea39b209..b29682f02 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/light_blue.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/light_blue.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/light_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/light_gray.png
index fe5d60f7b..8bb5e58a4 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/light_gray.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/light_gray.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/lime.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/lime.png
index f3ed301a4..73fdb7caf 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/lime.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/lime.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/magenta.png
index 6390ac3e0..eddbd1394 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/magenta.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/magenta.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/orange.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/orange.png
index 6df3cc25d..74ad16a7e 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/orange.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/orange.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/pink.png
index aad9c3d98..a739951ff 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/pink.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/pink.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/purple.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/purple.png
index e4519fc21..3e16d8e3a 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/purple.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/purple.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/red.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/red.png
index 94a18f26c..dfaecd7ef 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/red.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/red.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/white.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/white.png
index 375b38a50..228f301fe 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/white.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/white.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/yellow.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/yellow.png
index 9b8627132..5ad2c01eb 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/yellow.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/yellow.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/modular_frame.png b/src/main/resources/assets/overdrive_that_matters/textures/block/modular_frame.png
new file mode 100644
index 000000000..8709ae471
Binary files /dev/null and b/src/main/resources/assets/overdrive_that_matters/textures/block/modular_frame.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/screen_status_error.png b/src/main/resources/assets/overdrive_that_matters/textures/block/screen_status_error.png
new file mode 100644
index 000000000..803bef643
Binary files /dev/null and b/src/main/resources/assets/overdrive_that_matters/textures/block/screen_status_error.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/screen_status_offline.png b/src/main/resources/assets/overdrive_that_matters/textures/block/screen_status_offline.png
new file mode 100644
index 000000000..9e2ad804b
Binary files /dev/null and b/src/main/resources/assets/overdrive_that_matters/textures/block/screen_status_offline.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/screen_status_ok.png b/src/main/resources/assets/overdrive_that_matters/textures/block/screen_status_ok.png
new file mode 100644
index 000000000..c90482ef5
Binary files /dev/null and b/src/main/resources/assets/overdrive_that_matters/textures/block/screen_status_ok.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/hatch.png b/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_hull.png
similarity index 70%
rename from src/main/resources/assets/overdrive_that_matters/textures/block/hatch.png
rename to src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_hull.png
index 9b4e71a71..4b23a01ab 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/block/hatch.png and b/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_hull.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/item/component/reinforced_iron_plate.png b/src/main/resources/assets/overdrive_that_matters/textures/item/component/reinforced_iron_plate.png
new file mode 100644
index 000000000..928758f1b
Binary files /dev/null and b/src/main/resources/assets/overdrive_that_matters/textures/item/component/reinforced_iron_plate.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/item/component/reinforced_tritanium_plate.png b/src/main/resources/assets/overdrive_that_matters/textures/item/component/reinforced_tritanium_plate.png
index 5e41fa125..165517bc5 100644
Binary files a/src/main/resources/assets/overdrive_that_matters/textures/item/component/reinforced_tritanium_plate.png and b/src/main/resources/assets/overdrive_that_matters/textures/item/component/reinforced_tritanium_plate.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/item/salvaged_android_arm.png b/src/main/resources/assets/overdrive_that_matters/textures/item/salvaged_android_arm.png
new file mode 100644
index 000000000..4735392b4
Binary files /dev/null and b/src/main/resources/assets/overdrive_that_matters/textures/item/salvaged_android_arm.png differ
diff --git a/src/main/resources/assets/overdrive_that_matters/textures/models/bread_monster/bread_monster.png b/src/main/resources/assets/overdrive_that_matters/textures/models/bread_monster/bread_monster.png
new file mode 100644
index 000000000..ba0c4d3c5
Binary files /dev/null and b/src/main/resources/assets/overdrive_that_matters/textures/models/bread_monster/bread_monster.png differ