Index: kernel/generic/include/synch/condvar.h
===================================================================
--- kernel/generic/include/synch/condvar.h	(revision 3e7948ce465036902ba4c25b7c9e439e0aa5a84f)
+++ kernel/generic/include/synch/condvar.h	(revision 9f9454640c197e35a3f31f382d15f4f94627e67b)
@@ -46,4 +46,11 @@
 } condvar_t;
 
+#define CONDVAR_INITIALIZER(name) (condvar_t) { \
+	.wq = WAITQ_INITIALIZER((name).wq), \
+}
+
+#define CONDVAR_INITIALIZE(name) \
+	condvar_t name = CONDVAR_INITIALIZER(name)
+
 #ifdef CONFIG_SMP
 #define _condvar_wait_timeout_spinlock(cv, lock, usec, flags) \
Index: kernel/generic/include/synch/mutex.h
===================================================================
--- kernel/generic/include/synch/mutex.h	(revision 3e7948ce465036902ba4c25b7c9e439e0aa5a84f)
+++ kernel/generic/include/synch/mutex.h	(revision 9f9454640c197e35a3f31f382d15f4f94627e67b)
@@ -56,4 +56,14 @@
 } mutex_t;
 
+#define MUTEX_INITIALIZER(name, mtype) (mutex_t) { \
+	.type = (mtype), \
+	.sem = SEMAPHORE_INITIALIZER((name).sem, 1), \
+	.owner = NULL, \
+	.nesting = 0, \
+}
+
+#define MUTEX_INITIALIZE(name, mtype) \
+	mutex_t name = MUTEX_INITIALIZER(name, mtype)
+
 extern void mutex_initialize(mutex_t *, mutex_type_t);
 extern bool mutex_locked(mutex_t *);
Index: kernel/generic/include/synch/semaphore.h
===================================================================
--- kernel/generic/include/synch/semaphore.h	(revision 3e7948ce465036902ba4c25b7c9e439e0aa5a84f)
+++ kernel/generic/include/synch/semaphore.h	(revision 9f9454640c197e35a3f31f382d15f4f94627e67b)
@@ -45,4 +45,11 @@
 } semaphore_t;
 
+#define SEMAPHORE_INITIALIZER(name, count) (semaphore_t) { \
+	.wq = WAITQ_INITIALIZER_WITH_COUNT((name).wq, count), \
+}
+
+#define SEMAPHORE_INITIALIZE(name, count) \
+	semaphore_t name = SEMAPHORE_INITIALIZER(name, count)
+
 extern void semaphore_initialize(semaphore_t *, int);
 extern errno_t semaphore_down_timeout(semaphore_t *, uint32_t);
Index: kernel/generic/include/synch/waitq.h
===================================================================
--- kernel/generic/include/synch/waitq.h	(revision 3e7948ce465036902ba4c25b7c9e439e0aa5a84f)
+++ kernel/generic/include/synch/waitq.h	(revision 9f9454640c197e35a3f31f382d15f4f94627e67b)
@@ -40,4 +40,18 @@
 #include <abi/synch.h>
 #include <adt/list.h>
+
+#define WAITQ_INITIALIZER_WITH_COUNT(name, count) (waitq_t) { \
+	.lock = IRQ_SPINLOCK_INITIALIZER(#name ".lock"), \
+	.sleepers = LIST_INITIALIZER((name).sleepers), \
+	.wakeup_balance = (count), \
+}
+
+#define WAITQ_INITIALIZER(name) WAITQ_INITIALIZER_WITH_COUNT(name, 0)
+
+#define WAITQ_INITIALIZE_WITH_COUNT(name, count) \
+	waitq_t name = WAITQ_INITIALIZER_WITH_COUNT(name, count)
+
+#define WAITQ_INITIALIZE(name) \
+	waitq_t name = WAITQ_INITIALIZER(name)
 
 /** Wait queue structure.
Index: kernel/generic/src/ddi/ddi.c
===================================================================
--- kernel/generic/src/ddi/ddi.c	(revision 3e7948ce465036902ba4c25b7c9e439e0aa5a84f)
+++ kernel/generic/src/ddi/ddi.c	(revision 9f9454640c197e35a3f31f382d15f4f94627e67b)
@@ -60,5 +60,5 @@
 
 /** This lock protects the @c pareas ordered dictionary. */
