--- a/discover/waiter.c
+++ /dev/null
@@ -1,83 +0,0 @@
-
-#include <poll.h>
-#include <string.h>
-#include <assert.h>
-
-#include <talloc/talloc.h>
-
-#include "waiter.h"
-
-struct waiter {
-	int		fd;
-	int		events;
-	waiter_cb	callback;
-	void		*arg;
-};
-
-static struct waiter *waiters;
-static int n_waiters;
-
-struct waiter *waiter_register(int fd, int events,
-		waiter_cb callback, void *arg)
-{
-	struct waiter *waiter;
-
-	n_waiters++;
-
-	waiters = talloc_realloc(NULL, waiters, struct waiter, n_waiters);
-	waiter = &waiters[n_waiters - 1];
-
-	waiter->fd = fd;
-	waiter->events = events;
-	waiter->callback = callback;
-	waiter->arg = arg;
-
-	return 0;
-}
-
-void waiter_remove(struct waiter *waiter)
-{
-	int i;
-
-	i = waiter - waiters;
-	assert(i >= 0 && i < n_waiters);
-
-	n_waiters--;
-	memmove(&waiters[i], &waiters[i+1], n_waiters - i);
-
-	waiters = talloc_realloc(NULL, waiters, struct waiter, n_waiters);
-}
-
-int waiter_poll(void)
-{
-	static struct pollfd *pollfds;
-	static int n_pollfds;
-	int i, rc;
-
-	if (n_waiters > n_pollfds) {
-		pollfds = talloc_realloc(NULL, pollfds,
-				struct pollfd, n_waiters);
-	}
-
-	for (i = 0; i < n_waiters; i++) {
-		pollfds[i].fd = waiters[i].fd;
-		pollfds[i].events = waiters[i].events;
-		pollfds[i].revents = 0;
-	}
-
-	rc = poll(pollfds, n_waiters, -1);
-
-	if (rc <= 0)
-		return rc;
-
-	for (i = 0; i < n_waiters; i++) {
-		if (pollfds[i].revents) {
-			rc = waiters[i].callback(waiters[i].arg);
-
-			if (rc)
-				waiter_remove(&waiters[i]);
-		}
-	}
-
-	return 0;
-}
--- a/discover/waiter.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef _WAITER_H
-#define _WAITER_H
-
-#include <poll.h>
-
-struct waiter;
-
-enum events {
-	WAIT_IN  = POLLIN,
-	WAIT_OUT = POLLOUT,
-};
-
-typedef int (*waiter_cb)(void *);
-
-struct waiter *waiter_register(int fd, int events,
-		waiter_cb callback, void *arg);
-
-void waiter_remove(struct waiter *waiter);
-
-int waiter_poll(void);
-#endif /* _WAITER_H */
-
-
--- /dev/null
+++ b/lib/waiter.c
@@ -0,0 +1,83 @@
+
+#include <poll.h>
+#include <string.h>
+#include <assert.h>
+
+#include <talloc/talloc.h>
+
+#include "waiter.h"
+
+struct waiter {
+	int		fd;
+	int		events;
+	waiter_cb	callback;
+	void		*arg;
+};
+
+static struct waiter *waiters;
+static int n_waiters;
+
+struct waiter *waiter_register(int fd, int events,
+		waiter_cb callback, void *arg)
+{
+	struct waiter *waiter;
+
+	n_waiters++;
+
+	waiters = talloc_realloc(NULL, waiters, struct waiter, n_waiters);
+	waiter = &waiters[n_waiters - 1];
+
+	waiter->fd = fd;
+	waiter->events = events;
+	waiter->callback = callback;
+	waiter->arg = arg;
+
+	return 0;
+}
+
+void waiter_remove(struct waiter *waiter)
+{
+	int i;
+
+	i = waiter - waiters;
+	assert(i >= 0 && i < n_waiters);
+
+	n_waiters--;
+	memmove(&waiters[i], &waiters[i+1], n_waiters - i);
+
+	waiters = talloc_realloc(NULL, waiters, struct waiter, n_waiters);
+}
+
+int waiter_poll(void)
+{
+	static struct pollfd *pollfds;
+	static int n_pollfds;
+	int i, rc;
+
+	if (n_waiters > n_pollfds) {
+		pollfds = talloc_realloc(NULL, pollfds,
+				struct pollfd, n_waiters);
+	}
+
+	for (i = 0; i < n_waiters; i++) {
+		pollfds[i].fd = waiters[i].fd;
+		pollfds[i].events = waiters[i].events;
+		pollfds[i].revents = 0;
+	}
+
+	rc = poll(pollfds, n_waiters, -1);
+
+	if (rc <= 0)
+		return rc;
+
+	for (i = 0; i < n_waiters; i++) {
+		if (pollfds[i].revents) {
+			rc = waiters[i].callback(waiters[i].arg);
+
+			if (rc)
+				waiter_remove(&waiters[i]);
+		}
+	}
+
+	return 0;
+}
--- /dev/null
+++ b/lib/waiter.h
@@ -0,0 +1,23 @@
+#ifndef _WAITER_H
+#define _WAITER_H
+
+#include <poll.h>
+
+struct waiter;
+
+enum events {
+	WAIT_IN  = POLLIN,
+	WAIT_OUT = POLLOUT,
+};
+
+typedef int (*waiter_cb)(void *);
+
+struct waiter *waiter_register(int fd, int events,
+		waiter_cb callback, void *arg);
+
+void waiter_remove(struct waiter *waiter);
+
+int waiter_poll(void);
+#endif /* _WAITER_H */
+
+
--- a/rules.mk
+++ b/rules.mk
@@ -16,6 +16,7 @@ artwork = background.jpg cdrom.png hdd.p
 
 talloc_objs = lib/talloc/talloc.o
 list_objs = lib/list/list.o
+waiter_objs = lib/waiter.o
 server_objs = lib/pb-protocol/pb-protocol.o
 parser_objs = discover/parser.o discover/parser-utils.o \
 	      $(foreach p, $(parsers), discover/$(p)-parser.o)
@@ -46,8 +47,8 @@ ui/test/pb-test: $(pb_test_objs)
 #	      $(foreach p,$(parsers),discover/$(p)-parser.o)
 
 pb_discover_objs = discover/pb-discover.o discover/udev.o discover/log.o \
-		   discover/waiter.o discover/discover-server.o \
-		   discover/device-handler.o discover/paths.o \
+		   discover/discover-server.o discover/device-handler.o \
+		   discover/paths.o $(waiter_objs) \
 		   $(talloc_objs) $(server_objs) $(parser_objs) $(list_objs)
 
 discover/pb-discover: $(pb_discover_objs)
