diff --git a/ant_landscape/__init__.py b/ant_landscape/__init__.py
index 25d4be9b9c9ead8eb9bbc8ee786eee1e3f4c7583..c8e9fb92e1480af87994000bc29e14992cd8796a 100644
--- a/ant_landscape/__init__.py
+++ b/ant_landscape/__init__.py
@@ -35,14 +35,14 @@ bl_info = {
 if "bpy" in locals():
     import importlib
     importlib.reload(add_mesh_ant_landscape)
-    importlib.reload(ant_landscape_refresh)
     importlib.reload(mesh_ant_displace)
     importlib.reload(ant_functions)
+    importlib.reload(ant_noise)
 else:
     from ant_landscape import add_mesh_ant_landscape
-    from ant_landscape import ant_landscape_refresh
     from ant_landscape import mesh_ant_displace
     from ant_landscape import ant_functions
+    from ant_landscape import ant_noise
 
 import bpy
 
@@ -54,7 +54,6 @@ from bpy.props import (
         PointerProperty,
         EnumProperty,
         )
-
 from .ant_functions import (
         draw_ant_refresh,
         draw_ant_main,
@@ -62,7 +61,6 @@ from .ant_functions import (
         draw_ant_displace,
         )
 
-
 # ------------------------------------------------------------
 # Menu's and panels
 
@@ -114,7 +112,7 @@ class AntLandscapeToolsPanel(bpy.types.Panel):
             col.operator('mesh.eroder', text="Landscape Eroder", icon='SMOOTHCURVE')
 
 
-# Landscape Settings / Properties:
+# Landscape Main Settings
 class AntMainSettingsPanel(bpy.types.Panel):
     bl_idname = "ANTMAIN_PT_layout"
     bl_options = {'DEFAULT_CLOSED'}
@@ -156,7 +154,7 @@ class AntMainSettingsPanel(bpy.types.Panel):
             col.prop(ant, "mesh_size_y")
 
 
-# Landscape Settings / Properties:
+# Landscape Noise Settings
 class AntNoiseSettingsPanel(bpy.types.Panel):
     bl_idname = "ANTNOISE_PT_layout"
     bl_options = {'DEFAULT_CLOSED'}
@@ -194,7 +192,8 @@ class AntNoiseSettingsPanel(bpy.types.Panel):
         col = box.column(align=True)
         col.prop(ant, "noise_offset_x")
         col.prop(ant, "noise_offset_y")
-        col.prop(ant, "noise_offset_z")
+        if ant.sphere_mesh:
+            col.prop(ant, "noise_offset_z")
         col.prop(ant, "noise_size_x")
         col.prop(ant, "noise_size_y")
         if ant.sphere_mesh:
@@ -274,7 +273,7 @@ class AntNoiseSettingsPanel(bpy.types.Panel):
             col.prop(ant, "frequency")
             col.prop(ant, "distortion")
             col.separator()
-            col.prop(ant, "vl_basis_type")
+            box.prop(ant, "vl_basis_type")
             col.separator()
             row = col.row(align=True)
             row.prop(ant, "hard_noise", expand=True)
@@ -285,7 +284,7 @@ class AntNoiseSettingsPanel(bpy.types.Panel):
             col.prop(ant, "offset")
             col.prop(ant, "distortion")
             col.separator()
-            col.prop(ant, "vl_basis_type")
+            box.prop(ant, "vl_basis_type")
         elif ant.noise_type == "distorted_heteroTerrain":
             col.prop(ant, "noise_depth")
             col.prop(ant, "dimension")
@@ -301,7 +300,7 @@ class AntNoiseSettingsPanel(bpy.types.Panel):
             col.prop(ant, "offset")
             col.prop(ant, "gain")
             col.separator()
-            col.prop(ant, "vl_basis_type")
+            box.prop(ant, "vl_basis_type")
         elif ant.noise_type == "rocks_noise":
             col.prop(ant, "noise_depth")
             col.prop(ant, "distortion")
@@ -316,15 +315,44 @@ class AntNoiseSettingsPanel(bpy.types.Panel):
             col.prop(ant, "offset")
             col.prop(ant, "distortion")
             col.separator()
-            col.prop(ant, "vl_basis_type")
+            box.prop(ant, "vl_basis_type")
         elif ant.noise_type == "planet_noise":
             col.prop(ant, "noise_depth")
             col.separator()
             row = col.row(align=True)
             row.prop(ant, "hard_noise", expand=True)
 
+        # Effects mix
+        col = box.column(align=False)
+        box.prop(ant, "fx_type")
+        if ant.fx_type != "0":
+            if int(ant.fx_type) <= 12:
+                box.prop(ant, "fx_bias")
+
+            box.prop(ant, "fx_mix_mode")
+            col = box.column(align=True)
+            col.prop(ant, "fx_mixfactor")
+
+            col = box.column(align=True)
+            col.prop(ant, "fx_loc_x")
+            col.prop(ant, "fx_loc_y")
+            col.prop(ant, "fx_size")
+
+            col = box.column(align=True)
+            col.prop(ant, "fx_depth")
+            if ant.fx_depth != 0:
+                col.prop(ant, "fx_frequency")
+                col.prop(ant, "fx_amplitude")
+            col.prop(ant, "fx_turb")
+
+            col = box.column(align=True)
+            row = col.row(align=True).split(0.92, align=True)
+            row.prop(ant, "fx_height")
+            row.prop(ant, "fx_invert", toggle=True, text="", icon='ARROW_LEFTRIGHT')
+            col.prop(ant, "fx_offset")
+
 
-# Landscape Settings / Properties:
+# Landscape Displace Settings
 class AntDisplaceSettingsPanel(bpy.types.Panel):
     bl_idname = "ANTDISP_PT_layout"
     bl_options = {'DEFAULT_CLOSED'}
@@ -679,6 +707,134 @@ class AntLandscapePropertiesGroup(bpy.types.PropertyGroup):
             max=10000.0,
             description="Height offset"
             )
+    fx_mixfactor = FloatProperty(
+            name="Mix Factor",
+            default=0.0,
+            min=-1.0,
+            max=1.0,
+            description="Effect mix factor: -1.0 = Noise, +1.0 = Effect"
+            )
+    fx_mix_mode = EnumProperty(
+            name="Effect Mix",
+            default="0",
+            description="Effect mix mode",
+            items = [
+                ("0", "Mix", "Mix", 0),
+                ("1", "Add", "Add", 1),
+                ("2", "Sub", "Subtract", 2),
+                ("3", "Mul", "Multiply", 3),
+                ("4", "Abs", "Absolute", 4),
+                ("5", "Scr", "Screen", 5),
+                ("6", "Mod", "Modulo", 6),
+                ("7", "Min", "Minimum", 7),
+                ("8", "Max", "Maximum", 8)
+                ]
+            )
+    fx_type = EnumProperty(
+            name="Effect Type",
+            default="0",
+            description="Effect type",
+            items = [
+                ("0", "None", "No effect", 0),
+                ("1", "Gradient", "Gradient", 1),
+                ("2", "Waves", "Waves - Bumps", 2),
+                ("3", "Zigzag", "Zigzag", 3),
+                ("4", "Wavy", "Wavy", 4),
+                ("5", "Bump", "Bump", 5),
+                ("6", "Dots", "Dots", 6),
+                ("7", "Rings", "Rings", 7),
+                ("8", "Spiral", "Spiral", 8),
+                ("9", "Square", "Square", 9),
+                ("10", "Blocks", "Blocks", 10),
+                ("11", "Grid", "Grid", 11),
+                ("12", "Tech", "Tech", 12),
+                ("13", "Crackle", "Crackle", 13),
+                ("14", "Cracks", "Cracks", 14),
+                ("15", "Rock", "Rock noise", 15),
+                ("16", "Lunar", "Craters", 16),
+                ("17", "Cosine", "Cosine", 17),
+                ("18", "Spikey", "Spikey", 18),
+                ("19", "Stone", "Stone", 19),
+                ("20", "Flat Turb", "Flat turbulence", 20),
+                ("21", "Flat Voronoi", "Flat voronoi", 21)
+                ]
+            )
+    fx_bias = EnumProperty(
+            name="Effect Bias",
+            default="0",
+            description="Effect bias type",
+            items = [
+                ("0", "Sin", "Sin", 0),
+                ("1", "Cos", "Cos", 1),
+                ("2", "Tri", "Tri", 2),
+                ("3", "Saw", "Saw", 3),
+                ("4", "None", "None", 4)]
+            )
+    fx_turb = FloatProperty(
+            name="Distortion",
+            default=0.0,
+            min=0.0,
+            max=1000.0,
+            description="Effect turbulence distortion"
+            )
+    fx_depth = IntProperty(
+            name="Depth",
+            default=0,
+            min=0,
+            max=16,
+            description="Effect depth - number of frequencies"
+            )
+    fx_amplitude = FloatProperty(
+            name="Amp",
+            default=0.5,
+            min=0.01,
+            max=1.0,
+            description="Amplitude"
+            )
+    fx_frequency = FloatProperty(
+            name="Freq",
+            default=2.0,
+            min=0.01,
+            max=5.0,
+            description="Frequency"
+            )
+    fx_size = FloatProperty(
+            name="Effect Size",
+            default=1.0,
+            min=0.01,
+            max=1000.0,
+            description="Effect size"
+            )
+    fx_loc_x = FloatProperty(
+            name="Offset X",
+            default=0.0,
+            description="Effect x offset"
+            )
+    fx_loc_y = FloatProperty(
+            name="Offset Y",
+            default=0.0,
+            description="Effect y offset"
+            )
+    fx_height = FloatProperty(
+            name="Intensity",
+            default=1.0,
+            min=-1000.0,
+            max=1000.0,
+            description="Effect intensity scale"
+            )
+    fx_invert = BoolProperty(
+            name="Invert",
+            default=False,
+            description="Effect invert"
+            )
+    fx_offset = FloatProperty(
+            name="Offset",
+            default=0.0,
+            min=-1000.0,
+            max=1000.0,
+            description="Effect height offset"
+            )
+
     edge_falloff = EnumProperty(
             name="Falloff",
             default="3",
diff --git a/ant_landscape/add_mesh_ant_landscape.py b/ant_landscape/add_mesh_ant_landscape.py
index dee82a55baad4026e0625324b14f882eb0bfaad7..df941c4fd4c1a89005ca83d1a032ab54947c4cdb 100644
--- a/ant_landscape/add_mesh_ant_landscape.py
+++ b/ant_landscape/add_mesh_ant_landscape.py
@@ -16,7 +16,7 @@
 #
 # ##### END GPL LICENSE BLOCK #####
 
-# Another Noise Tool - Landscape
+# Another Noise Tool - Add Landscape
 # Jimmy Hazevoet
 
 # import modules
@@ -347,6 +347,134 @@ class AntAddLandscape(bpy.types.Operator):
             max=10000.0,
             description="Height offset"
             )
+    fx_mixfactor = FloatProperty(
+            name="Mix Factor",
+            default=0.0,
+            min=-1.0,
+            max=1.0,
+            description="Effect mix factor: -1.0 = Noise, +1.0 = Effect"
+            )
+    fx_mix_mode = EnumProperty(
+            name="Effect Mix",
+            default="0",
+            description="Effect mix mode",
+            items = [
+                ("0", "Mix", "Mix", 0),
+                ("1", "Add", "Add", 1),
+                ("2", "Sub", "Subtract", 2),
+                ("3", "Mul", "Multiply", 3),
+                ("4", "Abs", "Absolute", 4),
+                ("5", "Scr", "Screen", 5),
+                ("6", "Mod", "Modulo", 6),
+                ("7", "Min", "Minimum", 7),
+                ("8", "Max", "Maximum", 8)
+                ]
+            )
+    fx_type = EnumProperty(
+            name="Effect Type",
+            default="0",
+            description="Effect type",
+            items = [
+                ("0", "None", "No effect", 0),
+                ("1", "Gradient", "Gradient", 1),
+                ("2", "Waves", "Waves - Bumps", 2),
+                ("3", "Zigzag", "Zigzag", 3),
+                ("4", "Wavy", "Wavy", 4),
+                ("5", "Bump", "Bump", 5),
+                ("6", "Dots", "Dots", 6),
+                ("7", "Rings", "Rings", 7),
+                ("8", "Spiral", "Spiral", 8),
+                ("9", "Square", "Square", 9),
+                ("10", "Blocks", "Blocks", 10),
+                ("11", "Grid", "Grid", 11),
+                ("12", "Tech", "Tech", 12),
+                ("13", "Crackle", "Crackle", 13),
+                ("14", "Cracks", "Cracks", 14),
+                ("15", "Rock", "Rock noise", 15),
+                ("16", "Lunar", "Craters", 16),
+                ("17", "Cosine", "Cosine", 17),
+                ("18", "Spikey", "Spikey", 18),
+                ("19", "Stone", "Stone", 19),
+                ("20", "Flat Turb", "Flat turbulence", 20),
+                ("21", "Flat Voronoi", "Flat voronoi", 21)
+                ]
+            )
+    fx_bias = EnumProperty(
+            name="Effect Bias",
+            default="0",
+            description="Effect bias type",
+            items = [
+                ("0", "Sin", "Sin", 0),
+                ("1", "Cos", "Cos", 1),
+                ("2", "Tri", "Tri", 2),
+                ("3", "Saw", "Saw", 3),
+                ("4", "None", "None", 4)]
+            )
+    fx_turb = FloatProperty(
+            name="Distortion",
+            default=0.0,
+            min=0.0,
+            max=1000.0,
+            description="Effect turbulence distortion"
+            )
+    fx_depth = IntProperty(
+            name="Depth",
+            default=0,
+            min=0,
+            max=16,
+            description="Effect depth - number of frequencies."
+            )
+    fx_amplitude = FloatProperty(
+            name="Amp",
+            default=0.5,
+            min=0.01,
+            max=1.0,
+            description="Amplitude"
+            )
+    fx_frequency = FloatProperty(
+            name="Freq",
+            default=2.0,
+            min=0.01,
+            max=5.0,
+            description="Frequency"
+            )
+    fx_size = FloatProperty(
+            name="Effect Size",
+            default=1.0,
+            min=0.01,
+            max=1000.0,
+            description="Effect size"
+            )
+    fx_loc_x = FloatProperty(
+            name="Offset X",
+            default=0.0,
+            description="Effect x offset"
+            )
+    fx_loc_y = FloatProperty(
+            name="Offset Y",
+            default=0.0,
+            description="Effect y offset"
+            )
+    fx_height = FloatProperty(
+            name="Intensity",
+            default=1.0,
+            min=-1000.0,
+            max=1000.0,
+            description="Effect intensity scale"
+            )
+    fx_invert = BoolProperty(
+            name="Invert",
+            default=False,
+            description="Effect invert"
+            )
+    fx_offset = FloatProperty(
+            name="Offset",
+            default=0.0,
+            min=-1000.0,
+            max=1000.0,
+            description="Effect height offset"
+            )
+
     edge_falloff = EnumProperty(
             name="Falloff",
             default="3",
@@ -458,7 +586,6 @@ class AntAddLandscape(bpy.types.Operator):
             description="Automatic refresh"
             )
 
-
     def draw(self, context):
         draw_ant_refresh(self, context)
         draw_ant_main(self, context, generate=True)
@@ -536,7 +663,21 @@ class AntAddLandscape(bpy.types.Operator):
             self.water_plane,
             self.water_level,
             self.vert_group,
-            self.remove_double
+            self.remove_double,
+            self.fx_mixfactor,
+            self.fx_mix_mode,
+            self.fx_type,
+            self.fx_bias,
+            self.fx_turb,
+            self.fx_depth,
+            self.fx_frequency,
+            self.fx_amplitude,
+            self.fx_size,
+            self.fx_loc_x,
+            self.fx_loc_y,
+            self.fx_height,
+            self.fx_offset,
+            self.fx_invert
             ]
 
         scene = context.scene
