diff --git a/README.md b/README.md
index 67b003f..409e4e8 100644
--- a/README.md
+++ b/README.md
@@ -79,4 +79,8 @@ Unsorted
 
 [Krastorio 2 Assets](https://mods.factorio.com/mod/Krastorio2Assets)
 
-- Basic radar
\ No newline at end of file
+- Basic radar
+
+[Icons8](https://icons8.com)
+
+- [Mute icon](https://icons8.com/icon/9414/no-audio)
\ No newline at end of file
diff --git a/lignumis/graphics/icons/active-noise-cancelling.png b/lignumis/graphics/icons/active-noise-cancelling.png
new file mode 100644
index 0000000..c9e44c2
Binary files /dev/null and b/lignumis/graphics/icons/active-noise-cancelling.png differ
diff --git a/lignumis/graphics/technology/active-noise-cancelling.png b/lignumis/graphics/technology/active-noise-cancelling.png
new file mode 100644
index 0000000..b19a9c8
Binary files /dev/null and b/lignumis/graphics/technology/active-noise-cancelling.png differ
diff --git a/lignumis/locale/en/strings.cfg b/lignumis/locale/en/strings.cfg
index 2b65731..5186de0 100644
--- a/lignumis/locale/en/strings.cfg
+++ b/lignumis/locale/en/strings.cfg
@@ -32,6 +32,7 @@ wood-transport-belt=Wood transport belt
 wood-underground-belt=Wood underground belt
 wood-splitter=Wood splitter
 basic-radar=Basic radar
+active-noise-cancelling-tower=Active noise cancelling tower
 
 [equipment-name]
 basic-portable-generator-equipment-gold=Basic portable generator equipment (gold)
@@ -78,6 +79,7 @@ plastic-from-dead-cupriavidus-necator=Bioplastic
 low-density-structure-gold=Low density structure
 rocket-fuel-from-wood-pulp-and-peat=Bio-rocket-fuel
 nutrients-from-wood-pulp=Nutrients from wood pulp
+active-noise-cancelling=Active noise cancelling
 
 [recipe-description]
 moist-stromatolite-remnant-desiccation-without-steam=Used for balancing the production of steam.
@@ -105,9 +107,11 @@ automation=Electric automation
 tree-seeding=Basic agriculture
 basic-repair-pack=Basic repair pack
 basic-radar=Basic radar
+active-noise-cancelling=Active noise cancelling
 
 [technology-description]
 tree-seeding=[entity=burner-agricultural-tower] allows planting seeds into seedable soil. Planted seeds grow into trees that can be harvested.\n[entity=tree-plant] can grow on grass and dirt. [entity=gold-stromatolite] can grow on [tile=natural-gold-soil].
+active-noise-cancelling=Helps handling noise.
 
 [modifier-description]
 basic-gun-turret-attack-bonus=Basic gun turret damage: +__1__
@@ -127,5 +131,11 @@ lignumis-inserter-progression=Enable progressive inserter recipes
 lignumis-belt-progression=Yellow belts will require wood belts to craft.
 lignumis-inserter-progression=Yellow electric inserter will require burner inserter to craft.
 
+[surface-property-name]
+pollution-type=Pollution type
+
+[surface-property-unit]
+pollution-type=__plural_for_parameter__1__{1=Pollution|2=Spores|3=Noise|rest=-}__
+
 [lignumis]
 start-new-game=Lignumis is meant to be played in a fresh game as it extends the early game before Nauvis.
\ No newline at end of file
diff --git a/lignumis/prototypes/content/active-noise-cancelling-tower.lua b/lignumis/prototypes/content/active-noise-cancelling-tower.lua
new file mode 100644
index 0000000..63cebfd
--- /dev/null
+++ b/lignumis/prototypes/content/active-noise-cancelling-tower.lua
@@ -0,0 +1,154 @@
+local hit_effects = require("__base__.prototypes.entity.hit-effects")
+local sounds = require("__base__.prototypes.entity.sounds")
+local item_sounds = require("__base__.prototypes.item_sounds")
+local item_tints = require("__base__.prototypes.item-tints")
+
+data:extend({
+    {
+        type = "recipe-category",
+        name = "active-noise-cancelling"
+    },
+    {
+        type = "assembling-machine",
+        name = "active-noise-cancelling-tower",
+        icons = {
+            { icon = "__base__/graphics/icons/programmable-speaker.png" },
+            { icon = "__lignumis__/graphics/icons/active-noise-cancelling.png", scale = 0.25, shift = { 8, 8 } }
+        },
+        icon_draw_specification = { shift = { 0, -1 }, scale = 0.75, scale_for_many = 0.5 },
+        flags = { "placeable-neutral", "player-creation" },
+        minable = { mining_time = 0.1, result = "active-noise-cancelling-tower" },
+        fast_replaceable_group = "active-noise-cancelling-tower",
+        max_health = 150,
+        crafting_speed = 1,
+        crafting_categories = { "active-noise-cancelling" },
+        energy_usage = "6MW",
+        energy_source = {
+            type = "electric",
+            usage_priority = "secondary-input",
+            emissions_per_minute = { noise = -1000 },
+            drain = "0W"
+        },
+        fixed_recipe = "active-noise-cancelling",
+        is_military_target = true,
+        show_recipe_icon_on_map = true,
+        map_color = { r = 112, g = 61, b = 150, a = 1 },
+        corpse = "programmable-speaker-remnants",
+        dying_explosion = "programmable-speaker-explosion",
+        collision_box = { { -0.3, -0.3 }, { 0.3, 0.3 } },
+        selection_box = { { -0.5, -0.5 }, { 0.5, 0.5 } },
+        damaged_trigger_effect = hit_effects.entity({ { -0.2, -2 }, { 0.2, 0.2 } }),
+        drawing_box_vertical_extension = 2,
+        open_sound = sounds.machine_open,
+        close_sound = sounds.machine_close,
+        graphics_set = {
+            animation = {
+                layers = {
+                    {
+                        filename = "__base__/graphics/entity/programmable-speaker/programmable-speaker.png",
+                        priority = "extra-high",
+                        width = 59,
+                        height = 178,
+                        shift = util.by_pixel(-2.25, -39.5),
+                        scale = 0.5
+                    },
+                    {
+                        filename = "__base__/graphics/entity/programmable-speaker/programmable-speaker-shadow.png",
+                        priority = "extra-high",
+                        width = 237,
+                        height = 50,
+                        shift = util.by_pixel(52.75, -3),
+                        draw_as_shadow = true,
+                        scale = 0.5
+                    }
+                }
+            }
+        },
+        water_reflection = {
+            pictures = {
+                filename = "__base__/graphics/entity/programmable-speaker/programmable-speaker-reflection.png",
+                priority = "extra-high",
+                width = 12,
+                height = 24,
+                shift = util.by_pixel(0, 45),
+                variation_count = 1,
+                scale = 5
+            },
+            rotate = false,
+            orientation_to_variation = false
+        },
+        surface_conditions = { { property = "pollution-type", min = 3, max = 3 } }
+    },
+    {
+        type = "item",
+        name = "active-noise-cancelling-tower",
+        icons = {
+            { icon = "__base__/graphics/icons/programmable-speaker.png" },
+            { icon = "__lignumis__/graphics/icons/active-noise-cancelling.png", scale = 0.25, shift = { 8, 8 } }
+        },
+        subgroup = "circuit-network",
+        order = "d[other]-c[active-noise-cancelling-tower]",
+        inventory_move_sound = item_sounds.mechanical_inventory_move,
+        pick_sound = item_sounds.mechanical_inventory_pickup,
+        drop_sound = item_sounds.mechanical_inventory_move,
+        place_result = "active-noise-cancelling-tower",
+        stack_size = 10,
+        random_tint_color = item_tints.iron_rust
+    },
+    {
+        type = "recipe",
+        name = "active-noise-cancelling-tower",
+        enabled = false,
+        energy_required = 20,
+        ingredients = {
+            { type = "item", name = "gold-plate",            amount = 6 },
+            { type = "item", name = "gold-cable",            amount = 6 },
+            { type = "item", name = "low-density-structure", amount = 4 },
+            { type = "item", name = "processing-unit",       amount = 8 }
+        },
+        results = { { type = "item", name = "active-noise-cancelling-tower", amount = 1 } }
+    },
+    {
+        type = "recipe",
+        name = "active-noise-cancelling",
+        icons = { { icon = "__lignumis__/graphics/icons/active-noise-cancelling.png" } },
+        enabled = false,
+        energy_required = 1000000,
+        ingredients = {},
+        results = {},
+        category = "active-noise-cancelling",
+        hide_from_stats = true,
+        hide_from_player_crafting = true,
+        surface_conditions = { { property = "pollution-type", min = 3, max = 3 } }
+    },
+    {
+        type = "technology",
+        name = "active-noise-cancelling",
+        icon = "__lignumis__/graphics/technology/active-noise-cancelling.png",
+        icon_size = 128,
+        effects = {
+            {
+                type = "unlock-recipe",
+                recipe = "active-noise-cancelling-tower"
+            },
+            {
+                type = "unlock-recipe",
+                recipe = "active-noise-cancelling"
+            }
+        },
+        prerequisites = { "utility-science-pack" },
+        unit = {
+            time = 60,
+            count = 500,
+            ingredients = {
+                { "wood-science-pack",       1 },
+                { "steam-science-pack",      1 },
+                { "automation-science-pack", 1 },
+                { "logistic-science-pack",   1 },
+                { "chemical-science-pack",   1 },
+                { "space-science-pack",      1 },
+                { "utility-science-pack",    1 }
+            }
+        }
+    }
+})
diff --git a/lignumis/prototypes/content/data.lua b/lignumis/prototypes/content/data.lua
index 328d106..81fe26b 100644
--- a/lignumis/prototypes/content/data.lua
+++ b/lignumis/prototypes/content/data.lua
@@ -24,5 +24,6 @@ require("wood-logistics")
 require("basic-repair-pack")
 require("basic-radar")
 require("mid-game-recipes")
+require("active-noise-cancelling-tower")
 
 require("noise")
diff --git a/lignumis/prototypes/content/deep-miner.lua b/lignumis/prototypes/content/deep-miner.lua
index bff55a8..671d192 100644
--- a/lignumis/prototypes/content/deep-miner.lua
+++ b/lignumis/prototypes/content/deep-miner.lua
@@ -5,8 +5,8 @@ local entity = DeepMiner.EntityBuilder:new():build({
     resource_searching_radius = 0.49,
     energy_usage = "25MW",
     mining_speed = 15,
-    energySource = {
-        emissions_per_minute = { noise = 500 }
+    energy_source = {
+        emissions_per_minute = { noise = 2000 }
     },
     resource_drain_rate_percent = 75
 })
diff --git a/lignumis/prototypes/content/lignumis/planet.lua b/lignumis/prototypes/content/lignumis/planet.lua
index 0f0305b..46f2f46 100644
--- a/lignumis/prototypes/content/lignumis/planet.lua
+++ b/lignumis/prototypes/content/lignumis/planet.lua
@@ -16,6 +16,11 @@ local nauvis_lignumis = {
 }
 
 data:extend({
+    {
+        type = "surface-property",
+        name = "pollution-type",
+        default_value = 0
+    },
     {
         type = "planet",
         name = "lignumis",
@@ -38,7 +43,8 @@ data:extend({
             departure = { "default-rocket-a" }
         },
         surface_properties = {
-            ["day-night-cycle"] = 1 * minute
+            ["day-night-cycle"] = 2 * minute,
+            ["pollution-type"] = 3
         },
         asteroid_spawn_influence = 1,
         asteroid_spawn_definitions = asteroid_util.spawn_definitions(nauvis_lignumis, 0.9),
diff --git a/lignumis/prototypes/content/noise.lua b/lignumis/prototypes/content/noise.lua
index f5b458c..dd45e35 100644
--- a/lignumis/prototypes/content/noise.lua
+++ b/lignumis/prototypes/content/noise.lua
@@ -1,3 +1,18 @@
+-- Entities added by Lignumis define noise emissions/absorption in their own file.
+
+local function emit(type, name, amount)
+    local entity = data.raw[type][name]
+    entity.energy_source = entity.energy_source or {}
+    entity.energy_source.emissions_per_minute = entity.energy_source.emissions_per_minute or {}
+    entity.energy_source.emissions_per_minute.noise = amount
+end
+
+local function emit_constant(type, name, amount)
+    local entity = data.raw[type][name]
+    entity.emissions_per_second = entity.emissions_per_second or {}
+    entity.emissions_per_second.noise = amount / 60
+end
+
 data:extend({
     {
         type = "airborne-pollutant",
@@ -16,25 +31,30 @@ data:extend({
     }
 })
 
-data.raw["unit-spawner"]["spitter-spawner"].absorptions_per_second.noise = { absolute = 20, proportional = 0.01 }
-data.raw["unit-spawner"]["biter-spawner"].absorptions_per_second.noise = { absolute = 20, proportional = 0.01 }
-data.raw["unit"]["small-biter"].absorptions_to_join_attack.noise = 4
-data.raw["unit"]["medium-biter"].absorptions_to_join_attack.noise = 20
-data.raw["unit"]["big-biter"].absorptions_to_join_attack.noise = 80
-data.raw["unit"]["behemoth-biter"].absorptions_to_join_attack.noise = 400
-data.raw["unit"]["small-spitter"].absorptions_to_join_attack.noise = 4
-data.raw["unit"]["medium-spitter"].absorptions_to_join_attack.noise = 12
-data.raw["unit"]["big-spitter"].absorptions_to_join_attack.noise = 30
-data.raw["unit"]["behemoth-spitter"].absorptions_to_join_attack.noise = 200
+
+-- Nauvis enemies use noise
+
+data.raw["unit-spawner"]["spitter-spawner"].absorptions_per_second.noise = { absolute = 200, proportional = 0.01 }
+data.raw["unit-spawner"]["biter-spawner"].absorptions_per_second.noise = { absolute = 200, proportional = 0.01 }
+data.raw["unit"]["small-biter"].absorptions_to_join_attack.noise = 1
+data.raw["unit"]["medium-biter"].absorptions_to_join_attack.noise = 5
+data.raw["unit"]["big-biter"].absorptions_to_join_attack.noise = 20
+data.raw["unit"]["behemoth-biter"].absorptions_to_join_attack.noise = 100
+data.raw["unit"]["small-spitter"].absorptions_to_join_attack.noise = 1
+data.raw["unit"]["medium-spitter"].absorptions_to_join_attack.noise = 3
+data.raw["unit"]["big-spitter"].absorptions_to_join_attack.noise = 8
+data.raw["unit"]["behemoth-spitter"].absorptions_to_join_attack.noise = 50
+
+
+-- All trees absorb noise
 
 for _, tree in pairs(data.raw.tree) do
-    if tree.emissions_per_second then
-        tree.emissions_per_second.noise = -0.1
-    end
+    emit_constant("plant", "tree-plant", -6)
 end
+emit_constant("plant", "tree-plant", -6)
 
-data.raw.furnace["stone-furnace"].energy_source.emissions_per_minute.noise = 10
-data.raw["mining-drill"]["burner-mining-drill"].energy_source.emissions_per_minute.noise = 50
+
+-- Tiles absorb noise
 
 local tiles = {"grass-1", "grass-2", "grass-3", "grass-4", "water", "deepwater", "natural-gold-soil"}
 for _, tile in pairs(tiles) do
@@ -42,4 +62,58 @@ for _, tile in pairs(tiles) do
         data.raw.tile[tile].absorptions_per_second = {}
     end
     data.raw.tile[tile].absorptions_per_second.noise = 0.001
-end
\ No newline at end of file
+end
+
+
+-- Walls absorb noise
+
+emit_constant("wall", "wooden-wall", -10)
+emit_constant("wall", "stone-wall", -20)
+emit_constant("gate", "gate", -10)
+
+
+-- Buildings emit noise
+
+emit("furnace", "stone-furnace", 10)
+emit("furnace", "electric-furnace", 10)
+emit("mining-drill", "burner-mining-drill", 50)
+emit("mining-drill", "electric-mining-drill", 100)
+emit("mining-drill", "big-mining-drill", 200)
+--emit("mining-drill", "deep-miner", 2000)
+--emit("agricultural-tower", "burner-agricultural-tower", 100)
+emit("agricultural-tower", "agricultural-tower", 100)
+--emit("assembling-machine", "burner-assembling-machine", 50)
+--emit("assembling-machine", "steam-assembling-machine", 50)
+emit("assembling-machine", "assembling-machine-1", 10)
+emit("assembling-machine", "assembling-machine-2", 15)
+emit("assembling-machine", "assembling-machine-3", 20)
+emit("assembling-machine", "chemical-plant", 10)
+emit("boiler", "boiler", 5)
+emit("generator", "steam-engine", 10)
+emit("boiler", "heat-exchanger", 1)
+emit("generator", "steam-turbine", 20)
+--emit("rocket-silo", "provisional-rocket-silo", 10000)
+--emit_constant("rocket-silo", "provisional-rocket-silo", 1000)
+emit("rocket-silo", "rocket-silo", 10000)
+emit_constant("rocket-silo", "rocket-silo", 1000)
+--emit("lab", "wood-lab", 10)
+emit("lab", "lab", 5)
+emit("lab", "biolab", 20)
+emit("locomotive", "locomotive", 200)
+emit_constant("locomotive", "locomotive", 10)
+
+--emit_constant("transport-belt", "wood-transport-belt", 3)
+emit_constant("transport-belt", "transport-belt", 4)
+emit_constant("transport-belt", "fast-transport-belt", 8)
+emit_constant("transport-belt", "express-transport-belt", 12)
+emit_constant("transport-belt", "turbo-transport-belt", 16)
+--emit_constant("underground-belt", "wood-underground-belt", 30)
+emit_constant("underground-belt", "underground-belt", 40)
+emit_constant("underground-belt", "fast-underground-belt", 50)
+emit_constant("underground-belt", "express-underground-belt", 60)
+emit_constant("underground-belt", "turbo-underground-belt", 80)
+--emit_constant("splitter", "wood-splitter", 60)
+emit_constant("splitter", "splitter", 70)
+emit_constant("splitter", "fast-splitter", 80)
+emit_constant("splitter", "express-splitter", 90)
+emit_constant("splitter", "turbo-splitter", 100)
\ No newline at end of file
diff --git a/lignumis/prototypes/content/wooden-rocket-silo.lua b/lignumis/prototypes/content/wooden-rocket-silo.lua
index 827dd8d..d79f84b 100644
--- a/lignumis/prototypes/content/wooden-rocket-silo.lua
+++ b/lignumis/prototypes/content/wooden-rocket-silo.lua
@@ -11,7 +11,7 @@ silo.energy_source = {
     fuel_categories = { "chemical" },
     effectivity = 1,
     fuel_inventory_size = 1,
-    emissions_per_minute = { noise = 1000 },
+    emissions_per_minute = { noise = 10000 },
     smoke = {
         {
             name = "smoke",
@@ -23,6 +23,7 @@ silo.energy_source = {
         }
     }
 }
+silo.emissions_per_second = { noise = 1000 / 60 }
 silo.energy_usage = "1MW"
 silo.rocket_entity = "provisional-rocket"
 silo.fixed_recipe = "provisional-rocket-part"
diff --git a/lignumis/prototypes/integrations/Wood-Walls.lua b/lignumis/prototypes/integrations/Wood-Walls.lua
index 908b981..7262078 100644
--- a/lignumis/prototypes/integrations/Wood-Walls.lua
+++ b/lignumis/prototypes/integrations/Wood-Walls.lua
@@ -1,6 +1,3 @@
 local recipe = data.raw.recipe["wooden-wall"]
 recipe.ingredients = { { type = "item", name = "lumber", amount = 4 } }
-recipe.results = { { type = "item", name = "wooden-wall", amount = 1 } }
-
-local entity = data.raw.wall["wooden-wall"]
-entity.emissions_per_second = { noise = -1 }
\ No newline at end of file
+recipe.results = { { type = "item", name = "wooden-wall", amount = 1 } }
\ No newline at end of file
diff --git a/lignumis/prototypes/integrations/vanilla.lua b/lignumis/prototypes/integrations/vanilla.lua
index bd6844a..f08863f 100644
--- a/lignumis/prototypes/integrations/vanilla.lua
+++ b/lignumis/prototypes/integrations/vanilla.lua
@@ -258,11 +258,11 @@ weapon_speed_technology_4.prerequisites = { "weapon-shooting-speed-3", "military
 
 local production_science_pack_technology = Technology:new("production-science-pack")
 production_science_pack_technology:replacePrerequisite("advanced-material-processing-2", "space-platform-thruster")
-production_science_pack_technology:addIngredients({ "wood-science-pack", "steam-science-pack" })
+production_science_pack_technology:addIngredients({ "wood-science-pack", "steam-science-pack", "space-science-pack" })
 
 local utility_science_pack_technology = Technology:new("utility-science-pack")
 utility_science_pack_technology:setPrerequisites({ "space-platform-thruster" })
-utility_science_pack_technology:addIngredients({ "wood-science-pack", "steam-science-pack" })
+utility_science_pack_technology:addIngredients({ "wood-science-pack", "steam-science-pack", "space-science-pack" })
 
 
 -- Equipment
@@ -275,6 +275,12 @@ data.raw["equipment-grid"]["medium-equipment-grid"].width = 8
 data.raw["equipment-grid"]["medium-equipment-grid"].height = 8
 
 
+-- Add pollution as surface property
+
+data.raw["planet"]["nauvis"].surface_properties["pollution-type"] = 1
+data.raw["planet"]["gleba"].surface_properties["pollution-type"] = 2
+
+
 -- Always show Nauvis icon
 
 local nauvis = data.raw.planet["nauvis"]
diff --git a/sources/icons/active-noise-cancelling.afphoto b/sources/icons/active-noise-cancelling.afphoto
new file mode 100644
index 0000000..fcbfabb
Binary files /dev/null and b/sources/icons/active-noise-cancelling.afphoto differ