diff --git a/_modules/contrail.py b/_modules/contrail.py
index cfdc793..ab3df9e 100644
--- a/_modules/contrail.py
+++ b/_modules/contrail.py
@@ -157,7 +157,10 @@
         - tor-service-node
         - embedded
     '''
-    ret = {}
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': ''}
     vnc_client = _auth(**kwargs)
     gsc_obj = _get_config(vnc_client)
     vrouter_objs = virtual_router_list(**kwargs)
@@ -167,25 +170,27 @@
     if name in vrouter_objs:
         vrouter = virtual_router_get(name)
         vrouter_obj = vnc_client._object_read('virtual-router', id=vrouter[name]['uuid'])
-        changed = False
+        changes = {}
         if vrouter_obj.get_virtual_router_ip_address() != ip_address:
-            ret['ip_address'] = {'from': vrouter_obj.get_virtual_router_ip_address(), "to": ip_address}
+            changes['ip_address'] = {'from': vrouter_obj.get_virtual_router_ip_address(), "to": ip_address}
             vrouter_obj.set_virtual_router_ip_address(ip_address)
-            changed = True
         if vrouter_obj.get_virtual_router_type() != router_type:
-            ret['router_type'] = {"from": vrouter_obj.get_virtual_router_type(), "to": router_type}
+            changes['router_type'] = {"from": vrouter_obj.get_virtual_router_type(), "to": router_type}
             vrouter_obj.set_virtual_router_type(router_type)
-            changed = True
         if vrouter_obj.get_virtual_router_dpdk_enabled() != dpdk_enabled:
-            ret['dpdk_enabled'] = {"from": vrouter_obj.get_virtual_router_dpdk_enabled(), "to": dpdk_enabled}
+            changes['dpdk_enabled'] = {"from": vrouter_obj.get_virtual_router_dpdk_enabled(), "to": dpdk_enabled}
             vrouter_obj.set_virtual_router_dpdk_enabled(dpdk_enabled)
-            changed = True
-        if changed:
+        if len(changes) != 0:
             if __opts__['test']:
-                return "Virtual router " + name + " will be updated"
-            vnc_client.virtual_router_update(vrouter_obj)
+                ret['result'] = None
+                ret['comment'] = "Virtual router " + name + " will be updated"
+            else:
+                ret['comment'] = "VirtualRouter " + name + " has been updated"
+                ret['changes'] = changes
+                vnc_client.virtual_router_update(vrouter_obj)
             return ret
-        return {'OK': 'Virtual router %s already exists and is updated' % name}
+        ret['comment'] = 'Virtual router ' + name + ' already exists and is updated'
+        return ret
     else:
         vrouter_obj = VirtualRouter(
             name, gsc_obj,
@@ -193,10 +198,13 @@
             virtual_router_type=router_type)
         vrouter_obj.set_virtual_router_dpdk_enabled(dpdk_enabled)
         if __opts__['test']:
-            return "Virtual router " + name + " will be created"
-        vnc_client.virtual_router_create(vrouter_obj)
-    ret = virtual_router_list(**kwargs)
-    return "Create"
+            ret['result'] = None
+            ret['comment'] = "VirtualRouter " + name + " will be created"
+        else:
+            vnc_client.virtual_router_create(vrouter_obj)
+            ret['comment'] = "VirtualRouter " + name + " has been created"
+            ret['changes'] = {'VirtualRouter': {'old': '', 'new': name}}
+    return ret
 
 
 def virtual_router_delete(name, **kwargs):
@@ -209,14 +217,21 @@
 
         salt '*' contrail.virtual_router_delete cmp01
     '''
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': ''}
     vnc_client = _auth(**kwargs)
     gsc_obj = _get_config(vnc_client)
     vrouter_obj = VirtualRouter(name, gsc_obj)
     if __opts__['test']:
-        return "Virtual router " + name + " will be deleted"
-    vnc_client.virtual_router_delete(
-        fq_name=vrouter_obj.get_fq_name())
-    return "Deleted"
+        ret['result'] = None
+        ret['comment'] = "VirtualRouter " + name + " will be deleted"
+    else:
+        vnc_client.virtual_router_delete(fq_name=vrouter_obj.get_fq_name())
+        ret['comment'] = "VirtualRouter " + name + " has been deleted"
+        ret['changes'] = {'VirtualRouter': {'old': name, 'new': ''}}
+    return ret
 
 
 def physical_router_list(**kwargs):