diff --git a/ant_landscape/ant_functions.py b/ant_landscape/ant_functions.py
index 8adacc0bd096f82d8ae75a11508827e890ce3cd4..c566617da4fc41f2296760e5243d9f0d193c3405 100644
--- a/ant_landscape/ant_functions.py
+++ b/ant_landscape/ant_functions.py
@@ -30,24 +30,12 @@ from bpy.props import (
         StringProperty,
         EnumProperty,
         IntProperty,
-        PointerProperty
-        )
-from mathutils.noise import (
-        seed_set,
-        turbulence,
-        turbulence_vector,
-        fractal,
-        hybrid_multi_fractal,
-        multi_fractal,
-        ridged_multi_fractal,
-        hetero_terrain,
-        random_unit_vector,
-        variable_lacunarity,
+        PointerProperty,
         )
 from math import (
-        floor, sqrt,
         sin, cos, pi,
         )
+from .ant_noise import noise_gen
 
 # ------------------------------------------------------------
 # Create a new mesh (object) from verts/edges/faces.
@@ -137,6 +125,213 @@ def sphere_gen(sub_d_x, sub_d_y, tri, meshsize, props, water_plane, water_level)
     return verts, faces
 
 
+# ------------------------------------------------------------
+# Do refresh - redraw
+class AntLandscapeRefresh(bpy.types.Operator):
+    bl_idname = "mesh.ant_landscape_refresh"
+    bl_label = "Refresh"
+    bl_description = "Refresh landscape with current settings"
+    bl_options = {'REGISTER', 'UNDO'}
+
+
+    @classmethod
+    def poll(cls, context):
+        ob = bpy.context.active_object
+        return (ob.ant_landscape and not ob.ant_landscape['sphere_mesh'])
+
+
+    def execute(self, context):
+        # turn off undo
+        undo = bpy.context.user_preferences.edit.use_global_undo
+        bpy.context.user_preferences.edit.use_global_undo = False
+
+        # ant object items
+        obj = bpy.context.active_object
+
+        bpy.ops.object.mode_set(mode = 'EDIT')
+        bpy.ops.object.mode_set(mode = 'OBJECT')
+
+        if obj and obj.ant_landscape.keys():
+            ob = obj.ant_landscape
+            obi = ob.items()
+            prop = []
+            for i in range(len(obi)):
+                prop.append(obi[i][1])
+
+            # redraw verts
+            mesh = obj.data
+
+            if ob['vert_group'] != "" and ob['vert_group'] in obj.vertex_groups:
+                vertex_group = obj.vertex_groups[ob['vert_group']]
+                gi = vertex_group.index
+                for v in mesh.vertices:
+                    for g in v.groups:
+                        if g.group == gi:
+                            v.co[2] = 0.0
+                            v.co[2] = vertex_group.weight(v.index) * noise_gen(v.co, prop)
+            else:
+                for v in mesh.vertices:
+                    v.co[2] = 0.0
+                    v.co[2] = noise_gen(v.co, prop)
+            mesh.update()
+        else:
+            pass
+
+        # restore pre operator undo state
+        context.user_preferences.edit.use_global_undo = undo
+
+        return {'FINISHED'}
+
+# ------------------------------------------------------------
+# Do regenerate
+class AntLandscapeRegenerate(bpy.types.Operator):
+    bl_idname = "mesh.ant_landscape_regenerate"
+    bl_label = "Regenerate"
+    bl_description = "Regenerate landscape with current settings"
+    bl_options = {'REGISTER', 'UNDO'}
+
+
+    @classmethod
+    def poll(cls, context):
+        return bpy.context.active_object.ant_landscape
+
+
+    def execute(self, context):
+
+        # turn off undo
+        undo = bpy.context.user_preferences.edit.use_global_undo
+        bpy.context.user_preferences.edit.use_global_undo = False
+
+        scene = bpy.context.scene
+        # ant object items
+        obj = bpy.context.active_object
+
+        if obj and obj.ant_landscape.keys():
+            ob = obj.ant_landscape
+            obi = ob.items()
+            ant_props = []
+            for i in range(len(obi)):
+                ant_props.append(obi[i][1])
+
+            new_name = obj.name
+
+            # Main function, create landscape mesh object
+            if ob['sphere_mesh']:
+                # sphere
+                verts, faces = sphere_gen(
+                        ob['subdivision_y'],
+                        ob['subdivision_x'],
+                        ob['tri_face'],
+                        ob['mesh_size'],
+                        ant_props,
+                        False,
+                        0.0
+                        )
+                new_ob = create_mesh_object(context, verts, [], faces, new_name).object
+                if ob['remove_double']:
+                    new_ob.select = True
+                    bpy.ops.object.mode_set(mode = 'EDIT')
+                    bpy.ops.mesh.remove_doubles(threshold=0.0001, use_unselected=False)
+                    bpy.ops.object.mode_set(mode = 'OBJECT')
+            else:
+                # grid
+                verts, faces = grid_gen(
+                        ob['subdivision_x'],
+                        ob['subdivision_y'],
+                        ob['tri_face'],
+                        ob['mesh_size_x'],
+                        ob['mesh_size_y'],
+                        ant_props,
+                        False,
+                        0.0
+                        )
+                new_ob = create_mesh_object(context, verts, [], faces, new_name).object
+
+            new_ob.select = True
+
+            if ob['smooth_mesh']:
+                bpy.ops.object.shade_smooth()
+
+            # Landscape Material
+            if ob['land_material'] != "" and ob['land_material'] in bpy.data.materials:
+                mat = bpy.data.materials[ob['land_material']]
+                bpy.context.object.data.materials.append(mat)
+
+            # Water plane
+            if ob['water_plane']:
+                if ob['sphere_mesh']:
+                    # sphere
+                    verts, faces = sphere_gen(
+                            ob['subdivision_y'],
+                            ob['subdivision_x'],
+                            ob['tri_face'],
+                            ob['mesh_size'],
+                            ant_props,
+                            ob['water_plane'],
+                            ob['water_level']
+                            )
+                    wobj = create_mesh_object(context, verts, [], faces, new_name+"_plane").object
+                    if ob['remove_double']:
+                        wobj.select = True
+                        bpy.ops.object.mode_set(mode = 'EDIT')
+                        bpy.ops.mesh.remove_doubles(threshold=0.0001, use_unselected=False)
+                        bpy.ops.object.mode_set(mode = 'OBJECT')
+                else:
+                    # grid
+                    verts, faces = grid_gen(
+                            2,
+                            2,
+                            ob['tri_face'],
+                            ob['mesh_size_x'],
+                            ob['mesh_size_y'],
+                            ant_props,
+                            ob['water_plane'],
+                            ob['water_level']
+                            )
+                    wobj = create_mesh_object(context, verts, [], faces, new_name+"_plane").object
+
+                wobj.select = True
+
+                if ob['smooth_mesh']:
+                    bpy.ops.object.shade_smooth()
+
+                # Water Material
+                if ob['water_material'] != "" and ob['water_material'] in bpy.data.materials:
+                    mat = bpy.data.materials[ob['water_material']]
+                    bpy.context.object.data.materials.append(mat)
+
+            # Loc Rot Scale
+            if ob['water_plane']:
+                wobj.location = obj.location
+                wobj.rotation_euler = obj.rotation_euler
+                wobj.scale = obj.scale
+                wobj.select = False
+
+            new_ob.location = obj.location
+            new_ob.rotation_euler = obj.rotation_euler
+            new_ob.scale = obj.scale
+
+            # Store props
+            new_ob = store_properties(ob, new_ob)
+
+            # Delete old object
+            new_ob.select = False
+            
+            obj.select = True
+            scene.objects.active = obj
+            bpy.ops.object.delete(use_global=False)
+
+            # Select landscape and make active
+            new_ob.select = True
+            scene.objects.active = new_ob
+
+            # restore pre operator undo state
+            context.user_preferences.edit.use_global_undo = undo
+
+        return {'FINISHED'}
+
+
+# ------------------------------------------------------------
 # Z normal value to vertex group (Slope map)
 class AntVgSlopeMap(bpy.types.Operator):
     bl_idname = "mesh.ant_slope_map"
@@ -216,434 +411,6 @@ class AntVgSlopeMap(bpy.types.Operator):
         return {'FINISHED'}
 
 
