Index: uspace/app/bdsh/cmds/modules/cat/cat.c
===================================================================
--- uspace/app/bdsh/cmds/modules/cat/cat.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/app/bdsh/cmds/modules/cat/cat.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -203,5 +203,5 @@
 
 	if (NULL == (buff = (char *) malloc(blen + 1))) {
-		close(fd);
+		vfs_put(fd);
 		printf("Unable to allocate enough memory to read %s\n",
 		    fname);
@@ -213,5 +213,5 @@
 
 		if (vfs_stat(fd, &st) != EOK) {
-			close(fd);
+			vfs_put(fd);
 			free(buff);
 			printf("Unable to vfs_stat %d\n", fd);
@@ -287,5 +287,5 @@
 	} while (bytes > 0 && !should_quit && (count < length || length == CAT_FULL_FILE));
 
-	close(fd);
+	vfs_put(fd);
 	if (bytes == -1) {
 		printf("Error reading %s\n", fname);
Index: uspace/app/bdsh/cmds/modules/cmp/cmp.c
===================================================================
--- uspace/app/bdsh/cmds/modules/cmp/cmp.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/app/bdsh/cmds/modules/cmp/cmp.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -116,7 +116,7 @@
 end:
 	if (fd[0] >= 0)
-		close(fd[0]);
+		vfs_put(fd[0]);
 	if (fd[1] >= 0)
-		close(fd[1]);
+		vfs_put(fd[1]);
 	return rc;
 }
Index: uspace/app/bdsh/cmds/modules/cp/cp.c
===================================================================
--- uspace/app/bdsh/cmds/modules/cp/cp.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/app/bdsh/cmds/modules/cp/cp.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -391,5 +391,5 @@
 	if (fd2 < 0) {
 		printf("Unable to open destination file %s\n", dest);
-		close(fd1);
+		vfs_put(fd1);
 		return -1;
 	}
@@ -397,6 +397,6 @@
 	if (vfs_stat(fd1, &st) != EOK) {
 		printf("Unable to fstat %d\n", fd1);
-		close(fd1);
-		close(fd2);
+		vfs_put(fd1);
+		vfs_put(fd2);
 		return -1;	
 	}
@@ -425,6 +425,6 @@
 
 out:
-	close(fd1);
-	close(fd2);
+	vfs_put(fd1);
+	vfs_put(fd2);
 	if (buff)
 		free(buff);
Index: uspace/app/bdsh/cmds/modules/mkfile/mkfile.c
===================================================================
--- uspace/app/bdsh/cmds/modules/mkfile/mkfile.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/app/bdsh/cmds/modules/mkfile/mkfile.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -168,5 +168,5 @@
 		rc2 = write(fd, &pos, &byte, sizeof(char));
 		if (rc2 < 0) {
-			close(fd);
+			vfs_put(fd);
 			goto error;
 		}
@@ -186,5 +186,5 @@
 		if (rc <= 0) {
 			printf("%s: Error writing file (%d).\n", cmdname, errno);
-			close(fd);
+			vfs_put(fd);
 			free(buffer);
 			return CMD_FAILURE;
@@ -195,5 +195,5 @@
 	free(buffer);
 
-	if (close(fd) < 0)
+	if (vfs_put(fd) < 0)
 		goto error;
 
Index: uspace/app/bdsh/cmds/modules/rm/rm.c
===================================================================
--- uspace/app/bdsh/cmds/modules/rm/rm.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/app/bdsh/cmds/modules/rm/rm.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -152,5 +152,5 @@
 	fd = vfs_lookup(path, WALK_REGULAR);
 	if (fd >= 0) {
-		close(fd);
+		vfs_put(fd);
 		return RM_FILE;
 	}
Index: uspace/app/bdsh/cmds/modules/touch/touch.c
===================================================================
--- uspace/app/bdsh/cmds/modules/touch/touch.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/app/bdsh/cmds/modules/touch/touch.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -133,5 +133,5 @@
 			continue;
 		} else {
-			close(fd);
+			vfs_put(fd);
 			fd = -1;
 		}
Index: uspace/app/bdsh/exec.c
===================================================================
--- uspace/app/bdsh/exec.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/app/bdsh/exec.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -61,5 +61,5 @@
 	fd = vfs_lookup_open(f, WALK_REGULAR, MODE_READ);
 	if (fd >= 0) {
-		close(fd);
+		vfs_put(fd);
 		return 0;
 	} else
Index: uspace/app/getterm/getterm.c
===================================================================
--- uspace/app/getterm/getterm.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/app/getterm/getterm.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -74,5 +74,5 @@
 			return;
 		
-		if (close(oldfd))
+		if (vfs_put(oldfd))
 			return;
 	}