@@ -280,58 +295,75 @@
 
         salt '*' contrail.physical_router_create OVSDB_router management_ip=10.167.4.202 dataplane_ip=172.16.20.15 vendor_name=MyVendor product_name=MyProduct agents="['tor01','tns01']"
     '''
-    ret = {}
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': ''}
     vnc_client = _auth(**kwargs)
-    gsc_obj = _get_config(vnc_client)
+    # gsc_obj = _get_config(vnc_client)
     prouter_objs = physical_router_list(**kwargs)
     if name in prouter_objs:
         prouter = physical_router_get(name)
+        changes = {}
         prouter_obj = vnc_client._object_read('physical-router', id=prouter[name]['_uuid'])
         if prouter_obj.physical_router_management_ip != management_ip:
-            ret['management_ip'] = {'from': prouter_obj.physical_router_management_ip, "to": management_ip}
+            changes['management_ip'] = {'from': prouter_obj.physical_router_management_ip, "to": management_ip}
             prouter_obj.set_physical_router_management_ip(management_ip)
         if prouter_obj.physical_router_dataplane_ip != dataplane_ip:
-            ret['dataplane_ip'] = {'from': prouter_obj.physical_router_dataplane_ip, "to": dataplane_ip}
+            changes['dataplane_ip'] = {'from': prouter_obj.physical_router_dataplane_ip, "to": dataplane_ip}
             prouter_obj.set_physical_router_dataplane_ip(dataplane_ip)
         if prouter_obj.get_physical_router_vendor_name() != vendor_name:
-            ret['vendor_name'] = {'from': prouter_obj.get_physical_router_vendor_name(), "to": vendor_name}
+            changes['vendor_name'] = {'from': prouter_obj.get_physical_router_vendor_name(), "to": vendor_name}
             prouter_obj.set_physical_router_vendor_name(vendor_name)
         if prouter_obj.get_physical_router_product_name() != product_name:
-            ret['product_name'] = {'from': prouter_obj.get_physical_router_product_name(), "to": product_name}
+            changes['product_name'] = {'from': prouter_obj.get_physical_router_product_name(), "to": product_name}
             prouter_obj.set_physical_router_product_name(product_name)
         if prouter_obj.get_physical_router_vnc_managed() != vnc_managed:
-            ret['vnc_managed'] = {'from': prouter_obj.get_physical_router_vnc_managed(), "to": vnc_managed}
+            changes['vnc_managed'] = {'from': prouter_obj.get_physical_router_vnc_managed(), "to": vnc_managed}
             prouter_obj.set_physical_router_vnc_managed(vnc_managed)
         if prouter_obj.get_physical_router_junos_service_ports() != junos_service_ports:
-            ret['junos_service_ports'] = {'from': prouter_obj.get_physical_router_junos_service_ports(),
-                                          "to": junos_service_ports}
+            changes['junos_service_ports'] = {'from': prouter_obj.get_physical_router_junos_service_ports(),
+                                              'to': junos_service_ports}
             prouter_obj.set_physical_router_junos_service_ports(junos_service_ports)
 
-        if __opts__['test']:
-            if len(ret) != 0:
-                return "Physical router " + name + " will be updated"
-            return {"OK": "Physical router exists and is updated"}
+        if len(changes) != 0:
+            if __opts__['test']:
+                ret['result'] = None
+                ret['comment'] = "Physical router " + name + " will be updated"
+        else:
+            ret['comment'] = 'Physical router ' + name + ' already exists and is updated'
+        return ret
 
         vrouter_objs = vnc_client._objects_list('virtual-router', detail=True)  # all vrouter objects
         c_agents = []  # referenced vrouters
         for c_agent in prouter_obj.get_virtual_router_refs():
             c_agents.append(c_agent['uuid'])
-        agent_objs = []  # required state of references
+        # agent_objs = []  # required state of references
         for vrouter_obj in vrouter_objs:
             if vrouter_obj._display_name in agents and vrouter_obj._uuid not in c_agents:
                 prouter_obj.add_virtual_router(vrouter_obj)
-                ret['vrouter ' + vrouter_obj._display_name] = "Reference added"
+                changes['vrouter ' + vrouter_obj._display_name] = "Reference added"
             if vrouter_obj._display_name not in agents and vrouter_obj._uuid in c_agents:
                 prouter_obj.del_virtual_router(vrouter_obj)
-                ret['vrouter ' + vrouter_obj._display_name] = "Reference removed"
+                changes['vrouter ' + vrouter_obj._display_name] = "Reference removed"
         vnc_client.physical_router_update(prouter_obj)
 
-        if len(ret) == 0:
-            return {"OK": "Physical router exists and is updated"}
+        if __opts__['test']:
+            ret['result'] = None
+            ret['comment'] = "VirtualRouter " + name + " will be created"
+        else:
+            vnc_client.virtual_router_create(vrouter_obj)
+            ret['comment'] = "VirtualRouter " + name + " has been created"
+            ret['changes'] = {'VirtualRouter': {'old': '', 'new': name}}
+
+        if len(changes) == 0:
+            ret['comment'] = "Physical router exists and is updated"
         return ret
     else:
         if __opts__['test']:
-            return "Physical router " + name + " will be created"
+            ret['result'] = None
+            ret['comment'] = "Physical router " + name + " will be created"
+            return ret
         prouter_obj = PhysicalRouter(
             name=name,
             parent_obj=None,
@@ -347,7 +379,9 @@
             vrouter_obj = vnc_client._object_read('virtual-router', id=vrouter[agent]['uuid'])
             prouter_obj.add_virtual_router(vrouter_obj)
         vnc_client.physical_router_create(prouter_obj)
-    return "Created"
+        ret['comment'] = "Physical router " + name + " has been created"
+        ret['changes'] = {'PhysicalRouter': {'old': '', 'new': name}}
+    return ret
 
 
 def physical_router_delete(name, **kwargs):
@@ -360,14 +394,21 @@
 
         salt '*' contrail.physical_router_delete router_name
     '''
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': ''}
     vnc_client = _auth(**kwargs)
     gsc_obj = _get_config(vnc_client)
     prouter_obj = PhysicalRouter(name, gsc_obj)
     if __opts__['test']:
-        return "Physical router " + name + " will be deleted"
-    vnc_client.physical_router_delete(
-        fq_name=prouter_obj.get_fq_name())
-    return "Deleted"
+        ret['result'] = None
+        ret['comment'] = "Physical router " + name + " will be deleted"
+    else:
+        vnc_client.physical_router_delete(fq_name=prouter_obj.get_fq_name())
+        ret['comment'] = "Physical router " + name + " has been deleted"
+        ret['changes'] = {'Physical router': {'old': name, 'new': ''}}
+    return ret
 
 
 def physical_interface_list(**kwargs):
@@ -424,20 +465,29 @@
 
         salt '*' contrail.physical_interface_create ge-0/0/10 physical_router_name
     '''
-    ret = {}
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': ''}
     vnc_client = _auth(**kwargs)
-    gsc_obj = _get_config(vnc_client)
+    # gsc_obj = _get_config(vnc_client)
     pinterf_obj = physical_interface_get(name, physical_router, **kwargs)
     if 'Error' not in pinterf_obj:
-        return {'OK': 'Physical interface ' + name + ' on ' + physical_router + ' already exists'}
-    else:
-        if __opts__['test']:
-            return "Physical interface " + name + " will be created"
-        prouter = physical_router_get(physical_router)
-        prouter_obj = vnc_client._object_read('physical-router', id=prouter[physical_router]['_uuid'])
-        pinterf_obj = PhysicalInterface(name, prouter_obj)
-        vnc_client.physical_interface_create(pinterf_obj)
-    return "Created"
+        ret['comment'] = 'Physical interface ' + name + ' on ' + physical_router + ' already exists'
+        return ret
+
+    if __opts__['test']:
+        ret['result'] = None
+        ret['comment'] = "Physical interface " + name + " will be created"
+        return ret
+
+    prouter = physical_router_get(physical_router)
+    prouter_obj = vnc_client._object_read('physical-router', id=prouter[physical_router]['_uuid'])
+    pinterf_obj = PhysicalInterface(name, prouter_obj)
+    vnc_client.physical_interface_create(pinterf_obj)
+    ret['comment'] = "Physical interface " + name + " has been created"
+    ret['changes'] = {'Physical interface': {'old': '', 'new': name}}
+    return ret
 
 
 def physical_interface_delete(name, physical_router, **kwargs):
@@ -449,13 +499,21 @@
 
         salt '*' contrail.physical_interface_delete ge-0/0/0 phr01
     '''
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': ''}
     vnc_client = _auth(**kwargs)
