diff --git a/conman/connection_manager.py b/conman/connection_manager.py
index 829fda4..abfcb36 100755
--- a/conman/connection_manager.py
+++ b/conman/connection_manager.py
@@ -178,6 +178,7 @@
   def __init__(self,
                bridge_interface='br0',
                status_dir='/tmp/conman',
+               config_dir='/config/conman',
                moca_status_dir='/tmp/cwmp/monitoring/moca2',
                wpa_control_interface='/var/run/wpa_supplicant',
                run_duration_s=1, interface_update_period=5,
@@ -201,6 +202,7 @@
                        key=lambda w: w.metric)
 
     self._status_dir = status_dir
+    self._config_dir = config_dir
     self._interface_status_dir = os.path.join(status_dir, 'interfaces')
     self._moca_status_dir = moca_status_dir
     self._wpa_control_interface = wpa_control_interface
@@ -215,16 +217,18 @@
     self._wlan_configuration = {}
 
     # Make sure all necessary directories exist.
-    for directory in (self._status_dir, self._interface_status_dir,
-                      self._moca_status_dir):
+    for directory in (self._status_dir, self._config_dir,
+                      self._interface_status_dir, self._moca_status_dir):
       if not os.path.exists(directory):
         os.makedirs(directory)
         logging.info('Created monitored directory: %s', directory)
 
     wm = pyinotify.WatchManager()
-    wm.add_watch(self._status_dir,
+    wm.add_watch(self._config_dir,
                  pyinotify.IN_CLOSE_WRITE | pyinotify.IN_MOVED_TO |
                  pyinotify.IN_DELETE | pyinotify.IN_MOVED_FROM)
+    wm.add_watch(self._status_dir,
+                 pyinotify.IN_CLOSE_WRITE | pyinotify.IN_MOVED_TO)
     wm.add_watch(self._interface_status_dir,
                  pyinotify.IN_CLOSE_WRITE | pyinotify.IN_MOVED_TO)
     wm.add_watch(self._moca_status_dir,
@@ -242,7 +246,7 @@
     for path, prefix in ((self._status_dir, self.GATEWAY_FILE_PREFIX),
                          (self._interface_status_dir, ''),
                          (self._moca_status_dir, self.MOCA_NODE_FILE_PREFIX),
-                         (self._status_dir, self.COMMAND_FILE_PREFIX)):
+                         (self._config_dir, self.COMMAND_FILE_PREFIX)):
       for filepath in glob.glob(os.path.join(path, prefix + '*')):
         self._process_file(path, os.path.split(filepath)[-1])
 
@@ -429,7 +433,7 @@
       self._process_file(path, filename)
 
   def _handle_deleted_file(self, path, filename):
-    if path == self._status_dir:
+    if path == self._config_dir:
       match = re.match(self.COMMAND_FILE_REGEXP, filename)
       if match:
         band = match.group('band')
@@ -474,7 +478,7 @@
                         contents)
           return
 
-    if path == self._status_dir:
+    elif path == self._config_dir:
       if filename.startswith(self.COMMAND_FILE_PREFIX):
         match = re.match(self.COMMAND_FILE_REGEXP, filename)
         if match:
@@ -490,7 +494,9 @@
           if band in self._wlan_configuration:
             self._wlan_configuration[band].access_point = True
           logging.debug('AP enabled for %s GHz', band)
-      elif filename.startswith(self.GATEWAY_FILE_PREFIX):
+
+    elif path == self._status_dir:
+      if filename.startswith(self.GATEWAY_FILE_PREFIX):
         interface_name = filename.split(self.GATEWAY_FILE_PREFIX)[-1]
         ifc = self.interface_by_name(interface_name)
         if ifc:
@@ -586,7 +592,7 @@
         wlan_configuration.access_point = current.access_point
       else:
         ap_file = os.path.join(
-            self._status_dir, self.ACCESS_POINT_FILE_PREFIX +
+            self._config_dir, self.ACCESS_POINT_FILE_PREFIX +
             (('%s.' % wlan_configuration.interface_suffix)
              if wlan_configuration.interface_suffix else '') + band)
         wlan_configuration.access_point = os.path.exists(ap_file)
diff --git a/conman/connection_manager_test.py b/conman/connection_manager_test.py
index 0903c15..19264f7 100755
--- a/conman/connection_manager_test.py
+++ b/conman/connection_manager_test.py
@@ -285,10 +285,10 @@
   # Test methods
 
   def wlan_config_filename(self, band):
-    return os.path.join(self._status_dir, 'command.%s' % band)
+    return os.path.join(self._config_dir, 'command.%s' % band)
 
   def access_point_filename(self, band):
-    return os.path.join(self._status_dir, 'access_point.%s' % band)
+    return os.path.join(self._config_dir, 'access_point.%s' % band)
 
   def delete_wlan_config(self, band):
     os.unlink(self.wlan_config_filename(band))
@@ -364,6 +364,7 @@
       try:
         # No initial state.
         status_dir = tempfile.mkdtemp()
+        config_dir = tempfile.mkdtemp()
         os.mkdir(os.path.join(status_dir, 'interfaces'))
         moca_status_dir = tempfile.mkdtemp()
         wpa_control_interface = tempfile.mkdtemp()
@@ -372,6 +373,7 @@
         shutil.rmtree(status_dir)
 
         c = ConnectionManager(status_dir=status_dir,
+                              config_dir=config_dir,
                               moca_status_dir=moca_status_dir,
                               wpa_control_interface=wpa_control_interface,
                               run_duration_s=run_duration_s,
@@ -385,6 +387,7 @@
 
       finally:
         shutil.rmtree(status_dir)
+        shutil.rmtree(config_dir)
         shutil.rmtree(moca_status_dir)
         shutil.rmtree(wpa_control_interface)
         # pylint: disable=protected-access