Index: uspace/app/redir/redir.c
===================================================================
--- uspace/app/redir/redir.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/app/redir/redir.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -69,5 +69,5 @@
 			return;
 		
-		if (close(oldfd))
+		if (vfs_put(oldfd))
 			return;
 	}
Index: uspace/app/sysinst/futil.c
===================================================================
--- uspace/app/sysinst/futil.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/app/sysinst/futil.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -83,7 +83,7 @@
 	} while (true);
 
-	(void) close(sf);
+	(void) vfs_put(sf);
 
-	rc = close(df);
+	rc = vfs_put(df);
 	if (rc < 0)
 		return EIO;
@@ -166,5 +166,5 @@
 
 	if (vfs_stat(sf, &st) != EOK) {
-		close(sf);
+		vfs_put(sf);
 		return EIO;
 	}	
@@ -174,5 +174,5 @@
 	data = calloc(fsize, 1);
 	if (data == NULL) {
-		close(sf);
+		vfs_put(sf);
 		return ENOMEM;
 	}
@@ -180,10 +180,10 @@
 	nr = read(sf, (aoff64_t []) { 0 }, data, fsize);
 	if (nr != (ssize_t)fsize) {
-		close(sf);
+		vfs_put(sf);
 		free(data);
 		return EIO;
 	}
 
-	(void) close(sf);
+	(void) vfs_put(sf);
 	*rdata = data;
 	*rsize = fsize;
Index: uspace/app/taskdump/symtab.c
===================================================================
--- uspace/app/taskdump/symtab.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/app/taskdump/symtab.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -165,5 +165,5 @@
 
 	free(shstrt);
-	close(fd);
+	vfs_put(fd);
 
 	if (stab->sym == NULL || stab->strtab == NULL) {
Index: uspace/app/tester/hw/misc/virtchar1.c
===================================================================
--- uspace/app/tester/hw/misc/virtchar1.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/app/tester/hw/misc/virtchar1.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -69,5 +69,5 @@
 	async_sess_t *sess = vfs_fd_session(fd, INTERFACE_DDF);
 	if (!sess) {
-		close(fd);
+		vfs_put(fd);
 		TPRINTF("   ...error: %s\n", str_error(errno));
 		return "Failed to get session to device";
@@ -90,5 +90,5 @@
 	TPRINTF(" Closing session and file descriptor\n");
 	async_hangup(sess);
-	close(fd);
+	vfs_put(fd);
 	
 	return NULL;
Index: uspace/app/tester/mm/pager1.c
===================================================================
--- uspace/app/tester/mm/pager1.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/app/tester/mm/pager1.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -54,5 +54,5 @@
 
 	if (write(fd, (aoff64_t []) {0}, text, sizeof(text)) != sizeof(text)) {
-		close(fd);
+		vfs_put(fd);
 		return NULL;
 	}
@@ -65,5 +65,5 @@
 
 	if (!vfs_pager_sess) {
-		close(fd);
+		vfs_put(fd);
 		return NULL;
 	}
@@ -74,5 +74,5 @@
 	    AS_AREA_READ | AS_AREA_CACHEABLE, vfs_pager_sess, fd, 0, 0);
 	if (result == AS_MAP_FAILED) {
-		close(fd);
+		vfs_put(fd);
 		return NULL;
 	}
@@ -102,5 +102,5 @@
 
 	as_area_destroy(buffer);	
-	close(fd);
+	vfs_put(fd);
 	
 	return NULL;
Index: uspace/app/tester/vfs/vfs1.c
===================================================================
--- uspace/app/tester/vfs/vfs1.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/app/tester/vfs/vfs1.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -108,5 +108,5 @@
 	}
 	