-static mutex_t pareas_lock;
+static MUTEX_INITIALIZE(pareas_lock, MUTEX_PASSIVE);
 
 /** Ordered dictionary of enabled physical memory areas by base address. */
@@ -74,5 +74,4 @@
 {
 	odict_initialize(&pareas, pareas_getkey, pareas_cmp);
-	mutex_initialize(&pareas_lock, MUTEX_PASSIVE);
 }
 
Index: kernel/generic/src/main/main.c
===================================================================
--- kernel/generic/src/main/main.c	(revision 3e7948ce465036902ba4c25b7c9e439e0aa5a84f)
+++ kernel/generic/src/main/main.c	(revision 9f9454640c197e35a3f31f382d15f4f94627e67b)
@@ -53,5 +53,4 @@
 #include <stdio.h>
 #include <panic.h>
-#include <assert.h>
 #include <config.h>
 #include <time/clock.h>
Index: kernel/generic/src/mm/frame.c
===================================================================
--- kernel/generic/src/mm/frame.c	(revision 3e7948ce465036902ba4c25b7c9e439e0aa5a84f)
+++ kernel/generic/src/mm/frame.c	(revision 9f9454640c197e35a3f31f382d15f4f94627e67b)
@@ -63,5 +63,8 @@
 #include <proc/thread.h> /* THREAD */
 
-zones_t zones;
+zones_t zones = {
+	.count = 0,
+	.lock = IRQ_SPINLOCK_INITIALIZER("frame.zones.lock"),
+};
 
 /*
@@ -69,6 +72,6 @@
  * available.
  */
-static mutex_t mem_avail_mtx;
-static condvar_t mem_avail_cv;
+static MUTEX_INITIALIZE(mem_avail_mtx, MUTEX_ACTIVE);
+static CONDVAR_INITIALIZE(mem_avail_cv);
 static size_t mem_avail_req = 0;  /**< Number of frames requested. */
 static size_t mem_avail_gen = 0;  /**< Generation counter. */
