Index: uspace/app/devctl/devctl.c
===================================================================
--- uspace/app/devctl/devctl.c	(revision 4c6ade60e970767e76dc770441ab58c5d5f1e227)
+++ uspace/app/devctl/devctl.c	(revision e5556e4a11175054df13aab078fc6d3c831cc8c2)
@@ -162,4 +162,6 @@
 {
 	devman_handle_t *drvs;
+	driver_state_t state;
+	const char *sstate;
 	size_t ndrvs;
 	size_t i;
@@ -170,10 +172,25 @@
 		return rc;
 
-	printf("Got %d handles\n", ndrvs);
 	for (i = 0; i < ndrvs; i++) {
 		rc = devman_driver_get_name(drvs[i], drv_name, MAX_NAME_LENGTH);
 		if (rc != EOK)
 			continue;
-		printf("%3d %s\n", (int)drvs[i], drv_name);
+		rc = devman_driver_get_state(drvs[i], &state);
+		if (rc != EOK)
+			continue;
+		switch (state) {
+		case DRIVER_NOT_STARTED:
+			sstate = "not started";
+			break;
+		case DRIVER_STARTING:
+			sstate = "starting";
+			break;
+		case DRIVER_RUNNING:
+			sstate = "running";
+			break;
+		default:
+			sstate = "unknown";
+		}
+		printf("%3d %-10s %s\n", (int)drvs[i], drv_name, sstate);
 	}
 	free(drvs);
Index: uspace/lib/c/generic/devman.c
===================================================================
--- uspace/lib/c/generic/devman.c	(revision 4c6ade60e970767e76dc770441ab58c5d5f1e227)
+++ uspace/lib/c/generic/devman.c	(revision e5556e4a11175054df13aab078fc6d3c831cc8c2)
@@ -604,4 +604,22 @@
 }
 
+int devman_driver_get_state(devman_handle_t drvh, driver_state_t *rstate)
+{
+	sysarg_t state;
+	async_exch_t *exch = devman_exchange_begin(DEVMAN_CLIENT);
+	if (exch == NULL)
+		return ENOMEM;
+	
+	int rc = async_req_1_1(exch, DEVMAN_DRIVER_GET_STATE, drvh,
+	    &state);
+	
+	devman_exchange_end(exch);
+	if (rc != EOK)
+		return rc;
+
+	*rstate = state;
+	return rc;
+}
+
 /** @}
  */
Index: uspace/lib/c/include/devman.h
===================================================================
--- uspace/lib/c/include/devman.h	(revision 4c6ade60e970767e76dc770441ab58c5d5f1e227)
+++ uspace/lib/c/include/devman.h	(revision e5556e4a11175054df13aab078fc6d3c831cc8c2)
@@ -73,4 +73,5 @@
 extern int devman_get_drivers(devman_handle_t **, size_t *);
 extern int devman_driver_get_name(devman_handle_t, char *, size_t);
+extern int devman_driver_get_state(devman_handle_t, driver_state_t *);
 
 #endif
Index: uspace/lib/c/include/ipc/devman.h
===================================================================
--- uspace/lib/c/include/ipc/devman.h	(revision 4c6ade60e970767e76dc770441ab58c5d5f1e227)
+++ uspace/lib/c/include/ipc/devman.h	(revision e5556e4a11175054df13aab078fc6d3c831cc8c2)
@@ -42,4 +42,18 @@
 
 typedef sysarg_t devman_handle_t;
+
+typedef enum {
+	/** Driver has not been started. */
+	DRIVER_NOT_STARTED = 0,
+	
+	/**
+	 * Driver has been started, but has not registered as running and ready
+	 * to receive requests.
+	 */
+	DRIVER_STARTING,
+	
+	/** Driver is running and prepared to serve incomming requests. */
+	DRIVER_RUNNING
+} driver_state_t;
 
 typedef enum {
@@ -163,5 +177,6 @@
 	DEVMAN_FUN_SID_TO_HANDLE,
 	DEVMAN_GET_DRIVERS,
-	DEVMAN_DRIVER_GET_NAME
+	DEVMAN_DRIVER_GET_NAME,
+	DEVMAN_DRIVER_GET_STATE
 } client_to_devman_t;
 
Index: uspace/srv/devman/client_conn.c
===================================================================
--- uspace/srv/devman/client_conn.c	(revision 4c6ade60e970767e76dc770441ab58c5d5f1e227)
+++ uspace/srv/devman/client_conn.c	(revision e5556e4a11175054df13aab078fc6d3c831cc8c2)
@@ -490,4 +490,18 @@
 }
 
+/** Get driver state. */
+static void devman_driver_get_state(ipc_callid_t iid, ipc_call_t *icall)
+{
+	driver_t *drv;
+	
+	drv = driver_find(&drivers_list, IPC_GET_ARG1(*icall));
+	if (drv == NULL) {
+		async_answer_0(iid, ENOENT);
+		return;
+	}
+	
+	async_answer_1(iid, EOK, (sysarg_t) drv->state);
+}
+
 /** Function for handling connections from a client to the device manager. */
 void devman_connection_client(ipc_callid_t iid, ipc_call_t *icall)
@@ -537,4 +551,7 @@
 			devman_driver_get_name(callid, &call);
 			break;
+		case DEVMAN_DRIVER_GET_STATE:
+			devman_driver_get_state(callid, &call);
+			break;
 		default:
 			async_answer_0(callid, ENOENT);
Index: uspace/srv/devman/devman.h
===================================================================
--- uspace/srv/devman/devman.h	(revision 4c6ade60e970767e76dc770441ab58c5d5f1e227)
+++ uspace/srv/devman/devman.h	(revision e5556e4a11175054df13aab078fc6d3c831cc8c2)
@@ -62,18 +62,4 @@
 } client_t;
 
-typedef enum {
-	/** Driver has not been started. */
-	DRIVER_NOT_STARTED = 0,
-	
-	/**
-	 * Driver has been started, but has not registered as running and ready
-	 * to receive requests.
-	 */
-	DRIVER_STARTING,
-	
-	/** Driver is running and prepared to serve incomming requests. */
-	DRIVER_RUNNING
-} driver_state_t;
-
 /** Representation of device driver. */
 typedef struct driver {
@@ -87,5 +73,5 @@
 	 * and prepared to receive requests.
 	 */
-	int state;
+	driver_state_t state;
 	
 	/** Session asociated with this driver. */
Index: uspace/srv/devman/driver.c
===================================================================
--- uspace/srv/devman/driver.c	(revision 4c6ade60e970767e76dc770441ab58c5d5f1e227)
+++ uspace/srv/devman/driver.c	(revision e5556e4a11175054df13aab078fc6d3c831cc8c2)
@@ -81,5 +81,5 @@
 {
 	fibril_mutex_lock(&drivers_list->drivers_mutex);
-	list_prepend(&drv->drivers, &drivers_list->drivers);
+	list_append(&drv->drivers, &drivers_list->drivers);
 	drv->handle = drivers_list->next_handle++;
 	fibril_mutex_unlock(&drivers_list->drivers_mutex);