-	close(fd0);
+	vfs_put(fd0);
 	
 	const char *rv = read_root();
Index: uspace/app/trace/trace.c
===================================================================
--- uspace/app/trace/trace.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/app/trace/trace.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -531,5 +531,5 @@
 	if (fd_root >= 0) {
 		rc = loader_add_inbox(ldr, "root", fd_root);
-		close(fd_root);
+		vfs_put(fd_root);
 		if (rc != EOK)
 			goto error;
@@ -705,25 +705,25 @@
 	o = oper_new("write", 3, arg_def, V_ERRNO, 1, resp_def);
 	proto_add_oper(p, VFS_IN_WRITE, o);
-	o = oper_new("truncate", 5, arg_def, V_ERRNO, 0, resp_def);
+	o = oper_new("vfs_resize", 5, arg_def, V_ERRNO, 0, resp_def);
 	proto_add_oper(p, VFS_IN_RESIZE, o);
-	o = oper_new("fstat", 1, arg_def, V_ERRNO, 0, resp_def);
+	o = oper_new("vfs_stat", 1, arg_def, V_ERRNO, 0, resp_def);
 	proto_add_oper(p, VFS_IN_STAT, o);
-	o = oper_new("close", 1, arg_def, V_ERRNO, 0, resp_def);
-	proto_add_oper(p, VFS_IN_CLOSE, o);
-	o = oper_new("mount", 2, arg_def, V_ERRNO, 0, resp_def);
+	o = oper_new("vfs_put", 1, arg_def, V_ERRNO, 0, resp_def);
+	proto_add_oper(p, VFS_IN_PUT, o);
+	o = oper_new("vfs_mount", 2, arg_def, V_ERRNO, 0, resp_def);
 	proto_add_oper(p, VFS_IN_MOUNT, o);
 /*	o = oper_new("unmount", 0, arg_def);
 	proto_add_oper(p, VFS_IN_UNMOUNT, o);*/
-	o = oper_new("sync", 1, arg_def, V_ERRNO, 0, resp_def);
+	o = oper_new("vfs_sync", 1, arg_def, V_ERRNO, 0, resp_def);
 	proto_add_oper(p, VFS_IN_SYNC, o);
 	o = oper_new("rename", 0, arg_def, V_ERRNO, 0, resp_def);
 	proto_add_oper(p, VFS_IN_RENAME, o);
-	o = oper_new("statfs", 0, arg_def, V_ERRNO, 0, resp_def);
+	o = oper_new("vfs_statfs", 0, arg_def, V_ERRNO, 0, resp_def);
 	proto_add_oper(p, VFS_IN_STATFS, o);
-	o = oper_new("walk", 2, arg_def, V_INT_ERRNO, 0, resp_def);
+	o = oper_new("vfs_walk", 2, arg_def, V_INT_ERRNO, 0, resp_def);
 	proto_add_oper(p, VFS_IN_WALK, o);
-	o = oper_new("open", 2, arg_def, V_ERRNO, 0, resp_def);
+	o = oper_new("vfs_open", 2, arg_def, V_ERRNO, 0, resp_def);
 	proto_add_oper(p, VFS_IN_OPEN, o);
-	o = oper_new("unlink", 3, arg_def, V_ERRNO, 0, resp_def);
+	o = oper_new("vfs_unlink", 3, arg_def, V_ERRNO, 0, resp_def);
 	proto_add_oper(p, VFS_IN_UNLINK, o);
 
Index: uspace/app/viewer/viewer.c
===================================================================
--- uspace/app/viewer/viewer.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/app/viewer/viewer.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -116,5 +116,5 @@
 	int rc = vfs_stat(fd, &stat);
 	if (rc != EOK) {
-		close(fd);
+		vfs_put(fd);
 		return false;
 	}
@@ -122,5 +122,5 @@
 	void *tga = malloc(stat.size);
 	if (tga == NULL) {
-		close(fd);
+		vfs_put(fd);
 		return false;
 	}
@@ -129,9 +129,9 @@
 	if ((rd < 0) || (rd != (ssize_t) stat.size)) {
 		free(tga);
-		close(fd);
-		return false;
-	}
-	
-	close(fd);
+		vfs_put(fd);
+		return false;
+	}
+	
+	vfs_put(fd);
 	
 	*p_local_surface = decode_tga(tga, stat.size, 0);
