Index: uspace/app/tmon/Makefile
===================================================================
--- uspace/app/tmon/Makefile	(revision e9d600c20d03e61842f0bffa983b376a8da9fff0)
+++ uspace/app/tmon/Makefile	(revision ad2a8b18d9de9c1dd04ef8b3b13b306d5b53ce7a)
@@ -35,5 +35,6 @@
 	main.c\
 	list.c\
-	test.c
+	test.c\
+	resolve.c
 
 include $(USPACE_PREFIX)/Makefile.common
Index: uspace/app/tmon/test.c
===================================================================
--- uspace/app/tmon/test.c	(revision e9d600c20d03e61842f0bffa983b376a8da9fff0)
+++ uspace/app/tmon/test.c	(revision ad2a8b18d9de9c1dd04ef8b3b13b306d5b53ce7a)
@@ -37,9 +37,8 @@
 #include <stdio.h>
 #include <devman.h>
-#include <loc.h>
-#include <errno.h>
 #include <str_error.h>
 #include <usbdiag_iface.h>
 #include "commands.h"
+#include "resolve.h"
 
 #define NAME "tmon"
@@ -49,64 +48,12 @@
 #define DEFAULT_SIZE    65432
 
-static int resolve_default_fun(devman_handle_t *fun)
-{
-	category_id_t diag_cat;
-	service_id_t *svcs;
-	size_t count;
-	int rc;
-
-	if ((rc = loc_category_get_id(USBDIAG_CATEGORY, &diag_cat, 0))) {
-		printf(NAME ": Error resolving category '%s'", USBDIAG_CATEGORY);
-		return rc;
-	}
-
-	if ((rc = loc_category_get_svcs(diag_cat, &svcs, &count))) {
-		printf(NAME ": Error getting list of diagnostic devices.\n");
-		return rc;
-	}
-
-	// There must be exactly one diagnostic device for this to work.
-	if (count != 1) {
-		if (count) {
-			printf(NAME ": Found %ld devices. Please specify which to use.\n", count);
-		} else {
-			printf(NAME ": No diagnostic devices found.\n");
-		}
-		return ENOENT;
-	}
-
-	if ((rc = devman_fun_sid_to_handle(svcs[0], fun))) {
-		printf(NAME ": Error resolving handle of device with SID %ld.\n", svcs[0]);
-		return rc;
-	}
-
-	return EOK;
-}
-
-static int resolve_named_fun(const char *dev_path, devman_handle_t *fun)
-{
-	int rc;
-	service_id_t svc;
-	if ((rc = loc_service_get_id(dev_path, &svc, IPC_FLAG_BLOCKING))) {
-		printf(NAME ": Error resolving device. %s\n", str_error(rc));
-		return rc;
-	}
-
-	if ((rc = devman_fun_sid_to_handle(svc, fun))) {
-		printf(NAME ": Error resolving handle of device with SID %ld.\n", svc);
-		return rc;
-	}
-
-	return EOK;
-}
-
 static int resolve_and_test(int argc, char *argv[], int (*test)(devman_handle_t, int, size_t)) {
 	devman_handle_t fun = -1;
 
 	if (argc == 0) {
-		if (resolve_default_fun(&fun))
+		if (tmon_resolve_default(&fun))
 			return 1;
 	} else if (argc == 1) {
-		if (resolve_named_fun(argv[0], &fun))
+		if (tmon_resolve_named(argv[0], &fun))
 			return 1;
 	} else {