-    gsc_obj = _get_config(vnc_client)
+    # gsc_obj = _get_config(vnc_client)
     piface = physical_interface_get(name, physical_router)
     if __opts__['test']:
-        return "Physical interface " + name + " will be deleted"
-    vnc_client.physical_interface_delete(id=piface[name]['_uuid'])
-    return "Deleted"
+        ret['result'] = None
+        ret['comment'] = "Physical interface " + name + " will be deleted"
+    else:
+        vnc_client.physical_interface_delete(id=piface[name]['_uuid'])
+        ret['comment'] = "Physical router " + name + " has been deleted"
+        ret['changes'] = {'Physical router': {'old': name, 'new': ''}}
+    return ret
 
 
 def logical_interface_list(**kwargs):
@@ -526,16 +584,21 @@
 
         salt '*' contrail.logical_interface_create ge-0/0/10.11 parent_names="['ge-0/0/0','phr1']" parent_type=physical-interface vlan_tag=1025 interface_type=L2
     '''
-    ret = {}
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': ''}
     vnc_client = _auth(**kwargs)
-    gsc_obj = _get_config(vnc_client)
+    # gsc_obj = _get_config(vnc_client)
 
     liface_obj = logical_interface_get(name, parent_names, parent_type, **kwargs)
     if 'Error' not in liface_obj:
-        return {'OK': 'Logical interface ' + name + ' already exists'}
+        ret['comment'] = 'Logical interface ' + name + ' already exists'
     else:
         if __opts__['test']:
-            return "Logical interface " + name + " will be created"
+            ret['result'] = None
+            ret['comment'] = "Logical interface " + name + " will be created"
+            return ret
         parent_obj = None
         for router in parent_names:
             parent_router = physical_router_get(router)
@@ -543,7 +606,9 @@
                 parent_obj = vnc_client._object_read('physical-router', id=parent_router[router]['_uuid'])
                 break
         if not parent_obj:
-            return {'Error': 'Physical router have to be defined'}
+            ret['result'] = False
+            ret['comment'] = 'Physical router have to be defined'
+            return ret
         if parent_type == 'physical-interface':
             for interface in parent_names:
                 parent_interface = physical_interface_get(interface, parent_obj.name)
@@ -551,18 +616,23 @@
                     parent_obj = vnc_client._object_read('physical-interface', id=parent_interface[interface]['_uuid'])
                     break
         if interface_type.lower() == "l3":
-            return {'Error': "Virtual Network have to be defined for L3 interface type"}
+            ret['result'] = False
+            ret['comment'] = "Virtual Network have to be defined for L3 interface type"
+            return ret
 
         liface_obj = LogicalInterface(name, parent_obj, vlan_tag, interface_type.lower())
 
-        for vmi_name, vmi in vmis.iteritems():
-            vmi = vnc_client.virtual_machine_interface_read(
-                fq_name=_get_fq_name(vnc_client, resource_name=vmi_name,
-                                     project_name=kwargs.get('tenant', 'admin')))
-            liface_obj.add_virtual_machine_interface(vmi)
+        if vmis:
+            for vmi_name, vmi in vmis.iteritems():
+                vmi = vnc_client.virtual_machine_interface_read(
+                    fq_name=_get_fq_name(vnc_client, resource_name=vmi_name,
+                                         project_name=kwargs.get('tenant', 'admin')))
+                liface_obj.add_virtual_machine_interface(vmi)
         vnc_client.logical_interface_create(liface_obj)
 
-    return "Created"
+    ret['comment'] = "Logical interface " + name + " has been created"
+    ret['changes'] = {'Logical interface': {'old': '', 'new': name}}
+    return ret
 
 
 def logical_interface_delete(name, parent_names, parent_type=None, **kwargs):
@@ -578,16 +648,22 @@
         salt '*' contrail.logical_interface_delete ge-0/0/0.12 ['phr01'] parent_type=physical-router
 
     '''
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': ''}
     vnc_client = _auth(**kwargs)
-    gsc_obj = _get_config(vnc_client)
+    # gsc_obj = _get_config(vnc_client)
     liface = logical_interface_get(name, parent_names, parent_type)
-    if 'Error' not in liface:
-        if __opts__['test']:
-            return "Logical interface " + name + " will be deleted"
-        vnc_client.logical_interface_delete(id=liface[name]['_uuid'])
-        return "Deleted"
-    else:
-        return liface
+
+    if __opts__['test']:
+        ret['result'] = None
+        ret['comment'] = "Logical interface " + name + " will be deleted"
+        return ret
+    vnc_client.logical_interface_delete(id=liface[name]['_uuid'])
+    ret['comment'] = "Logical interface  " + name + " has been deleted"
+    ret['changes'] = {'LogicalInterface ': {'old': name, 'new': ''}}
+    return ret
 
 
 def global_vrouter_config_list(**kwargs):
@@ -637,12 +713,16 @@
 
         salt '*' contrail.global_vrouter_config_create name=global-vrouter-config parent_type=global-system-config encap_priority="MPLSoUDP,MPLSoGRE" vxlan_vn_id_mode="automatic" fq_names="['default-global-system-config', 'default-global-vrouter-config']"
     '''
-    ret = {}
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': ''}
     vnc_client = _auth(**kwargs)
-    gsc_obj = _get_config(vnc_client)
+    # gsc_obj = _get_config(vnc_client)
     vrouter_conf_objs = global_vrouter_config_list(**kwargs)
     if name in vrouter_conf_objs:
-        return {'OK': 'Global vrouter config %s already exists' % name}
+        ret['comment'] = 'Global vrouter config ' + name + ' already exists'
+        return ret
     else:
         vrouter_conf_obj = GlobalVrouterConfig(
             name=name,
@@ -653,9 +733,13 @@
             parent_type=parent_type,
         )
         if __opts__['test']:
-            return "Global vRouter config " + name + " will be created"
+            ret['result'] = None
+            ret['comment'] = "Global vRouter config " + name + " will be created"
+            return ret
         vnc_client.global_vrouter_config_create(vrouter_conf_obj)
-    return "Created"
+    ret['comment'] = "Global vRouter config " + name + " has been created"
+    ret['changes'] = {'Global vRouter config': {'old': '', 'new': name}}
+    return ret
 
 
 def global_vrouter_config_delete(name, **kwargs):
@@ -668,14 +752,22 @@
 
         salt '*' contrail.global_vrouter_config_delete global-vrouter-config
     '''
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': ''}
     vnc_client = _auth(**kwargs)
     gsc_obj = _get_config(vnc_client)
     vrouter_conf_obj = GlobalVrouterConfig(name, gsc_obj)
     if __opts__['test']:
-        return "Global vRouter config " + name + " will be deleted"
+        ret['result'] = None
+        ret['comment'] = "Global vRouter config " + name + " will be deleted"
+        return ret
     vnc_client.global_vrouter_config_delete(
         fq_name=vrouter_conf_obj.get_fq_name())
-    return "Deleted"
+    ret['comment'] = "Global vRouter config " + name + " has been deleted"
+    ret['changes'] = {'Global vRouter config': {'old': name, 'new': ''}}
+    return ret
 
 
 def analytics_node_list(**kwargs):
@@ -725,20 +817,29 @@
 
         salt '*' contrail.analytics_node_create ntw03 10.10.10.103
     '''
-    ret = {}
+
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': ''}
     vnc_client = _auth(**kwargs)
     gsc_obj = _get_config(vnc_client)
     analytics_node_objs = analytics_node_list(**kwargs)
     if name in analytics_node_objs:
-        return {'OK': 'Analytics node %s already exists' % name}
+        ret['comment'] = 'Analytics node %s already exists'
+        return ret
     else:
         analytics_node_obj = AnalyticsNode(
             name, gsc_obj,
             analytics_node_ip_address=ip_address)
         if __opts__['test']:
-            return "AnalyticsNode " + name + " will be created"
+            ret['result'] = None
+            ret['comment'] = "AnalyticsNode " + name + " will be created"
+            return ret
         vnc_client.analytics_node_create(analytics_node_obj)
-    return "Created"
+        ret['comment'] = "AnalyticsNode " + name + " has been created"
+        ret['changes'] = {'Analytics Node': {'old': '', 'new': name}}
+    return ret
 
 
 def analytics_node_delete(name, **kwargs):
@@ -751,14 +852,22 @@
 
         salt '*' contrail.analytics_node_delete cmp01
     '''
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': ''}
     vnc_client = _auth(**kwargs)
     gsc_obj = _get_config(vnc_client)
     analytics_node_obj = AnalyticsNode(name, gsc_obj)
     if __opts__['test']:
-        return "AnalyticsNode " + name + " will be deleted"
+        ret['result'] = None
+        ret['comment'] = "AnalyticsNode " + name + " will be deleted"
+        return ret
     vnc_client.analytics_node_delete(
         fq_name=analytics_node_obj.get_fq_name())
-    return "Deleted"
+    ret['comment'] = "AnalyticsNode " + name + " has been deleted"
+    ret['changes'] = {'Analytics Node': {'old': name, 'new': ''}}
+    return ret
 
 
 def config_node_list(**kwargs):
@@ -808,20 +917,28 @@
 
         salt '*' contrail.config_node_create ntw03 10.10.10.103
     '''
-    ret = {}
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': ''}
     vnc_client = _auth(**kwargs)
     gsc_obj = _get_config(vnc_client)
     config_node_objs = config_node_list(**kwargs)
     if name in config_node_objs:
-        return {'OK': 'Config node %s already exists' % name}
+        ret['comment'] = 'Config node ' + name + ' already exists'
+        return ret
     else:
         config_node_obj = ConfigNode(
             name, gsc_obj,
             config_node_ip_address=ip_address)
         if __opts__['test']:
-            return "ConfigNode " + name + " will be created"
+            ret['comment'] = "ConfigNode " + name + " will be created"
+            ret['result'] = None
+            return ret
         vnc_client.config_node_create(config_node_obj)
-    return "Created"
+        ret['comment'] = "ConfigNode " + name + " has been created"
+        ret['changes'] = {'ConfigNode': {'old': '', 'new': name}}
+    return ret
 
 
 def config_node_delete(name, **kwargs):
@@ -834,14 +951,22 @@
 
         salt '*' contrail.config_node_delete cmp01
     '''
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': ''}
     vnc_client = _auth(**kwargs)
     gsc_obj = _get_config(vnc_client)
     config_node_obj = ConfigNode(name, gsc_obj)
     if __opts__['test']:
-        return "ConfigNode " + name + " will be deleted"
+        ret['comment'] = "ConfigNode " + name + " will be deleted"
+        ret['result'] = None
+        return ret
     vnc_client.config_node_delete(
         fq_name=config_node_obj.get_fq_name())
-    return "Deleted"
+    ret['comment'] = "ConfigNode " + name + " has been deleted"
+    ret['changes'] = {'ConfigNode': {'old': name, 'new': ''}}
+    return ret
 
 
 def bgp_router_list(**kwargs):
@@ -892,7 +1017,10 @@
         salt '*' contrail.bgp_router_create ntw03 control-node 10.10.10.103
         salt '*' contrail.bgp_router_create mx01 router 10.10.10.105
     '''
-    ret = {}
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': ''}
     vnc_client = _auth(**kwargs)
 
     address_families = ['route-target', 'inet-vpn', 'e-vpn', 'erm-vpn',
@@ -902,7 +1030,7 @@
 
     bgp_addr_fams = AddressFamilies(address_families)
     bgp_sess_attrs = [
-        BgpSessionAttributes(address_families=bgp_addr_fams)]
+       BgpSessionAttributes(address_families=bgp_addr_fams)]
     bgp_sessions = [BgpSession(attributes=bgp_sess_attrs)]
     bgp_peering_attrs = BgpPeeringAttributes(session=bgp_sessions)
     rt_inst_obj = _get_rt_inst_obj(vnc_client)
@@ -925,15 +1053,23 @@
         bgp_router_obj = vnc_client._object_read('bgp-router', id=bgp_router_objs[name]['_uuid'])
         bgp_router_obj.set_bgp_router_parameters(router_params)
         if __opts__['test']:
-            return "BGP router " + name + " will be updated"
+            ret['result'] = None
+            ret['comment'] = "BGP router " + name + " will be updated"
+            return ret
         vnc_client.bgp_router_update(bgp_router_obj)
+        ret['comment'] = "BGP router " + name + " has been updated"
+        ret['changes'] = {'new': name}
+        return ret
     else:
         bgp_router_obj = BgpRouter(name, rt_inst_obj, bgp_router_parameters=router_params)
         if __opts__['test']:
-            return "BGP router " + name + " will be created"
+            ret['result'] = None
+            ret['comment'] = "BGP router " + name + " will be created"
+            return ret
         vnc_client.bgp_router_create(bgp_router_obj)
-        return "Created"
-    return {'OK': 'Config node %s already exists' % name}
+        ret['comment'] = "BGP router " + name + " has been created"
+        ret['changes'] = {'BGP router': {'old': name, 'new': ''}}
+    return ret
 
 
 def bgp_router_delete(name, **kwargs):
@@ -946,16 +1082,22 @@
 
         salt '*' contrail.bgp_router_delete mx01
     '''
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': ''}
     vnc_client = _auth(**kwargs)
     gsc_obj = _get_config(vnc_client)
     bgp_router_obj = BgpRouter(name, gsc_obj)
 
     if __opts__['test']:
-        return "BGP router " + name + " will be deleted"
-    vnc_client.bgp_router_delete(
-        fq_name=bgp_router_obj.get_fq_name())
-
-    return "Deleted"
+        ret['result'] = None
+        ret['comment'] = "BGP router " + name + " will be deleted"
+        return ret
+    vnc_client.bgp_router_delete(bgp_router_obj.get_uuid())
+    ret['comment'] = "BGP router " + name + " has been deleted"
+    ret['changes'] = {'BGP router': {'old': '', 'new': name}}
+    return ret
 
 
 def database_node_list(**kwargs):
@@ -1005,20 +1147,28 @@
 
         salt '*' contrail.database_node_create ntw03 10.10.10.103
     '''
-    ret = {}
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': ''}
     vnc_client = _auth(**kwargs)
     gsc_obj = _get_config(vnc_client)
     database_node_objs = database_node_list(**kwargs)
     if name in database_node_objs:
-        return {'OK': 'Database node %s already exists' % name}
+        ret['comment'] = 'Database node ' + name + ' already exists'
+        return ret
     else:
         database_node_obj = DatabaseNode(
             name, gsc_obj,
             database_node_ip_address=ip_address)
         if __opts__['test']:
-            return "DatabaseNode " + name + " will be created"
+            ret['result'] = None
+            ret['comment'] = "DatabaseNode " + name + " will be created"
+            return ret
         vnc_client.database_node_create(database_node_obj)
-    return "Created"
+        ret['comment'] = "DatabaseNode " + name + " has been created"
+        ret['changes'] = {'DatabaseNode': {'old': '', 'new': name}}
+    return ret
 
 
 def database_node_delete(name, **kwargs):
@@ -1031,13 +1181,22 @@
 
         salt '*' contrail.database_node_delete cmp01
     '''
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': ''}
     vnc_client = _auth(**kwargs)
     gsc_obj = _get_config(vnc_client)
     database_node_obj = DatabaseNode(name, gsc_obj)
     if __opts__['test']:
-        return "DatabaseNode " + name + " will be deleted"
+        ret['result'] = None
+        ret['comment'] = "DatabaseNode " + name + " will be deleted"
+        return ret
     vnc_client.database_node_delete(
         fq_name=database_node_obj.get_fq_name())
+    ret['comment'] = "DatabaseNode " + name + " has been deleted"
+    ret['changes'] = {'DatabaseNode': {'old': '', 'new': name}}
+    return ret
 
 
 def _get_vrouter_config(vnc_client):
@@ -1112,11 +1271,12 @@
         salt '*' contrail.linklocal_service_create \
             llservice 10.10.10.103 22 link-local.service.dns-name 22
     '''
-    ret = {}
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': ''}
     vnc_client = _auth(**kwargs)
-
     current_config = _get_vrouter_config(vnc_client)
-
     service_entry = LinklocalServiceEntryType(
         linklocal_service_name=name,
         linklocal_service_ip=lls_ip,
@@ -1132,9 +1292,11 @@
         new_services = LinklocalServicesTypes([service_entry])
         new_config = GlobalVrouterConfig(linklocal_services=new_services)
         if __opts__['test']:
-            ret['GlobalVrouterConfig'] = "Global vRouter Config will be created"
+            ret['result'] = None
+            ret['comment'] = "Link local service " + name + " will be created"
         else:
-            ret = "Created"
+            ret['comment'] = "Link local service " + name + " has been created"
+            ret['changes'] = {'LinkLocalSevice': {'old': '', 'new': name}}
             vnc_client.global_vrouter_config_create(new_config)
     else:
         _current_service_list = current_config.get_linklocal_services()
@@ -1150,17 +1312,21 @@
                 entry = _entry.__dict__
                 if 'linklocal_service_name' in entry:
                     if entry['linklocal_service_name'] == name:
-                        return {'OK': 'Link local service "{0}" already exists'.format(name)}
+                        ret['comment'] = 'Link local service ' + name + ' already exists'
+                        return ret
                     new_services.append(_entry)
             if __opts__['test']:
-                ret['Test'] = "LinkLocalSevices will be created"
+                ret['result'] = None
+                ret['comment'] = "LinkLocalSevices " + name + " will be created"
             service_list[key] = new_services
         new_config = GlobalVrouterConfig(linklocal_services=service_list)
         if __opts__['test']:
-            ret['GlobalVrouterConfig'] = "Global vRouter Config will be updated"
+            ret['result'] = None
+            ret['comment'] = "LinkLocalSevices " + name + " will be updated"
         else:
             vnc_client.global_vrouter_config_update(new_config)
-            ret = "Created"
+            ret['comment'] = "LinkLocalSevices " + name + " has been created"
+            ret['changes'] = {'LinkLocalSevices': {'old': '', 'new': name}}
     return ret
 
 
@@ -1174,11 +1340,23 @@
 
         salt '*' contrail.linklocal_service_delete llservice
     '''
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': ''}
+    lls = linklocal_service_get(name)
+    print (lls)
+    if name in lls:
+        if __opts__['test']:
+            print " ------------ Test only  ------------"
+            ret['result'] = None
+            ret['comment'] = "Link local service " + name + " will be deleted"
+            return ret
+    else:
+        return ret
+
     vnc_client = _auth(**kwargs)
