diff --git a/src/lib-sieve/cmd-require.c b/src/lib-sieve/cmd-require.c
index 0179afc21a51eba72fc1a28049e782cfb9a94282..22388510c416e74f4a89f7ad7109f9858d95649c 100644
--- a/src/lib-sieve/cmd-require.c
+++ b/src/lib-sieve/cmd-require.c
@@ -75,7 +75,7 @@ bool cmd_require_generate
 		struct sieve_ast_argument *stritem = sieve_ast_strlist_first(arg);
 		
 		while ( stritem != NULL ) {
-			struct sieve_extension *ext = (struct sieve_extension *) arg->context;
+			struct sieve_extension *ext = (struct sieve_extension *) stritem->context;
 		
 			sieve_generator_register_extension(generator, ext);
 			
diff --git a/src/lib-sieve/ext-fileinto.c b/src/lib-sieve/ext-fileinto.c
index 34113465006ffb400286e8a2927379150da3a92f..8b51bf426ea2f0b4199075d8fd4171405896d81d 100644
--- a/src/lib-sieve/ext-fileinto.c
+++ b/src/lib-sieve/ext-fileinto.c
@@ -1,30 +1,42 @@
+#include <stdio.h>
+
 #include "sieve-extensions.h"
 #include "sieve-commands.h"
 #include "sieve-validator.h"
+#include "sieve-generator.h"
+#include "sieve-interpreter.h"
 
 /* Forward declarations */
 static bool ext_fileinto_validator_load(struct sieve_validator *validator);
+static bool ext_fileinto_opcode_dump(struct sieve_interpreter *interpreter);
+
 static bool cmd_fileinto_validate(struct sieve_validator *validator, struct sieve_command_context *cmd);
+static bool cmd_fileinto_generate(struct sieve_generator *generator,	struct sieve_command_context *ctx);
 
 /* Extension definitions */
 const struct sieve_extension fileinto_extension = 
-	{ "fileinto", ext_fileinto_validator_load, NULL, NULL, NULL };
+	{ "fileinto", ext_fileinto_validator_load, NULL, ext_fileinto_opcode_dump, NULL };
 static const struct sieve_command fileinto_command = 
-	{ "fileinto", SCT_COMMAND, NULL, cmd_fileinto_validate, NULL, NULL };
+	{ "fileinto", SCT_COMMAND, NULL, cmd_fileinto_validate, cmd_fileinto_generate, NULL };
 
 /* Validation */
+
 static bool cmd_fileinto_validate(struct sieve_validator *validator, struct sieve_command_context *cmd) 
 { 	
+	struct sieve_ast_argument *arg;
+	
 	/* Check valid syntax: 
 	 *    reject <reason: string>
 	 */
-	if ( !sieve_validate_command_arguments(validator, cmd, 1, NULL) ||
+	if ( !sieve_validate_command_arguments(validator, cmd, 1, &arg) ||
 		!sieve_validate_command_subtests(validator, cmd, 0) || 
 	 	!sieve_validate_command_block(validator, cmd, FALSE, FALSE) ) {
 	 	
 		return FALSE;
 	}
 	
+	cmd->data = arg;
+	
 	return TRUE;
 }
 
@@ -36,3 +48,34 @@ static bool ext_fileinto_validator_load(struct sieve_validator *validator)
 
 	return TRUE;
 }
+
+/*
+ * Generation
+ */
+ 
+static bool cmd_fileinto_generate
+	(struct sieve_generator *generator,	struct sieve_command_context *ctx) 
+{
+	struct sieve_ast_argument *arg = (struct sieve_ast_argument *) ctx->data;
+	
+	sieve_generator_emit_opcode(generator, &fileinto_extension);
+
+	/* Emit folder string */  	
+	if ( !sieve_generator_emit_string_argument(generator, arg) ) 
+		return FALSE;
+	
+	return TRUE;
+}
+
+/* 
+ * Code dump
+ */
+ 
+static bool ext_fileinto_opcode_dump(struct sieve_interpreter *interpreter)
+{
+	printf("FILEINTO\n");
+	sieve_interpreter_dump_operand(interpreter);
+	
+	return TRUE;
+}
+