Index: uspace/app/display-cfg/display-cfg.c
===================================================================
--- uspace/app/display-cfg/display-cfg.c	(revision 37087c892e6485fcba3edd06712191fa59f3fb40)
+++ uspace/app/display-cfg/display-cfg.c	(revision 97d3d9db4f40fc7312c2c51cdda6595ccc6210a4)
@@ -36,5 +36,4 @@
 #include <stdio.h>
 #include <stdlib.h>
-#include <str.h>
 #include <ui/fixed.h>
 #include <ui/resource.h>
@@ -69,6 +68,5 @@
  * @return EOK on success or an error code
  */
-static errno_t display_cfg_create(const char *display_spec,
-    display_cfg_t **rdcfg)
+errno_t display_cfg_create(const char *display_spec, display_cfg_t **rdcfg)
 {
 	ui_t *ui = NULL;
@@ -179,5 +177,5 @@
  * @param dcfg Display configuration dialog
  */
-static void display_cfg_destroy(display_cfg_t *dcfg)
+void display_cfg_destroy(display_cfg_t *dcfg)
 {
 	ui_window_destroy(dcfg->window);
@@ -185,49 +183,4 @@
 }
 
-static void print_syntax(void)
-{
-	printf("Syntax: display-cfg [-d <display-spec>]\n");
-}
-
-int main(int argc, char *argv[])
-{
-	const char *display_spec = UI_ANY_DEFAULT;
-	display_cfg_t *dcfg;
-	errno_t rc;
-	int i;
-
-	i = 1;
-	while (i < argc && argv[i][0] == '-') {
-		if (str_cmp(argv[i], "-d") == 0) {
-			++i;
-			if (i >= argc) {
-				printf("Argument missing.\n");
-				print_syntax();
-				return 1;
-			}
-
-			display_spec = argv[i++];
-		} else {
-			printf("Invalid option '%s'.\n", argv[i]);
-			print_syntax();
-			return 1;
-		}
-	}
-
-	if (i < argc) {
-		print_syntax();
-		return 1;
-	}
-
-	rc = display_cfg_create(display_spec, &dcfg);
-	if (rc != EOK)
-		return 1;
-
-	ui_run(dcfg->ui);
-	display_cfg_destroy(dcfg);
-
-	return 0;
-}
-
 /** @}
  */
Index: uspace/app/display-cfg/display-cfg.h
===================================================================
--- uspace/app/display-cfg/display-cfg.h	(revision 37087c892e6485fcba3edd06712191fa59f3fb40)
+++ uspace/app/display-cfg/display-cfg.h	(revision 97d3d9db4f40fc7312c2c51cdda6595ccc6210a4)
@@ -39,4 +39,7 @@
 #include "types/display-cfg.h"
 
+extern errno_t display_cfg_create(const char *, display_cfg_t **);
+extern void display_cfg_destroy(display_cfg_t *);
+
 #endif
 
Index: uspace/app/display-cfg/meson.build
===================================================================
--- uspace/app/display-cfg/meson.build	(revision 37087c892e6485fcba3edd06712191fa59f3fb40)
+++ uspace/app/display-cfg/meson.build	(revision 97d3d9db4f40fc7312c2c51cdda6595ccc6210a4)
@@ -30,8 +30,11 @@
 src = files(
 	'display-cfg.c',
+	'main.c',
 	'seats.c'
 )
 
 test_src = files(
+	'display-cfg.c',
+	'seats.c',
 	'test/display-cfg.c',
 	'test/main.c',
Index: uspace/app/display-cfg/seats.c
===================================================================
--- uspace/app/display-cfg/seats.c	(revision 37087c892e6485fcba3edd06712191fa59f3fb40)
+++ uspace/app/display-cfg/seats.c	(revision 97d3d9db4f40fc7312c2c51cdda6595ccc6210a4)
@@ -441,9 +441,4 @@
 	dcfg_devices_entry_t *dentry;
 
-	ui_pbutton_destroy(seats->add_device);
-	ui_pbutton_destroy(seats->remove_device);
-
-	ui_label_destroy(seats->devices_label);
-
 	lentry = ui_list_first(seats->device_list);
 	while (lentry != NULL) {
@@ -454,8 +449,4 @@
 		lentry = ui_list_first(seats->device_list);
 	}
-	ui_list_destroy(seats->device_list);
-
-	ui_pbutton_destroy(seats->add_seat);
-	ui_pbutton_destroy(seats->remove_seat);
 
 	lentry = ui_list_first(seats->seat_list);
@@ -468,7 +459,6 @@
 	}
 
-	ui_label_destroy(seats->seats_label);
-	ui_list_destroy(seats->seat_list);
-	ui_fixed_destroy(seats->fixed);
+	/* This will automatically destroy all controls in the tab */
+	ui_tab_destroy(seats->tab);
 	free(seats);
 }
