Index: uspace/srv/vfs/Makefile
===================================================================
--- uspace/srv/vfs/Makefile	(revision 828d21540cbb80021613fd24a5dfd84e867a1237)
+++ uspace/srv/vfs/Makefile	(revision 89cb1402392f2b9bc19e07a45fb935eaf0be3e0f)
@@ -43,4 +43,5 @@
 SOURCES = \
 	vfs.c \
+	vfs_node.c \
 	vfs_register.c \
 	vfs_lookup.c \
Index: uspace/srv/vfs/vfs.h
===================================================================
--- uspace/srv/vfs/vfs.h	(revision 828d21540cbb80021613fd24a5dfd84e867a1237)
+++ uspace/srv/vfs/vfs.h	(revision 89cb1402392f2b9bc19e07a45fb935eaf0be3e0f)
@@ -173,4 +173,5 @@
 
 extern int vfs_lookup_internal(char *, size_t, vfs_triplet_t *, vfs_pair_t *);
+extern vfs_node_t *vfs_node_get(vfs_triplet_t *);
 
 #define MAX_OPEN_FILES	128	
Index: uspace/srv/vfs/vfs_lookup.c
===================================================================
--- uspace/srv/vfs/vfs_lookup.c	(revision 828d21540cbb80021613fd24a5dfd84e867a1237)
+++ uspace/srv/vfs/vfs_lookup.c	(revision 89cb1402392f2b9bc19e07a45fb935eaf0be3e0f)
@@ -32,5 +32,5 @@
 
 /**
- * @file	vfs.c
+ * @file	vfs_lookup.c
  * @brief	VFS_LOOKUP method and Path Lookup Buffer code.
  */
Index: uspace/srv/vfs/vfs_mount.c
===================================================================
--- uspace/srv/vfs/vfs_mount.c	(revision 828d21540cbb80021613fd24a5dfd84e867a1237)
+++ uspace/srv/vfs/vfs_mount.c	(revision 89cb1402392f2b9bc19e07a45fb935eaf0be3e0f)
@@ -32,5 +32,5 @@
 
 /**
- * @file	vfs.c
+ * @file	vfs_mount.c
  * @brief	VFS_MOUNT method.
  */
Index: uspace/srv/vfs/vfs_node.c
===================================================================
--- uspace/srv/vfs/vfs_node.c	(revision 89cb1402392f2b9bc19e07a45fb935eaf0be3e0f)
+++ uspace/srv/vfs/vfs_node.c	(revision 89cb1402392f2b9bc19e07a45fb935eaf0be3e0f)
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2007 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup fs
+ * @{
+ */ 
+
+/**
+ * @file	vfs_node.c
+ * @brief	Various operations on VFS nodes have their home in this file.
+ */
+
+#include "vfs.h"
+
+vfs_node_t *vfs_node_get(vfs_triplet_t *triplet)
+{
+	return NULL;	// TODO: not implemented
+}
+
+/**
+ * @}
+ */ 
Index: uspace/srv/vfs/vfs_open.c
===================================================================
--- uspace/srv/vfs/vfs_open.c	(revision 828d21540cbb80021613fd24a5dfd84e867a1237)
+++ uspace/srv/vfs/vfs_open.c	(revision 89cb1402392f2b9bc19e07a45fb935eaf0be3e0f)
@@ -32,5 +32,5 @@
 
 /**
- * @file	vfs.c
+ * @file	vfs_open.c
  * @brief	VFS_OPEN method.
  */
@@ -67,4 +67,12 @@
 static bool vfs_conn_open_files_init(void)
 {
+	/*
+	 * Optimized fast path that will never go to sleep unnecessarily.
+	 * The assumption is that once files is non-zero, it will never be zero
+	 * again.
+	 */
+	if (files)
+		return true;
+		
 	futex_down(&files_futex);
 	if (!files) {
@@ -86,4 +94,62 @@
 		return;
 	}
+
+	/*
+	 * The POSIX interface is open(path, flags, mode).
+	 * We can receive flags and mode along with the VFS_OPEN call; the path
+	 * will need to arrive in another call.
+	 */
+	int flags = IPC_GET_ARG1(*request);
+	int mode = IPC_GET_ARG2(*request);
+	size_t size;
+
+	ipc_callid_t callid;
+	ipc_call_t call;
+
+	if (!ipc_data_receive(&callid, &call, NULL, &size)) {
+		ipc_answer_fast_0(callid, EINVAL);
+		ipc_answer_fast_0(rid, EINVAL);
+		return;
+	}
+
+	/*
+	 * Now we are on the verge of accepting the path.
+	 *
+	 * There is one optimization we could do in the future: copy the path
+	 * directly into the PLB using some kind of a callback.
+	 */
+	char *path = malloc(size);
+	
+	if (!path) {
+		ipc_answer_fast_0(callid, ENOMEM);
+		ipc_answer_fast_0(rid, ENOMEM);
+		return;
+	}
+
+	int rc;
+	if (rc = ipc_data_deliver(callid, &call, path, size)) {
+		ipc_answer_fast_0(rid, rc);
+		free(path);
+		return;
+	}
+	
+	/*
+	 * The path is now populated and we can call vfs_lookup_internal().
+	 */
+	vfs_triplet_t triplet;
+	rc = vfs_lookup_internal(path, size, &triplet, NULL);
+	if (rc) {
+		ipc_answer_fast_0(rid, rc);
+		free(path);
+		return;
+	}
+
+	/*
+	 * Path is no longer needed.
+	 */
+	free(path);
+
+	vfs_node_t *node = vfs_node_get(&triplet);
+	// TODO: not finished	
 }
 
Index: uspace/srv/vfs/vfs_register.c
===================================================================
--- uspace/srv/vfs/vfs_register.c	(revision 828d21540cbb80021613fd24a5dfd84e867a1237)
+++ uspace/srv/vfs/vfs_register.c	(revision 89cb1402392f2b9bc19e07a45fb935eaf0be3e0f)
@@ -32,5 +32,5 @@
 
 /**
- * @file	vfs.c
+ * @file	vfs_register.c
  * @brief	VFS_REGISTER method.
  */
