diff --git a/libsel4debug/include/sel4debug/sel4_debug.h b/libsel4debug/include/sel4debug/sel4_debug.h
new file mode 100644
index 0000000..baa6f9b
--- /dev/null
+++ b/libsel4debug/include/sel4debug/sel4_debug.h
@@ -0,0 +1,21 @@
+/*
+ * Copyright 2014, NICTA
+ *
+ * This software may be distributed and modified according to the terms of
+ * the BSD 2-Clause license. Note that NO WARRANTY is provided.
+ * See "LICENSE_BSD2.txt" for details.
+ *
+ * @TAG(NICTA_BSD)
+ */
+
+#ifndef _SEL4_DEBUG_H_
+#define _SEL4_DEBUG_H_
+
+#define	sel4_error(e, str)	((e == seL4_NoError) ? (void)0 : __sel4_error(e, __FILE__, __func__, __LINE__, str))
+
+void __sel4_error(int, const char *, const char *, int, char *);
+
+const char *sel4_strerror(int errcode);
+extern char *sel4_errlist[];
+
+#endif /* _SEL4_DEBUG_ */
diff --git a/libsel4debug/src/sel4_debug.c b/libsel4debug/src/sel4_debug.c
new file mode 100644
index 0000000..1f75304
--- /dev/null
+++ b/libsel4debug/src/sel4_debug.c
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2014, NICTA
+ *
+ * This software may be distributed and modified according to the terms of
+ * the BSD 2-Clause license. Note that NO WARRANTY is provided.
+ * See "LICENSE_BSD2.txt" for details.
+ *
+ * @TAG(NICTA_BSD)
+ */
+
+#include <stdio.h> /* For fprintf() */
+#include <stdlib.h> /* For abort() */
+#include <assert.h>
+#include <sel4/sel4.h>
+#include <sel4utils/sel4_debug.h>
+#include <utils/stringify.h>
+
+char *sel4_errlist[] = {
+    [seL4_NoError] = STRINGIFY(seL4_NoError),
+    [seL4_InvalidArgument] = STRINGIFY(seL4_InvalidArgument),
+    [seL4_InvalidCapability] = STRINGIFY(seL4_InvalidCapability),
+    [seL4_IllegalOperation] = STRINGIFY(seL4_IllegalOperation),
+    [seL4_RangeError] = STRINGIFY(seL4_RangeError),
+    [seL4_AlignmentError] = STRINGIFY(seL4_AlignmentError),
+    [seL4_FailedLookup] = STRINGIFY(seL4_FailedLookup),
+    [seL4_TruncatedMessage] = STRINGIFY(seL4_TruncatedMessage),
+    [seL4_DeleteFirst] = STRINGIFY(seL4_DeleteFirst),
+    [seL4_RevokeFirst] = STRINGIFY(seL4_RevokeFirst),
+    [seL4_NotEnoughMemory] = STRINGIFY(seL4_NotEnoughMemory),
+    NULL
+};
+
+const char *
+sel4_strerror(int errcode)
+{
+    assert(errcode < sizeof(sel4_errlist) / sizeof(*sel4_errlist) - 1);
+    return sel4_errlist[errcode];
+}
+
+void
+__sel4_error(int sel4_error, const char *file,
+             const char *function, int line, char * str)
+{
+    fprintf(stderr, "seL4 Error: %s, function %s, file %s, line %d: %s\n",
+            sel4_errlist[sel4_error],
+            function, file, line, str);
+    abort();
+}
diff --git a/libsel4utils/include/sel4utils/sel4_debug.h b/libsel4utils/include/sel4utils/sel4_debug.h
index 6dc88fb..4304564 100644
--- a/libsel4utils/include/sel4utils/sel4_debug.h
+++ b/libsel4utils/include/sel4utils/sel4_debug.h
@@ -8,13 +8,9 @@
  * @TAG(NICTA_BSD)
  */
 
-#ifndef _SEL4_DEBUG_H_
-#define _SEL4_DEBUG_H_
+#ifndef _SEL4UTILS_SEL4_DEBUG_H_
+#define _SEL4UTILS_SEL4_DEBUG_H_
 
-#define	sel4_error(e, str)	((e == seL4_NoError) ? (void)0 : __sel4_error(e, __FILE__, __func__, __LINE__, str))
+#include <sel4debug/sel4_debug.h>
 