-# ------------------------------------------------------------
-# A.N.T. Noise:
-
-# Functions for marble_noise:
-def sin_bias(a):
-    return 0.5 + 0.5 * sin(a)
-
-
-def cos_bias(a):
-    return 0.5 + 0.5 * cos(a)
-
-
-def tri_bias(a):
-    b = 2 * pi
-    a = 1 - 2 * abs(floor((a * (1 / b)) + 0.5) - (a * (1 / b)))
-    return a
-
-
-def saw_bias(a):
-    b = 2 * pi
-    n = int(a / b)
-    a -= n * b
-    if a < 0:
-        a += b
-    return a / b
-
-
-def soft(a):
-    return a
-
-
-def sharp(a):
-    return a**0.5
-
-
-def sharper(a):
-    return sharp(sharp(a))
-
-
-def shapes(x, y, z, shape=0):
-    p = pi
-    if shape is 1:
-        # ring
-        x = x * p
-        y = y * p
-        s = cos(x**2 + y**2) / (x**2 + y**2 + 0.5)
-    elif shape is 2:
-        # swirl
-        x = x * p
-        y = y * p
-        s = ((x * sin(x * x + y * y) + y * cos(x * x + y * y)) / (x**2 + y**2 + 0.5))
-    elif shape is 3:
-        # bumps
-        x = x * p
-        y = y * p
-        z = z * p
-        s = 1 - ((cos(x * p) + cos(y * p) + cos(z * p)) - 0.5)
-    elif shape is 4:
-        # wave
-        x = x * p * 2
-        y = y * p * 2
-        s = sin(x + sin(y))
-    elif shape is 5:
-        # z grad.
-        s = (z * p)
-    elif shape is 6:
-        # y grad.
-        s = (y * p)
-    elif shape is 7:
-        # x grad.
-        s = (x * p)
-    else:
-        # marble default
-        s = ((x + y + z) * 5)
-    return s
-
-
-# marble_noise
-def marble_noise(x, y, z, origin, size, shape, bias, sharpnes, turb, depth, hard, basis, amp, freq):
-
-    s = shapes(x, y, z, shape)
-    x += origin[0]
-    y += origin[1]
-    z += origin[2]
-    value = s + turb * turbulence_vector((x, y, z), depth, hard, basis)[1]
-
-    if bias is 1:
-        value = cos_bias(value)
-    elif bias is 2:
-        value = tri_bias(value)
-    elif bias is 3:
-        value = saw_bias(value)
-    else:
-        value = sin_bias(value)
-
-    if sharpnes is 1:
-        value = 1.0 - sharp(value)
-    elif sharpnes is 2:
-        value = 1.0 - sharper(value)
-    elif sharpnes is 3:
-        value = soft(value)
-    elif sharpnes is 4:
-        value = sharp(value)
-    elif sharpnes is 5:
-        value = sharper(value)
-    else:
-        value = 1.0 - soft(value)
-
-    return value
-
-
-# vl_noise_turbulence: 
-def vlnTurbMode(coords, distort, basis, vlbasis, hardnoise):
-    # hard noise
-    if hardnoise:
-        return (abs(-variable_lacunarity(coords, distort, basis, vlbasis)))
-    # soft noise
-    else:
-        return variable_lacunarity(coords, distort, basis, vlbasis)
-
-
-def vl_noise_turbulence(coords, distort, depth, basis, vlbasis, hardnoise, amp, freq):
-    x, y, z = coords
-    value = vlnTurbMode(coords, distort, basis, vlbasis, hardnoise)
-    i=0
-    for i in range(depth):
-        i+=1
-        value += vlnTurbMode((x * (freq * i), y * (freq * i), z * (freq * i)), distort, basis, vlbasis, hardnoise) * (amp * 0.5 / i)
-    return value
-
-
-## duo_multiFractal:
-def double_multiFractal(coords, H, lacunarity, octaves, offset, gain, basis, vlbasis):
-    x, y, z = coords
-    n1 = multi_fractal((x * 1.5 + 1, y * 1.5 + 1, z * 1.5 + 1), 1.0, 1.0, 1.0, basis) * (offset * 0.5)
-    n2 = multi_fractal((x - 1, y - 1, z - 1), H, lacunarity, octaves, vlbasis) * (gain * 0.5)
-    return (n1 * n1 + n2 * n2) * 0.5
-
-
-## distorted_heteroTerrain:
-def distorted_heteroTerrain(coords, H, lacunarity, octaves, offset, distort, basis, vlbasis):
-    x, y, z = coords
-    h1 = (hetero_terrain((x, y, z), 1.0, 2.0, 1.0, 1.0, basis) * 0.5)
-    d =  h1 * distort
-    h2 = (hetero_terrain((x + d, y + d, z + d), H, lacunarity, octaves, offset, vlbasis) * 0.25)
-    return (h1 * h1 + h2 * h2) * 0.5
-
-
-## SlickRock:
-def slick_rock(coords, H, lacunarity, octaves, offset, gain, distort, basis, vlbasis):
-    x, y, z = coords
-    n = multi_fractal((x,y,z), 1.0, 2.0, 2.0, basis) * distort * 0.25
-    r = ridged_multi_fractal((x + n, y + n, z + n), H, lacunarity, octaves, offset + 0.1, gain * 2, vlbasis)
-    return (n + (n * r)) * 0.5
-
-
-## vlhTerrain
-def vl_hTerrain(coords, H, lacunarity, octaves, offset, basis, vlbasis, distort):
-    x, y, z = coords
-    ht = hetero_terrain((x, y, z), H, lacunarity, octaves, offset, basis ) * 0.25
-    vl = ht * variable_lacunarity((x, y, z), distort, basis, vlbasis) * 0.5 + 0.5
-    return vl * ht
-
-
-# another turbulence
-def ant_turbulence(coords, depth, hardnoise, nbasis, amp, freq, distortion):
-    x, y, z = coords
-    t = turbulence_vector((x/2, y/2, z/2), depth, 0, nbasis, amp, freq) * 0.5 * distortion
-    return turbulence((t[0], t[1], t[2]), 2, hardnoise, 3) * 0.5 + 0.5
-
-
-# rocks noise
-def rocks_noise(coords, depth, hardnoise, nbasis, distortion):
-    x,y,z = coords
-    p = turbulence((x, y, z), 4, 0, 0) * 0.125 * distortion
-    xx, yy, zz = x, y, z
-    a = turbulence((xx + p, yy + p, zz), 2, 0, 7)
-    pa = a * 0.1875 * distortion
-    b = turbulence((x, y, z + pa), depth, hardnoise, nbasis)
-    return ((a + 0.5 * (b - a)) * 0.5 + 0.5)
-
-
-# shattered_hterrain:
-def shattered_hterrain(coords, H, lacunarity, octaves, offset, distort, basis):
-    x, y, z = coords
-    d = (turbulence_vector(coords, 6, 0, 0)[0] * 0.5 + 0.5) * distort * 0.5
-    t1 = (turbulence_vector((x + d, y + d, z + d), 0, 0, 7)[0] + 0.5)
-    t2 = (hetero_terrain((x * 2, y * 2, z * 2), H, lacunarity, octaves, offset, basis) * 0.5)
-    return ((t1 * t2) + t2 * 0.5) * 0.5
-
-
-# strata_hterrain
-def strata_hterrain(coords, H, lacunarity, octaves, offset, distort, basis):
-    x, y, z = coords
-    value = hetero_terrain((x, y, z), H, lacunarity, octaves, offset, basis) * 0.5
-    steps = (sin(value * (distort * 5) * pi) * (0.1 / (distort * 5) * pi))
-    return (value * (1.0 - 0.5) + steps * 0.5)
-
-
-# Planet Noise by: Farsthary
-# https://farsthary.com/2010/11/24/new-planet-procedural-texture/
-def planet_noise(coords, oct=6, hard=0, noisebasis=1, nabla=0.001):
-    x, y, z = coords
-    d = 0.001
-    offset = nabla * 1000
-    x = turbulence((x, y, z), oct, hard, noisebasis)
-    y = turbulence((x + offset, y, z), oct, hard, noisebasis)
-    z = turbulence((x, y + offset, z), oct, hard, noisebasis)
-    xdy = x - turbulence((x, y + d, z), oct, hard, noisebasis)
-    xdz = x - turbulence((x, y, z + d), oct, hard, noisebasis)
-    ydx = y - turbulence((x + d, y, z), oct, hard, noisebasis)
-    ydz = y - turbulence((x, y, z + d), oct, hard, noisebasis)
-    zdx = z - turbulence((x + d, y, z), oct, hard, noisebasis)
-    zdy = z - turbulence((x, y + d, z), oct, hard, noisebasis)
-    return (zdy - ydz), (zdx - xdz), (ydx - xdy)
-
-
-# ------------------------------------------------------------
-# landscape_gen
-def noise_gen(coords, props):
-
-    terrain_name = props[0]
-    cursor = props[1]
-    smooth = props[2]
-    triface = props[3]
-    sphere = props[4]
-    land_mat = props[5]
-    water_mat = props[6]
-    texture_name = props[7]
-    subd_x = props[8]
-    subd_y = props[9]
-    meshsize_x = props[10]
-    meshsize_y = props[11]
-    meshsize = props[12]
-    rseed = props[13]
-    x_offset = props[14]
-    y_offset = props[15]
-    z_offset = props[16]
-    size_x = props[17]
-    size_y = props[18]
-    size_z = props[19]
-    nsize = props[20]
-    ntype = props[21]
-    nbasis = int(props[22])
-    vlbasis = int(props[23])
-    distortion = props[24]
-    hardnoise = int(props[25])
-    depth = props[26]
-    amp = props[27]
-    freq = props[28]
-    dimension = props[29]
-    lacunarity = props[30]
-    offset = props[31]
-    gain = props[32]
-    marblebias = int(props[33])
-    marblesharpnes = int(props[34])
-    marbleshape = int(props[35])
-    height = props[36]
-    height_invert = props[37]
-    height_offset = props[38]
-    maximum = props[39]
-    minimum = props[40]
-    falloff = int(props[41])
-    edge_level = props[42]
-    falloffsize_x = props[43]
-    falloffsize_y = props[44]
-    stratatype = props[45]
-    strata = props[46]
-    addwater = props[47]
-    waterlevel = props[48]
-
-    x, y, z = coords
-
-    # Origin
-    if rseed is 0:
-        origin = x_offset, y_offset, z_offset
-        origin_x = x_offset
-        origin_y = y_offset
-        origin_z = z_offset
-        o_range = 1.0
-    else:
-        # Randomise origin
-        o_range = 10000.0
-        seed_set(rseed)
-        origin = random_unit_vector()
-        ox = (origin[0] * o_range)
-        oy = (origin[1] * o_range)
-        oz = (origin[2] * o_range)
-        origin_x = (ox - (ox / 2)) + x_offset
-        origin_y = (oy - (oy / 2)) + y_offset
-        origin_z = (oz - (oz / 2)) + z_offset
-
-    ncoords = (x / (nsize * size_x) + origin_x, y / (nsize * size_y) + origin_y, z / (nsize * size_z) + origin_z)
-
-    # Noise basis type's
-    if nbasis == 9:
-        nbasis = 14  # Cellnoise
-    if vlbasis == 9:
-        vlbasis = 14
-
-    # Noise type's
-    if ntype in [0, 'multi_fractal']:
-        value = multi_fractal(ncoords, dimension, lacunarity, depth, nbasis) * 0.5
-
-    elif ntype in [1, 'ridged_multi_fractal']:
-        value = ridged_multi_fractal(ncoords, dimension, lacunarity, depth, offset, gain, nbasis) * 0.5
-
-    elif ntype in [2, 'hybrid_multi_fractal']:
-        value = hybrid_multi_fractal(ncoords, dimension, lacunarity, depth, offset, gain, nbasis) * 0.5
-
-    elif ntype in [3, 'hetero_terrain']:
-        value = hetero_terrain(ncoords, dimension, lacunarity, depth, offset, nbasis) * 0.25
-
-    elif ntype in [4, 'fractal']:
-        value = fractal(ncoords, dimension, lacunarity, depth, nbasis)
-
-    elif ntype in [5, 'turbulence_vector']:
-        value = turbulence_vector(ncoords, depth, hardnoise, nbasis, amp, freq)[0]
-
-    elif ntype in [6, 'variable_lacunarity']:
-        value = variable_lacunarity(ncoords, distortion, nbasis, vlbasis)
-
-    elif ntype in [7, 'marble_noise']:
-        value = marble_noise(
-                        (ncoords[0] - origin_x + x_offset),
-                        (ncoords[1] - origin_y + y_offset), 
-                        (ncoords[2] - origin_z + z_offset),
-                        (origin[0] + x_offset, origin[1] + y_offset, origin[2] + z_offset), nsize,
-                        marbleshape, marblebias, marblesharpnes,
-                        distortion, depth, hardnoise, nbasis, amp, freq
-                        )
-    elif ntype in [8, 'shattered_hterrain']:
-        value = shattered_hterrain(ncoords, dimension, lacunarity, depth, offset, distortion, nbasis)
-
-    elif ntype in [9, 'strata_hterrain']:
-        value = strata_hterrain(ncoords, dimension, lacunarity, depth, offset, distortion, nbasis)
-
-    elif ntype in [10, 'ant_turbulence']:
-        value = ant_turbulence(ncoords, depth, hardnoise, nbasis, amp, freq, distortion)
-
-    elif ntype in [11, 'vl_noise_turbulence']:
-        value = vl_noise_turbulence(ncoords, distortion, depth, nbasis, vlbasis, hardnoise, amp, freq)
-
-    elif ntype in [12, 'vl_hTerrain']:
-        value = vl_hTerrain(ncoords, dimension, lacunarity, depth, offset, nbasis, vlbasis, distortion)
-
-    elif ntype in [13, 'distorted_heteroTerrain']:
-        value = distorted_heteroTerrain(ncoords, dimension, lacunarity, depth, offset, distortion, nbasis, vlbasis)
-
-    elif ntype in [14, 'double_multiFractal']:
-        value = double_multiFractal(ncoords, dimension, lacunarity, depth, offset, gain, nbasis, vlbasis)
-
-    elif ntype in [15, 'rocks_noise']:
-        value = rocks_noise(ncoords, depth, hardnoise, nbasis, distortion)
-
-    elif ntype in [16, 'slick_rock']:
-        value = slick_rock(ncoords,dimension, lacunarity, depth, offset, gain, distortion, nbasis, vlbasis)
-
-    elif ntype in [17, 'planet_noise']:
-        value = planet_noise(ncoords, depth, hardnoise, nbasis)[2] * 0.5 + 0.5
-
-    elif ntype in [18, 'blender_texture']:
-        if texture_name != "" and texture_name in bpy.data.textures:
-            value = bpy.data.textures[texture_name].evaluate(ncoords)[3]
-        else:
-            value = 0.0
-    else:
-        value = 0.5
-
-    # Adjust height
-    if height_invert:
-        value = 1.0 - value
-        value = value * height + height_offset
-    else:
-        value = value * height + height_offset
-
-    # Edge falloff:
-    if not sphere:
-        if falloff:
-            ratio_x, ratio_y = abs(x) * 2 / meshsize_x, abs(y) * 2 / meshsize_y
-            fallofftypes = [0,
-                            sqrt(ratio_y**falloffsize_y),
-                            sqrt(ratio_x**falloffsize_x),
-                            sqrt(ratio_x**falloffsize_x + ratio_y**falloffsize_y)
-                           ]
-            dist = fallofftypes[falloff]
-            value -= edge_level
-            if(dist < 1.0):
-                dist = (dist * dist * (3 - 2 * dist))
-                value = (value - value * dist) + edge_level
-            else:
-                value = edge_level
-
-    # Strata / terrace / layers
-    if stratatype not in [0, "0"]:
-        if stratatype in [1, "1"]:
-            strata = strata / height
-            strata *= 2
-            steps = (sin(value * strata * pi) * (0.1 / strata * pi))
-            value = (value * 0.5 + steps * 0.5) * 2.0
-
-        elif stratatype in [2, "2"]:
-            strata = strata / height
-            steps = -abs(sin(value * strata * pi) * (0.1 / strata * pi))
-            value = (value * 0.5 + steps * 0.5) * 2.0
-
-        elif stratatype in [3, "3"]:
-            strata = strata / height
-            steps = abs(sin(value * strata * pi) * (0.1 / strata * pi))
-            value = (value * 0.5 + steps * 0.5) * 2.0
-
-        elif stratatype in [4, "4"]:
-            strata = strata / height
-            value = int( value * strata ) * 1.0 / strata
-
-        elif stratatype in [5, "5"]:
-            strata = strata / height
-            steps = (int( value * strata ) * 1.0 / strata)
-            value = (value * (1.0 - 0.5) + steps * 0.5)
-
-    # Clamp height min max
-    if (value < minimum):
-        value = minimum
-    if (value > maximum):
-        value = maximum
-
-    return value
-
 # ------------------------------------------------------------
 # draw properties
 
@@ -711,7 +478,8 @@ def draw_ant_noise(self, context, generate=True):
         col = box.column(align=True)
         col.prop(self, "noise_offset_x")
         col.prop(self, "noise_offset_y")
-        col.prop(self, "noise_offset_z")
+        if self.sphere_mesh == True or generate == False:
+            col.prop(self, "noise_offset_z")
         col.prop(self, "noise_size_x")
         col.prop(self, "noise_size_y")
         if self.sphere_mesh == True or generate == False:
@@ -792,7 +560,7 @@ def draw_ant_noise(self, context, generate=True):
             col.prop(self, "frequency")
             col.prop(self, "distortion")
             col.separator()
-            col.prop(self, "vl_basis_type")
+            box.prop(self, "vl_basis_type")
             col.separator()
             row = col.row(align=True)
             row.prop(self, "hard_noise", expand=True)
@@ -803,7 +571,7 @@ def draw_ant_noise(self, context, generate=True):
             col.prop(self, "offset")
             col.prop(self, "distortion")
             col.separator()
-            col.prop(self, "vl_basis_type")
+            box.prop(self, "vl_basis_type")
         elif self.noise_type == "distorted_heteroTerrain":
             col.prop(self, "noise_depth")
             col.prop(self, "dimension")
@@ -811,7 +579,7 @@ def draw_ant_noise(self, context, generate=True):
             col.prop(self, "offset")
             col.prop(self, "distortion")
             col.separator()
-            col.prop(self, "vl_basis_type")
+            box.prop(self, "vl_basis_type")
         elif self.noise_type == "double_multiFractal":
             col.prop(self, "noise_depth")
             col.prop(self, "dimension")
@@ -819,7 +587,7 @@ def draw_ant_noise(self, context, generate=True):
             col.prop(self, "offset")
             col.prop(self, "gain")
             col.separator()
-            col.prop(self, "vl_basis_type")
+            box.prop(self, "vl_basis_type")
         elif self.noise_type == "rocks_noise":
             col.prop(self, "noise_depth")
             col.prop(self, "distortion")
@@ -834,13 +602,42 @@ def draw_ant_noise(self, context, generate=True):
             col.prop(self, "offset")
             col.prop(self, "distortion")
             col.separator()
-            col.prop(self, "vl_basis_type")
+            box.prop(self, "vl_basis_type")
         elif self.noise_type == "planet_noise":
             col.prop(self, "noise_depth")
             col.separator()
             row = col.row(align=True)
             row.prop(self, "hard_noise", expand=True)
 
+        # Effects mix
+        col = box.column(align=False)
+        box.prop(self, "fx_type")
+        if self.fx_type != "0":
+            if int(self.fx_type) <= 12:
+                box.prop(self, "fx_bias")
+
+            box.prop(self, "fx_mix_mode")
+            col = box.column(align=True)
+            col.prop(self, "fx_mixfactor")
+
+            col = box.column(align=True)
+            col.prop(self, "fx_loc_x")
+            col.prop(self, "fx_loc_y")
+            col.prop(self, "fx_size")
+
+            col = box.column(align=True)
+            col.prop(self, "fx_depth")
+            if self.fx_depth != 0:
+                col.prop(self, "fx_frequency")
+                col.prop(self, "fx_amplitude")
+            col.prop(self, "fx_turb")
+
+            col = box.column(align=True)
+            row = col.row(align=True).split(0.92, align=True)
+            row.prop(self, "fx_height")
+            row.prop(self, "fx_invert", toggle=True, text="", icon='ARROW_LEFTRIGHT')
+            col.prop(self, "fx_offset")
+
 
 def draw_ant_displace(self, context, generate=True):
     layout = self.layout
