Index: uspace/app/bdsh/cmds/modules/cat/cat.c
===================================================================
--- uspace/app/bdsh/cmds/modules/cat/cat.c	(revision c1694b6b243b360b5f1fbf0629b5e7d4f7f4a515)
+++ uspace/app/bdsh/cmds/modules/cat/cat.c	(revision f77c1c90c1f223647872d5cefa2d86f63bc846d7)
@@ -195,6 +195,10 @@
 		/* Allow storing the whole UTF-8 character. */
 		blen = STR_BOUNDS(1);
-	} else
-		fd = vfs_lookup_open(fname, WALK_REGULAR, MODE_READ);
+	} else {
+		int rc = vfs_lookup_open(fname, WALK_REGULAR, MODE_READ, &fd);
+		if (rc != EOK) {
+			fd = -1;
+		}
+	}
 	
 	if (fd < 0) {
Index: uspace/app/bdsh/cmds/modules/cmp/cmp.c
===================================================================
--- uspace/app/bdsh/cmds/modules/cmp/cmp.c	(revision c1694b6b243b360b5f1fbf0629b5e7d4f7f4a515)
+++ uspace/app/bdsh/cmds/modules/cmp/cmp.c	(revision f77c1c90c1f223647872d5cefa2d86f63bc846d7)
@@ -80,7 +80,6 @@
 
 	for (int i = 0; i < 2; i++) {
-		fd[i] = vfs_lookup_open(fn[i], WALK_REGULAR, MODE_READ);
-		if (fd[i] < 0) {
-			rc = fd[i];
+		rc = vfs_lookup_open(fn[i], WALK_REGULAR, MODE_READ, &(fd[i]));
+		if (rc != EOK) {
 			printf("Unable to open %s\n", fn[i]);
 			goto end;
Index: uspace/app/bdsh/cmds/modules/cp/cp.c
===================================================================
--- uspace/app/bdsh/cmds/modules/cp/cp.c	(revision c1694b6b243b360b5f1fbf0629b5e7d4f7f4a515)
+++ uspace/app/bdsh/cmds/modules/cp/cp.c	(revision f77c1c90c1f223647872d5cefa2d86f63bc846d7)
@@ -394,12 +394,12 @@
 		printf("Copying %s to %s\n", src, dest);
 
-	fd1 = vfs_lookup_open(src, WALK_REGULAR, MODE_READ);
-	if (fd1 < 0) {
+	rc = vfs_lookup_open(src, WALK_REGULAR, MODE_READ, &fd1);
+	if (rc != EOK) {
 		printf("Unable to open source file %s\n", src);
 		return -1;
 	}
 
-	fd2 = vfs_lookup_open(dest, WALK_REGULAR | WALK_MAY_CREATE, MODE_WRITE);
-	if (fd2 < 0) {
+	rc = vfs_lookup_open(dest, WALK_REGULAR | WALK_MAY_CREATE, MODE_WRITE, &fd2);
+	if (rc != EOK) {
 		printf("Unable to open destination file %s\n", dest);
 		vfs_put(fd1);
Index: uspace/app/bdsh/cmds/modules/mkfile/mkfile.c
===================================================================
--- uspace/app/bdsh/cmds/modules/mkfile/mkfile.c	(revision c1694b6b243b360b5f1fbf0629b5e7d4f7f4a515)
+++ uspace/app/bdsh/cmds/modules/mkfile/mkfile.c	(revision f77c1c90c1f223647872d5cefa2d86f63bc846d7)
@@ -163,6 +163,6 @@
 	file_name = argv[optind];
 
-	fd = vfs_lookup_open(file_name, WALK_REGULAR | WALK_MUST_CREATE, MODE_WRITE);
-	if (fd < 0) {
+	rc = vfs_lookup_open(file_name, WALK_REGULAR | WALK_MUST_CREATE, MODE_WRITE, &fd);
+	if (rc != EOK) {
 		printf("%s: failed to create file %s.\n", cmdname, file_name);
 		return CMD_FAILURE;
Index: uspace/app/bdsh/cmds/modules/rm/rm.c
===================================================================
--- uspace/app/bdsh/cmds/modules/rm/rm.c	(revision c1694b6b243b360b5f1fbf0629b5e7d4f7f4a515)
+++ uspace/app/bdsh/cmds/modules/rm/rm.c	(revision f77c1c90c1f223647872d5cefa2d86f63bc846d7)
@@ -149,6 +149,5 @@
 	}
 
-	fd = vfs_lookup(path, WALK_REGULAR);
-	if (fd >= 0) {
+	if (vfs_lookup(path, WALK_REGULAR, &fd) == EOK) {
 		vfs_put(fd);
 		return RM_FILE;
Index: uspace/app/bdsh/cmds/modules/touch/touch.c
===================================================================
--- uspace/app/bdsh/cmds/modules/touch/touch.c	(revision c1694b6b243b360b5f1fbf0629b5e7d4f7f4a515)
+++ uspace/app/bdsh/cmds/modules/touch/touch.c	(revision f77c1c90c1f223647872d5cefa2d86f63bc846d7)
@@ -123,5 +123,8 @@
 		if ((!no_create) ||
 		    ((no_create) && (vfs_stat_path(buff, &file_stat) == EOK))) {
-			fd = vfs_lookup(buff, WALK_REGULAR | WALK_MAY_CREATE);
+			int rc = vfs_lookup(buff, WALK_REGULAR | WALK_MAY_CREATE, &fd);
+			if (rc != EOK) {
+				fd = -1;
+			}
 		}
 		
Index: uspace/app/bdsh/exec.c
===================================================================
--- uspace/app/bdsh/exec.c	(revision c1694b6b243b360b5f1fbf0629b5e7d4f7f4a515)
+++ uspace/app/bdsh/exec.c	(revision f77c1c90c1f223647872d5cefa2d86f63bc846d7)
@@ -58,6 +58,6 @@
 	int fd;
 
-	fd = vfs_lookup_open(f, WALK_REGULAR, MODE_READ);
-	if (fd >= 0) {
+	int rc = vfs_lookup_open(f, WALK_REGULAR, MODE_READ, &fd);
+	if (rc == EOK) {
 		vfs_put(fd);
 		return 0;
Index: uspace/app/getterm/getterm.c
===================================================================
--- uspace/app/getterm/getterm.c	(revision c1694b6b243b360b5f1fbf0629b5e7d4f7f4a515)
+++ uspace/app/getterm/getterm.c	(revision f77c1c90c1f223647872d5cefa2d86f63bc846d7)
@@ -65,12 +65,16 @@
 	*stream = NULL;
 	
-	int oldfd = vfs_lookup_open(path, WALK_REGULAR, mode);
-	if (oldfd < 0)
+	int oldfd;
+	int rc = vfs_lookup_open(path, WALK_REGULAR, mode, &oldfd);
+	if (rc != EOK)
 		return;
 	
 	if (oldfd != fd) {
-		if (vfs_clone(oldfd, fd, false) != fd)
+		int newfd;
+		if (vfs_clone(oldfd, fd, false, &newfd) != EOK)
 			return;
 		
+		assert(newfd == fd);
+
 		if (vfs_put(oldfd))
 			return;
Index: uspace/app/redir/redir.c
===================================================================
--- uspace/app/redir/redir.c	(revision c1694b6b243b360b5f1fbf0629b5e7d4f7f4a515)
+++ uspace/app/redir/redir.c	(revision f77c1c90c1f223647872d5cefa2d86f63bc846d7)
@@ -59,12 +59,16 @@
 	*stream = NULL;
 	
-	int oldfd = vfs_lookup_open(path, WALK_REGULAR | flags, mode);
-	if (oldfd < 0)
+	int oldfd;
+	int rc = vfs_lookup_open(path, WALK_REGULAR | flags, mode, &oldfd);
+	if (rc != EOK)
 		return;
 	
 	if (oldfd != fd) {
-		if (vfs_clone(oldfd, fd, false) != fd)
+		int newfd;
+		if (vfs_clone(oldfd, fd, false, &newfd) != EOK)
 			return;
 		
+		assert(newfd == fd);
+
 		if (vfs_put(oldfd))
 			return;
Index: uspace/app/sysinst/futil.c
===================================================================
--- uspace/app/sysinst/futil.c	(revision c1694b6b243b360b5f1fbf0629b5e7d4f7f4a515)
+++ uspace/app/sysinst/futil.c	(revision f77c1c90c1f223647872d5cefa2d86f63bc846d7)
@@ -63,10 +63,10 @@
 	printf("Copy '%s' to '%s'.\n", srcp, destp);
 
-	sf = vfs_lookup_open(srcp, WALK_REGULAR, MODE_READ);
-	if (sf < 0)
-		return EIO;
-
-	df = vfs_lookup_open(destp, WALK_REGULAR | WALK_MAY_CREATE, MODE_WRITE);
-	if (df < 0)
+	rc = vfs_lookup_open(srcp, WALK_REGULAR, MODE_READ, &sf);
+	if (rc != EOK)
+		return EIO;
+
+	rc = vfs_lookup_open(destp, WALK_REGULAR | WALK_MAY_CREATE, MODE_WRITE, &df);
+	if (rc != EOK)
 		return EIO;
 
@@ -87,5 +87,5 @@
 
 	rc = vfs_put(df);
-	if (rc < 0)
+	if (rc != EOK)
 		return EIO;
 
@@ -167,6 +167,6 @@
 	struct stat st;
 
-	sf = vfs_lookup_open(srcp, WALK_REGULAR, MODE_READ);
-	if (sf < 0)
+	rc = vfs_lookup_open(srcp, WALK_REGULAR, MODE_READ, &sf);
+	if (rc != EOK)
 		return ENOENT;
 
Index: uspace/app/taskdump/elf_core.c
===================================================================
--- uspace/app/taskdump/elf_core.c	(revision c1694b6b243b360b5f1fbf0629b5e7d4f7f4a515)
+++ uspace/app/taskdump/elf_core.c	(revision f77c1c90c1f223647872d5cefa2d86f63bc846d7)
@@ -123,8 +123,8 @@
 	}
 
-	fd = vfs_lookup_open(file_name, WALK_REGULAR | WALK_MAY_CREATE,
-	    MODE_WRITE);
-	if (fd < 0) {
-		printf("Failed opening file.\n");
+	rc = vfs_lookup_open(file_name, WALK_REGULAR | WALK_MAY_CREATE,
+	    MODE_WRITE, &fd);
+	if (rc != EOK) {
+		printf("Failed opening file '%s': %s.\n", file_name, str_error(rc));
 		free(p_hdr);
 		return ENOENT;
Index: uspace/app/taskdump/symtab.c
===================================================================
--- uspace/app/taskdump/symtab.c	(revision c1694b6b243b360b5f1fbf0629b5e7d4f7f4a515)
+++ uspace/app/taskdump/symtab.c	(revision f77c1c90c1f223647872d5cefa2d86f63bc846d7)
@@ -82,7 +82,7 @@
 		return ENOMEM;
 
-	fd = vfs_lookup_open(file_name, WALK_REGULAR, MODE_READ);
-	if (fd < 0) {
-		printf("failed opening file\n");
+	rc = vfs_lookup_open(file_name, WALK_REGULAR, MODE_READ, &fd);
+	if (rc != EOK) {
+		printf("failed opening file '%s': %s\n", file_name, str_error(rc));
 		free(stab);
 		return ENOENT;
Index: uspace/app/tester/mm/pager1.c
===================================================================
--- uspace/app/tester/mm/pager1.c	(revision c1694b6b243b360b5f1fbf0629b5e7d4f7f4a515)
+++ uspace/app/tester/mm/pager1.c	(revision f77c1c90c1f223647872d5cefa2d86f63bc846d7)
@@ -49,7 +49,7 @@
 	TPRINTF("Creating temporary file...\n");
 
-	fd = vfs_lookup_open(TEST_FILE, WALK_REGULAR | WALK_MAY_CREATE,
-	    MODE_READ | MODE_WRITE);
-	if (fd < 0)
+	rc = vfs_lookup_open(TEST_FILE, WALK_REGULAR | WALK_MAY_CREATE,
+	    MODE_READ | MODE_WRITE, &fd);
+	if (rc != EOK)
 		return NULL;
 	(void) vfs_unlink_path(TEST_FILE);
Index: uspace/app/tester/vfs/vfs1.c
===================================================================
--- uspace/app/tester/vfs/vfs1.c	(revision c1694b6b243b360b5f1fbf0629b5e7d4f7f4a515)
+++ uspace/app/tester/vfs/vfs1.c	(revision f77c1c90c1f223647872d5cefa2d86f63bc846d7)
@@ -73,12 +73,13 @@
 	rc = vfs_link_path(TEST_DIRECTORY, KIND_DIRECTORY, NULL);
 	if (rc != EOK) {
-		TPRINTF("rc=%d\n", rc);
+		TPRINTF("rc=%s\n", str_error_name(rc));
 		return "vfs_link_path() failed";
 	}
 	TPRINTF("Created directory %s\n", TEST_DIRECTORY);
 	
-	int fd0 = vfs_lookup_open(TEST_FILE, WALK_REGULAR | WALK_MAY_CREATE,
-	    MODE_READ | MODE_WRITE);
-	if (fd0 < 0)
+	int fd0;
+	rc = vfs_lookup_open(TEST_FILE, WALK_REGULAR | WALK_MAY_CREATE,
+	    MODE_READ | MODE_WRITE, &fd0);
+	if (rc != EOK)
 		return "vfs_lookup_open() failed";
 	TPRINTF("Created file %s (fd=%d)\n", TEST_FILE, fd0);
Index: uspace/app/viewer/viewer.c
===================================================================
--- uspace/app/viewer/viewer.c	(revision c1694b6b243b360b5f1fbf0629b5e7d4f7f4a515)
+++ uspace/app/viewer/viewer.c	(revision f77c1c90c1f223647872d5cefa2d86f63bc846d7)
@@ -109,10 +109,11 @@
 static bool img_load(const char *fname, surface_t **p_local_surface)
 {
-	int fd = vfs_lookup_open(fname, WALK_REGULAR, MODE_READ);
-	if (fd < 0)
+	int fd;
+	int rc = vfs_lookup_open(fname, WALK_REGULAR, MODE_READ, &fd);
+	if (rc != EOK)
 		return false;
 	
 	struct stat stat;
-	int rc = vfs_stat(fd, &stat);
+	rc = vfs_stat(fd, &stat);
 	if (rc != EOK) {
 		vfs_put(fd);
Index: uspace/app/websrv/websrv.c
===================================================================
--- uspace/app/websrv/websrv.c	(revision c1694b6b243b360b5f1fbf0629b5e7d4f7f4a515)
+++ uspace/app/websrv/websrv.c	(revision f77c1c90c1f223647872d5cefa2d86f63bc846d7)
@@ -265,6 +265,6 @@
 	}
 	
-	fd = vfs_lookup_open(fname, WALK_REGULAR, MODE_READ);
-	if (fd < 0) {
+	rc = vfs_lookup_open(fname, WALK_REGULAR, MODE_READ, &fd);
+	if (rc != EOK) {
 		rc = send_response(conn, msg_not_found);
 		goto out;
