Index: server/mpm/experimental/peruser/peruser.c
===================================================================
--- server/mpm/experimental/peruser/peruser.c	(revision 58)
+++ server/mpm/experimental/peruser/peruser.c	(working copy)
@@ -59,7 +59,7 @@
 
 /* Peruser version 0.4.0 */
 
-/* #define MPM_PERUSER_DEBUG */
+#define MPM_PERUSER_DEBUG
 
 #include "apr.h"
 #include "apr_hash.h"
@@ -3457,14 +3457,55 @@
     return NULL;
 }
 
+
+void senv_init(server_env_t * senv) {
+	
+	senv->nice_lvl 		= 0;
+    senv->chroot 		= NULL;
+    senv->cgroup			= NULL;
+    senv->min_processors 	= ap_min_processors;
+    senv->min_free_processors 	= ap_min_free_processors;
+    senv->max_free_processors    = ap_max_free_processors;
+    senv->max_processors 	= ap_max_processors;
+}
+
 static const char* cf_ServerEnvironment(cmd_parms *cmd, void *dummy,
-    const char *name)
+    const char *name, const char * group_name, const char * chroot)
 {
     peruser_server_conf *sconf = PERUSER_SERVER_CONF(cmd->server->module_config);
-
+	server_env_t senv;
+	char * processor_name, *tmp;
+	
     _DBG("function entered", 0);
+	
+	/* name of processor env */
+	processor_name = name;
+	
+	if(group_name != NULL || chroot == NULL) {
+		/* deprecated ServerEnvironment user group chroot syntax
+		 * we create simple server env based on user/group/chroot only
+		 */
+		processor_name = apr_pstrcat(cmd->pool, name, "_",group_name, "_", chroot, NULL);
+		
+		/* search for previous default server env */
+		sconf->senv = find_senv_by_name(processor_name);
+		
+		if(!sconf->senv) {
+			senv_init(&senv);
+			senv.uid = ap_uname2id(name);
+	    	senv.gid = ap_gname2id(group_name);
+			senv.chroot = chroot;
+			senv.name = processor_name;
+			
+			tmp = child_add(CHILD_TYPE_PROCESSOR, CHILD_STATUS_STANDBY, cmd->pool, &senv);
+			if(tmp)
+				return tmp;
+		}
+	}
 
-    sconf->senv = find_senv_by_name(name);
+	/* use predefined processor environment or default named "user_group_chroot" */
+	if(sconf->senv == NULL)
+		sconf->senv = find_senv_by_name(processor_name);
 
     if (sconf->senv == NULL) {
         return apr_psprintf(cmd->pool,
@@ -3816,7 +3857,7 @@
               "Specify an Multiplexer Child configuration."),
 AP_INIT_RAW_ARGS("<Processor", cf_Processor, NULL, RSRC_CONF,
               "Specify settings for processor."),
-AP_INIT_TAKE1("ServerEnvironment", cf_ServerEnvironment, NULL, RSRC_CONF,
+AP_INIT_TAKE123("ServerEnvironment", cf_ServerEnvironment, NULL, RSRC_CONF,
               "Specify the server environment for this virtual host."),
 AP_INIT_TAKE1("MultiplexerChroot", cf_MultiplexerChroot, NULL, RSRC_CONF,
               "Specify the multiplexer chroot path for multiplexer"),
