diff --git a/osm_common/__init__.py b/osm_common/__init__.py
index 601b140..882df08 100644
--- a/osm_common/__init__.py
+++ b/osm_common/__init__.py
@@ -1,2 +1,2 @@
-version = '0.1.6'
-date_version = '2018-08-31'
+version = '0.1.7'
+date_version = '2018-09-07'
diff --git a/osm_common/dbbase.py b/osm_common/dbbase.py
index 2dada76..3700b3a 100644
--- a/osm_common/dbbase.py
+++ b/osm_common/dbbase.py
@@ -1,4 +1,6 @@
+import yaml
 from http import HTTPStatus
+from copy import deepcopy
 
 __author__ = "Alfonso Tierno <alfonso.tiernosepulveda@telefonica.com>"
 
@@ -36,3 +38,201 @@
 
     def del_one(self, table, filter={}, fail_on_empty=True):
         raise DbException("Method 'del_one' not implemented")
+
+
+def deep_update(dict_to_change, dict_reference, key_list=None):
+    """
+    Modifies one dictionary with the information of the other following https://tools.ietf.org/html/rfc7396
+    Basically is a recursive python 'dict_to_change.update(dict_reference)', but a value of None is used to delete.
+    It implements an extra feature that allows modifying an array. RFC7396 only allows replacing the entire array.
+    For that, dict_reference should contains a dict with keys starting by "$" with the following meaning:
+        $[index]    <index> is an integer for targeting a concrete index from dict_to_change array. If the value is None
+                    the element of the array is deleted, otherwise it is edited.
+        $+[index]   The value is inserted at this <index>. A value of None has not sense and an exception is raised.
+        $+          The value is appended at the end. A value of None has not sense and an exception is raised.
+        $val        It looks for all the items in the array dict_to_change equal to <val>. <val> is evaluated as yaml,
+                    that is, numbers are taken as type int, true/false as boolean, etc. Use quotes to force string.
+                    Nothing happens if no match is found. If the value is None the matched elements are deleted.
+        $key: val   In case a dictionary is passed in yaml format, if looks for all items in the array dict_to_change
+                    that are dictionaries and contains this <key> equal to <val>. Several keys can be used by yaml
+                    format '{key: val, key: val, ...}'; and all of them mast match. Nothing happens if no match is
+                    found. If value is None the matched items are deleted, otherwise they are edited.
+        $+val       If no match if found (see '$val'), the value is appended to the array. If any match is found nothing
+                    is changed. A value of None has not sense.
+        $+key: val  If no match if found (see '$key: val'), the value is appended to the array. If any match is found
+                    nothing is changed. A value of None has not sense.
+    If there are several editions, insertions and deletions; editions and deletions are done first in reverse index
+        order; then insertions also in reverse index order; and finally appends in any order. So indexes used at
+        insertions must take into account the deleted items.
+    :param dict_to_change:  Target dictionary to be changed.
+    :param dict_reference: Dictionary that contains changes to be applied.
+    :param key_list: This is used internally for recursive calls. Do not fill this parameter.
+    :return: none or raises and exception only at array modification when there is a bad format or conflict.
+    """
+    def _deep_update_array(array_to_change, _dict_reference, _key_list):
+        to_append = {}
+        to_insert_at_index = {}
+        values_to_edit_delete = {}
+        indexes_to_edit_delete = []
+        array_edition = None
+        _key_list.append("")
+        for k in _dict_reference:
+            _key_list[-1] = str(k)
+            if not isinstance(k, str) or not k.startswith("$"):
+                if array_edition is True:
+                    raise DbException("Found array edition (keys starting with '$') and pure dictionary edition in the"
+                                      " same dict at '{}'".format(":".join(_key_list[:-1])))
+                array_edition = False
+                continue
+            else:
+                if array_edition is False:
+                    raise DbException("Found array edition (keys starting with '$') and pure dictionary edition in the"
+                                      " same dict at '{}'".format(":".join(_key_list[:-1])))
+                array_edition = True
+            insert = False
+            indexes = []  # indexes to edit or insert
+            kitem = k[1:]
+            if kitem.startswith('+'):
+                insert = True
+                kitem = kitem[1:]
+                if _dict_reference[k] is None:
+                    raise DbException("A value of None has not sense for insertions at '{}'".format(
+                        ":".join(_key_list)))
+
+            if kitem.startswith('[') and kitem.endswith(']'):
+                try:
+                    index = int(kitem[1:-1])
+                    if index < 0:
+                        index += len(array_to_change)
+                    if index < 0:
+                        index = 0  # skip outside index edition
+                    indexes.append(index)
+                except Exception:
+                    raise DbException("Wrong format at '{}'. Expecting integer index inside quotes".format(
+                        ":".join(_key_list)))
+            elif kitem:
+                # match_found_skip = False
+                try:
+                    filter_in = yaml.safe_load(kitem)
+                except Exception:
+                    raise DbException("Wrong format at '{}'. Expecting '$<yaml-format>'".format(":".join(_key_list)))
+                if isinstance(filter_in, dict):
+                    for index, item in enumerate(array_to_change):
+                        for filter_k, filter_v in filter_in.items():
+                            if not isinstance(item, dict) or filter_k not in item or item[filter_k] != filter_v:
+                                break
+                        else:  # match found
+                            if insert:
+                                # match_found_skip = True
+                                insert = False
+                                break
+                            else:
+                                indexes.append(index)
+                else:
+                    index = 0
+                    try:
+                        while True:  # if not match a ValueError exception will be raise
+                            index = array_to_change.index(filter_in, index)
+                            if insert:
+                                # match_found_skip = True
+                                insert = False
+                                break
+                            indexes.append(index)
+                            index += 1
+                    except ValueError:
+                        pass
+
+                # if match_found_skip:
+                #     continue
+            elif not insert:
+                raise DbException("Wrong format at '{}'. Expecting '$+', '$[<index]' or '$[<filter>]'".format(
+                    ":".join(_key_list)))
+            for index in indexes:
+                if insert:
+                    if index in to_insert_at_index and to_insert_at_index[index] != _dict_reference[k]:
+                        # Several different insertions on the same item of the array
+                        raise DbException("Conflict at '{}'. Several insertions on same array index {}".format(
+                            ":".join(_key_list), index))
+                    to_insert_at_index[index] = _dict_reference[k]
+                else:
+                    if index in indexes_to_edit_delete and values_to_edit_delete[index] != _dict_reference[k]:
+                        # Several different editions on the same item of the array
+                        raise DbException("Conflict at '{}'. Several editions on array index {}".format(
+                            ":".join(_key_list), index))
+                    indexes_to_edit_delete.append(index)
+                    values_to_edit_delete[index] = _dict_reference[k]
+            if not indexes:
+                if insert:
+                    to_append[k] = _dict_reference[k]
+                # elif _dict_reference[k] is not None:
+                #     raise DbException("Not found any match to edit in the array, or wrong format at '{}'".format(
+                #         ":".join(_key_list)))
+
+        # edition/deletion is done before insertion
+        indexes_to_edit_delete.sort(reverse=True)
+        for index in indexes_to_edit_delete:
+            _key_list[-1] = str(index)
+            try:
+                if values_to_edit_delete[index] is None:  # None->Anything
+                    try:
+                        del (array_to_change[index])
+                    except IndexError:
+                        pass  # it is not consider an error if this index does not exist
+                elif not isinstance(values_to_edit_delete[index], dict):  # NotDict->Anything
+                    array_to_change[index] = deepcopy(values_to_edit_delete[index])
+                elif isinstance(array_to_change[index], dict):  # Dict->Dict
+                    deep_update(array_to_change[index], values_to_edit_delete[index], _key_list)
+                else:  # Dict->NotDict
+                    if isinstance(array_to_change[index], list):  # Dict->List. Check extra array edition
+                        if _deep_update_array(array_to_change[index], values_to_edit_delete[index], _key_list):
+                            continue
+                    array_to_change[index] = deepcopy(values_to_edit_delete[index])
+                    # calling deep_update to delete the None values
+                    deep_update(array_to_change[index], values_to_edit_delete[index], _key_list)
+            except IndexError:
+                raise DbException("Array edition index out of range at '{}'".format(":".join(_key_list)))
+
+        # insertion with indexes
+        to_insert_indexes = list(to_insert_at_index.keys())
+        to_insert_indexes.sort(reverse=True)
+        for index in to_insert_indexes:
+            array_to_change.insert(index, to_insert_at_index[index])
+
+        # append
+        for k, insert_value in to_append.items():
+            _key_list[-1] = str(k)
+            insert_value_copy = deepcopy(insert_value)
+            if isinstance(insert_value_copy, dict):
+                # calling deep_update to delete the None values
+                deep_update(insert_value_copy, insert_value, _key_list)
+            array_to_change.append(insert_value_copy)
+
+        _key_list.pop()
+        if array_edition:
+            return True
+        return False
+
+    if key_list is None:
+        key_list = []
+    key_list.append("")
+    for k in dict_reference:
+        key_list[-1] = str(k)
+        if dict_reference[k] is None:   # None->Anything
+            if k in dict_to_change:
+                del dict_to_change[k]
+        elif not isinstance(dict_reference[k], dict):  # NotDict->Anything
+            dict_to_change[k] = deepcopy(dict_reference[k])
+        elif k not in dict_to_change:  # Dict->Empty
+            dict_to_change[k] = deepcopy(dict_reference[k])
+            # calling deep_update to delete the None values
+            deep_update(dict_to_change[k], dict_reference[k], key_list)
+        elif isinstance(dict_to_change[k], dict):  # Dict->Dict
+            deep_update(dict_to_change[k], dict_reference[k], key_list)
+        else:       # Dict->NotDict
+            if isinstance(dict_to_change[k], list):  # Dict->List. Check extra array edition
+                if _deep_update_array(dict_to_change[k], dict_reference[k], key_list):
+                    continue
+            dict_to_change[k] = deepcopy(dict_reference[k])
+            # calling deep_update to delete the None values
+            deep_update(dict_to_change[k], dict_reference[k], key_list)
+    key_list.pop()
diff --git a/osm_common/tests/test_dbbase.py b/osm_common/tests/test_dbbase.py
index c2af52f..2da4506 100644
--- a/osm_common/tests/test_dbbase.py
+++ b/osm_common/tests/test_dbbase.py
@@ -1,7 +1,7 @@
 import http
 import pytest
