diff -ur uwsgi_stable/uwsgi-0.9.6.6/utils.c uwsgi-0.9.6.6/utils.c
--- uwsgi_stable/uwsgi-0.9.6.6/utils.c	2010-12-30 05:18:08.000000000 +0100
+++ uwsgi-0.9.6.6/utils.c	2011-01-21 07:24:27.332700023 +0100
@@ -216,11 +216,11 @@
         uwsgi.wsgi_req->response_size += write(fd, message, strlen(message));
 }
 
-void uwsgi_as_root() {
+void uwsgi_as_root(char **argv) {
 
 	if (!getuid()) {
                 uwsgi_log("uWSGI running as root, you can use --uid/--gid/--chroot options\n");
-                if (uwsgi.chroot) {
+                if (uwsgi.chroot && !uwsgi.reloads) {
                         uwsgi_log("chroot() to %s\n", uwsgi.chroot);
                         if (chroot(uwsgi.chroot)) {
                                 uwsgi_error("chroot()");
@@ -231,6 +231,13 @@
                                 uwsgi_log("*** Warning, on linux system you have to bind-mount the /proc fs in your chroot to get memory debug/report.\n");
                         }
 #endif
+			if (uwsgi.chroot_reload) {
+				argv[0] = uwsgi.binary_path;
+                                execv(uwsgi.binary_path, argv);
+                                uwsgi_error("execv()");
+                                // never here
+                                exit(1);
+			}
                 }
                 if (uwsgi.gid) {
                         uwsgi_log("setgid() to %d\n", uwsgi.gid);
diff -ur uwsgi_stable/uwsgi-0.9.6.6/uwsgi.c uwsgi-0.9.6.6/uwsgi.c
--- uwsgi_stable/uwsgi-0.9.6.6/uwsgi.c	2010-12-30 05:28:42.000000000 +0100
+++ uwsgi-0.9.6.6/uwsgi.c	2011-01-21 07:27:33.322698931 +0100
@@ -79,6 +79,7 @@
 
 		{"pidfile", required_argument, 0, LONG_ARGS_PIDFILE},
 		{"chroot", required_argument, 0, LONG_ARGS_CHROOT},
+		{"chroot-reload", no_argument, &uwsgi.chroot_reload, 1},
 		{"gid", required_argument, 0, LONG_ARGS_GID},
 		{"uid", required_argument, 0, LONG_ARGS_UID},
 		{"pythonpath", required_argument, 0, LONG_ARGS_PYTHONPATH},
@@ -498,7 +499,6 @@
 	int ready_to_die = 0;
 
 	char *env_reloads;
-	unsigned int reloads = 0;
 	char env_reload_buf[11];
 
 	int option_index = 0;
@@ -615,10 +615,10 @@
 	env_reloads = getenv("UWSGI_RELOADS");
 	if (env_reloads) {
 		// convert env value to int
-		reloads = atoi(env_reloads);
-		reloads++;
+		uwsgi.reloads = atoi(env_reloads);
+		uwsgi.reloads++;
 		// convert reloads to string
-		rlen = snprintf(env_reload_buf, 10, "%u", reloads);
+		rlen = snprintf(env_reload_buf, 10, "%u", uwsgi.reloads);
 		if (rlen > 0) {
 			env_reload_buf[rlen] = 0;
 			if (setenv("UWSGI_RELOADS", env_reload_buf, 1)) {
@@ -634,7 +634,7 @@
 
 	socket_type_len = sizeof(int);
 	if (!getsockopt(3, SOL_SOCKET, SO_TYPE, &socket_type, &socket_type_len)) {
-		if (socket_type == SOCK_STREAM && reloads > 0) {
+		if (socket_type == SOCK_STREAM && uwsgi.reloads > 0) {
 			uwsgi_log("...fd 3 is a socket, i suppose this is a graceful reload of uWSGI, i will try to do my best...\n");
 			uwsgi.is_a_reload = 1;
 #ifdef UNBIT
@@ -741,7 +741,7 @@
 	}
 
 
-	uwsgi_as_root();
+	uwsgi_as_root(argv);
 
 	if (!uwsgi.master_process) {
 		uwsgi_log(" *** WARNING: you are running uWSGI without its master process manager ***\n");
diff -ur uwsgi_stable/uwsgi-0.9.6.6/uwsgi.h uwsgi-0.9.6.6/uwsgi.h
--- uwsgi_stable/uwsgi-0.9.6.6/uwsgi.h	2010-12-30 05:28:55.000000000 +0100
+++ uwsgi-0.9.6.6/uwsgi.h	2011-01-21 07:28:14.712700031 +0100
@@ -477,12 +477,15 @@
 	int default_app;
 	int enable_profiler;
 
+	unsigned int reloads;
+
 	// base for all the requests (even on async mode)
 	struct wsgi_request *wsgi_requests ;
 	struct wsgi_request *wsgi_req ;
 
 	PyThreadState *_save;
 	char *chroot;
+	int chroot_reload;
 	gid_t gid;
 	uid_t uid;
 
@@ -1026,7 +1029,7 @@
 PyObject *py_uwsgi_write(PyObject *, PyObject *) ;
 PyObject *py_uwsgi_spit(PyObject *, PyObject *) ;
 
-void uwsgi_as_root(void);
+void uwsgi_as_root(char **);
 
 #ifdef UWSGI_NAGIOS
 void nagios(struct uwsgi_server *);