@@ -946,6 +743,20 @@ def store_properties(operator, ob):
     ob.ant_landscape.water_level = operator.water_level
     ob.ant_landscape.vert_group = operator.vert_group
     ob.ant_landscape.remove_double = operator.remove_double
+    ob.ant_landscape.fx_mixfactor = operator.fx_mixfactor
+    ob.ant_landscape.fx_mix_mode = operator.fx_mix_mode
+    ob.ant_landscape.fx_type = operator.fx_type
+    ob.ant_landscape.fx_bias = operator.fx_bias
+    ob.ant_landscape.fx_turb = operator.fx_turb
+    ob.ant_landscape.fx_depth = operator.fx_depth
+    ob.ant_landscape.fx_frequency = operator.fx_frequency
+    ob.ant_landscape.fx_amplitude = operator.fx_amplitude
+    ob.ant_landscape.fx_size = operator.fx_size
+    ob.ant_landscape.fx_loc_x = operator.fx_loc_x
+    ob.ant_landscape.fx_loc_y = operator.fx_loc_y
+    ob.ant_landscape.fx_height = operator.fx_height
+    ob.ant_landscape.fx_offset = operator.fx_offset
+    ob.ant_landscape.fx_invert = operator.fx_invert
     return ob
 
 
@@ -999,7 +810,6 @@ class Eroder(bpy.types.Operator):
             min=1,
             soft_max=10
             )
-    
     Ef = FloatProperty(
             name="Rain on Plains",
             description="1 gives equal rain across the terrain, 0 rains more at the mountain tops",
@@ -1014,7 +824,6 @@ class Eroder(bpy.types.Operator):
             min=0,
             soft_max=100
             )
-
     Kt = FloatProperty(
             name="Kt",
             description="Maximum stable talus angle",
@@ -1023,7 +832,6 @@ class Eroder(bpy.types.Operator):
             max=radians(90),
             subtype='ANGLE'
             )
-
     Kr = FloatProperty(
             name="Rain amount",
             description="Total Rain amount",
@@ -1044,7 +852,6 @@ class Eroder(bpy.types.Operator):
             description="Use active vertex group as a rain map",
             default=True
             )
-    
     Ks = FloatProperty(
             name="Soil solubility",
             description="Soil solubility - how quickly water quickly reaches saturation point",
@@ -1086,13 +893,11 @@ class Eroder(bpy.types.Operator):
             min=0,
             soft_max=2
             )
-
     numexpr = BoolProperty(
             name="Numexpr",
             description="Use numexpr module (if available)",
             default=True
             )
-
     Pd = FloatProperty(
             name="Diffusion Amount",
             description="Diffusion probability",
@@ -1114,13 +919,11 @@ class Eroder(bpy.types.Operator):
             min=0,
             max=1
             )
-    
     smooth = BoolProperty(
             name="Smooth",
             description="Set smooth shading",
             default=True
             )