-
     current_config = _get_vrouter_config(vnc_client)
-
-    found = False
     if current_config is not None:
         _current_service_list = current_config.get_linklocal_services()
         if _current_service_list is None:
@@ -1192,18 +1370,14 @@
             for _entry in value:
                 entry = _entry.__dict__
                 if 'linklocal_service_name' in entry:
-                    if entry['linklocal_service_name'] == name:
-                        found = True
-                    else:
+                    if entry['linklocal_service_name'] != name:
                         new_services.append(_entry)
             service_list[key] = new_services
         new_config = GlobalVrouterConfig(linklocal_services=service_list)
-        if __opts__['test']:
-            return "Link local service " + name + " will be deleted"
         vnc_client.global_vrouter_config_update(new_config)
-        return "Deleted"
-    if not found:
-        return {'Error': 'Link local service "{0}" not found'.format(name)}
+        ret['comment'] = "Link local service " + name + " will be deleted"
+        ret['changes'] = {'LinkLocalService': {'old': '', 'new': name}}
+    return ret
 
 
 def virtual_machine_interface_list(**kwargs):
@@ -1261,7 +1435,7 @@
 
     if security_group:
         sgo = vnc_client.security_group_read(fq_name=_get_fq_name(
-            vnc_client, security_group, kwargs.get('tenant', 'admin')))
+          vnc_client, security_group, kwargs.get('tenant', 'admin')))
         vm_int.set_security_group(sgo)
 
     vnet_uuid = virtual_network_get(virtual_network, **kwargs)[virtual_network]['_uuid']
diff --git a/_states/contrail.py b/_states/contrail.py
index 0f7fbd8..8e20d86 100644
--- a/_states/contrail.py
+++ b/_states/contrail.py
@@ -89,7 +89,7 @@
     physical_interface_delete ge-0/1/10:
       contrail.physical_interface_absent:
         name: ge-0/1/10
-
+        physical_router: phr01
 
 Enforce the logical interface present
 ----------------------------------
@@ -121,8 +121,8 @@
         - parent_type: physical-interface
 
 
-Enforce the global vrouter existence
-------------------------------------
+Enforce the global vrouter config existence
+-------------------------------------------
 
 .. code-block:: yaml
 
@@ -138,8 +138,8 @@
         - default-global-vrouter-config
 
 
-Enforce the global vrouter absence
-----------------------------------
+Enforce the global vrouter config absence
+-----------------------------------------
 
 .. code-block:: yaml
 
@@ -203,8 +203,19 @@
 
     analytics_node01:
       contrail.analytics_node_present:
-        name: nal01
-        ip_address: 10.0.0.13
+        - name: nal01
+        - ip_address: 10.0.0.13
+
+
+Enforce the analytics node absence
+------------------------------------
+
+.. code-block:: yaml
+
+    analytics_node01_delete:
+      contrail.analytics_node_absent:
+        - name: nal01
+
 
 
 Enforce the config node existence
@@ -214,19 +225,41 @@
 
     config_node01:
       contrail.config_node_present:
-        name: ntw01
-        ip_address: 10.0.0.23
+        - name: ntw01
+        - ip_address: 10.0.0.23
 
 
-Enforce the database node existence
------------------------------------
+Enforce the config node absence
+-------------------------------
 
 .. code-block:: yaml
 
-    config_node01:
-      contrail.database_node_present:
-        name: ntw01
-        ip_address: 10.0.0.33
+    config_node01_delete:
+      contrail.config_node_absent:
+        - name: ntw01
+
+
+Enforce the BGP router existence
+--------------------------------
+
+.. code-block:: yaml
+
+    BGP router mx01:
+      contrail.bgp_router_present:
+        - name: mx01
+        - ip_address: 10.0.0.133
+        - type: mx
+        - asn: 64512
+
+
+Enforce the BGP router absence
+------------------------------
+
+.. code-block:: yaml
+
+    BGP router mx01:
+      contrail.bgp_router_absence:
+        - name: mx01
 
 
 Enforce the service appliance set existence
@@ -234,27 +267,50 @@
 
 .. code-block:: yaml
 
-    create service appliance:
-      contrail.service_appliance_set_present:
-        - name: testappliance
-        - driver: 'neutron_lbaas.drivers.avi.avi_ocdriver.OpencontrailAviLoadbalancerDriver'
-        - ha_mode: active-backup
-        - properties:
-            address: 10.1.11.3
-            user: admin
-            password: avi123
-            cloud: Default-Cloud
+   create service appliance:
+     contrail.service_appliance_set_present:
+       - name: testappliance
+       - driver: 'neutron_lbaas.drivers.avi.avi_ocdriver.OpencontrailAviLoadbalancerDriver'
+       - ha_mode: active-backup
+       - properties:
+           address: 10.1.11.3
+           user: admin
+           password: avi123
+           cloud: Default-Cloud
 
 
 Enforce the service appliance set entry absence
 -----------------------------------------------
 
-.. code-block:: yaml
+ .. code-block:: yaml
 
     delete service appliance:
      contrail.service_appliance_set_absent:
        - name: testappliance
 
+
+Enforce the database node existence
+-----------------------------------
+
+.. code-block:: yaml
+
+    database_node01:
+      contrail.database_node_present:
+        - name: dbs01
+        - ip_address: 10.0.0.33
+
+Enforce the database node absence
+-----------------------------------
+
+.. code-block:: yaml
+
+    database_node01:
+      contrail.database_node_absent:
+        - name: dbs01
+
+
+
+
 '''
 
 
@@ -273,17 +329,9 @@
     :param ip_address:  Virtual router IP address
     :param router_type: Any of ['tor-agent', 'tor-service-node', 'embedded']
     '''
-    ret = {'name': name,
-           'changes': {},
-           'result': True,
-           'comment': 'Virtual router "{0}" already exists'.format(name)}
-    result = __salt__['contrail.virtual_router_create'](name, ip_address, router_type, dpdk_enabled, **kwargs)
-    if 'OK' in result:
-        ret['comment'] = result
+    ret = __salt__['contrail.virtual_router_create'](name, ip_address, router_type, dpdk_enabled, **kwargs)
+    if len(ret['changes']) == 0:
         pass
-    else:
-        ret['comment'] = 'Virtual router {0} has been created'.format(name)
-        ret['changes']['VirtualRouter'] = result
     return ret
 
 
