diff -urN proftpd-1.2.10-org/modules/mod_codeconv.c proftpd-1.2.10/modules/mod_codeconv.c
--- proftpd-1.2.10-org/modules/mod_codeconv.c	2005-08-16 21:22:06.629366776 +0900
+++ proftpd-1.2.10/modules/mod_codeconv.c	2005-08-16 21:23:23.460686640 +0900
@@ -56,8 +54,19 @@
 	config_rec*	conf_l = NULL;
 	config_rec*	conf_r = NULL;
 
-	conf_l = find_config(main_server->conf, CONF_PARAM, DIRECTIVE_CHARSETLOCAL, FALSE);
-	conf_r = find_config(main_server->conf, CONF_PARAM, DIRECTIVE_CHARSETREMOTE, FALSE);
+	config_rec*	c;
+
+	c = find_config(CURRENT_CONF, CONF_PARAM, DIRECTIVE_CHARSETLOCAL, FALSE);
+	while( c ){
+		conf_l = c;
+		c = find_config_next( c, c->next, CONF_PARAM, DIRECTIVE_CHARSETLOCAL, FALSE );
+	}
+	
+	c = find_config(CURRENT_CONF, CONF_PARAM, DIRECTIVE_CHARSETREMOTE, FALSE);
+	while( c ){
+		conf_r = c;
+		c = find_config_next( c, c->next, CONF_PARAM, DIRECTIVE_CHARSETREMOTE, FALSE );
+	}
 	if (!conf_l || !conf_r) return NULL;
 
 	ic = iconv_open(conf_l->argv[0], conf_r->argv[0]);
@@ -95,9 +104,21 @@
 
 	config_rec*	conf_l = NULL;
 	config_rec*	conf_r = NULL;
+	
+	config_rec*	c;
 
-	conf_l = find_config(main_server->conf, CONF_PARAM, DIRECTIVE_CHARSETLOCAL, FALSE);
-	conf_r = find_config(main_server->conf, CONF_PARAM, DIRECTIVE_CHARSETREMOTE, FALSE);
+	c = find_config(CURRENT_CONF, CONF_PARAM, DIRECTIVE_CHARSETLOCAL, FALSE);
+	while( c ){
+		conf_l = c;
+		c = find_config_next( c, c->next, CONF_PARAM, DIRECTIVE_CHARSETLOCAL, FALSE );
+	}
+	
+	c = find_config(CURRENT_CONF, CONF_PARAM, DIRECTIVE_CHARSETREMOTE, FALSE);
+	while( c ){
+		conf_r = c;
+		c = find_config_next( c, c->next, CONF_PARAM, DIRECTIVE_CHARSETREMOTE, FALSE );
+	}
+	
 	if (!conf_l || !conf_r) return NULL;
 
 	ic = iconv_open(conf_r->argv[0], conf_l->argv[0]);
@@ -154,10 +175,11 @@
   /* Syntax: CharsetLocal iconv-charset-name */
 
   CHECK_ARGS(cmd, 1);
-  CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL);
-
-  c = add_config_param_str(DIRECTIVE_CHARSETLOCAL, 1, cmd->argv[1]);
+  CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL|CONF_DIR|CONF_DYNDIR);
 
+  c = add_config_param_str(cmd->argv[0], 1, cmd->argv[1]);
+  c->flags |= CF_MERGEDOWN;
+   
   return HANDLED(cmd);
 }
 
@@ -166,14 +188,15 @@
 //
 MODRET set_charsetremote(cmd_rec *cmd) {
   config_rec *c = NULL;
-
+	
   /* Syntax: CharsetRemote iconv-charset-name */
 
   CHECK_ARGS(cmd, 1);
-  CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL);
-
-  c = add_config_param_str(DIRECTIVE_CHARSETREMOTE, 1, cmd->argv[1]);
+  CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL|CONF_DIR|CONF_DYNDIR);
 
+  c = add_config_param_str(cmd->argv[0], 1, cmd->argv[1]);
+  c->flags |= CF_MERGEDOWN;
+   
   return HANDLED(cmd);
 }
 