-
     showiterstats = BoolProperty(
             name="Iteration Stats",
             description="Show iteraration statistics",
diff --git a/ant_landscape/ant_landscape_refresh.py b/ant_landscape/ant_landscape_refresh.py
deleted file mode 100644
index b809619e3144ef721f91bcd877883415db3bbf70..0000000000000000000000000000000000000000
--- a/ant_landscape/ant_landscape_refresh.py
+++ /dev/null
@@ -1,238 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-# Another Noise Tool - Landscape  Redraw - Regenerate
-# Jimmy Hazevoet
-
-# ------------------------------------------------------------
-# import modules
-import bpy
-
-from .ant_functions import (
-        noise_gen,
-        grid_gen,
-        sphere_gen,
-        create_mesh_object,
-        store_properties,
-        )
-
-# ------------------------------------------------------------
-# Do refresh - redraw
-class AntLandscapeRefresh(bpy.types.Operator):
-    bl_idname = "mesh.ant_landscape_refresh"
-    bl_label = "Refresh"
-    bl_description = "Refresh landscape with current settings"
-    bl_options = {'REGISTER', 'UNDO'}
-
-
-    @classmethod
-    def poll(cls, context):
-        ob = bpy.context.active_object
-        return (ob.ant_landscape and not ob.ant_landscape['sphere_mesh'])
-
-
-    def execute(self, context):
-        # turn off undo
-        undo = bpy.context.user_preferences.edit.use_global_undo
-        bpy.context.user_preferences.edit.use_global_undo = False
-
-        # ant object items
-        obj = bpy.context.active_object
-
-        bpy.ops.object.mode_set(mode = 'EDIT')
-        bpy.ops.object.mode_set(mode = 'OBJECT')
-
-        if obj and obj.ant_landscape.keys():
-            ob = obj.ant_landscape
-            obi = ob.items()
-            prop = []
-            for i in range(len(obi)):
-                prop.append(obi[i][1])
-
-            # redraw verts
-            mesh = obj.data
-
-            if ob['vert_group'] != "" and ob['vert_group'] in obj.vertex_groups:
-                vertex_group = obj.vertex_groups[ob['vert_group']]
-                gi = vertex_group.index
-                for v in mesh.vertices:
-                    for g in v.groups:
-                        if g.group == gi:
-                            v.co[2] = 0.0
-                            v.co[2] = vertex_group.weight(v.index) * noise_gen(v.co, prop)
-            else:
-                for v in mesh.vertices:
-                    v.co[2] = 0
-                    v.co[2] = noise_gen(v.co, prop)
-            mesh.update()
-        else:
-            pass
-
-        # restore pre operator undo state
-        context.user_preferences.edit.use_global_undo = undo
-
-        return {'FINISHED'}
-
-
-# ------------------------------------------------------------
-# Do regenerate
-class AntLandscapeRegenerate(bpy.types.Operator):
-    bl_idname = "mesh.ant_landscape_regenerate"
-    bl_label = "Regenerate"
-    bl_description = "Regenerate landscape with current settings"
-    bl_options = {'REGISTER', 'UNDO'}
-
-
-    @classmethod
-    def poll(cls, context):
-        return bpy.context.active_object.ant_landscape
-
-
-    def execute(self, context):
-
-        # turn off undo
-        undo = bpy.context.user_preferences.edit.use_global_undo
-        bpy.context.user_preferences.edit.use_global_undo = False
-
-        scene = bpy.context.scene
-        # ant object items
-        obj = bpy.context.active_object
-
-        if obj and obj.ant_landscape.keys():
-            ob = obj.ant_landscape
-            obi = ob.items()
-            ant_props = []
-            for i in range(len(obi)):
-                ant_props.append(obi[i][1])
-
-            new_name = obj.name
-
-            # Main function, create landscape mesh object
-            if ob['sphere_mesh']:
-                # sphere
-                verts, faces = sphere_gen(
-                        ob['subdivision_y'],
-                        ob['subdivision_x'],
-                        ob['tri_face'],
-                        ob['mesh_size'],
-                        ant_props,
-                        False,
-                        0.0
-                        )
-                new_ob = create_mesh_object(context, verts, [], faces, new_name).object
-                if ob['remove_double']:
-                    new_ob.select = True
-                    bpy.ops.object.mode_set(mode = 'EDIT')
-                    bpy.ops.mesh.remove_doubles(threshold=0.0001, use_unselected=False)
-                    bpy.ops.object.mode_set(mode = 'OBJECT')
-            else:
-                # grid
-                verts, faces = grid_gen(
-                        ob['subdivision_x'],
-                        ob['subdivision_y'],
-                        ob['tri_face'],
-                        ob['mesh_size_x'],
-                        ob['mesh_size_y'],
-                        ant_props,
-                        False,
-                        0.0
-                        )
-                new_ob = create_mesh_object(context, verts, [], faces, new_name).object
-
-            new_ob.select = True
-
-            if ob['smooth_mesh']:
-                bpy.ops.object.shade_smooth()
-
-            # Landscape Material
-            if ob['land_material'] != "" and ob['land_material'] in bpy.data.materials:
-                mat = bpy.data.materials[ob['land_material']]
-                bpy.context.object.data.materials.append(mat)
-
-            # Water plane
-            if ob['water_plane']:
-                if ob['sphere_mesh']:
-                    # sphere
-                    verts, faces = sphere_gen(
-                            ob['subdivision_y'],
-                            ob['subdivision_x'],
-                            ob['tri_face'],
-                            ob['mesh_size'],
-                            ant_props,
-                            ob['water_plane'],
-                            ob['water_level']
-                            )
-                    wobj = create_mesh_object(context, verts, [], faces, new_name+"_plane").object
-                    if ob['remove_double']:
-                        wobj.select = True
-                        bpy.ops.object.mode_set(mode = 'EDIT')
-                        bpy.ops.mesh.remove_doubles(threshold=0.0001, use_unselected=False)
-                        bpy.ops.object.mode_set(mode = 'OBJECT')
-                else:
-                    # grid
-                    verts, faces = grid_gen(
-                            2,
-                            2,
-                            ob['tri_face'],
-                            ob['mesh_size_x'],
-                            ob['mesh_size_y'],
-                            ant_props,
-                            ob['water_plane'],
-                            ob['water_level']
-                            )
-                    wobj = create_mesh_object(context, verts, [], faces, new_name+"_plane").object
-
-                wobj.select = True
-
-                if ob['smooth_mesh']:
-                    bpy.ops.object.shade_smooth()
-
-                # Water Material
-                if ob['water_material'] != "" and ob['water_material'] in bpy.data.materials:
-                    mat = bpy.data.materials[ob['water_material']]
-                    bpy.context.object.data.materials.append(mat)
-
-            # Loc Rot Scale
-            if ob['water_plane']:
-                wobj.location = obj.location
-                wobj.rotation_euler = obj.rotation_euler
-                wobj.scale = obj.scale
-                wobj.select = False
-
-            new_ob.location = obj.location
-            new_ob.rotation_euler = obj.rotation_euler
-            new_ob.scale = obj.scale
-
-            # Store props
-            new_ob = store_properties(ob, new_ob)
-
-            # Delete old object
-            new_ob.select = False
-            
-            obj.select = True
-            scene.objects.active = obj
-            bpy.ops.object.delete(use_global=False)
-
-            # Select landscape and make active
-            new_ob.select = True
-            scene.objects.active = new_ob
-
-            # restore pre operator undo state
-            context.user_preferences.edit.use_global_undo = undo
-
-        return {'FINISHED'}
diff --git a/ant_landscape/ant_noise.py b/ant_landscape/ant_noise.py
new file mode 100644
index 0000000000000000000000000000000000000000..22a308a195f118200d4ddbab87bd0f2926dab251
--- /dev/null
+++ b/ant_landscape/ant_noise.py
@@ -0,0 +1,705 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+#  This program is free software; you can redistribute it and/or
+#  modify it under the terms of the GNU General Public License
+#  as published by the Free Software Foundation; either version 2
+#  of the License, or (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software Foundation,
+#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# Another Noise Tool - Noise and Effects
+# Jimmy Hazevoet
+
+import bpy
+from mathutils.noise import (
+        seed_set,
+        noise,
+        turbulence,
+        turbulence_vector,
+        fractal,
+        hybrid_multi_fractal,
+        multi_fractal,
+        ridged_multi_fractal,
+        hetero_terrain,
+        random_unit_vector,
+        variable_lacunarity,
+        voronoi,
+        )
+from math import (
+        floor, sqrt,
+        sin, cos, pi,
+        )
+
+# ------------------------------------------------------------
+# Height scale:
+def Height_Scale(input, iscale, offset, invert):
+    if invert != 0:
+        return (1.0 - input) * iscale + offset
+    else:
+        return input * iscale + offset
+
+
+# Functions for marble_noise and effects:
+
+def Dist(x, y):
+    return sqrt((x * x) + (y * y))
+
+
+def sin_bias(a):
+    return 0.5 + 0.5 * sin(a)
+
+
+def cos_bias(a):
+    return 0.5 + 0.5 * cos(a)
+
+
+def tri_bias(a):
+    b = 2 * pi
+    a = 1 - 2 * abs(floor((a * (1 / b)) + 0.5) - (a * (1 / b)))
+    return a
+
+
+def saw_bias(a):
+    b = 2 * pi
+    n = int(a / b)
+    a -= n * b
+    if a < 0:
+        a += b
+    return a / b
+
+
+def soft(a):
+    return a
+
+
+def sharp(a):
+    return a**0.5
+
+
+def sharper(a):
+    return sharp(sharp(a))
+
+
+def no_bias(a):
+    return a
+
+
+def shapes(x, y, z, shape=0):
+    p = pi
+    if shape is 1:
+        # ring
+        x = x * p
+        y = y * p
+        s = cos(x**2 + y**2) / (x**2 + y**2 + 0.5)
+    elif shape is 2:
+        # swirl
+        x = x * p
+        y = y * p
+        s = ((x * sin(x * x + y * y) + y * cos(x * x + y * y)) / (x**2 + y**2 + 0.5))
+    elif shape is 3:
+        # bumps
+        x = x * p
+        y = y * p
+        z = z * p
+        s = 1 - ((cos(x * p) + cos(y * p) + cos(z * p)) - 0.5)
+    elif shape is 4:
+        # wave
+        x = x * p * 2
+        y = y * p * 2
+        s = sin(x + sin(y))
+    elif shape is 5:
+        # z grad.
+        s = (z * p)
+    elif shape is 6:
+        # y grad.
+        s = (y * p)
+    elif shape is 7:
+        # x grad.
+        s = (x * p)
+    else:
+        # marble default
+        s = ((x + y + z) * 5)
+    return s
+
+
+# marble_noise
+def marble_noise(x, y, z, origin, size, shape, bias, sharpnes, turb, depth, hard, basis, amp, freq):
+
+    s = shapes(x, y, z, shape)
+    x += origin[0]
+    y += origin[1]
+    z += origin[2]
+    value = s + turb * turbulence_vector((x, y, z), depth, hard, basis)[1]
+
+    if bias is 1:
+        value = cos_bias(value)
+    elif bias is 2:
+        value = tri_bias(value)
+    elif bias is 3:
+        value = saw_bias(value)
+    else:
+        value = sin_bias(value)
+
+    if sharpnes is 1:
+        value = 1.0 - sharp(value)
+    elif sharpnes is 2:
+        value = 1.0 - sharper(value)
+    elif sharpnes is 3:
+        value = soft(value)
+    elif sharpnes is 4:
+        value = sharp(value)
+    elif sharpnes is 5:
+        value = sharper(value)
+    else:
+        value = 1.0 - soft(value)
+
+    return value
+
+
+# vl_noise_turbulence: 
+def vlnTurbMode(coords, distort, basis, vlbasis, hardnoise):
+    # hard noise
+    if hardnoise:
+        return (abs(-variable_lacunarity(coords, distort, basis, vlbasis)))
+    # soft noise
+    else:
+        return variable_lacunarity(coords, distort, basis, vlbasis)
+
+
+def vl_noise_turbulence(coords, distort, depth, basis, vlbasis, hardnoise, amp, freq):
+    x, y, z = coords
+    value = vlnTurbMode(coords, distort, basis, vlbasis, hardnoise)
+    i=0
+    for i in range(depth):
+        i+=1
+        value += vlnTurbMode((x * (freq * i), y * (freq * i), z * (freq * i)), distort, basis, vlbasis, hardnoise) * (amp * 0.5 / i)
+    return value
+
+
+## duo_multiFractal:
+def double_multiFractal(coords, H, lacunarity, octaves, offset, gain, basis, vlbasis):
+    x, y, z = coords
+    n1 = multi_fractal((x * 1.5 + 1, y * 1.5 + 1, z * 1.5 + 1), 1.0, 1.0, 1.0, basis) * (offset * 0.5)
+    n2 = multi_fractal((x - 1, y - 1, z - 1), H, lacunarity, octaves, vlbasis) * (gain * 0.5)
+    return (n1 * n1 + n2 * n2) * 0.5
+
+
+## distorted_heteroTerrain:
+def distorted_heteroTerrain(coords, H, lacunarity, octaves, offset, distort, basis, vlbasis):
+    x, y, z = coords
+    h1 = (hetero_terrain((x, y, z), 1.0, 2.0, 1.0, 1.0, basis) * 0.5)
+    d =  h1 * distort
+    h2 = (hetero_terrain((x + d, y + d, z + d), H, lacunarity, octaves, offset, vlbasis) * 0.25)
+    return (h1 * h1 + h2 * h2) * 0.5
+
+
+## SlickRock:
+def slick_rock(coords, H, lacunarity, octaves, offset, gain, distort, basis, vlbasis):
+    x, y, z = coords
+    n = multi_fractal((x,y,z), 1.0, 2.0, 2.0, basis) * distort * 0.25
+    r = ridged_multi_fractal((x + n, y + n, z + n), H, lacunarity, octaves, offset + 0.1, gain * 2, vlbasis)
+    return (n + (n * r)) * 0.5
+
+
+## vlhTerrain
+def vl_hTerrain(coords, H, lacunarity, octaves, offset, basis, vlbasis, distort):
+    x, y, z = coords
+    ht = hetero_terrain((x, y, z), H, lacunarity, octaves, offset, basis ) * 0.25
+    vl = ht * variable_lacunarity((x, y, z), distort, basis, vlbasis) * 0.5 + 0.5
+    return vl * ht
+
+
+# another turbulence
+def ant_turbulence(coords, depth, hardnoise, nbasis, amp, freq, distortion):
+    x, y, z = coords
+    t = turbulence_vector((x/2, y/2, z/2), depth, 0, nbasis, amp, freq) * 0.5 * distortion
+    return turbulence((t[0], t[1], t[2]), 2, hardnoise, 3) * 0.5 + 0.5
+
+
+# rocks noise
+def rocks_noise(coords, depth, hardnoise, nbasis, distortion):
+    x,y,z = coords
+    p = turbulence((x, y, z), 4, 0, 0) * 0.125 * distortion
+    xx, yy, zz = x, y, z
+    a = turbulence((xx + p, yy + p, zz), 2, 0, 7)
+    pa = a * 0.1875 * distortion
+    b = turbulence((x, y, z + pa), depth, hardnoise, nbasis)
+    return ((a + 0.5 * (b - a)) * 0.5 + 0.5)
+
+
+# shattered_hterrain:
+def shattered_hterrain(coords, H, lacunarity, octaves, offset, distort, basis):
+    x, y, z = coords
+    d = (turbulence_vector(coords, 6, 0, 0)[0] * 0.5 + 0.5) * distort * 0.5
+    t1 = (turbulence_vector((x + d, y + d, z + d), 0, 0, 7)[0] + 0.5)
+    t2 = (hetero_terrain((x * 2, y * 2, z * 2), H, lacunarity, octaves, offset, basis) * 0.5)
+    return ((t1 * t2) + t2 * 0.5) * 0.5
+
+
+# strata_hterrain
+def strata_hterrain(coords, H, lacunarity, octaves, offset, distort, basis):
+    x, y, z = coords
+    value = hetero_terrain((x, y, z), H, lacunarity, octaves, offset, basis) * 0.5
+    steps = (sin(value * (distort * 5) * pi) * (0.1 / (distort * 5) * pi))
+    return (value * (1.0 - 0.5) + steps * 0.5)
+
+
+# Planet Noise by: Farsthary
+# https://farsthary.com/2010/11/24/new-planet-procedural-texture/
+def planet_noise(coords, oct=6, hard=0, noisebasis=1, nabla=0.001):
+    x, y, z = coords
+    d = 0.001
+    offset = nabla * 1000
+    x = turbulence((x, y, z), oct, hard, noisebasis)
+    y = turbulence((x + offset, y, z), oct, hard, noisebasis)
+    z = turbulence((x, y + offset, z), oct, hard, noisebasis)
+    xdy = x - turbulence((x, y + d, z), oct, hard, noisebasis)
+    xdz = x - turbulence((x, y, z + d), oct, hard, noisebasis)
+    ydx = y - turbulence((x + d, y, z), oct, hard, noisebasis)
+    ydz = y - turbulence((x, y, z + d), oct, hard, noisebasis)
+    zdx = z - turbulence((x + d, y, z), oct, hard, noisebasis)
+    zdy = z - turbulence((x, y + d, z), oct, hard, noisebasis)
+    return (zdy - ydz), (zdx - xdz), (ydx - xdy)
+
+
+###----------------------------------------------------------------------
+# v.1.04 Effect functions:
+
+def maximum(a, b):
+    if (a > b): b = a
+    return b
+
+
+def minimum(a, b):
+    if (a < b): b = a
+    return b
+
+
+def Mix_Modes(a, b, mixfactor, mode):
+    mode = int(mode)
+    a = a * (1.0 - mixfactor)
+    b = b * (1.0 + mixfactor)
+    #1  mix
+    if mode == 0:
+        return (a * (1.0 - 0.5) + b * 0.5)
+    #2  add
+    elif mode == 1:
+        return (a + b)
+    #3  sub.
+    elif mode == 2:
+        return (a - b)
+    #4  mult.
+    elif mode == 3:
+        return (a * b)
+    #5  abs diff.
+    elif mode == 4:
+        return (abs(a - b))
+    #6  screen
+    elif mode == 5:
+        return 1.0 - ((1.0 - a) * (1.0 - b) / 1.0)
+    #7  addmodulo
+    elif mode == 6:
+        return (a + b) % 1.0
+    #8  min.
+    elif mode == 7:
+        return minimum(a, b)
+    #9  max.
+    elif mode == 8:
+        return maximum(a, b)
+    else:
+        return 0
+
+
+Bias_Types  = [sin_bias, cos_bias, tri_bias, saw_bias, no_bias]
+Sharp_Types = [soft, sharp, sharper]
+
+
+# Transpose effect coords:
+def Trans_Effect(coords, size, loc):
+    x, y, z = coords
+    x = (x * 2.0 / size + loc[0])
+    y = (y * 2.0 / size + loc[1])
+    return x, y, z
+
+
+# Effect_Basis_Function:
+def Effect_Basis_Function(coords, type, bias):
+    bias = int(bias)
+    type = int(type)
+    x, y, z = coords
+    iscale = 1.0
+    offset = 0.0
+
+    ## gradient:
+    if type == 1:
+        effect = offset + iscale * (Bias_Types[bias](x + y))
+    ## waves / bumps:
+    elif type == 2:
+        effect = offset + iscale * 0.5 * (Bias_Types[bias](x * pi) + Bias_Types[bias](y * pi))
+    ## zigzag:
+    elif type == 3:
+        effect = offset + iscale * Bias_Types[bias](offset + iscale * sin(x * pi + sin(y * pi)))
+    ## wavy:    
+    elif type == 4:
+        effect = offset + iscale * (Bias_Types[bias](cos(x) + sin(y) + cos(x * 2 + y * 2) - sin(-x * 4 + y * 4)))
+    ## sine bump:   
+    elif type == 5:
+        effect =   offset + iscale * 1 - Bias_Types[bias]((sin(x * pi) + sin(y * pi)))
+    ## dots:
+    elif type == 6:
+        effect = offset + iscale * (Bias_Types[bias](x * pi * 2) * Bias_Types[bias](y * pi * 2)) - 0.5
+    ## rings:
+    elif type == 7:
+        effect = offset + iscale * (Bias_Types[bias ](1.0 - (x * x + y * y)))
+    ## spiral:
+    elif type == 8:
+        effect = offset + iscale * Bias_Types[bias]( (x * sin(x * x + y * y) + y * cos(x * x + y * y)) / (x**2 + y**2 + 0.5)) * 2
+    ## square / piramide:
+    elif type == 9:
+        effect = offset + iscale * Bias_Types[bias](1.0 - sqrt((x * x)**10 + (y * y)**10)**0.1)
+    ## blocks:  
+    elif type == 10:
+        effect = (0.5 - max(Bias_Types[bias](x * pi) , Bias_Types[bias](y * pi)))
+        if effect > 0.0:
+            effect = 1.0
+        effect = offset + iscale * effect
+    ## grid:    
+    elif type == 11:
+        effect = (0.025 - min(Bias_Types[bias](x * pi), Bias_Types[bias](y * pi)))
+        if effect > 0.0:
+            effect = 1.0
+        effect = offset + iscale * effect
+    ## tech:
+    elif type == 12:
+        a = max(Bias_Types[bias](x * pi), Bias_Types[bias](y * pi))
+        b = max(Bias_Types[bias](x * pi * 2 + 2), Bias_Types[bias](y * pi * 2 + 2))
+        effect = min(Bias_Types[bias](a), Bias_Types[bias](b)) * 3.0 - 2.0
+        if effect > 0.5:
+            effect = 1.0
+        effect = offset + iscale * effect
+    ## crackle:
+    elif type == 13:
+        t = turbulence((x, y, 0), 6, 0, 0) * 0.25
+        effect = variable_lacunarity((x, y, t), 0.25, 0, 8)
+        if effect > 0.5:
+            effect = 0.5
+        effect = offset + iscale * effect
+    ## sparse cracks noise:
+    elif type == 14:
+        effect = 2.5 * abs(noise((x * 0.5, y * 0.5, 0), 1)) - 0.1
+        if effect > 0.25:
+            effect = 0.25
+        effect = offset + iscale * (effect * 2.5)
+    ## shattered rock noise:
+    elif type == 15:
+        effect = 0.5 + noise((x, y, 0), 7)
+        if effect > 0.75:
+            effect = 0.75
+        effect = offset + iscale * effect
+    ## lunar noise:
+    elif type == 16:
+        effect = 0.25 + 1.5 * voronoi((x, y, 0), 1)[0][0]
+        if effect > 0.5:
+            effect = 0.5
+        effect = offset + iscale * effect
+    ## cosine noise:
+    elif type == 17:
+        effect = cos(5 * noise((x, y, 0), 0))
+        effect = offset + iscale * (effect * 0.5)
+    ## spikey noise:
+    elif type == 18:
+        n = 0.5 + 0.5 * turbulence((x * 5, y * 5, 0), 8, 0, 0)
+        effect = ((n * n)**5)
+        effect = offset + iscale * effect
+    ## stone noise:
+    elif type == 19:
+        effect = offset + iscale * (noise((x * 2, y * 2, 0), 0) * 1.5 - 0.75)
+    ## Flat Turb:
+    elif type == 20:
+        t = turbulence((x, y, 0), 6, 0, 0)
+        effect = t * 2.0
+        if effect > 0.25:
+            effect = 0.25
+        effect = offset + iscale * effect
+    ## Flat Voronoi:
+    elif type == 21:
+        t = 1 - voronoi((x, y, 0), 1)[0][0]
+        effect = t * 2 - 1.5
+        if effect > 0.25:
+            effect = 0.25
+        effect = offset + iscale * effect
+    else:
+        effect = 0.0
+
+    if effect < 0.0:
+        effect = 0.0
+
+    return effect
+
+
+# fractalize Effect_Basis_Function: ------------------------------ 
+def Effect_Function(coords, type, bias, turb, depth, frequency, amplitude):
+
+    x, y, z = coords
+    ## turbulence:
+    if turb > 0.0:
+        t = turb * ( 0.5 + 0.5 * turbulence(coords, 6, 0, 0))
+        x = x + t
+        y = y + t
+        z = z + t
+
+    result = Effect_Basis_Function((x, y, z), type, bias) * amplitude 
+    ## fractalize:
+    if depth != 0:
+        i=0
+        for i in range(depth):
+            i+=1
+            x *= frequency
+            y *= frequency
+            result += Effect_Basis_Function((x, y, z), type, bias) * amplitude / i
+
+    return result
+
+
+# ------------------------------------------------------------
+# landscape_gen
+def noise_gen(coords, props):
+
+    terrain_name = props[0]
+    cursor = props[1]
+    smooth = props[2]
+    triface = props[3]
+    sphere = props[4]
+    land_mat = props[5]
+    water_mat = props[6]
+    texture_name = props[7]
+    subd_x = props[8]
+    subd_y = props[9]
+    meshsize_x = props[10]
+    meshsize_y = props[11]
+    meshsize = props[12]
+    rseed = props[13]
+    x_offset = props[14]
+    y_offset = props[15]
+    z_offset = props[16]
+    size_x = props[17]
+    size_y = props[18]
+    size_z = props[19]
+    nsize = props[20]
+    ntype = props[21]
+    nbasis = int(props[22])
+    vlbasis = int(props[23])
+    distortion = props[24]
+    hardnoise = int(props[25])
+    depth = props[26]
+    amp = props[27]
+    freq = props[28]
+    dimension = props[29]
+    lacunarity = props[30]
+    offset = props[31]
+    gain = props[32]
+    marblebias = int(props[33])
+    marblesharpnes = int(props[34])
+    marbleshape = int(props[35])
+    height = props[36]
+    height_invert = props[37]
+    height_offset = props[38]
+    maximum = props[39]
+    minimum = props[40]
+    falloff = int(props[41])
+    edge_level = props[42]
+    falloffsize_x = props[43]
+    falloffsize_y = props[44]
+    stratatype = props[45]
+    strata = props[46]
+    addwater = props[47]
+    waterlevel = props[48]
+    vert_group = props[49]
+    remove_double = props[50]
+    fx_mixfactor = props[51]
+    fx_mix_mode = props[52]
+    fx_type = props[53]
+    fx_bias = props[54]
+    fx_turb = props[55]
+    fx_depth = props[56]
+    fx_frequency = props[57]
+    fx_amplitude = props[58]
+    fx_size = props[59]
+    fx_loc_x = props[60]
+    fx_loc_y = props[61]
+    fx_height = props[62]
+    fx_offset = props[63]
+    fx_invert = props[64]
+
+    x, y, z = coords
+
+    # Origin
+    if rseed is 0:
+        origin = x_offset, y_offset, z_offset
+        origin_x = x_offset
+        origin_y = y_offset
+        origin_z = z_offset
+        o_range = 1.0
+    else:
+        # Randomise origin
+        o_range = 10000.0
+        seed_set(rseed)
+        origin = random_unit_vector()
+        ox = (origin[0] * o_range)
+        oy = (origin[1] * o_range)
+        oz = (origin[2] * o_range)
+        origin_x = (ox - (ox / 2)) + x_offset
+        origin_y = (oy - (oy / 2)) + y_offset
+        origin_z = (oz - (oz / 2)) + z_offset
+
+    ncoords = (x / (nsize * size_x) + origin_x, y / (nsize * size_y) + origin_y, z / (nsize * size_z) + origin_z)
+
+    # Noise basis type's
+    if nbasis == 9:
+        nbasis = 14  # Cellnoise
+    if vlbasis == 9:
+        vlbasis = 14
+
+    # Noise type's
+    if ntype in [0, 'multi_fractal']:
+        value = multi_fractal(ncoords, dimension, lacunarity, depth, nbasis) * 0.5
+
+    elif ntype in [1, 'ridged_multi_fractal']:
+        value = ridged_multi_fractal(ncoords, dimension, lacunarity, depth, offset, gain, nbasis) * 0.5
+
+    elif ntype in [2, 'hybrid_multi_fractal']:
+        value = hybrid_multi_fractal(ncoords, dimension, lacunarity, depth, offset, gain, nbasis) * 0.5
+
+    elif ntype in [3, 'hetero_terrain']:
+        value = hetero_terrain(ncoords, dimension, lacunarity, depth, offset, nbasis) * 0.25
+
+    elif ntype in [4, 'fractal']:
+        value = fractal(ncoords, dimension, lacunarity, depth, nbasis)
+
+    elif ntype in [5, 'turbulence_vector']:
+        value = turbulence_vector(ncoords, depth, hardnoise, nbasis, amp, freq)[0]
+
+    elif ntype in [6, 'variable_lacunarity']:
+        value = variable_lacunarity(ncoords, distortion, nbasis, vlbasis)
+
+    elif ntype in [7, 'marble_noise']:
+        value = marble_noise(
+                        (ncoords[0] - origin_x + x_offset),
+                        (ncoords[1] - origin_y + y_offset), 
+                        (ncoords[2] - origin_z + z_offset),
+                        (origin[0] + x_offset, origin[1] + y_offset, origin[2] + z_offset), nsize,
+                        marbleshape, marblebias, marblesharpnes,
+                        distortion, depth, hardnoise, nbasis, amp, freq
+                        )
+    elif ntype in [8, 'shattered_hterrain']:
+        value = shattered_hterrain(ncoords, dimension, lacunarity, depth, offset, distortion, nbasis)
+
+    elif ntype in [9, 'strata_hterrain']:
+        value = strata_hterrain(ncoords, dimension, lacunarity, depth, offset, distortion, nbasis)
+
+    elif ntype in [10, 'ant_turbulence']:
+        value = ant_turbulence(ncoords, depth, hardnoise, nbasis, amp, freq, distortion)
+
+    elif ntype in [11, 'vl_noise_turbulence']:
+        value = vl_noise_turbulence(ncoords, distortion, depth, nbasis, vlbasis, hardnoise, amp, freq)
+
+    elif ntype in [12, 'vl_hTerrain']:
+        value = vl_hTerrain(ncoords, dimension, lacunarity, depth, offset, nbasis, vlbasis, distortion)
+
+    elif ntype in [13, 'distorted_heteroTerrain']:
+        value = distorted_heteroTerrain(ncoords, dimension, lacunarity, depth, offset, distortion, nbasis, vlbasis)
+
+    elif ntype in [14, 'double_multiFractal']:
+        value = double_multiFractal(ncoords, dimension, lacunarity, depth, offset, gain, nbasis, vlbasis)
+
+    elif ntype in [15, 'rocks_noise']:
+        value = rocks_noise(ncoords, depth, hardnoise, nbasis, distortion)
+
+    elif ntype in [16, 'slick_rock']:
+        value = slick_rock(ncoords,dimension, lacunarity, depth, offset, gain, distortion, nbasis, vlbasis)
+
+    elif ntype in [17, 'planet_noise']:
+        value = planet_noise(ncoords, depth, hardnoise, nbasis)[2] * 0.5 + 0.5
+
+    elif ntype in [18, 'blender_texture']:
+        if texture_name != "" and texture_name in bpy.data.textures:
+            value = bpy.data.textures[texture_name].evaluate(ncoords)[3]
+        else:
+            value = 0.0
+    else:
+        value = 0.5
+
+    # Effect mix
+    if fx_type != "0":
+        fxcoords = Trans_Effect((x, y, z), fx_size, (fx_loc_x, fx_loc_y))        
+        effect = Effect_Function(fxcoords, fx_type, fx_bias, fx_turb, fx_depth, fx_frequency, fx_amplitude)
+        effect = Height_Scale(effect, fx_height, fx_offset, fx_invert)
+        fxval = Mix_Modes(value, effect, fx_mixfactor, fx_mix_mode)
+    else:
+        fx_mixfactor = 0.0
+        fxval = value
+    value = fxval
+
+    # Adjust height
+    value = Height_Scale(value, height, height_offset, height_invert)
+
+    # Edge falloff:
+    if not sphere:
+        if falloff:
+            ratio_x, ratio_y = abs(x) * 2 / meshsize_x, abs(y) * 2 / meshsize_y
+            fallofftypes = [0,
+                            sqrt(ratio_y**falloffsize_y),
+                            sqrt(ratio_x**falloffsize_x),
+                            sqrt(ratio_x**falloffsize_x + ratio_y**falloffsize_y)
+                           ]
+            dist = fallofftypes[falloff]
+            value -= edge_level
+            if(dist < 1.0):
+                dist = (dist * dist * (3 - 2 * dist))
+                value = (value - value * dist) + edge_level
+            else:
+                value = edge_level
+
+    # Strata / terrace / layers
+    if stratatype not in [0, "0"]:
+        if stratatype in [1, "1"]:
+            strata = strata / height
+            strata *= 2
+            steps = (sin(value * strata * pi) * (0.1 / strata * pi))
+            value = (value * 0.5 + steps * 0.5) * 2.0
+
+        elif stratatype in [2, "2"]:
+            strata = strata / height
+            steps = -abs(sin(value * strata * pi) * (0.1 / strata * pi))
+            value = (value * 0.5 + steps * 0.5) * 2.0
+
+        elif stratatype in [3, "3"]:
+            strata = strata / height
+            steps = abs(sin(value * strata * pi) * (0.1 / strata * pi))
+            value = (value * 0.5 + steps * 0.5) * 2.0
+
+        elif stratatype in [4, "4"]:
+            strata = strata / height
+            value = int( value * strata ) * 1.0 / strata
+
+        elif stratatype in [5, "5"]:
+            strata = strata / height
+            steps = (int( value * strata ) * 1.0 / strata)
+            value = (value * (1.0 - 0.5) + steps * 0.5)
+
+    # Clamp height min max
+    if (value < minimum):
+        value = minimum
+    if (value > maximum):
+        value = maximum
+
+    return value
diff --git a/ant_landscape/mesh_ant_displace.py b/ant_landscape/mesh_ant_displace.py
index 7e1439b4197d6fc84863fd831fed799e00dd2be9..fb691abfc1f1889597e60c14ada2958e09783695 100644
--- a/ant_landscape/mesh_ant_displace.py
+++ b/ant_landscape/mesh_ant_displace.py
@@ -30,13 +30,13 @@ from bpy.props import (
         StringProperty,
         FloatVectorProperty,
         )
-
 from .ant_functions import (
-        noise_gen,
         draw_ant_refresh,
+        draw_ant_main,
         draw_ant_noise,
         draw_ant_displace,
         )
+from .ant_noise import noise_gen
 
 # ------------------------------------------------------------
 # Do vert displacement
@@ -343,6 +343,136 @@ class AntMeshDisplace(bpy.types.Operator):
             max=10000.0,
             description="Height offset"
             )