-
-from osm_common.dbbase import DbBase, DbException
+import unittest
+from osm_common.dbbase import DbBase, DbException, deep_update
 
 
 def exception_message(message):
@@ -60,3 +60,104 @@
         db_base.del_one(None, None, None)
     assert str(excinfo.value).startswith(exception_message("Method 'del_one' not implemented"))
     assert excinfo.value.http_code == http.HTTPStatus.NOT_FOUND
+
+
+class TestDeepUpdate(unittest.TestCase):
+    def test_update_dict(self):
+        # Original, patch, expected result
+        TEST = (
+            ({"a": "b"}, {"a": "c"}, {"a": "c"}),
+            ({"a": "b"}, {"b": "c"}, {"a": "b", "b": "c"}),
+            ({"a": "b"}, {"a": None}, {}),
+            ({"a": "b", "b": "c"}, {"a": None}, {"b": "c"}),
+            ({"a": ["b"]}, {"a": "c"}, {"a": "c"}),
+            ({"a": "c"}, {"a": ["b"]}, {"a": ["b"]}),
+            ({"a": {"b": "c"}}, {"a": {"b": "d", "c": None}}, {"a": {"b": "d"}}),
+            ({"a": [{"b": "c"}]}, {"a": [1]}, {"a": [1]}),
+            ({1: ["a", "b"]}, {1: ["c", "d"]}, {1: ["c", "d"]}),
+            ({1: {"a": "b"}}, {1: ["c"]}, {1: ["c"]}),
+            ({1: {"a": "foo"}}, {1: None}, {}),
+            ({1: {"a": "foo"}}, {1: "bar"}, {1: "bar"}),
+            ({"e": None}, {"a": 1}, {"e": None, "a": 1}),
+            ({1: [1, 2]}, {1: {"a": "b", "c": None}}, {1: {"a": "b"}}),
+            ({}, {"a": {"bb": {"ccc": None}}}, {"a": {"bb": {}}}),
+        )
+        for t in TEST:
+            deep_update(t[0], t[1])
+            self.assertEqual(t[0], t[2])
+        # test deepcopy is done. So that original dictionary does not reference the pach
+        test_original = {1: {"a": "b"}}
+        test_patch = {1: {"c": {"d": "e"}}}
+        test_result = {1: {"a": "b", "c": {"d": "e"}}}
+        deep_update(test_original, test_patch)
+        self.assertEqual(test_original, test_result)
+        test_patch[1]["c"]["f"] = "edition of patch, must not modify original"
+        self.assertEqual(test_original, test_result)
+
+    def test_update_array(self):
+        # This TEST contains a list with the the Original, patch, and expected result
+        TEST = (
+            # delete all instances of "a"/"d"
+            ({"A": ["a", "b", "a"]}, {"A": {"$a": None}}, {"A": ["b"]}),
+            ({"A": ["a", "b", "a"]}, {"A": {"$d": None}}, {"A": ["a", "b", "a"]}),
+            # delete and insert at 0
+            ({"A": ["a", "b", "c"]}, {"A": {"$b": None, "$+[0]": "b"}}, {"A": ["b", "a", "c"]}),
+            # delete and edit
+            ({"A": ["a", "b", "a"]}, {"A": {"$a": None, "$[1]": {"c": "d"}}}, {"A": [{"c": "d"}]}),
+            # insert if not exist
+            ({"A": ["a", "b", "c"]}, {"A": {"$+b": "b"}}, {"A": ["a", "b", "c"]}),
+            ({"A": ["a", "b", "c"]}, {"A": {"$+d": "f"}}, {"A": ["a", "b", "c", "f"]}),
+            # edit by filter
+            ({"A": ["a", "b", "a"]}, {"A": {"$b": {"c": "d"}}}, {"A": ["a", {"c": "d"}, "a"]}),
+            ({"A": ["a", "b", "a"]}, {"A": {"$b": None, "$+[0]": "b", "$+": "c"}}, {"A": ["b", "a", "a", "c"]}),
+            ({"A": ["a", "b", "a"]}, {"A": {"$c": None}}, {"A": ["a", "b", "a"]}),
+            # index deletion out of range
+            ({"A": ["a", "b", "a"]}, {"A": {"$[5]": None}}, {"A": ["a", "b", "a"]}),
+            # nested array->dict
+            ({"A": ["a", "b", {"id": "1", "c": {"d": 2}}]}, {"A": {"$id: '1'": {"h": None, "c": {"d": "e", "f": "g"}}}},
+             {"A": ["a", "b", {"id": "1", "c": {"d": "e", "f": "g"}}]}),
+            ({"A": [{"id": 1, "c": {"d": 2}}, {"id": 1, "c": {"f": []}}]},
+             {"A": {"$id: 1": {"h": None, "c": {"d": "e", "f": "g"}}}},
+             {"A": [{"id": 1, "c": {"d": "e", "f": "g"}}, {"id": 1, "c": {"d": "e", "f": "g"}}]}),
+            # nested array->array
+            ({"A": ["a", "b", ["a", "b"]]}, {"A": {"$b": None, "$[2]": {"$b": {}, "$+": "c"}}},
+             {"A": ["a", ["a", {}, "c"]]}),
+            # types str and int different, so not found
+            ({"A": ["a", {"id": "1", "c": "d"}]}, {"A": {"$id: 1": {"c": "e"}}}, {"A": ["a", {"id": "1", "c": "d"}]}),
+
+        )
+        for t in TEST:
+            print(t)
+            deep_update(t[0], t[1])
+            self.assertEqual(t[0], t[2])
+
+    def test_update_badformat(self):
+        # This TEST contains original, incorrect patch and #TODO text that must be present
+        TEST = (
+            # conflict, index 0 is edited twice
+            ({"A": ["a", "b", "a"]}, {"A": {"$a": None, "$[0]": {"c": "d"}}}),
+            # conflict, two insertions at same index
+            ({"A": ["a", "b", "a"]}, {"A": {"$[1]": "c", "$[-2]": "d"}}),
+            ({"A": ["a", "b", "a"]}, {"A": {"$[1]": "c", "$[+1]": "d"}}),
+            # bad format keys with and without $
+            ({"A": ["a", "b", "a"]}, {"A": {"$b": {"c": "d"}, "c": 3}}),
+            # bad format empty $ and yaml incorrect
+            ({"A": ["a", "b", "a"]}, {"A": {"$": 3}}),
+            ({"A": ["a", "b", "a"]}, {"A": {"$a: b: c": 3}}),
+            ({"A": ["a", "b", "a"]}, {"A": {"$a: b, c: d": 3}}),
+            # insertion of None
+            ({"A": ["a", "b", "a"]}, {"A": {"$+": None}}),
+            # Not found, insertion of None
+            ({"A": ["a", "b", "a"]}, {"A": {"$+c": None}}),
+            # index edition out of range
+            ({"A": ["a", "b", "a"]}, {"A": {"$[5]": 6}}),
+            # conflict, two editions on index 2
+            ({"A": ["a", {"id": "1", "c": "d"}]}, {"A": {"$id: '1'": {"c": "e"}, "$c: d": {"c": "f"}}}),
+        )
+        for t in TEST:
+            print(t)
+            self.assertRaises(DbException, deep_update, t[0], t[1])
+            try:
+                deep_update(t[0], t[1])
+            except DbException as e:
+                print(e)