Index: uspace/app/websrv/websrv.c
===================================================================
--- uspace/app/websrv/websrv.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/app/websrv/websrv.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -245,5 +245,5 @@
 		
 		if (nr < 0) {
-			close(fd);
+			vfs_put(fd);
 			return EIO;
 		}
@@ -252,10 +252,10 @@
 		if (rc != EOK) {
 			fprintf(stderr, "tcp_conn_send() failed\n");
-			close(fd);
+			vfs_put(fd);
 			return rc;
 		}
 	}
 	
-	close(fd);
+	vfs_put(fd);
 	
 	return EOK;
Index: uspace/drv/bus/isa/isa.c
===================================================================
--- uspace/drv/bus/isa/isa.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/drv/bus/isa/isa.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -298,5 +298,5 @@
 
 	if (opened)
-		close(fd);
+		vfs_put(fd);
 
 	return buf;
Index: uspace/lib/bithenge/src/failure.c
===================================================================
--- uspace/lib/bithenge/src/failure.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/lib/bithenge/src/failure.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -153,5 +153,5 @@
 		vfs_clone(null, STDOUT_FILENO, false);
 		vfs_clone(null, STDERR_FILENO, false);
-		close(null);
+		vfs_put(null);
 		return 1;
 	}
Index: uspace/lib/bithenge/src/file.c
===================================================================
--- uspace/lib/bithenge/src/file.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/lib/bithenge/src/file.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -88,5 +88,5 @@
 {
 	file_blob_t *blob = blob_as_file(base);
-	close(blob->fd);
+	vfs_put(blob->fd);
 	free(blob);
 }
@@ -106,5 +106,5 @@
 	if (rc != EOK) {
 		if (needs_close)
-			close(fd);
+			vfs_put(fd);
 		return rc;
 	}
@@ -114,5 +114,5 @@
 	if (!blob) {
 		if (needs_close)
-			close(fd);
+			vfs_put(fd);
 		return ENOMEM;
 	}
@@ -121,5 +121,5 @@
 		free(blob);
 		if (needs_close)
-			close(fd);
+			vfs_put(fd);
 		return rc;
 	}
Index: uspace/lib/c/generic/elf/elf_mod.c
===================================================================
--- uspace/lib/c/generic/elf/elf_mod.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/lib/c/generic/elf/elf_mod.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -108,5 +108,5 @@
 	rc = elf_load_module(&elf, so_bias);
 
-	close(ofile);
+	vfs_put(ofile);
 	return rc;
 }
@@ -117,5 +117,5 @@
 	int file = vfs_lookup(path, 0);
 	int rc = elf_load_file(file, so_bias, flags, info);
-	close(file);
+	vfs_put(file);
 	return rc;
 }
