diff --git a/lib/c/2014/labcomm2014_fd_reader.c b/lib/c/2014/labcomm2014_fd_reader.c
index 23d5ba547d2e6fd98679e6b3b7d27ebb5281009d..ad2d22285e2b9b31b25e727fa40e9b33da6502c7 100644
--- a/lib/c/2014/labcomm2014_fd_reader.c
+++ b/lib/c/2014/labcomm2014_fd_reader.c
@@ -20,6 +20,7 @@
 */
 
 #include <errno.h>
+#include <unistd.h>
 #include <stdlib.h>
 #include <string.h>
 #include "labcomm2014_private.h"
diff --git a/lib/c/2014/labcomm2014_fd_writer.c b/lib/c/2014/labcomm2014_fd_writer.c
index 0e4d00937ea7c51fa659fb758d9d8fc086e561bd..42c9dbcc14eb765dbae6547000994a2c7c3c8153 100644
--- a/lib/c/2014/labcomm2014_fd_writer.c
+++ b/lib/c/2014/labcomm2014_fd_writer.c
@@ -20,6 +20,7 @@
 */
 
 #include <errno.h>
+#include <unistd.h>
 #include <string.h>
 #include <stdlib.h>
 #include <stdarg.h>
diff --git a/lib/c/2014/labcomm2014_time.c b/lib/c/2014/labcomm2014_time.c
index 8805f90d2c50c2d2c67246ad30cc171ae52baa74..eb5e1f5e43ab2cf4c6e03739078b57d022267874 100644
--- a/lib/c/2014/labcomm2014_time.c
+++ b/lib/c/2014/labcomm2014_time.c
@@ -22,17 +22,21 @@
 #include <errno.h>
 #include "labcomm2014_scheduler_private.h"
 
+#define TIME_time(time, ...) time
+#define TIME(func, ...)						\
+  if (TIME_time(__VA_ARGS__) &&				\
+      TIME_time(__VA_ARGS__)->action->func) {			\
+    return TIME_time(__VA_ARGS__)->action->func(__VA_ARGS__);	\
+  }									\
+  return -ENOSYS;
+
 int labcomm2014_time_free(struct labcomm2014_time *s)
 {
-  if (s && s->action->free)
-    return s->action->free(s);
-  return -ENOSYS;
+  TIME(free, s);
 }
 
 int labcomm2014_time_add_usec(struct labcomm2014_time *s, uint32_t usec)
 {
-  if (s && s->action->add_usec)
-    return s->action->add_usec(s, usec);
-  return -ENOSYS;
+  TIME(add_usec, s, usec);
 }