diff --git a/_modules/dockerng_service.py b/_modules/dockerng_service.py
index 515cc0f..081b7e0 100644
--- a/_modules/dockerng_service.py
+++ b/_modules/dockerng_service.py
@@ -41,6 +41,16 @@
     return result
 
 
+def status_retcode(container, service):
+    cmd = "systemctl show " + service + " -p ActiveState,SubState,UnitFileState"
+    data =  __salt__['dockerng.run'](container, cmd)
+    data = data.splitlines()
+    result = dict(s.split('=') for s in data)
+    if result['ActiveState'] == "active" and result['SubState'] == "running":
+        return True
+    return False
+
+
 def restart(container, service):
     cmd = "systemctl restart " + service
     data =  __salt__['dockerng.run'](container, cmd)
@@ -87,4 +97,3 @@
     if len(data) > 0:
         return False
     return True
-
diff --git a/_states/dockerng_service.py b/_states/dockerng_service.py
index 9fde782..ed13798 100644
--- a/_states/dockerng_service.py
+++ b/_states/dockerng_service.py
@@ -19,13 +19,13 @@
 :depends:   - vnc_api Python module
 
 
-Enforce the service in container is started
+Enforce the service in container is running
 -------------------------------------------
 
 .. code-block:: yaml
 
-    contrail_control_started:
-      dockerng_service.start:
+    contrail_control_running:
+      dockerng_service.running:
         - container: f020d0d3efa8
         - service: contrail-control
 
@@ -33,19 +33,19 @@
 
 .. code-block:: yaml
 
-    contrail_control_started:
-      dockerng_service.start:
+    contrail_control_running:
+      dockerng_service.running:
         - container: contrail_controller
         - service: contrail-control
 
 
-Enforce the service in container is stoped
+Enforce the service in container is dead
 ------------------------------------------
 
 .. code-block:: yaml
 
-    contrail_control_stoped:
-      dockerng_service.stop:
+    contrail_control_dead:
+      dockerng_service.dead:
         - container: f020d0d3efa8
         - service: contrail-control
 
@@ -54,8 +54,8 @@
 
 .. code-block:: yaml
 
-    contrail_control_restart:
-      dockerng_service.restart:
+    contrail_control_restarted:
+      dockerng_service.restarted:
         - container: f020d0d3efa8
         - service: contrail-control
 
@@ -64,8 +64,8 @@
 
 .. code-block:: yaml
 
-    contrail_control_enable:
-      dockerng_service.enable:
+    contrail_control_enabled:
+      dockerng_service.enabled:
         - container: f020d0d3efa8
         - service: contrail-control
 
@@ -74,8 +74,8 @@
 
 .. code-block:: yaml
 
-    contrail_control_disable:
-      dockerng_service.disable:
+    contrail_control_disabled:
+      dockerng_service.disabled:
         - container: f020d0d3efa8
         - service: contrail-control
 
@@ -89,37 +89,41 @@
     return 'dockerng_service'
 
 
-def start(container, service, **kwargs):
+def running(container, service=None, services=None, **kwargs):
     '''
-    Ensures that the service in the container is started.
+    Ensures that the service in the container is running
 
     :param container:    ID or name of the container
+    :param services:     List of services
     :param service:      Service name
     '''
-    ret = {'name': service + " in " + container,
+    ret = {'name': kwargs.get('name', 'dockerng_service.running'),
            'changes': {},
            'result': True,
-           'comment': ''}
+           'comment': {}
+           }
 
-    status = __salt__['dockerng_service.status'](container, service)
+    if service and not services:
+        services = [service, ]
 
-    if status['ActiveState'] == "inactive" and status['SubState'] == "dead":
-        if __opts__['test']:
-            ret['result'] = None
-            ret['comment'] = service + " in  " + container + " will be started"
-            return ret
+    for service in services:
+        status = __salt__['dockerng_service.status'](container, service)
 
-        res = __salt__['dockerng_service.start'](container, service)
-        ret['comment'] = service + " in  " + container + " has been started"
-        ret['changes'] = {"old": "stoped", "new": "started"}
-        return ret
+        if status['ActiveState'] != "active" and status['SubState'] != "running":
+            if __opts__['test']:
+                ret['result'] = None
+                ret['comment'][service] = " will be started"
+            else:
+                __salt__['dockerng_service.start'](container, service)
+                ret['comment'] = service + " in  " + container + " has been started"
+                ret['changes'] = {service:  "started"}
 
     return ret
 
 