Index: uspace/lib/c/generic/io/io.c
===================================================================
--- uspace/lib/c/generic/io/io.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/lib/c/generic/io/io.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -305,5 +305,5 @@
 	if (rc != EOK) {
 		errno = rc;
-		close(file);
+		vfs_put(file);
 		free(stream);
 		return NULL;
@@ -314,5 +314,5 @@
 		if (rc != EOK) {
 			errno = rc;
-			close(file);
+			vfs_put(file);
 			free(stream);
 			return NULL;
@@ -370,5 +370,5 @@
 	
 	if (stream->fd >= 0)
-		rc = close(stream->fd);
+		rc = vfs_put(stream->fd);
 	
 	list_remove(&stream->link);
Index: uspace/lib/c/generic/loader.c
===================================================================
--- uspace/lib/c/generic/loader.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/lib/c/generic/loader.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -204,5 +204,5 @@
 	
 	int rc = loader_set_program(ldr, name, fd);
-	close(fd);
+	vfs_put(fd);
 	return rc;
 }
Index: uspace/lib/c/generic/task.c
===================================================================
--- uspace/lib/c/generic/task.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/lib/c/generic/task.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -181,5 +181,5 @@
 	if (root >= 0) {
 		rc = loader_add_inbox(ldr, "root", root);
-		close(root);
+		vfs_put(root);
 		if (rc != EOK)
 			goto error;
Index: uspace/lib/c/generic/vfs/inbox.c
===================================================================
--- uspace/lib/c/generic/vfs/inbox.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/lib/c/generic/vfs/inbox.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -1,4 +1,5 @@
 
 #include <vfs/inbox.h>
+#include <vfs/vfs.h>
 
 #include <adt/list.h>
@@ -126,5 +127,5 @@
 		int original = inbox_set(entries[i].name, entries[i].file);
 		if (original >= 0) {
-			close(original);
+			vfs_put(original);
 		}
 	}
Index: uspace/lib/c/generic/vfs/vfs.c
===================================================================
--- uspace/lib/c/generic/vfs/vfs.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/lib/c/generic/vfs/vfs.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -82,5 +82,5 @@
 	fibril_mutex_lock(&root_mutex);
 	if (root_fd >= 0)
-		close(root_fd);
+		vfs_put(root_fd);
 	root_fd = vfs_clone(nroot, -1, true);
 	fibril_mutex_unlock(&root_mutex);
@@ -149,5 +149,5 @@
 	}
 	int rc = _vfs_walk(root, p, flags);
-	close(root);
+	vfs_put(root);
 	free(p);
 	return rc;
@@ -171,5 +171,5 @@
 	int rc = vfs_open(file, mode);
 	if (rc != EOK) {
-		close(file);
+		vfs_put(file);
 		return rc;
 	}
@@ -342,5 +342,5 @@
 			rc = vfs_mount(mpfd, fs_name, service_id, opts, flags,
 			    instance, NULL);
-			close(mpfd);
+			vfs_put(mpfd);
 		} else {
 			rc = mpfd;
@@ -363,5 +363,5 @@
 	
 	int rc = vfs_unmount(mp);
-	close(mp);
+	vfs_put(mp);
 	return rc;
 }
@@ -370,12 +370,12 @@
  *
  * @param fildes File descriptor
