--- Unreal3.2/src/s_conf.c	2009-04-13 12:03:58.000000000 +0100
+++ New/src/s_conf.c	2009-08-13 21:36:06.508374000 +0100
@@ -943,10 +943,20 @@
 
 int channellevel_to_int(char *s)
 {
+	/* Requested at http://bugs.unrealircd.org/view.php?id=3852 */
 	if (!strcmp(s, "none"))
 		return CHFL_DEOPPED;
+	if (!strcmp(s, "voice")) 
+		return CHFL_VOICE;
+	if (!strcmp(s, "halfop"))
+		return CHFL_HALFOP;
 	if (!strcmp(s, "op") || !strcmp(s, "chanop"))
 		return CHFL_CHANOP;
+	if (!strcmp(s, "protect") || !strcmp(s, "chanprot"))
+		return CHFL_CHANPROT;
+	if (!strcmp(s, "owner") || !strcmp(s, "chanowner"))
+		return CHFL_CHANOWNER;
+	
 	return 0; /* unknown or unsupported */
 }
 
@@ -7326,7 +7336,7 @@
 			CheckDuplicate(cep, level_on_join, "level-on-join");
 			if (!channellevel_to_int(cep->ce_vardata))
 			{
-				config_error("%s:%i: set::level-on-join: unknown value '%s', should be one of: none, op",
+				config_error("%s:%i: set::level-on-join: unknown value '%s', should be one of: none, voice, halfop, op, protect, owner",
 					cep->ce_fileptr->cf_filename, cep->ce_varlinenum, cep->ce_vardata);
 				errors++;
 			}
