diff --git a/cli_classic.c b/cli_classic.c
index 4c71d07ce54d2314c449fbcf1c38b71bde00c49d..70bccb5ec3e6c5c39a0a6e415f6ead9d333a022c 100644
--- a/cli_classic.c
+++ b/cli_classic.c
@@ -221,8 +221,6 @@ int main(int argc, char *argv[])
 				free(tempstr);
 				cli_classic_abort_usage();
 			}
-			/* FIXME: A pointer to the image name is saved in a static array (of size MAX_ROMLAYOUT)
-			 * by register_include_arg() and needs to be freed after processing them. */
 			break;
 		case 'L':
 			if (++operation_specified > 1) {
@@ -527,6 +525,7 @@ out:
 	for (i = 0; i < chipcount; i++)
 		free(flashes[i].chip);
 
+	layout_cleanup();
 	free(filename);
 	free(layoutfile);
 	free(pparam);
diff --git a/flash.h b/flash.h
index 63701ed0f29f246acac906eefe563f672f41de16..7b884771a0eef7d905776c74f84deade3da12acb 100644
--- a/flash.h
+++ b/flash.h
@@ -320,6 +320,7 @@ int register_include_arg(char *name);
 int process_include_args(void);
 int read_romlayout(char *name);
 int handle_romentries(const struct flashctx *flash, uint8_t *oldcontents, uint8_t *newcontents);
+void layout_cleanup(void);
 
 /* spi.c */
 struct spi_command {
diff --git a/layout.c b/layout.c
index 8bb1666a0421676e4ae2795e0e5e5ef2f13d9148..86351b8a232d3c8a15198d167de15aaf3a4835d7 100644
--- a/layout.c
+++ b/layout.c
@@ -3,6 +3,7 @@
  *
  * Copyright (C) 2005-2008 coresystems GmbH
  * (Written by Stefan Reinauer <stepan@coresystems.de> for coresystems GmbH)
+ * Copyright (C) 2011-2013 Stefan Tauner
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -189,6 +190,21 @@ int process_include_args(void)
 	return 0;
 }
 
+void layout_cleanup(void)
+{
+	int i;
+	for (i = 0; i < num_include_args; i++) {
+		free(include_args[i]);
+		include_args[i] = NULL;
+	}
+	num_include_args = 0;
+
+	for (i = 0; i < num_rom_entries; i++) {
+		rom_entries[i].included = 0;
+	}
+	num_rom_entries = 0;
+}
+
 romentry_t *get_next_included_romentry(unsigned int start)
 {
 	int i;