diff --git a/sieve/tests/fileinto.sieve b/sieve/tests/fileinto.sieve
new file mode 100644
index 0000000000000000000000000000000000000000..41ab6b6a8d727e858b2a2accd0b205b9b63df3ce
--- /dev/null
+++ b/sieve/tests/fileinto.sieve
@@ -0,0 +1,8 @@
+require "fileinto";
+
+if address :contains "to" "vestingbar" {
+	fileinto "INBOX.VB";
+	stop;
+}
+
+keep;
diff --git a/src/lib-sieve/ext-fileinto.c b/src/lib-sieve/ext-fileinto.c
index ccd218bc3890933ed99e93a81c4f3c01abf35b94..db9b4dee6a980bafb4874c8ac517f30771591139 100644
--- a/src/lib-sieve/ext-fileinto.c
+++ b/src/lib-sieve/ext-fileinto.c
@@ -116,9 +116,21 @@ static bool ext_fileinto_opcode_dump
 
 static bool ext_fileinto_opcode_execute
 	(struct sieve_interpreter *interp ATTR_UNUSED, 
-	struct sieve_binary *sbin ATTR_UNUSED, 
-	sieve_size_t *address ATTR_UNUSED)
+	struct sieve_binary *sbin, 
+	sieve_size_t *address)
 {
+	string_t *folder;
+
+	t_push();
+
+	if ( !sieve_opr_string_read(sbin, address, &folder) ) {
+		t_pop();
+		return FALSE;
+	}
+
+	printf(">> FILEINTO \"%s\"\n", str_c(folder));
+
+	t_pop();
 	return TRUE;
 }