--- a/src/index/recollindex.cpp
+++ b/src/index/recollindex.cpp
@@ -45,6 +45,7 @@
 #include "recollindex.h"
 #include "fsindexer.h"
 #include "rclionice.h"
+#include "execmd.h"
 
 // Command line options
 static int     op_flags;
@@ -63,6 +64,9 @@
 #define OPT_l     0x1000
 #define OPT_b     0x2000
 #define OPT_f     0x4000
+#define OPT_C     0x8000
+
+ReExec *o_reexec;
 
 // Globals for atexit cleanup
 static ConfIndexer *confindexer;
@@ -224,9 +228,10 @@
 "    Index everything according to configuration file\n"
 "    -z : reset database before starting indexing\n"
 #ifdef RCL_MONITOR
-"recollindex -m [-w <secs>] -x [-D]\n"
+"recollindex -m [-w <secs>] -x [-D] [-C]\n"
 "    Perform real time indexing. Don't become a daemon if -D is set.\n"
 "    -w sets number of seconds to wait before starting.\n"
+"    -C disables monitoring config for changes/reexecuting.\n"
 #ifndef DISABLE_X11MON
 "    -x disables exit on end of x11 session\n"
 #endif /* DISABLE_X11MON */
@@ -271,10 +276,12 @@
     }
 }
 
-int main(int argc, const char **argv)
+int main(int argc, char **argv)
 {
     string a_config;
     int sleepsecs = 60;
+    o_reexec = new ReExec;
+    o_reexec->init(argc, argv);
 
     thisprog = argv[0];
     argc--; argv++;
@@ -290,6 +297,7 @@
 		a_config = *(++argv);
 		argc--; goto b1;
 #ifdef RCL_MONITOR
+	    case 'C': op_flags |= OPT_C; break;
 	    case 'D': op_flags |= OPT_D; break;
 #endif
 	    case 'e': op_flags |= OPT_e; break;
@@ -333,6 +341,8 @@
 	cerr << "Configuration problem: " << reason << endl;
 	exit(1);
     }
+    o_reexec->atexit(cleanup);
+
     bool rezero(op_flags & OPT_z);
     Pidfile pidfile(config->getPidfile());
     updater = new MyUpdater(config);
@@ -433,6 +443,8 @@
 	int opts = RCLMON_NONE;
 	if (op_flags & OPT_D)
 	    opts |= RCLMON_NOFORK;
+	if (op_flags & OPT_C)
+	    opts |= RCLMON_NOCONFCHECK;
 	if (op_flags & OPT_x)
 	    opts |= RCLMON_NOX11;
 	bool monret = startMonitor(config, opts);