Index: uspace/srv/net/slip/slip.c
===================================================================
--- uspace/srv/net/slip/slip.c	(revision 4510e068636e33ace1ab2e17098dc31efb1c864a)
+++ uspace/srv/net/slip/slip.c	(revision 3abf076007b21fc5db5fadd8c82bae8569999c06)
@@ -275,5 +275,6 @@
 	service_id_t linksid;
 	category_id_t iplinkcid;
-	async_sess_t *sess = NULL;
+	async_sess_t *sess_in = NULL;
+	async_sess_t *sess_out = NULL;
 	fid_t fid;
 	int rc;
@@ -307,9 +308,9 @@
 
 	/*
-	 * Create a parallel session because we will need to be able to both
-	 * read and write from the char_dev.
+	 * Create two sessions to allow to both read and write from the
+	 * char_dev at the same time.
 	 */
-	sess = loc_service_connect(EXCHANGE_PARALLEL, svcid, 0);
-	if (!sess) {
+	sess_out = loc_service_connect(EXCHANGE_SERIALIZE, svcid, 0);
+	if (!sess_out) {
 		log_msg(LOG_DEFAULT, LVL_ERROR,
 		    "Failed to connect to service %s (ID=%d)",
@@ -317,5 +318,13 @@
 		return rc;
 	}
-	slip_iplink.arg = sess;
+	slip_iplink.arg = sess_out;
+
+	sess_in = loc_service_connect(EXCHANGE_SERIALIZE, svcid, 0);
+	if (!sess_in) {
+		log_msg(LOG_DEFAULT, LVL_ERROR,
+		    "Failed to connect to service %s (ID=%d)",
+		    svcstr, (int) svcid);
+		goto fail;
+	}
 
 	rc = loc_service_register(linkstr, &linksid);
@@ -335,5 +344,5 @@
 	}
 
-	fid = fibril_create(slip_recv_fibril, sess);
+	fid = fibril_create(slip_recv_fibril, sess_in);
 	if (!fid) {
 		log_msg(LOG_DEFAULT, LVL_ERROR,
@@ -346,6 +355,8 @@
 
 fail:
-	if (sess)
-		async_hangup(sess);
+	if (sess_out)
+		async_hangup(sess_out);
+	if (sess_in)
+		async_hangup(sess_in);
 
 	/*