- * @return Zero on success. On error -1 is returned and errno is set.
- */
-int close(int fildes)
+ * @return EOK on success or a negative error code otherwise.
+ */
+int vfs_put(int fildes)
 {
 	sysarg_t rc;
 	
 	async_exch_t *exch = vfs_exchange_begin();
-	rc = async_req_1_0(exch, VFS_IN_CLOSE, fildes);
+	rc = async_req_1_0(exch, VFS_IN_PUT, fildes);
 	vfs_exchange_end(exch);
 	
@@ -631,5 +631,5 @@
 	int rc = vfs_stat(file, stat);
 
-	close(file);
+	vfs_put(file);
 
 	return rc;
@@ -660,5 +660,5 @@
 	if (rc < 0) {
 		free(dirp);
-		close(fd);
+		vfs_put(fd);
 		errno = rc;
 		return NULL;
@@ -711,5 +711,5 @@
 	int rc;
 	
-	rc = close(dirp->fd);
+	rc = vfs_put(dirp->fd);
 	free(dirp);
 
@@ -726,5 +726,5 @@
 		return file;
 
-	close(file);
+	vfs_put(file);
 
 	return EOK;
@@ -762,5 +762,5 @@
 
 	free(pa);
-	close(parent);
+	vfs_put(parent);
 	return rc;
 }	
@@ -816,5 +816,5 @@
 	if (parent < 0) {
 		free(pa);
-		close(expect);
+		vfs_put(expect);
 		return parent;
 	}
@@ -823,6 +823,6 @@
 	
 	free(pa);
-	close(parent);
-	close(expect);
+	vfs_put(parent);
+	vfs_put(expect);
 	return rc;
 }
@@ -871,5 +871,5 @@
 		free(olda);
 		free(newa);
-		close(root);
+		vfs_put(root);
 		async_wait_for(req, &rc_orig);
 		if (rc_orig != EOK)
@@ -886,5 +886,5 @@
 		free(olda);
 		free(newa);
-		close(root);
+		vfs_put(root);
 		async_wait_for(req, &rc_orig);
 		if (rc_orig != EOK)
@@ -899,5 +899,5 @@
 	free(olda);
 	free(newa);
-	close(root);
+	vfs_put(root);
 	async_wait_for(req, &rc);
 
@@ -934,5 +934,5 @@
 	
 	if (cwd_fd >= 0)
-		close(cwd_fd);
+		vfs_put(cwd_fd);
 	
 	if (cwd_path)
@@ -1124,5 +1124,5 @@
 	int rc = vfs_statfs(file, st);
 
-	close(file);
+	vfs_put(file);
 
 	return rc; 
Index: uspace/lib/c/include/ipc/vfs.h
===================================================================
--- uspace/lib/c/include/ipc/vfs.h	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/lib/c/include/ipc/vfs.h	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -67,6 +67,6 @@
 	VFS_IN_RESIZE,
 	VFS_IN_STAT,
-	VFS_IN_CLOSE,
 	VFS_IN_MOUNT,
+	VFS_IN_PUT,
 	VFS_IN_UNMOUNT,
 	VFS_IN_SYNC,
Index: uspace/lib/c/include/unistd.h
===================================================================
--- uspace/lib/c/include/unistd.h	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/lib/c/include/unistd.h	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -61,6 +61,4 @@
 extern ssize_t read(int, aoff64_t *, void *, size_t);
 
-extern int close(int);
-
 extern char *getcwd(char *, size_t);
 extern int chdir(const char *);
Index: uspace/lib/c/include/vfs/vfs.h
===================================================================
--- uspace/lib/c/include/vfs/vfs.h	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/lib/c/include/vfs/vfs.h	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -97,4 +97,5 @@
     unsigned, int *);
 extern int vfs_open(int, int);
+extern int vfs_put(int);
 extern int vfs_resize(int, aoff64_t);
 extern int vfs_root(void);
Index: uspace/lib/pcut/src/os/helenos.c
===================================================================
--- uspace/lib/pcut/src/os/helenos.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/lib/pcut/src/os/helenos.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -218,5 +218,5 @@
 
 leave_close_tempfile:
-	close(tempfile);
+	vfs_put(tempfile);
 	vfs_unlink_path(tempfile_name);
 
Index: uspace/lib/posix/source/fcntl.c
===================================================================
--- uspace/lib/posix/source/fcntl.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/lib/posix/source/fcntl.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -142,5 +142,5 @@
 	rc = rcerrno(vfs_open, file, mode);
 	if (rc != EOK) {
-		close (file);
+		vfs_put(file);
 		return -1;
 	}