@@ -1108,11 +1111,4 @@
 void frame_init(void)
 {
-	if (config.cpu_active == 1) {
-		zones.count = 0;
-		irq_spinlock_initialize(&zones.lock, "frame.zones.lock");
-		mutex_initialize(&mem_avail_mtx, MUTEX_ACTIVE);
-		condvar_initialize(&mem_avail_cv);
-	}
-
 	/* Tell the architecture to create some memory */
 	frame_low_arch_init();
Index: kernel/generic/src/proc/thread.c
===================================================================
--- kernel/generic/src/proc/thread.c	(revision 3e7948ce465036902ba4c25b7c9e439e0aa5a84f)
+++ kernel/generic/src/proc/thread.c	(revision 9f9454640c197e35a3f31f382d15f4f94627e67b)
@@ -667,8 +667,5 @@
 void thread_usleep(uint32_t usec)
 {
-	waitq_t wq;
-
-	waitq_initialize(&wq);
-
+	WAITQ_INITIALIZE(wq);
 	(void) waitq_sleep_timeout(&wq, usec);
 }
Index: kernel/generic/src/synch/condvar.c
===================================================================
--- kernel/generic/src/synch/condvar.c	(revision 3e7948ce465036902ba4c25b7c9e439e0aa5a84f)
+++ kernel/generic/src/synch/condvar.c	(revision 9f9454640c197e35a3f31f382d15f4f94627e67b)
@@ -48,5 +48,5 @@
 void condvar_initialize(condvar_t *cv)
 {
-	waitq_initialize(&cv->wq);
+	*cv = CONDVAR_INITIALIZER(*cv);
 }
 
Index: kernel/generic/src/synch/mutex.c
===================================================================
--- kernel/generic/src/synch/mutex.c	(revision 3e7948ce465036902ba4c25b7c9e439e0aa5a84f)
+++ kernel/generic/src/synch/mutex.c	(revision 9f9454640c197e35a3f31f382d15f4f94627e67b)
@@ -53,8 +53,5 @@
 void mutex_initialize(mutex_t *mtx, mutex_type_t type)
 {
-	mtx->type = type;
-	mtx->owner = NULL;
-	mtx->nesting = 0;
-	semaphore_initialize(&mtx->sem, 1);
+	*mtx = MUTEX_INITIALIZER(*mtx, type);
 }
 
Index: kernel/generic/src/synch/semaphore.c
===================================================================
--- kernel/generic/src/synch/semaphore.c	(revision 3e7948ce465036902ba4c25b7c9e439e0aa5a84f)
+++ kernel/generic/src/synch/semaphore.c	(revision 9f9454640c197e35a3f31f382d15f4f94627e67b)
@@ -52,5 +52,5 @@
 void semaphore_initialize(semaphore_t *sem, int val)
 {
-	waitq_initialize_with_count(&sem->wq, val);
+	*sem = SEMAPHORE_INITIALIZER(*sem, val);
 }
 
Index: kernel/generic/src/synch/waitq.c
===================================================================
--- kernel/generic/src/synch/waitq.c	(revision 3e7948ce465036902ba4c25b7c9e439e0aa5a84f)
+++ kernel/generic/src/synch/waitq.c	(revision 9f9454640c197e35a3f31f382d15f4f94627e67b)
@@ -70,7 +70,5 @@
 void waitq_initialize(waitq_t *wq)
 {
-	memsetb(wq, sizeof(*wq), 0);
-	irq_spinlock_initialize(&wq->lock, "wq.lock");
-	list_initialize(&wq->sleepers);
+	*wq = WAITQ_INITIALIZER(*wq);
 }
 
@@ -81,6 +79,5 @@
 void waitq_initialize_with_count(waitq_t *wq, int count)
 {
-	waitq_initialize(wq);
-	wq->wakeup_balance = count;
+	*wq = WAITQ_INITIALIZER_WITH_COUNT(*wq, count);
 }
 
Index: kernel/generic/src/sysinfo/stats.c
===================================================================
--- kernel/generic/src/sysinfo/stats.c	(revision 3e7948ce465036902ba4c25b7c9e439e0aa5a84f)
+++ kernel/generic/src/sysinfo/stats.c	(revision 9f9454640c197e35a3f31f382d15f4f94627e67b)
@@ -90,5 +90,5 @@
 
 /** Load calculation lock */
-static mutex_t load_lock;
+static MUTEX_INITIALIZE(load_lock, MUTEX_PASSIVE);
 
 /** Get statistics of all CPUs
@@ -846,6 +846,4 @@
 void stats_init(void)
 {
-	mutex_initialize(&load_lock, MUTEX_PASSIVE);
-
 	sysinfo_set_item_gen_data("system.cpus", NULL, get_stats_cpus, NULL);
 	sysinfo_set_item_gen_data("system.physmem", NULL, get_stats_physmem, NULL);
Index: kernel/generic/src/sysinfo/sysinfo.c
===================================================================
--- kernel/generic/src/sysinfo/sysinfo.c	(revision 3e7948ce465036902ba4c25b7c9e439e0aa5a84f)
+++ kernel/generic/src/sysinfo/sysinfo.c	(revision 9f9454640c197e35a3f31f382d15f4f94627e67b)
@@ -57,5 +57,5 @@
 
 /** Sysinfo lock */
-static mutex_t sysinfo_lock;
+static MUTEX_INITIALIZE(sysinfo_lock, MUTEX_ACTIVE);
 
 /** Sysinfo item constructor
@@ -102,6 +102,4 @@
 	    sizeof(sysinfo_item_t), 0, sysinfo_item_constructor,
 	    sysinfo_item_destructor, SLAB_CACHE_MAGDEFERRED);
-
-	mutex_initialize(&sysinfo_lock, MUTEX_ACTIVE);
 }
 