@@ -299,9 +347,7 @@
            'comment': 'Virtual router "{0}" is already absent'.format(name)}
     virtual_router = __salt__['contrail.virtual_router_get'](name, **kwargs)
     if 'Error' not in virtual_router:
-        result = __salt__['contrail.virtual_router_delete'](name, **kwargs)
-        ret['comment'] = 'Virtual router {0} has been deleted'.format(name)
-        ret['changes']['VirtualRouter'] = result
+        ret = __salt__['contrail.virtual_router_delete'](name, **kwargs)
     return ret
 
 
@@ -327,19 +373,12 @@
     :param junos_service_ports:	Juniper JUNOS specific service interfaces name to perform services like NAT.
     :param agents: 		List of virtual-router references
     '''
-    ret = {'name': name,
-           'changes': {},
-           'result': True,
-           'comment': 'Physical router "{0}" already exists'.format(name)}
-    result = __salt__['contrail.physical_router_create'](name, parent_type, management_ip, dataplane_ip, vendor_name,
-                                                         product_name, vnc_managed, junos_service_ports, agents,
-                                                         **kwargs)
-    if 'OK' in result:
-        ret['comment'] = result
+
+    ret = __salt__['contrail.physical_router_create'](name, parent_type, management_ip, dataplane_ip, vendor_name,
+                                                      product_name, vnc_managed, junos_service_ports, agents,
+                                                      **kwargs)
+    if len(ret['changes']) == 0:
         pass
-    else:
-        ret['comment'] = 'Physical router {0} has been created'.format(name)
-        ret['changes']['PhysicalRouter'] = result
     return ret
 
 
@@ -355,9 +394,7 @@
            'comment': 'Physical router "{0}" is already absent'.format(name)}
     physical_router = __salt__['contrail.physical_router_get'](name, **kwargs)
     if 'Error' not in physical_router:
-        result = __salt__['contrail.physical_router_delete'](name, **kwargs)
-        ret['comment'] = 'Physical router {0} has been deleted'.format(name)
-        ret['changes']['PhysicalRouter'] = result
+        ret = __salt__['contrail.physical_router_delete'](name, **kwargs)
     return ret
 
 
@@ -368,18 +405,9 @@
     :param name:                Physical interface name
     :param physical_router:     Name of existing physical router
     '''
-    ret = {'name': name,
-           'changes': {},
-           'result': True,
-           'comment': 'Physical interface "{0}" already exists'.format(name)}
-
-    result = __salt__['contrail.physical_interface_create'](name, physical_router, **kwargs)
-    if 'OK' in result:
-        ret['comment'] = result
+    ret = __salt__['contrail.physical_interface_create'](name, physical_router, **kwargs)
+    if len(ret['changes']) == 0:
         pass
-    else:
-        ret['comment'] = 'Physical interface {0} has been created'.format(name)
-        ret['changes']['PhysicalInterface'] = result
     return ret
 
 
@@ -396,9 +424,7 @@
            'comment': 'Physical interface "{0}" is already absent'.format(name)}
     physical_interface = __salt__['contrail.physical_interface_get'](name, physical_router, **kwargs)
     if 'Error' not in physical_interface:
-        result = __salt__['contrail.physical_interface_delete'](name, physical_router, **kwargs)
-        ret['comment'] = 'Physical interface {0} has been deleted'.format(name)
-        ret['changes']['PhysicalInterface'] = result
+        ret = __salt__['contrail.physical_interface_delete'](name, physical_router, **kwargs)
     return ret
 
 
@@ -414,21 +440,10 @@
     :param interface_type:	Logical interface type can be L2 or L3.
     :param vmis:                Virtual machine interface name associate with
     '''
-    ret = {'name': name,
-           'changes': {},
-           'result': True,
-           'comment': 'Logical interface "{0}" already exists'.format(name)}
-    logical_interface = __salt__['contrail.logical_interface_get'](name, parent_names, parent_type, **kwargs)
-    if 'Error' not in logical_interface:
+    ret = __salt__['contrail.logical_interface_create'](name, parent_names, parent_type, vlan_tag,
+                                                        interface_type, vmis=vmis, **kwargs)
+    if len(ret['changes']) == 0:
         pass
-    else:
-        result = __salt__['contrail.logical_interface_create'](name, parent_names, parent_type, vlan_tag,
-                                                               interface_type, vmis=vmis, **kwargs)
-        if 'Error' in result:
-            return False
-
-        ret['comment'] = 'Logical interface {0} has been created'.format(name)
-        ret['changes']['LogicalInterface'] = result
     return ret
 
 
@@ -446,9 +461,7 @@
            'comment': 'logical interface "{0}" is already absent'.format(name)}
     logical_interface = __salt__['contrail.logical_interface_get'](name, parent_names, parent_type, **kwargs)
     if 'Error' not in logical_interface:
-        result = __salt__['contrail.logical_interface_delete'](name, parent_names, parent_type, **kwargs)
-        ret['comment'] = 'Logical interface {0} has been deleted'.format(name)
-        ret['changes']['LogicalInterface'] = result
+        ret = __salt__['contrail.logical_interface_delete'](name, parent_names, parent_type, **kwargs)
     return ret
 
 
@@ -463,19 +476,10 @@
     :param vxlan_vn_id_mode:	Method of allocation of VxLAN VNI(s).
     :param fq_names:		Fully Qualified Name of resource devided <string>array
     '''
-    ret = {'name': name,
-           'changes': {},
-           'result': True,
-           'comment': 'Global vrouter config "{0}" already exists'.format(name)}
-
-    result = __salt__['contrail.global_vrouter_config_create'](name, parent_type, encap_priority, vxlan_vn_id_mode,
-                                                               *fq_names, **kwargs)
-    if 'OK' in result:
-        ret['comment'] = result
+    ret = __salt__['contrail.global_vrouter_config_create'](name, parent_type, encap_priority, vxlan_vn_id_mode,
+                                                            *fq_names, **kwargs)
+    if len(ret['changes']) == 0:
         pass
-    else:
-        ret['comment'] = 'Global vrouter config {0} has been created'.format(name)
-        ret['changes']['GlobalVRouterConfig'] = result
     return ret
 
 
