Index: uspace/drv/audio/hdaudio/hdaudio.c
===================================================================
--- uspace/drv/audio/hdaudio/hdaudio.c	(revision 82cbf8c6161e2ff15d39a43b59096447a98acc21)
+++ uspace/drv/audio/hdaudio/hdaudio.c	(revision 2fd26bbb5577f592b70747a25fba122b01bb9559)
@@ -175,5 +175,5 @@
 
 	ddf_msg(LVL_NOTE, "create parent sess");
-	hda->parent_sess = ddf_dev_parent_sess_create(dev);
+	hda->parent_sess = ddf_dev_parent_sess_get(dev);
 	if (hda->parent_sess == NULL) {
 		ddf_msg(LVL_ERROR, "Failed connecting parent driver.\n");
Index: uspace/drv/block/ahci/ahci.c
===================================================================
--- uspace/drv/block/ahci/ahci.c	(revision 82cbf8c6161e2ff15d39a43b59096447a98acc21)
+++ uspace/drv/block/ahci/ahci.c	(revision 2fd26bbb5577f592b70747a25fba122b01bb9559)
@@ -1140,5 +1140,5 @@
 	
 	/* Connect to parent device */
-	ahci->parent_sess = ddf_dev_parent_sess_create(dev);
+	ahci->parent_sess = ddf_dev_parent_sess_get(dev);
 	if (ahci->parent_sess == NULL)
 		return NULL;
Index: uspace/drv/block/ata_bd/main.c
===================================================================
--- uspace/drv/block/ata_bd/main.c	(revision 82cbf8c6161e2ff15d39a43b59096447a98acc21)
+++ uspace/drv/block/ata_bd/main.c	(revision 2fd26bbb5577f592b70747a25fba122b01bb9559)
@@ -68,5 +68,5 @@
 	int rc;
 
-	parent_sess = ddf_dev_parent_sess_create(dev);
+	parent_sess = ddf_dev_parent_sess_get(dev);
 	if (parent_sess == NULL)
 		return ENOMEM;
Index: uspace/drv/block/ddisk/ddisk.c
===================================================================
--- uspace/drv/block/ddisk/ddisk.c	(revision 82cbf8c6161e2ff15d39a43b59096447a98acc21)
+++ uspace/drv/block/ddisk/ddisk.c	(revision 2fd26bbb5577f592b70747a25fba122b01bb9559)
@@ -288,5 +288,5 @@
 	int rc;
 
-	parent_sess = ddf_dev_parent_sess_create(dev);
+	parent_sess = ddf_dev_parent_sess_get(dev);
 	if (parent_sess == NULL)
 		return ENOMEM;
Index: uspace/drv/bus/adb/cuda_adb/main.c
===================================================================
--- uspace/drv/bus/adb/cuda_adb/main.c	(revision 82cbf8c6161e2ff15d39a43b59096447a98acc21)
+++ uspace/drv/bus/adb/cuda_adb/main.c	(revision 2fd26bbb5577f592b70747a25fba122b01bb9559)
@@ -68,5 +68,5 @@
 	int rc;
 
-	parent_sess = ddf_dev_parent_sess_create(dev);
+	parent_sess = ddf_dev_parent_sess_get(dev);
 	if (parent_sess == NULL)
 		return ENOMEM;
Index: uspace/drv/bus/isa/isa.c
===================================================================
--- uspace/drv/bus/isa/isa.c	(revision 82cbf8c6161e2ff15d39a43b59096447a98acc21)
+++ uspace/drv/bus/isa/isa.c	(revision 2fd26bbb5577f592b70747a25fba122b01bb9559)
@@ -643,5 +643,5 @@
 	list_initialize(&isa->functions);
 
-	sess = ddf_dev_parent_sess_create(dev);
+	sess = ddf_dev_parent_sess_get(dev);
 	if (sess == NULL) {
 		ddf_msg(LVL_ERROR, "isa_dev_add failed to connect to the "
Index: uspace/drv/bus/pci/pciintel/pci.c
===================================================================
--- uspace/drv/bus/pci/pciintel/pci.c	(revision 82cbf8c6161e2ff15d39a43b59096447a98acc21)
+++ uspace/drv/bus/pci/pciintel/pci.c	(revision 2fd26bbb5577f592b70747a25fba122b01bb9559)
@@ -683,5 +683,5 @@
 	bus->dnode = dnode;
 	
-	sess = ddf_dev_parent_sess_create(dnode);
+	sess = ddf_dev_parent_sess_get(dnode);
 	if (sess == NULL) {
 		ddf_msg(LVL_ERROR, "pci_dev_add failed to connect to the "
Index: uspace/drv/char/atkbd/atkbd.c
===================================================================
--- uspace/drv/char/atkbd/atkbd.c	(revision 82cbf8c6161e2ff15d39a43b59096447a98acc21)
+++ uspace/drv/char/atkbd/atkbd.c	(revision 2fd26bbb5577f592b70747a25fba122b01bb9559)
@@ -366,5 +366,5 @@
 	
 	kbd->client_sess = NULL;
-	kbd->parent_sess = ddf_dev_parent_sess_create(dev);
+	kbd->parent_sess = ddf_dev_parent_sess_get(dev);
 	
 	if (!kbd->parent_sess) {
Index: uspace/drv/char/i8042/main.c
===================================================================
--- uspace/drv/char/i8042/main.c	(revision 82cbf8c6161e2ff15d39a43b59096447a98acc21)
+++ uspace/drv/char/i8042/main.c	(revision 2fd26bbb5577f592b70747a25fba122b01bb9559)
@@ -60,5 +60,5 @@
 	assert(dev);
 	
-	async_sess_t *parent_sess = ddf_dev_parent_sess_create(dev);
+	async_sess_t *parent_sess = ddf_dev_parent_sess_get(dev);
 	if (parent_sess == NULL)
 		return ENOMEM;
Index: uspace/drv/char/ns8250/ns8250.c
===================================================================
--- uspace/drv/char/ns8250/ns8250.c	(revision 82cbf8c6161e2ff15d39a43b59096447a98acc21)
+++ uspace/drv/char/ns8250/ns8250.c	(revision 2fd26bbb5577f592b70747a25fba122b01bb9559)
@@ -391,5 +391,5 @@
 	
 	/* Connect to the parent's driver. */
-	parent_sess = ddf_dev_parent_sess_create(ns->dev);
+	parent_sess = ddf_dev_parent_sess_get(ns->dev);
 	if (parent_sess == NULL) {
 		ddf_msg(LVL_ERROR, "Failed to connect to parent driver of "
Index: uspace/drv/char/pl050/pl050.c
===================================================================
--- uspace/drv/char/pl050/pl050.c	(revision 82cbf8c6161e2ff15d39a43b59096447a98acc21)
+++ uspace/drv/char/pl050/pl050.c	(revision 2fd26bbb5577f592b70747a25fba122b01bb9559)
@@ -167,5 +167,5 @@
 	pl050->buf_rp = pl050->buf_wp = 0;
 
-	pl050->parent_sess = ddf_dev_parent_sess_create(pl050->dev);
+	pl050->parent_sess = ddf_dev_parent_sess_get(pl050->dev);
 	if (pl050->parent_sess == NULL) {
 		ddf_msg(LVL_ERROR, "Failed connecitng parent driver.");
Index: uspace/drv/char/ps2mouse/ps2mouse.c
===================================================================
--- uspace/drv/char/ps2mouse/ps2mouse.c	(revision 82cbf8c6161e2ff15d39a43b59096447a98acc21)
+++ uspace/drv/char/ps2mouse/ps2mouse.c	(revision 2fd26bbb5577f592b70747a25fba122b01bb9559)
@@ -116,5 +116,5 @@
 {
 	mouse->client_sess = NULL;
-	mouse->parent_sess = ddf_dev_parent_sess_create(dev);
+	mouse->parent_sess = ddf_dev_parent_sess_get(dev);
 	if (!mouse->parent_sess)
 		return ENOMEM;
Index: uspace/drv/char/xtkbd/xtkbd.c
===================================================================
--- uspace/drv/char/xtkbd/xtkbd.c	(revision 82cbf8c6161e2ff15d39a43b59096447a98acc21)
+++ uspace/drv/char/xtkbd/xtkbd.c	(revision 2fd26bbb5577f592b70747a25fba122b01bb9559)
@@ -417,5 +417,5 @@
 	
 	kbd->client_sess = NULL;
-	kbd->parent_sess = ddf_dev_parent_sess_create(dev);
+	kbd->parent_sess = ddf_dev_parent_sess_get(dev);
 	
 	if (!kbd->parent_sess) {
Index: uspace/drv/time/cmos-rtc/cmos-rtc.c
===================================================================
--- uspace/drv/time/cmos-rtc/cmos-rtc.c	(revision 82cbf8c6161e2ff15d39a43b59096447a98acc21)
+++ uspace/drv/time/cmos-rtc/cmos-rtc.c	(revision 2fd26bbb5577f592b70747a25fba122b01bb9559)
@@ -213,6 +213,6 @@
 	/* Connect to the parent's driver */
 
-	parent_sess = ddf_dev_parent_sess_create(rtc->dev);
-	if (!parent_sess) {
+	parent_sess = ddf_dev_parent_sess_get(rtc->dev);
+	if (parent_sess == NULL) {
 		ddf_msg(LVL_ERROR, "Failed to connect to parent driver\
 		    of device %s.", ddf_dev_get_name(rtc->dev));
Index: uspace/lib/drv/generic/driver.c
===================================================================
--- uspace/lib/drv/generic/driver.c	(revision 82cbf8c6161e2ff15d39a43b59096447a98acc21)
+++ uspace/lib/drv/generic/driver.c	(revision 2fd26bbb5577f592b70747a25fba122b01bb9559)
@@ -599,29 +599,16 @@
 }
 
-/** Create session with the parent function.
- *
- * The session will be automatically closed when @a dev is destroyed.
- *
- * @param dev Device
- *
- * @return New session or NULL if session could not be created
- *
- */
-async_sess_t *ddf_dev_parent_sess_create(ddf_dev_t *dev)
-{
-	assert(dev->parent_sess == NULL);
-	dev->parent_sess = devman_parent_device_connect(dev->handle,
-	    IPC_FLAG_BLOCKING);
-
-	return dev->parent_sess;
-}
-
 /** Return existing session with the parent function.
  *
  * @param dev	Device
- * @return	Existing session or NULL if there is no session
+ * @return	Session with parent function or NULL upon failure
  */
 async_sess_t *ddf_dev_parent_sess_get(ddf_dev_t *dev)
 {
+	if (dev->parent_sess == NULL) {
+		dev->parent_sess = devman_parent_device_connect(dev->handle,
+		    IPC_FLAG_BLOCKING);
+	}
+
 	return dev->parent_sess;
 }
Index: uspace/lib/drv/include/ddf/driver.h
===================================================================
--- uspace/lib/drv/include/ddf/driver.h	(revision 82cbf8c6161e2ff15d39a43b59096447a98acc21)
+++ uspace/lib/drv/include/ddf/driver.h	(revision 2fd26bbb5577f592b70747a25fba122b01bb9559)
@@ -117,5 +117,4 @@
 extern devman_handle_t ddf_dev_get_handle(ddf_dev_t *);
 extern const char *ddf_dev_get_name(ddf_dev_t *);
-extern async_sess_t *ddf_dev_parent_sess_create(ddf_dev_t *);
 extern async_sess_t *ddf_dev_parent_sess_get(ddf_dev_t *);
 extern ddf_fun_t *ddf_fun_create(ddf_dev_t *, fun_type_t, const char *);
Index: uspace/lib/nic/src/nic_driver.c
===================================================================
--- uspace/lib/nic/src/nic_driver.c	(revision 82cbf8c6161e2ff15d39a43b59096447a98acc21)
+++ uspace/lib/nic/src/nic_driver.c	(revision 2fd26bbb5577f592b70747a25fba122b01bb9559)
@@ -249,7 +249,7 @@
 	
 	/* Connect to the parent's driver. */
-	parent_sess = ddf_dev_parent_sess_create(dev);
+	parent_sess = ddf_dev_parent_sess_get(dev);
 	if (parent_sess == NULL)
-		return EPARTY;
+		return EIO;
 	
 	return hw_res_get_list_parsed(parent_sess, resources, 0);