@@ -150,5 +150,5 @@
 			rc = rcerrno(vfs_resize, file, 0);
 			if (rc != EOK) {
-				close(file);
+				vfs_put(file);
 				return -1;
 			}
Index: uspace/lib/posix/source/unistd.c
===================================================================
--- uspace/lib/posix/source/unistd.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/lib/posix/source/unistd.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -179,5 +179,9 @@
 {
 	posix_pos[fildes] = 0;
-	return negerrno(close, fildes);
+	int rc = rcerrno(vfs_put, fildes);
+	if (rc != EOK)
+		return -1;
+	else
+		return 0;
 }
 
@@ -338,5 +342,5 @@
 		if (fd < 0)
 			return -1;
-		close(fd);
+		posix_close(fd);
 		return 0;
 	} else {
Index: uspace/srv/devman/match.c
===================================================================
--- uspace/srv/devman/match.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/srv/devman/match.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -243,5 +243,5 @@
 	
 	if (opened)
-		close(fd);
+		vfs_put(fd);
 	
 	return suc;
Index: uspace/srv/vfs/vfs.h
===================================================================
--- uspace/srv/vfs/vfs.h	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/srv/vfs/vfs.h	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -205,8 +205,8 @@
 
 extern int vfs_op_clone(int oldfd, int newfd, bool desc);
-extern int vfs_op_close(int fd);
 extern int vfs_op_mount(int mpfd, unsigned servid, unsigned flags, unsigned instance, const char *opts, const char *fsname, int *outfd);
 extern int vfs_op_mtab_get(void);
 extern int vfs_op_open(int fd, int flags);
+extern int vfs_op_put(int fd);
 extern int vfs_op_read(int fd, aoff64_t, size_t *out_bytes);
 extern int vfs_op_rename(int basefd, char *old, char *new);
Index: uspace/srv/vfs/vfs_ipc.c
===================================================================
--- uspace/srv/vfs/vfs_ipc.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/srv/vfs/vfs_ipc.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -44,11 +44,4 @@
 }
 
-static void vfs_in_close(ipc_callid_t rid, ipc_call_t *request)
-{
-	int fd = IPC_GET_ARG1(*request);
-	int rc = vfs_op_close(fd);
-	async_answer_0(rid, rc);
-}
-
 static void vfs_in_mount(ipc_callid_t rid, ipc_call_t *request)
 {
@@ -105,4 +98,11 @@
 }
 
+static void vfs_in_put(ipc_callid_t rid, ipc_call_t *request)
+{
+	int fd = IPC_GET_ARG1(*request);
+	int rc = vfs_op_put(fd);
+	async_answer_0(rid, rc);
+}
+
 static void vfs_in_read(ipc_callid_t rid, ipc_call_t *request)
 {
@@ -268,7 +268,4 @@
 			vfs_in_clone(callid, &call);
 			break;
-		case VFS_IN_CLOSE:
-			vfs_in_close(callid, &call);
-			break;
 		case VFS_IN_MOUNT:
 			vfs_in_mount(callid, &call);
@@ -276,4 +273,7 @@
 		case VFS_IN_OPEN:
 			vfs_in_open(callid, &call);
+			break;
+		case VFS_IN_PUT:
+			vfs_in_put(callid, &call);
 			break;
 		case VFS_IN_READ:
Index: uspace/srv/vfs/vfs_ops.c
===================================================================
--- uspace/srv/vfs/vfs_ops.c	(revision b19e892c22afbf67aa5988554dd3f003efeadc04)
+++ uspace/srv/vfs/vfs_ops.c	(revision 9c4cf0dece5b4450b06dbeff053298634d87e0ae)
@@ -124,5 +124,5 @@
 }
 
-int vfs_op_close(int fd)
+int vfs_op_put(int fd)
 {
 	return vfs_fd_free(fd);