+
+    fx_mixfactor = FloatProperty(
+            name="Mix Factor",
+            default=0.0,
+            min=-1.0,
+            max=1.0,
+            description="Effect mix factor: -1.0 = Noise, +1.0 = Effect"
+            )
+    fx_mix_mode = EnumProperty(
+            name="Effect Mix",
+            default="0",
+            description="Effect mix mode",
+            items = [
+                ("0", "Mix", "Mix", 0),
+                ("1", "Add", "Add", 1),
+                ("2", "Sub", "Subtract", 2),
+                ("3", "Mul", "Multiply", 3),
+                ("4", "Abs", "Absolute", 4),
+                ("5", "Scr", "Screen", 5),
+                ("6", "Mod", "Modulo", 6),
+                ("7", "Min", "Minimum", 7),
+                ("8", "Max", "Maximum", 8)
+                ]
+            )
+    fx_type = EnumProperty(
+            name="Effect Type",
+            default="0",
+            description="Effect type",
+            items = [
+                ("0", "None", "No effect", 0),
+                ("1", "Gradient", "Gradient", 1),
+                ("2", "Waves", "Waves - Bumps", 2),
+                ("3", "Zigzag", "Zigzag", 3),
+                ("4", "Wavy", "Wavy", 4),
+                ("5", "Bump", "Bump", 5),
+                ("6", "Dots", "Dots", 6),
+                ("7", "Rings", "Rings", 7),
+                ("8", "Spiral", "Spiral", 8),
+                ("9", "Square", "Square", 9),
+                ("10", "Blocks", "Blocks", 10),
+                ("11", "Grid", "Grid", 11),
+                ("12", "Tech", "Tech", 12),
+                ("13", "Crackle", "Crackle", 13),
+                ("14", "Cracks", "Cracks", 14),
+                ("15", "Rock", "Rock noise", 15),
+                ("16", "Lunar", "Craters", 16),
+                ("17", "Cosine", "Cosine", 17),
+                ("18", "Spikey", "Spikey", 18),
+                ("19", "Stone", "Stone", 19),
+                ("20", "Flat Turb", "Flat turbulence", 20),
+                ("21", "Flat Voronoi", "Flat voronoi", 21)
+                ]
+            )
+    fx_bias = EnumProperty(
+            name="Effect Bias",
+            default="0",
+            description="Effect bias type",
+            items = [
+                ("0", "Sin", "Sin", 0),
+                ("1", "Cos", "Cos", 1),
+                ("2", "Tri", "Tri", 2),
+                ("3", "Saw", "Saw", 3),
+                ("4", "None", "None", 4)
+                ]
+            )
+    fx_turb = FloatProperty(
+            name="Distortion",
+            default=0.0,
+            min=0.0,
+            max=1000.0,
+            description="Effect turbulence distortion"
+            )
+    fx_depth = IntProperty(
+            name="Depth",
+            default=0,
+            min=0,
+            max=16,
+            description="Effect depth - number of frequencies"
+            )
+    fx_amplitude = FloatProperty(
+            name="Amp",
+            default=0.5,
+            min=0.01,
+            max=1.0,
+            description="Amplitude"
+            )
+    fx_frequency = FloatProperty(
+            name="Freq",
+            default=2.0,
+            min=0.01,
+            max=5.0,
+            description="Frequency"
+            )
+    fx_size = FloatProperty(
+            name="Effect Size",
+            default=1.0,
+            min=0.01,
+            max=1000.0,
+            description="Effect size"
+            )
+    fx_loc_x = FloatProperty(
+            name="Offset X",
+            default=0.0,
+            description="Effect x offset"
+            )
+    fx_loc_y = FloatProperty(
+            name="Offset Y",
+            default=0.0,
+            description="Effect y offset"
+            )
+    fx_height = FloatProperty(
+            name="Intensity",
+            default=1.0,
+            min=-1000.0,
+            max=1000.0,
+            description="Effect intensity scale"
+            )
+    fx_invert = BoolProperty(
+            name="Invert",
+            default=False,
+            description="Effect invert"
+            )
+    fx_offset = FloatProperty(
+            name="Offset",
+            default=0.0,
+            min=-1000.0,
+            max=1000.0,
+            description="Effect height offset"
+            )
+
     edge_falloff = EnumProperty(
             name="Falloff",
             default="0",
@@ -423,7 +553,11 @@ class AntMeshDisplace(bpy.types.Operator):
             max=10000.0,
             description="Water level"
             )
-
+    remove_double = BoolProperty(
+            name="Remove Doubles",
+            default=False,
+            description="Remove doubles"
+            )
     direction = EnumProperty(
             name="Direction",
             default="NORMAL",
@@ -460,7 +594,6 @@ class AntMeshDisplace(bpy.types.Operator):
             description="Automatic refresh"
             )
 
-
     def draw(self, context):
         draw_ant_refresh(self, context)
         draw_ant_noise(self, context, generate=False)
@@ -539,7 +672,22 @@ class AntMeshDisplace(bpy.types.Operator):
             self.strata,
             self.water_plane,
             self.water_level,
-            self.vert_group
+            self.vert_group,
+            self.remove_double,
+            self.fx_mixfactor,
+            self.fx_mix_mode,
+            self.fx_type,
+            self.fx_bias,
+            self.fx_turb,
+            self.fx_depth,
+            self.fx_frequency,
+            self.fx_amplitude,
+            self.fx_size,
+            self.fx_loc_x,
+            self.fx_loc_y,
+            self.fx_height,
+            self.fx_offset,
+            self.fx_invert
             ]
 
         # do displace
@@ -547,6 +695,7 @@ class AntMeshDisplace(bpy.types.Operator):
 
         if self.vert_group != "" and self.vert_group in ob.vertex_groups:
             vertex_group = ob.vertex_groups[self.vert_group]
+
             if vertex_group:
                 gi = vertex_group.index
                 if self.direction == "X":
@@ -554,16 +703,19 @@ class AntMeshDisplace(bpy.types.Operator):
                         for g in v.groups:
                             if g.group == gi:
                                 v.co[0] += vertex_group.weight(v.index) * noise_gen(v.co, props)
+
                 if self.direction == "Y":
                     for v in mesh.vertices:
                         for g in v.groups:
                             if g.group == gi:
                                 v.co[1] += vertex_group.weight(v.index) * noise_gen(v.co, props)
+
                 if self.direction == "Z":
                     for v in mesh.vertices:
                         for g in v.groups:
                             if g.group == gi:
                                 v.co[2] += vertex_group.weight(v.index) * noise_gen(v.co, props)
+
                 else:
                     for v in mesh.vertices:
                         for g in v.groups:
@@ -574,12 +726,15 @@ class AntMeshDisplace(bpy.types.Operator):
             if self.direction == "X":
                 for v in mesh.vertices:
                     v.co[0] += noise_gen(v.co, props)
+
             elif self.direction == "Y":
                 for v in mesh.vertices:
                     v.co[1] += noise_gen(v.co, props)
+
             elif self.direction == "Z":
                 for v in mesh.vertices:
                     v.co[2] += noise_gen(v.co, props)
