Index: uspace/app/pcapctl/main.c
===================================================================
--- uspace/app/pcapctl/main.c	(revision e846bec09622fa9fc4533e50f14c82898f0558c9)
+++ uspace/app/pcapctl/main.c	(revision e4cc2660086726ebabd608e31dc30bc295305e1a)
@@ -41,26 +41,27 @@
 #define NAME "pcapctl"
 
-pcapctl_sess_t sess;
+pcapctl_sess_t* sess;
 
-static errno_t start_dumping(const char *drv_name, const char *name)
+static errno_t start_dumping(const char *svc_name, const char *name)
 {
-	errno_t rc = pcapctl_dump_init(&sess, drv_name);
+	errno_t rc = pcapctl_dump_open(svc_name, &sess);
 	if (rc != EOK) {
-		//fprintf(stderr, "Error initializing ...\n");
 		return 1;
 	}
-	pcapctl_dump_start(name, &sess);
+	pcapctl_dump_start(name, sess);
+	pcapctl_dump_close(sess);
 	return EOK;
 }
 
 /** Session might */
-static errno_t stop_dumping(const char *drv_name)
+static errno_t stop_dumping(const char *svc_name)
 {
-	errno_t rc = pcapctl_dump_init(&sess, drv_name);
+	errno_t rc = pcapctl_dump_open(svc_name, &sess);
 	if (rc != EOK) {
-		fprintf(stderr, "Error initializing ...\n");
 		return 1;
 	}
-	pcapctl_dump_stop(&sess);
+
+	pcapctl_dump_stop(sess);
+	pcapctl_dump_close(sess);
 	return EOK;
 }
@@ -73,7 +74,7 @@
 {
 	fprintf(stderr, "Usage:\n");
+	fprintf(stderr, "  %s list: List of devices\n", progname);
 	fprintf(stderr, "  %s start <device> <outfile>: Packets dumped from <device> will be written to <outfile>\n", progname);
 	fprintf(stderr, "  %s stop <device>: Dumping from <device> stops\n", progname);
-
 }
 
Index: uspace/lib/nic/include/nic_driver.h
===================================================================
--- uspace/lib/nic/include/nic_driver.h	(revision e846bec09622fa9fc4533e50f14c82898f0558c9)
+++ uspace/lib/nic/include/nic_driver.h	(revision e4cc2660086726ebabd608e31dc30bc295305e1a)
@@ -46,9 +46,9 @@
 #include <nic/nic.h>
 #include <async.h>
+#include <pcapdump_iface.h>
 
 #include "nic.h"
 #include "nic_rx_control.h"
 #include "nic_wol_virtues.h"
-#include "pcap/include/pcapdump_iface.h"
 
 struct sw_poll_info {
Index: uspace/lib/nic/src/nic_driver.c
===================================================================
--- uspace/lib/nic/src/nic_driver.c	(revision e846bec09622fa9fc4533e50f14c82898f0558c9)
+++ uspace/lib/nic/src/nic_driver.c	(revision e4cc2660086726ebabd608e31dc30bc295305e1a)
@@ -650,6 +650,6 @@
 
 	nic_data->dev = device;
+
 	errno_t pcap_rc  = pcapdump_init(nic_get_pcap_iface(nic_data));
-
 	if (pcap_rc != EOK) {
 		printf("Failed creating pcapdump port\n");
Index: uspace/lib/pcap/include/pcapctl_dump.h
===================================================================
--- uspace/lib/pcap/include/pcapctl_dump.h	(revision e846bec09622fa9fc4533e50f14c82898f0558c9)
+++ uspace/lib/pcap/include/pcapctl_dump.h	(revision e4cc2660086726ebabd608e31dc30bc295305e1a)
@@ -49,8 +49,10 @@
 } pcapctl_sess_t;
 
-extern errno_t pcapctl_dump_init(pcapctl_sess_t *, const char *);
+extern errno_t pcapctl_dump_open(const char *svcname, pcapctl_sess_t **rsess);
+extern errno_t pcapctl_dump_close(pcapctl_sess_t *sess);
 extern errno_t pcapctl_dump_start(const char *, pcapctl_sess_t *);
 extern errno_t pcapctl_dump_stop(pcapctl_sess_t *);
 extern errno_t pcapctl_list(void);
+
 
 #endif
Index: uspace/lib/pcap/src/pcapctl_dump.c
===================================================================
--- uspace/lib/pcap/src/pcapctl_dump.c	(revision e846bec09622fa9fc4533e50f14c82898f0558c9)
+++ uspace/lib/pcap/src/pcapctl_dump.c	(revision e4cc2660086726ebabd608e31dc30bc295305e1a)
@@ -51,5 +51,5 @@
 }
 
-static errno_t pcapctl_cat_has_drv(const char *drv_name, service_id_t* svc) {
+static errno_t pcapctl_cat_get_svc(const char *drv_name, service_id_t* svc) {
 	errno_t rc;
 	category_id_t pcap_cat;
@@ -90,5 +90,5 @@
 	rc = loc_category_get_id("pcap", &pcap_cat, 0);
 	if (rc != EOK) {
-		printf("Error resolving category 'pcap'.\n");
+		printf("Error resolving category pcap.\n");
 		return rc;
 	}
@@ -97,27 +97,30 @@
 	if (rc != EOK) {
 		printf("Error resolving list of pcap services.\n");
+		free(pcap_svcs);
 		return rc;
 	}
 
-	assert((count > 0) && "TODO: not implemented when no services are available\n");
-
-	fprintf(stdout, "Drivers:\n");
+	fprintf(stdout, "Services:\n");
 	for (unsigned i = 0; i < count; ++i) {
 		char *name = NULL;
 		loc_service_get_name(pcap_svcs[i], &name);
-
-		fprintf(stdout, "driver: %s\n", name);
+		fprintf(stdout, "service: %s\n", name);
 	}
+	free(pcap_svcs);
 	return EOK;
 }
 
-errno_t pcapctl_dump_init(pcapctl_sess_t *sess, const char *drv_name)
+
+errno_t pcapctl_dump_open(const char *svcname, pcapctl_sess_t **rsess)
 {
 	errno_t rc;
 	service_id_t svc;
-	rc  = pcapctl_cat_has_drv(drv_name, &svc);
+	pcapctl_sess_t *sess = calloc(1, sizeof(pcapctl_sess_t));
+	if (sess == NULL)
+		return ENOMEM;
+
+	rc  = pcapctl_cat_get_svc(svcname, &svc);
 	if (rc != EOK) {
-		fprintf(stderr, "No such driver was found.\n");
-		return 1;
+		goto error;
 	}
 	async_sess_t *new_session = loc_service_connect(svc, INTERFACE_PCAP_CONTROL, 0);
@@ -127,8 +130,17 @@
 		goto error;
 	}
+
 	sess->sess = new_session;
-	rc = EOK;
+	*rsess = sess;
+	return EOK;
 error:
+	pcapctl_dump_close(sess);
 	return rc;
+}
+
+errno_t pcapctl_dump_close(pcapctl_sess_t *sess)
+{
+	free(sess);
+	return EOK;
 }
 