@@ -491,9 +495,7 @@
            'comment': 'Global vrouter config "{0}" is already absent'.format(name)}
     vrouter_conf = __salt__['contrail.global_vrouter_config_get'](name, **kwargs)
     if 'Error' not in vrouter_conf:
-        result = __salt__['contrail.global_vrouter_config_delete'](name, **kwargs)
-        ret['comment'] = 'Global vrouter config {0} has been deleted'.format(name)
-        ret['changes']['GlobalVRouterConfig'] = result
+        ret = __salt__['contrail.global_vrouter_config_delete'](name, **kwargs)
     return ret
 
 
@@ -512,13 +514,9 @@
            'result': True,
            'comment': 'Link local service "{0}" already exists'.format(name)}
 
-    result = __salt__['contrail.linklocal_service_create'](name, lls_ip, lls_port, ipf_addresses, ipf_port, **kwargs)
-    if 'OK' in result:
-        ret['comment'] = result
+    ret = __salt__['contrail.linklocal_service_create'](name, lls_ip, lls_port, ipf_addresses, ipf_port, **kwargs)
+    if len(ret['changes']) == 0:
         pass
-    else:
-        ret['comment'] = 'Link local service "{0}" has been created'.format(name)
-        ret['changes']['LinkLocalService'] = result
     return ret
 
 
@@ -531,12 +529,10 @@
     ret = {'name': name,
            'changes': {},
            'result': True,
-           'comment': ' "{0}" is already absent'.format(name)}
+           'comment': 'Linklocal service "{0}" is already absent'.format(name)}
     lls = __salt__['contrail.linklocal_service_get'](name, **kwargs)
     if 'Error' not in lls:
-        result = __salt__['contrail.linklocal_service_delete'](name, **kwargs)
-        ret['comment'] = 'Link local service "{0}" has been deleted'.format(name)
-        ret['changes']['LinkLocalService'] = result
+        ret = __salt__['contrail.linklocal_service_delete'](name, **kwargs)
     return ret
 
 
@@ -551,13 +547,25 @@
            'result': True,
            'comment': 'Analytics node {0} already exists'.format(name)}
 
-    result = __salt__['contrail.analytics_node_create'](name, ip_address, **kwargs)
-    if 'OK' in result:
-        ret['comment'] = result
+    ret = __salt__['contrail.analytics_node_create'](name, ip_address, **kwargs)
+    if len(ret['changes']) == 0:
         pass
-    else:
-        ret['comment'] = 'Analytics node {0} has been created'.format(name)
-        ret['changes']['AnalyticsNode'] = result
+    return ret
+
+
+def analytics_node_absent(name, **kwargs):
+    '''
+    Ensure that the Contrail analytics node doesn't exist
+
+    :param name: The name of the analytics node that should not exist
+    '''
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': 'Analytics node "{0}" is already absent'.format(name)}
+    node = __salt__['contrail.analytics_node_get'](name, **kwargs)
+    if 'Error' not in node:
+        ret = __salt__['contrail.analytics_node_delete'](name, **kwargs)
     return ret
 
 
@@ -567,18 +575,25 @@
 
     :param name:        Config node name
     '''
+    ret = __salt__['contrail.config_node_create'](name, ip_address, **kwargs)
+    if len(ret['changes']) == 0:
+        pass
+    return ret
+
+
+def config_node_absent(name, **kwargs):
+    '''
+    Ensure that the Contrail config node doesn't exist
+
+    :param name: The name of the config node that should not exist
+    '''
     ret = {'name': name,
            'changes': {},
            'result': True,
-           'comment': 'Config node {0} already exists'.format(name)}
-    result = __salt__['contrail.config_node_create'](name, ip_address, **kwargs)
-
-    if 'OK' in result:
-        ret['comment'] = result
-        pass
-    else:
-        ret['comment'] = 'Config node {0} has been created'.format(name)
-        ret['changes']['ConfigNode'] = result
+           'comment': 'Config node "{0}" is already absent'.format(name)}
+    node = __salt__['contrail.config_node_get'](name, **kwargs)
+    if 'Error' not in node:
+        ret = __salt__['contrail.config_node_delete'](name, **kwargs)
     return ret
 
 
@@ -593,13 +608,25 @@
            'result': True,
            'comment': 'BGP router {0} already exists'.format(name)}
 
-    result = __salt__['contrail.bgp_router_create'](name, type, ip_address, asn, **kwargs)
-    if 'OK' in result:
-        ret['comment'] = result
+    ret = __salt__['contrail.bgp_router_create'](name, type, ip_address, asn, **kwargs)
+    if len(ret['changes']) == 0:
         pass
-    else:
-        ret['comment'] = 'BGP router {0} has been created'.format(name)
-        ret['changes']['BgpRouter'] = result
+    return ret
+
+
+def bgp_router_absent(name, **kwargs):
+    '''
+    Ensure that the Contrail BGP router doesn't exist
+
+    :param name: The name of the BGP router that should not exist
+    '''
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': 'BGP router "{0}" is already absent'.format(name)}
+    node = __salt__['contrail.bgp_router_get'](name, **kwargs)
+    if 'Error' not in node:
+        ret = __salt__['contrail.bgp_router_delete'](name, **kwargs)
     return ret
 
 
@@ -613,14 +640,25 @@
            'changes': {},
            'result': True,
            'comment': 'Database node {0} already exists'.format(name)}
-
-    result = __salt__['contrail.database_node_create'](name, ip_address, **kwargs)
-    if 'OK' in result:
-        ret['coment'] = result
+    ret = __salt__['contrail.database_node_create'](name, ip_address, **kwargs)
+    if len(ret['changes']) == 0:
         pass
-    else:
-        ret['comment'] = 'Database node {0} has been created'.format(name)
-        ret['changes']['DatabaseNode'] = result
+    return ret
+
+
+def database_node_absent(name, **kwargs):
+    '''
+    Ensure that the Contrail database node doesn't exist
+
+    :param name: The name of the database node that should not exist
+    '''
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': 'Database node "{0}" is already absent'.format(name)}
+    node = __salt__['contrail.database_node_get'](name, **kwargs)
+    if 'Error' not in node:
+        ret = __salt__['contrail.database_node_delete'](name, **kwargs)
     return ret
 
 
@@ -629,7 +667,7 @@
                                       mac_address=None,
                                       ip_address=None,
                                       security_group=None,
-                                       **kwargs):
+                                      **kwargs):
     '''
     Ensures that the Contrail virtual machine interface exists.
 