-def stop(container, service, **kwargs):
+def dead(container, service, **kwargs):
     '''
-    Ensures that the service in the container is stoped
+    Ensures that the service in the container is dead
 
     :param container:    ID or name of the container
     :param service:      Service name
@@ -137,7 +141,7 @@
             ret['comment'] = service + " in  " + container + " will be stoped"
             return ret
 
-        res = __salt__['dockerng_service.stop'](container, service)
+        __salt__['dockerng_service.stop'](container, service)
         ret['comment'] = service + " in  " + container + " has been stoped"
         ret['changes'] = {"new": "stoped", "old": "started"}
         return ret
@@ -145,7 +149,7 @@
     return ret
 
 
-def restart(container, service, **kwargs):
+def restarted(container, service, **kwargs):
     '''
     Service in the container will be restarted
 
@@ -157,19 +161,18 @@
            'result': True,
            'comment': ''}
 
-
     if __opts__['test']:
         ret['result'] = None
         ret['comment'] = service + " in  " + container + " will be restarted"
         return ret
 
     res = __salt__['dockerng_service.restart'](container, service)
-    ret['comment'] = service + " in  " + container + " has been stoped"
+    ret['comment'] = service + " in  " + container + " has been restarted"
     ret['changes'] = {"status": "restarted"}
     return ret
 
 
-def enable(container, service, **kwargs):
+def enabled(container, service, **kwargs):
     '''
     Ensures that the service in the container is enabled
 
@@ -189,7 +192,7 @@
             ret['comment'] = service + " in  " + container + " will be enabled"
             return ret
 
-        res = __salt__['dockerng_service.enable'](container, service)
+        __salt__['dockerng_service.enable'](container, service)
         ret['comment'] = service + " in  " + container + " has been enabled"
         ret['changes'] = {"new": "enabled", "old": "disabled"}
         return ret
@@ -197,7 +200,7 @@
     return ret
 
 
-def disable(container, service, **kwargs):
+def disabled(container, service, **kwargs):
     '''
     Ensures that the service in the container is disabled
 
@@ -217,9 +220,78 @@
             ret['comment'] = service + " in  " + container + " will be disabled"
             return ret
 
-        res = __salt__['dockerng_service.disable'](container, service)
+        __salt__['dockerng_service.disable'](container, service)
         ret['comment'] = service + " in  " + container + " has been disabled"
         ret['changes'] = {"old": "enabled", "new": "disabled"}
         return ret
 
     return ret
+
+
+def mod_watch(name,
+              contrainer=None,
+              sfun=None,
+              sig=None,
+              reload=False,
+              full_restart=False,
+              init_delay=None,
+              force=False,
+              **kwargs):
+    '''
+    The service watcher, called to invoke the watch command.
+
+    :param name:         The name of the init or rc script used to manage the
+                         service
+    :param sfun:         The original function which triggered the mod_watch
+                         call (`service.running`, for example).
+    :param sig:          The string to search for when looking for the service
+                         process with ps
+    :param reload:       Use reload instead of the default restart (exclusive
+                         option with full_restart, defaults to reload if both
+                         are used)
+    :param full_restart: Use service.full_restart instead of restart
+                         (exclusive option with reload)
+    :param force:        Use service.force_reload instead of reload
+                         (needs reload to be set to True)
+    :param  init_delay:  Add a sleep command (in seconds) before the service is
+                         restarted/reloaded
+    '''
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': {}}
+
+    service = kwargs.get('service')
+    services = kwargs.get('services')
+    if not services and service:
+        services = [service, ]
+    elif not services and not service:
+        ret['result'] = False
+        ret['comment'] = "Service was not defined"
+        return ret
+
+    container = kwargs.get('container', None)
+    if not container:
+        ret['result'] = False
+        ret['comment'] = "Container was not defined"
+        return ret
+
+    ret['comment'] = {}
+    if sfun == 'running':
+
+        for service in services:
+            status = __salt__['dockerng_service.status'](container, service)
+
+
+            if __opts__['test']:
+                ret['result'] = None
+                ret['comment'][service] = "Services will be restarted"
+                ret['changes'][service] = "will be restarted"
+            else:
+                res = __salt__['dockerng_service.restart'](container, service)
+                ret['comment'] = "Services has been restarted"
+                ret['changes'][service] = "restarted"
+    else:
+        ret['comment'] = 'Unable to trigger watch for dockerng_service.{0}'.format(sfun)
+        ret['result'] = False
+    return ret