+
             else:
                 for v in mesh.vertices:
                     v.co += v.normal * noise_gen(v.co, props)
diff --git a/presets/operator/mesh.landscape_add/abstract.py b/presets/operator/mesh.landscape_add/abstract.py
index 283f603cdcccc95a5f3b7e58d91803f0a3b1fa87..82a240eddf1297084bf983dedd0d12f078502057 100644
--- a/presets/operator/mesh.landscape_add/abstract.py
+++ b/presets/operator/mesh.landscape_add/abstract.py
@@ -40,13 +40,27 @@ op.marble_shape = '2'
 op.height = 1.0
 op.height_invert = True
 op.height_offset = 0.0
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 2.0
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '0'
 op.falloff_x = 4.0
 op.falloff_y = 4.0
 op.edge_level = 0.0
 op.maximum = 1.0
 op.minimum = -1.0
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 5.0
 op.strata_type = '3'
 op.water_plane = False
diff --git a/presets/operator/mesh.landscape_add/another_noise.py b/presets/operator/mesh.landscape_add/another_noise.py
index 7e26e9427db3d3fdb4544e859409f839670bcda3..0438570dbb46a6b7b815984c6428766809cdf3dc 100644
--- a/presets/operator/mesh.landscape_add/another_noise.py
+++ b/presets/operator/mesh.landscape_add/another_noise.py
@@ -40,13 +40,27 @@ op.marble_shape = '7'
 op.height = 0.5
 op.height_invert = True
 op.height_offset = -0.10000000149011612
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 2.0
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '0'
 op.falloff_x = 3.0
 op.falloff_y = 3.0
 op.edge_level = 0.0
 op.maximum = 1.0
 op.minimum = -1.0
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 6.0
 op.strata_type = '0'
 op.water_plane = False
diff --git a/presets/operator/mesh.landscape_add/billow.py b/presets/operator/mesh.landscape_add/billow.py
index e85251a0f26445f2f9fce8ee436ccf2d915e190a..bc63a0420b95eecf352b077e7d57ebec3bfcc256 100644
--- a/presets/operator/mesh.landscape_add/billow.py
+++ b/presets/operator/mesh.landscape_add/billow.py
@@ -40,13 +40,27 @@ op.marble_shape = '4'
 op.height = 0.30000001192092896
 op.height_invert = False
 op.height_offset = 0.0
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 2.0
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '0'
 op.falloff_x = 4.0
 op.falloff_y = 4.0
 op.edge_level = 0.0
 op.maximum = 1.0
 op.minimum = -1.0
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 3.0
 op.strata_type = '0'
 op.water_plane = False
diff --git a/presets/operator/mesh.landscape_add/canion.py b/presets/operator/mesh.landscape_add/canion.py
index b856a0f377d0bea2abd740e75b8ea7577d28d964..1debf9a9d4ee3f5190996148d772fc251051aae6 100644
--- a/presets/operator/mesh.landscape_add/canion.py
+++ b/presets/operator/mesh.landscape_add/canion.py
@@ -12,8 +12,8 @@ op.sphere_mesh = False
 op.subdivision_x = 128
 op.subdivision_y = 128
 op.mesh_size = 2.0
-op.mesh_size_x = 3.0
-op.mesh_size_y = 3.0
+op.mesh_size_x = 2.0
+op.mesh_size_y = 2.0
 op.random_seed = 5
 op.noise_offset_x = 0.0
 op.noise_offset_y = 0.0
@@ -40,13 +40,27 @@ op.marble_shape = '4'
 op.height = 0.6000000238418579
 op.height_invert = False
 op.height_offset = 0.0
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 2.0
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '2'
 op.falloff_x = 4.0
 op.falloff_y = 4.0
 op.edge_level = 0.15000000596046448
 op.maximum = 0.5
 op.minimum = -0.20000000298023224
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 4.0
 op.strata_type = '2'
 op.water_plane = False
diff --git a/presets/operator/mesh.landscape_add/canions.py b/presets/operator/mesh.landscape_add/canions.py
index b778acfa8e29f60dafa3efd21539d22226cb2912..cc0402cb80e30b1f488c64e758391dc0daed1257 100644
--- a/presets/operator/mesh.landscape_add/canions.py
+++ b/presets/operator/mesh.landscape_add/canions.py
@@ -40,6 +40,20 @@ op.marble_shape = '7'
 op.height = 0.5
 op.height_invert = False
 op.height_offset = -0.0
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 2.0
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '3'
 op.falloff_x = 8.0
 op.falloff_y = 8.0
diff --git a/presets/operator/mesh.landscape_add/cauliflower_hills.py b/presets/operator/mesh.landscape_add/cauliflower_hills.py
index bcefeb808b0bdc292f04e6180a9be097b9792fa2..c8f30692d33476a4f20cede43c1cc5c3c7198ff2 100644
--- a/presets/operator/mesh.landscape_add/cauliflower_hills.py
+++ b/presets/operator/mesh.landscape_add/cauliflower_hills.py
@@ -40,6 +40,20 @@ op.marble_shape = '3'
 op.height = 0.25
 op.height_invert = True
 op.height_offset = 0.0
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 2.0
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '3'
 op.falloff_x = 6.0
 op.falloff_y = 6.0
diff --git a/presets/operator/mesh.landscape_add/cliff.py b/presets/operator/mesh.landscape_add/cliff.py
index d16cd2fa97ccb9080f250694d37807ad81b96d2c..e16e76247c94756890b711e44fc982cee9725db7 100644
--- a/presets/operator/mesh.landscape_add/cliff.py
+++ b/presets/operator/mesh.landscape_add/cliff.py
@@ -40,13 +40,27 @@ op.marble_shape = '6'
 op.height = 1.7999999523162842
 op.height_invert = False
 op.height_offset = -0.15000000596046448
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 2.0
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '0'
 op.falloff_x = 25.0
 op.falloff_y = 25.0
 op.edge_level = 0.0
 op.maximum = 1.25
 op.minimum = 0.0
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 11.0
 op.strata_type = '0'
 op.water_plane = False
diff --git a/presets/operator/mesh.landscape_add/cristaline.py b/presets/operator/mesh.landscape_add/cristaline.py
index 893498469dd58a972cc34f1d3575e9c9d71c93dd..1155758ba33af8013688802ed55ada8b23228858 100644
--- a/presets/operator/mesh.landscape_add/cristaline.py
+++ b/presets/operator/mesh.landscape_add/cristaline.py
@@ -40,13 +40,27 @@ op.marble_shape = '0'
 op.height = 1.0
 op.height_invert = False
 op.height_offset = 0.0
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 1.5
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '0'
 op.falloff_x = 4.0
 op.falloff_y = 4.0
 op.edge_level = 0.0
 op.maximum = 2.0
 op.minimum = -1.0
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 5.0
 op.strata_type = '0'
 op.water_plane = False
diff --git a/presets/operator/mesh.landscape_add/default.py b/presets/operator/mesh.landscape_add/default.py
index 1996b5616698e157186a75838729dd368dd74d27..c06fff18f74492939cd93c8786b7c71f6976d58a 100644
--- a/presets/operator/mesh.landscape_add/default.py
+++ b/presets/operator/mesh.landscape_add/default.py
@@ -40,13 +40,27 @@ op.marble_shape = '0'
 op.height = 0.5
 op.height_invert = False
 op.height_offset = 0.0
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 2.0
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 1.0
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '3'
 op.falloff_x = 4.0
 op.falloff_y = 4.0
 op.edge_level = 0.0
 op.maximum = 1.0
 op.minimum = -1.0
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 5.0
 op.strata_type = '0'
 op.water_plane = False
diff --git a/presets/operator/mesh.landscape_add/default_large.py b/presets/operator/mesh.landscape_add/default_large.py
index 2295c1e5d467466580c99dfdacb06eebd3edc2ba..ed3e127ecf13ca798e6234df38d61d762cef7ded 100644
--- a/presets/operator/mesh.landscape_add/default_large.py
+++ b/presets/operator/mesh.landscape_add/default_large.py
@@ -40,13 +40,27 @@ op.marble_shape = '0'
 op.height = 5.0
 op.height_invert = False
 op.height_offset = 0.0
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 2.0
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 1.0
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '3'
 op.falloff_x = 4.0
 op.falloff_y = 4.0
 op.edge_level = 0.0
 op.maximum = 10.0
 op.minimum = -1.0
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 5.0
 op.strata_type = '0'
 op.water_plane = False
diff --git a/presets/operator/mesh.landscape_add/dune.py b/presets/operator/mesh.landscape_add/dunes.py
similarity index 78%
rename from presets/operator/mesh.landscape_add/dune.py
rename to presets/operator/mesh.landscape_add/dunes.py
index c63a3680a16511c615377e8e340cef112e732db4..b86c0b7e7c6c3f69113b60e6bee8640d5ca455b7 100644
--- a/presets/operator/mesh.landscape_add/dune.py
+++ b/presets/operator/mesh.landscape_add/dunes.py
@@ -37,16 +37,30 @@ op.gain = 1.0
 op.marble_bias = '0'
 op.marble_sharp = '0'
 op.marble_shape = '4'
-op.height = 0.2199999988079071
+op.height = 0.25
 op.height_invert = True
-op.height_offset = 0.029999999329447746
+op.height_offset = 0.05000000074505806
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 2.0
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 1.0
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '3'
 op.falloff_x = 3.0
 op.falloff_y = 3.0
 op.edge_level = 0.0
 op.maximum = 1.0
 op.minimum = -1.0
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 1.5
 op.strata_type = '0'
 op.water_plane = False
diff --git a/presets/operator/mesh.landscape_add/flatstone.py b/presets/operator/mesh.landscape_add/flatstones.py
similarity index 80%
rename from presets/operator/mesh.landscape_add/flatstone.py
rename to presets/operator/mesh.landscape_add/flatstones.py
index 451e89c96680b678e7aeb8519015d1e4283ca2dd..2f7a12d22d5ad1eaa5245a5be54bcf375323691c 100644
--- a/presets/operator/mesh.landscape_add/flatstone.py
+++ b/presets/operator/mesh.landscape_add/flatstones.py
@@ -22,7 +22,7 @@ op.noise_size_x = 1.0
 op.noise_size_y = 1.0
 op.noise_size_z = 1.0
 op.noise_size = 0.5
-op.noise_type = 'multi_fractal'
+op.noise_type = 'slick_rock'
 op.basis_type = '8'
 op.vl_basis_type = '0'
 op.distortion = 1.209999918937683
@@ -40,13 +40,27 @@ op.marble_shape = '4'
 op.height = 0.05000000074505806
 op.height_invert = False
 op.height_offset = 0.0
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 1.5
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '0'
 op.falloff_x = 4.0
 op.falloff_y = 4.0
 op.edge_level = 0.0
 op.maximum = 1.0
 op.minimum = 0.0
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 5.0
 op.strata_type = '0'
 op.water_plane = False
diff --git a/presets/operator/mesh.landscape_add/gully.py b/presets/operator/mesh.landscape_add/gully.py
index 1ce78ba9b9aac282bebf7cc34ffebca7282507a5..7657ad35633028dc99600c1958a3059bfedf6123 100644
--- a/presets/operator/mesh.landscape_add/gully.py
+++ b/presets/operator/mesh.landscape_add/gully.py
@@ -40,13 +40,27 @@ op.marble_shape = '7'
 op.height = 1.0
 op.height_invert = False
 op.height_offset = 0.0
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 1.5
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '1'
 op.falloff_x = 20.0
 op.falloff_y = 20.0
 op.edge_level = 0.0
 op.maximum = 0.699999988079071
 op.minimum = 0.0
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 15.0
 op.strata_type = '0'
 op.water_plane = False
diff --git a/presets/operator/mesh.landscape_add/lakes_1.py b/presets/operator/mesh.landscape_add/lakes_1.py
index 015f5967c0eca490e978a67654b3ff0fa3495903..146a7dde4cc3aedccf0d25eca85cec0f7e7b2f15 100644
--- a/presets/operator/mesh.landscape_add/lakes_1.py
+++ b/presets/operator/mesh.landscape_add/lakes_1.py
@@ -40,13 +40,27 @@ op.marble_shape = '0'
 op.height = 0.25
 op.height_invert = False
 op.height_offset = 3.725290298461914e-09
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 1.5
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '3'
 op.falloff_x = 4.0
 op.falloff_y = 4.0
 op.edge_level = 0.0
 op.maximum = 1.0
 op.minimum = -1.0
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 1.0
 op.strata_type = '2'
 op.water_plane = True
diff --git a/presets/operator/mesh.landscape_add/lakes_2.py b/presets/operator/mesh.landscape_add/lakes_2.py
index 7f907c92962e438f7da0604e6c72bb0f6e4542f8..d8ec2f2bd5895a3c22283cf02acf108e80b5a78b 100644
--- a/presets/operator/mesh.landscape_add/lakes_2.py
+++ b/presets/operator/mesh.landscape_add/lakes_2.py
@@ -40,13 +40,27 @@ op.marble_shape = '0'
 op.height = 0.5
 op.height_invert = False
 op.height_offset = -0.25
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 1.5
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '3'
 op.falloff_x = 3.0
 op.falloff_y = 3.0
 op.edge_level = 0.0
 op.maximum = 1.0
 op.minimum = -0.10000000149011612
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 5.0
 op.strata_type = '0'
 op.water_plane = True
diff --git a/presets/operator/mesh.landscape_add/large_terrain.py b/presets/operator/mesh.landscape_add/large_terrain.py
index 5a234d455ef1b26e847f4af05799d77326432208..f403bfcd089bb178b5a312b0a8f522ddafec6e62 100644
--- a/presets/operator/mesh.landscape_add/large_terrain.py
+++ b/presets/operator/mesh.landscape_add/large_terrain.py
@@ -40,13 +40,27 @@ op.marble_shape = '3'
 op.height = 1.0
 op.height_invert = False
 op.height_offset = 0.0
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 1.5
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '0'
 op.falloff_x = 4.0
 op.falloff_y = 4.0
 op.edge_level = 0.0
 op.maximum = 5.0
 op.minimum = -0.5
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 5.0
 op.strata_type = '0'
 op.water_plane = False
diff --git a/presets/operator/mesh.landscape_add/mesa.py b/presets/operator/mesh.landscape_add/mesa.py
index d6a1c9b25d58afd3530c6d8a0d9190dc2185a4c8..4d97e97f4da46af47b7c6c5084d9f94c4eb0c36b 100644
--- a/presets/operator/mesh.landscape_add/mesa.py
+++ b/presets/operator/mesh.landscape_add/mesa.py
@@ -40,13 +40,27 @@ op.marble_shape = '0'
 op.height = 0.5
 op.height_invert = False
 op.height_offset = 0.20000000298023224
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 1.5
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '3'
 op.falloff_x = 3.0
 op.falloff_y = 3.0
 op.edge_level = 0.0
 op.maximum = 0.25
 op.minimum = 0.0
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 2.25
 op.strata_type = '2'
 op.water_plane = False
