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.
 