@@ -482,5 +472,5 @@
  * @return EOK on success or an error code
  */
-static errno_t dcfg_seats_insert(dcfg_seats_t *seats, const char *name,
+errno_t dcfg_seats_insert(dcfg_seats_t *seats, const char *name,
     sysarg_t seat_id, dcfg_seats_entry_t **rentry)
 {
@@ -564,5 +554,5 @@
  * @return EOK on success or an error code
  */
-static errno_t dcfg_devices_insert(dcfg_seats_t *seats, const char *name,
+errno_t dcfg_devices_insert(dcfg_seats_t *seats, const char *name,
     service_id_t svc_id)
 {
Index: uspace/app/display-cfg/seats.h
===================================================================
--- uspace/app/display-cfg/seats.h	(revision 37087c892e6485fcba3edd06712191fa59f3fb40)
+++ uspace/app/display-cfg/seats.h	(revision 97d3d9db4f40fc7312c2c51cdda6595ccc6210a4)
@@ -42,4 +42,8 @@
 extern errno_t dcfg_seats_create(display_cfg_t *, dcfg_seats_t **);
 extern void dcfg_seats_destroy(dcfg_seats_t *);
+extern errno_t dcfg_seats_insert(dcfg_seats_t *, const char *, sysarg_t,
+    dcfg_seats_entry_t **);
+extern errno_t dcfg_devices_insert(dcfg_seats_t *, const char *,
+    service_id_t);
 
 #endif
Index: uspace/app/display-cfg/test/display-cfg.c
===================================================================
--- uspace/app/display-cfg/test/display-cfg.c	(revision 37087c892e6485fcba3edd06712191fa59f3fb40)
+++ uspace/app/display-cfg/test/display-cfg.c	(revision 97d3d9db4f40fc7312c2c51cdda6595ccc6210a4)
@@ -29,4 +29,5 @@
 #include <errno.h>
 #include <pcut/pcut.h>
+#include <ui/ui.h>
 #include "../display-cfg.h"
 
@@ -35,5 +36,15 @@
 PCUT_TEST_SUITE(display_cfg);
 
-//XXX TODO
+/** Test display_cfg_create() and display_cfg_destroy() */
+PCUT_TEST(create_destroy)
+{
+	display_cfg_t *dcfg;
+	errno_t rc;
+
+	rc = display_cfg_create(UI_DISPLAY_NULL, &dcfg);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	display_cfg_destroy(dcfg);
+}
 
 PCUT_EXPORT(display_cfg);
Index: uspace/app/display-cfg/test/seats.c
===================================================================
--- uspace/app/display-cfg/test/seats.c	(revision 37087c892e6485fcba3edd06712191fa59f3fb40)
+++ uspace/app/display-cfg/test/seats.c	(revision 97d3d9db4f40fc7312c2c51cdda6595ccc6210a4)
@@ -29,4 +29,5 @@
 #include <errno.h>
 #include <pcut/pcut.h>
+#include "../display-cfg.h"
 #include "../seats.h"
 
@@ -35,5 +36,144 @@
 PCUT_TEST_SUITE(seats);
 
-//XXX TODO
+/** Test dcfg_seats_create() and dcfg_seats_destroy() */
+PCUT_TEST(create_destroy)
+{
+	display_cfg_t *dcfg;
+	dcfg_seats_t *seats;
+	errno_t rc;
+
+	rc = display_cfg_create(UI_DISPLAY_NULL, &dcfg);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = dcfg_seats_create(dcfg, &seats);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	dcfg_seats_destroy(seats);
+	display_cfg_destroy(dcfg);
+}
+
+/** dcfg_seats_insert() inserts an entry into the seat list */
+PCUT_TEST(seats_insert)
+{
+	display_cfg_t *dcfg;
+	dcfg_seats_t *seats;
+	dcfg_seats_entry_t *entry = NULL;
+	errno_t rc;
+
+	rc = display_cfg_create(UI_DISPLAY_NULL, &dcfg);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = dcfg_seats_create(dcfg, &seats);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = dcfg_seats_insert(seats, "Alice", 42, &entry);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+	PCUT_ASSERT_NOT_NULL(entry);
+
+	PCUT_ASSERT_STR_EQUALS("Alice", entry->name);
+	PCUT_ASSERT_INT_EQUALS(42, entry->seat_id);
+
+	dcfg_seats_destroy(seats);
+	display_cfg_destroy(dcfg);
+}
+
+//??? Requires us to create a test display config service
+PCUT_TEST(seats_list_populate)
+{
+}
+
+/** dcfg_devices_insert() inserts an entry into the device list */
+PCUT_TEST(devices_insert)
+{
+	display_cfg_t *dcfg;
+	dcfg_seats_t *seats;
+	ui_list_entry_t *lentry;
+	dcfg_devices_entry_t *entry;
+	errno_t rc;
+
+	rc = display_cfg_create(UI_DISPLAY_NULL, &dcfg);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = dcfg_seats_create(dcfg, &seats);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = dcfg_devices_insert(seats, "mydevice", 42);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	lentry = ui_list_first(seats->device_list);
+	PCUT_ASSERT_NOT_NULL(lentry);
+	entry = (dcfg_devices_entry_t *)ui_list_entry_get_arg(lentry);
+	PCUT_ASSERT_NOT_NULL(entry);
+
+	PCUT_ASSERT_STR_EQUALS("mydevice", entry->name);
+	PCUT_ASSERT_INT_EQUALS(42, entry->svc_id);
+
+	dcfg_seats_destroy(seats);
+	display_cfg_destroy(dcfg);
+}
+
+PCUT_TEST(avail_devices_insert)
+{
+}
+
+PCUT_TEST(asgn_dev_list_populate)
+{
+}
+
+PCUT_TEST(avail_dev_list_populate)
+{
+}
+
+PCUT_TEST(seats_get_selected)
+{
+}
+
+PCUT_TEST(devices_get_selected)
+{
+}
+
+PCUT_TEST(seats_list_selected)
+{
+}
+
+PCUT_TEST(add_seat_clicked)
+{
+}
+
+PCUT_TEST(remove_seat_clicked)
+{
+}
+
+PCUT_TEST(add_seat_dialog_bok)
+{
+}
+
+PCUT_TEST(add_seat_dialog_bcancel)
+{
+}
+
+PCUT_TEST(add_seat_dialog_close)
+{
+}
+
+PCUT_TEST(add_device_clicked)
+{
+}
+
+PCUT_TEST(remove_device_clicked)
+{
+}
+
+PCUT_TEST(add_device_dialog_bok)
+{
+}
+
+PCUT_TEST(add_device_dialog_bcancel)
+{
+}
+
+PCUT_TEST(add_device_dialog_close)
+{
+}
 
 PCUT_EXPORT(seats);
