diff --git a/README-extentions.rst b/README-extentions.rst
index 554a62d..97d78af 100644
--- a/README-extentions.rst
+++ b/README-extentions.rst
@@ -92,6 +92,37 @@
 the final value.
 
 
+Allow override list and dicts by empty entity,None instead of merge
+-------------------------------------------------------------------
+
+With settings:
+
+.. code-block:: yaml
+
+  allow_none_override: True       # default True
+
+  # note dict,list over None is allowed and not configurable
+
+Referenced lists or dicts can now be overriden by None or empty type of dict, list:
+
+.. code-block:: yaml
+
+  # nodes/test.yml
+  parameters:
+    one:
+      a: 1
+      b: 2
+    two: {}
+    three: None
+
+  # classes/test1.yml
+  parameters:
+    one: ${two}
+
+  # classes/test2.yml
+  parameters:
+    three: ${one}
+
 
 Nested References
 -----------------
diff --git a/reclass/datatypes/tests/test_parameters.py b/reclass/datatypes/tests/test_parameters.py
index bb9ec35..577bdc4 100644
--- a/reclass/datatypes/tests/test_parameters.py
+++ b/reclass/datatypes/tests/test_parameters.py
@@ -193,6 +193,40 @@
         p1.initialise_interpolation()
         self.assertEqual(p1.as_dict()['key'], l[2])
 
+    def test_merge_none_over_list(self):
+        l = ['foo', 1, 2]
+        settings = Settings({'allow_none_override': True})
+        p1 = Parameters(dict(key=l[:2]), settings, '')
+        p2 = Parameters(dict(key=None), settings, '')
+        p1.merge(p2)
+        p1.initialise_interpolation()
+        self.assertEqual(p1.as_dict()['key'], None)
+
+    def test_merge_none_over_dict(self):
+        settings = Settings({'allow_none_override': True})
+        p1 = Parameters(dict(key=SIMPLE), settings, '')
+        p2 = Parameters(dict(key=None), settings, '')
+        p1.merge(p2)
+        p1.initialise_interpolation()
+        self.assertEqual(p1.as_dict()['key'], None)
+
+    # def test_merge_bare_dict_over_dict(self):
+        # settings = Settings({'allow_bare_override': True})
+        # p1 = Parameters(dict(key=SIMPLE), settings, '')
+        # p2 = Parameters(dict(key=dict()), settings, '')
+        # p1.merge(p2)
+        # p1.initialise_interpolation()
+        # self.assertEqual(p1.as_dict()['key'], {})
+
+    # def test_merge_bare_list_over_list(self):
+        # l = ['foo', 1, 2]
+        # settings = Settings({'allow_bare_override': True})
+        # p1 = Parameters(dict(key=l), settings, '')
+        # p2 = Parameters(dict(key=list()), settings, '')
+        # p1.merge(p2)
+        # p1.initialise_interpolation()
+        # self.assertEqual(p1.as_dict()['key'], [])
+
     def test_merge_dicts(self):
         mergee = {'five':5,'four':4,'None':None,'tuple':(1,2,3)}
         p = Parameters(dict(dict=SIMPLE), SETTINGS, '')
diff --git a/reclass/defaults.py b/reclass/defaults.py
index ac8aa34..980bb92 100644
--- a/reclass/defaults.py
+++ b/reclass/defaults.py
@@ -29,6 +29,7 @@
 OPT_ALLOW_SCALAR_OVER_LIST = False
 OPT_ALLOW_LIST_OVER_SCALAR = False
 OPT_ALLOW_DICT_OVER_SCALAR = False
+OPT_ALLOW_NONE_OVERRIDE = True
 
 OPT_INVENTORY_IGNORE_FAILED_NODE = False
 OPT_INVENTORY_IGNORE_FAILED_RENDER = False
diff --git a/reclass/settings.py b/reclass/settings.py
index a1e203e..44c58d8 100644
--- a/reclass/settings.py
+++ b/reclass/settings.py
@@ -9,6 +9,7 @@
         self.allow_scalar_over_list = options.get('allow_scalar_over_list', OPT_ALLOW_SCALAR_OVER_LIST)
         self.allow_list_over_scalar = options.get('allow_list_over_scalar', OPT_ALLOW_LIST_OVER_SCALAR)
         self.allow_dict_over_scalar = options.get('allow_dict_over_scalar', OPT_ALLOW_DICT_OVER_SCALAR)
+        self.allow_none_override = options.get('allow_none_override', OPT_ALLOW_NONE_OVERRIDE)
         self.automatic_parameters = options.get('automatic_parameters', AUTOMATIC_RECLASS_PARAMETERS)
         self.default_environment = options.get('default_environment', DEFAULT_ENVIRONMENT)
         self.delimiter = options.get('delimiter', PARAMETER_INTERPOLATION_DELIMITER)
@@ -38,6 +39,7 @@
                and self.allow_scalar_over_list == other.allow_scalar_over_list \
                and self.allow_list_over_scalar == other.allow_list_over_scalar \
                and self.allow_dict_over_scalar == other.allow_dict_over_scalar \
+               and self.allow_none_override == other.allow_none_override \
                and self.automatic_parameters == other.automatic_parameters \
                and self.default_environment == other.default_environment \
                and self.delimiter == other.delimiter \
diff --git a/reclass/values/scaitem.py b/reclass/values/scaitem.py
index 6fd3194..466d3c9 100644
--- a/reclass/values/scaitem.py
+++ b/reclass/values/scaitem.py
@@ -21,12 +21,12 @@
         if item.type == Item.SCALAR:
             return self
         elif item.type == Item.LIST:
-            if self._settings.allow_scalar_over_list:
+            if self._settings.allow_scalar_over_list or (self._settings.allow_none_override and self._value in [None, 'none', 'None']):
                 return self
             else:
                 raise TypeError('allow scalar over list = False: cannot merge %s over %s' % (repr(self), repr(item)))
         elif item.type == Item.DICTIONARY:
-            if self._settings.allow_scalar_over_dict:
+            if self._settings.allow_scalar_over_dict or (self._settings.allow_none_override and self._value in [None, 'none', 'None']):
                 return self
             else:
                 raise TypeError('allow scalar over dict = False: cannot merge %s over %s' % (repr(self), repr(item)))