diff --git a/presets/operator/mesh.landscape_add/mounds.py b/presets/operator/mesh.landscape_add/mounds.py
index a3f0a21b45440caa322c8f88af1226783790df2d..10c4ae320bcf6e0f1d188092b843c951d77fcbed 100644
--- a/presets/operator/mesh.landscape_add/mounds.py
+++ b/presets/operator/mesh.landscape_add/mounds.py
@@ -40,13 +40,27 @@ op.marble_shape = '7'
 op.height = 0.23000000417232513
 op.height_invert = False
 op.height_offset = 0.0
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 1.5
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '0'
 op.falloff_x = 4.0
 op.falloff_y = 4.0
 op.edge_level = 0.0
 op.maximum = 1.0
 op.minimum = -1.0
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 5.0
 op.strata_type = '0'
 op.water_plane = False
diff --git a/presets/operator/mesh.landscape_add/mountain_1.py b/presets/operator/mesh.landscape_add/mountain_1.py
index b2ced08139ec8b9053269ab808c3460251dd2ff3..7206a27fe72aebdee520073143256b6d9c9ac7b1 100644
--- a/presets/operator/mesh.landscape_add/mountain_1.py
+++ b/presets/operator/mesh.landscape_add/mountain_1.py
@@ -40,13 +40,27 @@ op.marble_shape = '2'
 op.height = 0.5
 op.height_invert = False
 op.height_offset = 0.25
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 1.5
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '3'
 op.falloff_x = 2.0
 op.falloff_y = 2.0
 op.edge_level = 0.0
 op.maximum = 1.0
 op.minimum = -1.0
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 5.0
 op.strata_type = '0'
 op.water_plane = False
diff --git a/presets/operator/mesh.landscape_add/mountain_2.py b/presets/operator/mesh.landscape_add/mountain_2.py
index d318b22e3b7dc82116326c5a10d93d4c96d9444a..97147835929f301a9caf81dc4f21041e16ff9164 100644
--- a/presets/operator/mesh.landscape_add/mountain_2.py
+++ b/presets/operator/mesh.landscape_add/mountain_2.py
@@ -40,6 +40,20 @@ op.marble_shape = '1'
 op.height = 0.4000000059604645
 op.height_invert = False
 op.height_offset = 0.0
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 1.5
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '3'
 op.falloff_x = 2.5
 op.falloff_y = 2.5
diff --git a/presets/operator/mesh.landscape_add/planet.py b/presets/operator/mesh.landscape_add/planet.py
index 647d2e81554898b8a73ca97349ed027747fd74ae..aaba3a5b1fa21f3562d42754836b71d625d9f1a8 100644
--- a/presets/operator/mesh.landscape_add/planet.py
+++ b/presets/operator/mesh.landscape_add/planet.py
@@ -40,13 +40,27 @@ op.marble_shape = '3'
 op.height = 0.10000000149011612
 op.height_invert = False
 op.height_offset = 0.25
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 1.5
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '0'
 op.falloff_x = 2.0
 op.falloff_y = 2.0
 op.edge_level = 0.0
 op.maximum = 1.0
 op.minimum = -1.0
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 5.0
 op.strata_type = '0'
 op.water_plane = False
diff --git a/presets/operator/mesh.landscape_add/planet_noise.py b/presets/operator/mesh.landscape_add/planet_noise.py
index ea31d432f9e972ddc732014847cb4fdf9fa9cb7c..f52ba4790e263ab8d24f6f5a4fdf2301dbc106c7 100644
--- a/presets/operator/mesh.landscape_add/planet_noise.py
+++ b/presets/operator/mesh.landscape_add/planet_noise.py
@@ -40,13 +40,27 @@ op.marble_shape = '0'
 op.height = 0.3499999940395355
 op.height_invert = False
 op.height_offset = 0.0
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 1.5
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '0'
 op.falloff_x = 4.0
 op.falloff_y = 4.0
 op.edge_level = 0.0
 op.maximum = 0.5
 op.minimum = -0.5
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 4.0
 op.strata_type = '0'
 op.water_plane = False
diff --git a/presets/operator/mesh.landscape_add/ridged.py b/presets/operator/mesh.landscape_add/ridged.py
index 7990ccb28582b8475fd94b984b5c9912d759dce9..04b1e25e67148ab2ed7b70e3583a12839dc5fb4d 100644
--- a/presets/operator/mesh.landscape_add/ridged.py
+++ b/presets/operator/mesh.landscape_add/ridged.py
@@ -40,13 +40,27 @@ op.marble_shape = '0'
 op.height = 0.30000001192092896
 op.height_invert = False
 op.height_offset = 0.0
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 1.5
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '0'
 op.falloff_x = 8.0
 op.falloff_y = 8.0
 op.edge_level = 0.0
 op.maximum = 0.5
 op.minimum = -1.0
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 11.0
 op.strata_type = '0'
 op.water_plane = False
diff --git a/presets/operator/mesh.landscape_add/river.py b/presets/operator/mesh.landscape_add/river.py
index b0d1678aa62728d01e8d97ba1a0a06eeeb32f698..f8bbefde24f8060265ca21d202c6b3f20ab3011f 100644
--- a/presets/operator/mesh.landscape_add/river.py
+++ b/presets/operator/mesh.landscape_add/river.py
@@ -40,13 +40,27 @@ op.marble_shape = '7'
 op.height = 0.20000000298023224
 op.height_invert = False
 op.height_offset = 0.0
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 1.5
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '0'
 op.falloff_x = 40.0
 op.falloff_y = 40.0
 op.edge_level = 0.0
 op.maximum = 0.5
 op.minimum = 0.0
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 1.25
 op.strata_type = '1'
 op.water_plane = True
diff --git a/presets/operator/mesh.landscape_add/rock.py b/presets/operator/mesh.landscape_add/rock.py
index 218110d09d4bac023cc74ace0ef2131e0f3759ef..528da7b44e6d3f9721228249f571175281417cf0 100644
--- a/presets/operator/mesh.landscape_add/rock.py
+++ b/presets/operator/mesh.landscape_add/rock.py
@@ -40,6 +40,20 @@ op.marble_shape = '3'
 op.height = 2.5
 op.height_invert = False
 op.height_offset = 0.0
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 1.5
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '3'
 op.falloff_x = 4.0
 op.falloff_y = 4.0
diff --git a/presets/operator/mesh.landscape_add/slick_rock.py b/presets/operator/mesh.landscape_add/slick_rock.py
index 69a560a1207be561b653590819581959b9645b75..3c90c7fdf481a11096ac9ee50d35d564348f0d3f 100644
--- a/presets/operator/mesh.landscape_add/slick_rock.py
+++ b/presets/operator/mesh.landscape_add/slick_rock.py
@@ -40,13 +40,27 @@ op.marble_shape = '0'
 op.height = 0.5
 op.height_invert = False
 op.height_offset = 0.10000000149011612
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 1.5
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '3'
 op.falloff_x = 3.0
 op.falloff_y = 3.0
 op.edge_level = 0.0
 op.maximum = 1.0
 op.minimum = -1.0
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 5.0
 op.strata_type = '0'
 op.water_plane = False
diff --git a/presets/operator/mesh.landscape_add/cosine.py b/presets/operator/mesh.landscape_add/tech_effect.py
similarity index 61%
rename from presets/operator/mesh.landscape_add/cosine.py
rename to presets/operator/mesh.landscape_add/tech_effect.py
index 71f4a734e297a477f949c1762e367aeb843e08bf..96785f5fe7c78e2a0f16570c3d28cac7880b29b4 100644
--- a/presets/operator/mesh.landscape_add/cosine.py
+++ b/presets/operator/mesh.landscape_add/tech_effect.py
@@ -9,25 +9,25 @@ op.at_cursor = True
 op.smooth_mesh = True
 op.tri_face = False
 op.sphere_mesh = False
-op.subdivision_x = 128
-op.subdivision_y = 128
+op.subdivision_x = 256
+op.subdivision_y = 256
 op.mesh_size = 2.0
 op.mesh_size_x = 2.0
 op.mesh_size_y = 2.0
 op.random_seed = 0
-op.noise_offset_x = 0.0
-op.noise_offset_y = 0.0
+op.noise_offset_x = 3.1415927410125732
+op.noise_offset_y = 3.1415927410125732
 op.noise_offset_z = 0.0
 op.noise_size_x = 1.0
 op.noise_size_y = 1.0
 op.noise_size_z = 1.0
-op.noise_size = 1.0
+op.noise_size = 0.5
 op.noise_type = 'marble_noise'
-op.basis_type = '0'
+op.basis_type = '9'
 op.vl_basis_type = '0'
-op.distortion = 0.009999999776482582
-op.hard_noise = '0'
-op.noise_depth = 6
+op.distortion = 1.0
+op.hard_noise = '1'
+op.noise_depth = 4
 op.amplitude = 0.5
 op.frequency = 2.0
 op.dimension = 1.0
@@ -35,20 +35,34 @@ op.lacunarity = 2.0
 op.offset = 1.0
 op.gain = 1.0
 op.marble_bias = '1'
-op.marble_sharp = '0'
+op.marble_sharp = '3'
 op.marble_shape = '7'
-op.height = 0.5
+op.height = 1.0
 op.height_invert = False
 op.height_offset = 0.0
+op.fx_mixfactor = 0.75
+op.fx_mix_mode = '7'
+op.fx_type = '12'
+op.fx_bias = '1'
+op.fx_turb = 0.0
+op.fx_depth = 1
+op.fx_amplitude = 0.20000000298023224
+op.fx_frequency = 1.25
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = -0.5
+op.fx_invert = False
+op.fx_offset = 0.15000000596046448
 op.edge_falloff = '0'
 op.falloff_x = 20.0
 op.falloff_y = 20.0
 op.edge_level = 0.0
 op.maximum = 1.0
-op.minimum = 0.0
+op.minimum = -1.0
 op.vert_group = ''
-op.strata = 5.0
-op.strata_type = '0'
+op.strata = 9.0
+op.strata_type = '3'
 op.water_plane = False
 op.water_level = 0.009999999776482582
 op.remove_double = False
diff --git a/presets/operator/mesh.landscape_add/techno_cell.py b/presets/operator/mesh.landscape_add/techno_cell.py
index a6d684434c50fe90b3e51c39982179df9a705d82..84cd2962c7fdb43185f202cc5120abcda8333935 100644
--- a/presets/operator/mesh.landscape_add/techno_cell.py
+++ b/presets/operator/mesh.landscape_add/techno_cell.py
@@ -40,13 +40,27 @@ op.marble_shape = '7'
 op.height = 0.25
 op.height_invert = False
 op.height_offset = 0.0
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 1.5
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '0'
 op.falloff_x = 4.0
 op.falloff_y = 4.0
 op.edge_level = 0.0
 op.maximum = 1.0
 op.minimum = -1.0
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 2.5
 op.strata_type = '4'
 op.water_plane = False
diff --git a/presets/operator/mesh.landscape_add/vlnoise_turbulence.py b/presets/operator/mesh.landscape_add/vlnoise_turbulence.py
index 832e8318feda7a5a5df745630da69fb17622630d..fb3630565f8895858060f2413dea663287fb142a 100644
--- a/presets/operator/mesh.landscape_add/vlnoise_turbulence.py
+++ b/presets/operator/mesh.landscape_add/vlnoise_turbulence.py
@@ -40,13 +40,27 @@ op.marble_shape = '0'
 op.height = 0.20999999344348907
 op.height_invert = False
 op.height_offset = 0.11999999731779099
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 1.5
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '3'
 op.falloff_x = 4.0
 op.falloff_y = 4.0
 op.edge_level = 0.0
 op.maximum = 1.0
 op.minimum = 0.0
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 5.0
 op.strata_type = '0'
 op.water_plane = False
diff --git a/presets/operator/mesh.landscape_add/voronoi_hills.py b/presets/operator/mesh.landscape_add/voronoi_hills.py
index 0450322ca01c4689bca738a7121d55fead1292da..593fa42bd4ed505bd540204367a67da3edadc17a 100644
--- a/presets/operator/mesh.landscape_add/voronoi_hills.py
+++ b/presets/operator/mesh.landscape_add/voronoi_hills.py
@@ -40,13 +40,27 @@ op.marble_shape = '3'
 op.height = 0.25
 op.height_invert = True
 op.height_offset = 0.0
-op.edge_falloff = '0'
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 1.5
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
+op.edge_falloff = '3'
 op.falloff_x = 4.0
 op.falloff_y = 4.0
 op.edge_level = 0.0
 op.maximum = 1.0
 op.minimum = 0.0
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 5.0
 op.strata_type = '0'
 op.water_plane = False
diff --git a/presets/operator/mesh.landscape_add/vulcano.py b/presets/operator/mesh.landscape_add/vulcano.py
index f7fdef8460cebecb6ce77a66392bbfdeb625ddb6..a5929b4fd92a6747ff7ec473bfa5b5d1fbe6cb48 100644
--- a/presets/operator/mesh.landscape_add/vulcano.py
+++ b/presets/operator/mesh.landscape_add/vulcano.py
@@ -40,13 +40,27 @@ op.marble_shape = '1'
 op.height = 0.800000011920929
 op.height_invert = False
 op.height_offset = 0.0
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 1.5
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '3'
 op.falloff_x = 2.0
 op.falloff_y = 2.0
 op.edge_level = 0.0
 op.maximum = 1.0
 op.minimum = -1.0
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 5.0
 op.strata_type = '0'
 op.water_plane = False
diff --git a/presets/operator/mesh.landscape_add/yin_yang.py b/presets/operator/mesh.landscape_add/yin_yang.py
index 18da2deebaaad3ee7b25dc47db3b43f66ead67fa..30873f0a234bf4f5aeb44834022d9b91647efbb3 100644
--- a/presets/operator/mesh.landscape_add/yin_yang.py
+++ b/presets/operator/mesh.landscape_add/yin_yang.py
@@ -40,13 +40,27 @@ op.marble_shape = '2'
 op.height = 1.0
 op.height_invert = False
 op.height_offset = 0.0
+op.fx_mixfactor = 0.0
+op.fx_mix_mode = '0'
+op.fx_type = '0'
+op.fx_bias = '0'
+op.fx_turb = 0.0
+op.fx_depth = 0
+op.fx_amplitude = 0.5
+op.fx_frequency = 1.5
+op.fx_size = 1.0
+op.fx_loc_x = 0.0
+op.fx_loc_y = 0.0
+op.fx_height = 0.5
+op.fx_invert = False
+op.fx_offset = 0.0
 op.edge_falloff = '3'
 op.falloff_x = 2.0
 op.falloff_y = 2.0
 op.edge_level = 0.0
 op.maximum = 1.0
 op.minimum = 0.0
-op.use_vgroup = False
+op.vert_group = ''
 op.strata = 4.0
 op.strata_type = '1'
 op.water_plane = False