Index: generic/include/list.h
===================================================================
--- generic/include/list.h	(revision dc747e33f6f5d74c7d1b7b50fda3b2fabff8fa82)
+++ generic/include/list.h	(revision 7dd25618029b6d98c0ca074a1d14e41065c8ac45)
@@ -33,8 +33,15 @@
 #include <typedefs.h>
 
+/** Doubly linked list head and link type. */
 struct link {
-	link_t *prev;
-	link_t *next;
+	link_t *prev;	/**< Pointer to the previous item in the list. */
+	link_t *next;	/**< Pointer to the next item in the list. */
 };
+
+/** Declare and initialize statically allocated list.
+ *
+ * @param name Name of the new statically allocated list.
+ */
+#define LIST_INITIALIZE(name)		link_t name = { .prev = &name, .next = &name }
 
 /** Initialize doubly-linked circular list link
Index: generic/include/mm/frame.h
===================================================================
--- generic/include/mm/frame.h	(revision dc747e33f6f5d74c7d1b7b50fda3b2fabff8fa82)
+++ generic/include/mm/frame.h	(revision 7dd25618029b6d98c0ca074a1d14e41065c8ac45)
@@ -84,5 +84,4 @@
 extern link_t zone_head;		/**< list of all zones in the system */
 
-extern void zone_init(void);
 extern zone_t *zone_create(__address start, size_t size, int flags);
 extern void zone_attach(zone_t *zone);
Index: generic/src/console/kconsole.c
===================================================================
--- generic/src/console/kconsole.c	(revision dc747e33f6f5d74c7d1b7b50fda3b2fabff8fa82)
+++ generic/src/console/kconsole.c	(revision 7dd25618029b6d98c0ca074a1d14e41065c8ac45)
@@ -67,5 +67,5 @@
  
 SPINLOCK_INITIALIZE(cmd_lock);	/**< Lock protecting command list. */
-link_t cmd_head;		/**< Command list. */
+LIST_INITIALIZE(cmd_head);	/**< Command list. */
 
 static cmd_info_t *parse_cmdline(char *cmdline, size_t len);
@@ -77,6 +77,4 @@
 {
 	int i;
-
-	list_initialize(&cmd_head);
 
 	cmd_init();
Index: generic/src/mm/frame.c
===================================================================
--- generic/src/mm/frame.c	(revision dc747e33f6f5d74c7d1b7b50fda3b2fabff8fa82)
+++ generic/src/mm/frame.c	(revision 7dd25618029b6d98c0ca074a1d14e41065c8ac45)
@@ -43,5 +43,5 @@
 
 SPINLOCK_INITIALIZE(zone_head_lock);	/**< this lock protects zone_head list */
-link_t zone_head;                	/**< list of all zones in the system */
+LIST_INITIALIZE(zone_head);            	/**< list of all zones in the system */
 
 /** Blacklist containing non-available areas of memory.
@@ -69,5 +69,4 @@
 {
 	if (config.cpu_active == 1) {
-		zone_init();
 		frame_region_not_free(KA2PA(config.base), config.kernel_size);
 	}
@@ -234,14 +233,4 @@
 	zone_blacklist[index].base = base;
 	zone_blacklist[index].size = size;
-}
-
-
-/** Initialize zonekeeping
- *
- * Initialize zonekeeping.
- */
-void zone_init(void)
-{
-	list_initialize(&zone_head);
 }
 
Index: generic/src/proc/task.c
===================================================================
--- generic/src/proc/task.c	(revision dc747e33f6f5d74c7d1b7b50fda3b2fabff8fa82)
+++ generic/src/proc/task.c	(revision 7dd25618029b6d98c0ca074a1d14e41065c8ac45)
@@ -38,6 +38,5 @@
 
 SPINLOCK_INITIALIZE(tasks_lock);
-link_t tasks_head;
-
+LIST_INITIALIZE(tasks_head);
 
 /** Initialize tasks
@@ -49,5 +48,4 @@
 {
 	TASK = NULL;
-	list_initialize(&tasks_head);
 }
 
Index: generic/src/proc/thread.c
===================================================================
--- generic/src/proc/thread.c	(revision dc747e33f6f5d74c7d1b7b50fda3b2fabff8fa82)
+++ generic/src/proc/thread.c	(revision 7dd25618029b6d98c0ca074a1d14e41065c8ac45)
@@ -56,5 +56,5 @@
 
 SPINLOCK_INITIALIZE(threads_lock);	/**< Lock protecting threads_head list. For locking rules, see declaration thereof. */
-link_t threads_head;			/**< List of all threads. */
+LIST_INITIALIZE(threads_head);		/**< List of all threads. */
 
 SPINLOCK_INITIALIZE(tidlock);
@@ -97,5 +97,4 @@
 	THREAD = NULL;
 	nrdy = 0;
-	list_initialize(&threads_head);
 }
 