-void __sel4_error(int, const char *, const char *, int, const char *);
-
-extern const char *sel4_errlist[];
-
-#endif /* _SEL4_DEBUG_ */
+#endif /* _SEL4UTILS_SEL4_DEBUG_H_ */
diff --git a/libsel4utils/include/sel4utils/sel4_zf_logif.h b/libsel4utils/include/sel4utils/sel4_zf_logif.h
new file mode 100644
index 0000000..1abb698
--- /dev/null
+++ b/libsel4utils/include/sel4utils/sel4_zf_logif.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2014, NICTA
+ *
+ * This software may be distributed and modified according to the terms of
+ * the BSD 2-Clause license. Note that NO WARRANTY is provided.
+ * See "LICENSE_BSD2.txt" for details.
+ *
+ * @TAG(NICTA_BSD)
+ */
+
+#ifndef _SEL4_ZF_LOGIF_H
+#define _SEL4_ZF_LOGIF_H
+
+#include <utils/zf_log.h>
+#include <sel4utils/sel4_debug.h>
+
+/*  sel4_zf_logif.h:
+ * This file contains some convenience macros built on top of the ZF_LOG
+ * library, to reduce source size and improve single-line readability.
+ *
+ * ZF_LOG?_IF(condition, fmt, ...):
+ *  These will call the relevant ZF_LOG?() macro if "condition" evaluates to
+ *  true at runtime.
+ *
+ * ZF_LOG?_IFERR(errorcode, fmt, ...):
+ *  These will call the relevant ZF_LOG?() macro if "errorcode" is not 0, at
+ *  runtime.
+ */
+
+#define ZF_LOGD_IF(cond, fmt, ...) \
+	if ((cond)) { ZF_LOGD("[Cond failed: %s]\n\t" fmt, #cond, ## __VA_ARGS__); }
+#define ZF_LOGI_IF(cond, fmt, ...) \
+	if ((cond)) { ZF_LOGI("[Cond failed: %s]\n\t" fmt, #cond, ## __VA_ARGS__); }
+#define ZF_LOGW_IF(cond, fmt, ...) \
+	if ((cond)) { ZF_LOGW("[Cond failed: %s]\n\t" fmt, #cond, ## __VA_ARGS__); }
+#define ZF_LOGE_IF(cond, fmt, ...) \
+	if ((cond)) { ZF_LOGE("[Cond failed: %s]\n\t" fmt, #cond, ## __VA_ARGS__); }
+#define ZF_LOGF_IF(cond, fmt, ...) \
+	if ((cond)) { ZF_LOGF("[Cond failed: %s]\n\t" fmt, #cond, ## __VA_ARGS__); }
+
+#define ZF_LOGD_IFERR(err, fmt, ...) \
+	if ((err) != seL4_NoError) \
+		{ ZF_LOGD("[Err %s]:\n\t" fmt, sel4_strerror(err), ## __VA_ARGS__); }
+
+#define ZF_LOGI_IFERR(err, fmt, ...) \
+	if ((err) != seL4_NoError) \
+		{ ZF_LOGI("[Err %s]:\n\t" fmt, sel4_strerror(err), ## __VA_ARGS__); }
+
+#define ZF_LOGW_IFERR(err, fmt, ...) \
+	if ((err) != seL4_NoError) \
+		{ ZF_LOGW("[Err %s]:\n\t" fmt, sel4_strerror(err), ## __VA_ARGS__); }
+
+#define ZF_LOGE_IFERR(err, fmt, ...) \
+	if ((err) != seL4_NoError) \
+		{ ZF_LOGE("[Err %s]:\n\t" fmt, sel4_strerror(err), ## __VA_ARGS__); }
+
+#define ZF_LOGF_IFERR(err, fmt, ...) \
+	if ((err) != seL4_NoError) \
+		{ ZF_LOGF("[Err %s]:\n\t" fmt, sel4_strerror(err), ## __VA_ARGS__); }
+
+#endif /* _SEL4_ZF_LOGIF_H */
diff --git a/libsel4utils/src/sel4_debug.c b/libsel4utils/src/sel4_debug.c
deleted file mode 100644
index 8f64b50..0000000
--- a/libsel4utils/src/sel4_debug.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2014, NICTA
- *
- * This software may be distributed and modified according to the terms of
- * the BSD 2-Clause license. Note that NO WARRANTY is provided.
- * See "LICENSE_BSD2.txt" for details.
- *
- * @TAG(NICTA_BSD)
- */
-
-#include <stdio.h> /* For fprintf() */
-#include <stdlib.h> /* For abort() */
-#include <sel4utils/sel4_debug.h>
-
-const char *sel4_errlist[] = {
-    "seL4_NoError",
-    "seL4_InvalidArgument",
-    "seL4_InvalidCapability",
-    "seL4_IllegalOperation",
-    "seL4_RangeError",
-    "seL4_AlignmentError",
-    "seL4_FailedLookup",
-    "seL4_TruncatedMessage",
-    "seL4_DeleteFirst",
-    "seL4_RevokeFirst",
-    "seL4_NotEnoughMemory",
-    NULL
-};
-
-void
-__sel4_error(int sel4_error, const char *file,
-             const char *function, int line, const char * str)
-{
-    fprintf(stderr, "seL4 Error: %s, function %s, file %s, line %d: %s\n",
-            sel4_errlist[sel4_error],
-            function, file, line, str);
-    abort();
-}
