Index: uspace/lib/libfs/libfs.c
===================================================================
--- uspace/lib/libfs/libfs.c	(revision 16d17cadb46bf0e334a93ad589d0d55a03e68cb2)
+++ uspace/lib/libfs/libfs.c	(revision a68f7375e3e4f83a6876853e429edc329d00e4e4)
@@ -43,4 +43,5 @@
 #include <assert.h>
 #include <dirent.h>
+#include <mem.h>
 
 /** Register file system server.
@@ -209,10 +210,11 @@
  * as returned by the canonify() function.
  *
- * @param ops		libfs operations structure with function pointers to
- *			file system implementation
- * @param fs_handle	File system handle of the file system where to perform
- *			the lookup.
- * @param rid		Request ID of the VFS_LOOKUP request.
- * @param request	VFS_LOOKUP request data itself.
+ * @param ops       libfs operations structure with function pointers to
+ *                  file system implementation
+ * @param fs_handle File system handle of the file system where to perform
+ *                  the lookup.
+ * @param rid       Request ID of the VFS_LOOKUP request.
+ * @param request   VFS_LOOKUP request data itself.
+ *
  */
 void libfs_lookup(libfs_ops_t *ops, fs_handle_t fs_handle, ipc_callid_t rid,
@@ -427,4 +429,31 @@
 }
 
+/** Open VFS triplet.
+ *
+ * @param ops       libfs operations structure with function pointers to
+ *                  file system implementation
+ * @param rid       Request ID of the VFS_OPEN_NODE request.
+ * @param request   VFS_OPEN_NODE request data itself.
+ *
+ */
+void libfs_open_node(libfs_ops_t *ops, fs_handle_t fs_handle, ipc_callid_t rid,
+    ipc_call_t *request)
+{
+	dev_handle_t dev_handle = IPC_GET_ARG1(*request);
+	fs_index_t index = IPC_GET_ARG2(*request);
+	
+	fs_node_t *node = ops->node_get(dev_handle, index);
+	
+	if (node == NULL) {
+		ipc_answer_0(rid, ENOENT);
+		return;
+	}
+	
+	ipc_answer_5(rid, EOK, fs_handle, dev_handle, index,
+	    ops->size_get(node), ops->lnkcnt_get(node));
+	
+	ops->node_put(node);
+}
+
 /** @}
  */
Index: uspace/lib/libfs/libfs.h
===================================================================
--- uspace/lib/libfs/libfs.h	(revision 16d17cadb46bf0e334a93ad589d0d55a03e68cb2)
+++ uspace/lib/libfs/libfs.h	(revision a68f7375e3e4f83a6876853e429edc329d00e4e4)
@@ -27,7 +27,7 @@
  */
 
-/** @addtogroup libfs 
+/** @addtogroup libfs
  * @{
- */ 
+ */
 /**
  * @file
@@ -35,10 +35,11 @@
 
 #ifndef LIBFS_LIBFS_H_
-#define	LIBFS_LIBFS_H_ 
+#define LIBFS_LIBFS_H_
 
-#include "../../srv/vfs/vfs.h"
+#include <ipc/vfs.h>
 #include <stdint.h>
 #include <ipc/ipc.h>
 #include <async.h>
+#include <devmap.h>
 
 typedef struct {
@@ -50,6 +51,6 @@
 
 typedef struct {
-	mp_data_t mp_data;	/**< Mount point info. */
-	void *data;		/**< Data of the file system implementation. */
+	mp_data_t mp_data;  /**< Mount point info. */
+	void *data;         /**< Data of the file system implementation. */
 } fs_node_t;
 
@@ -67,5 +68,5 @@
 	bool (* has_children)(fs_node_t *);
 	fs_node_t *(* root_get)(dev_handle_t);
-	char (* plb_get_char)(unsigned pos);	
+	char (* plb_get_char)(unsigned pos);
 	bool (* is_directory)(fs_node_t *);
 	bool (* is_file)(fs_node_t *);
@@ -73,7 +74,7 @@
 
 typedef struct {
-	int fs_handle;		/**< File system handle. */
-	ipcarg_t vfs_phonehash;	/**< Initial VFS phonehash. */
-	uint8_t *plb_ro;	/**< Read-only PLB view. */
+	int fs_handle;           /**< File system handle. */
+	ipcarg_t vfs_phonehash;  /**< Initial VFS phonehash. */
+	uint8_t *plb_ro;         /**< Read-only PLB view. */
 } fs_reg_t;
 
@@ -84,4 +85,6 @@
 extern void libfs_mount(libfs_ops_t *, fs_handle_t, ipc_callid_t, ipc_call_t *);
 extern void libfs_lookup(libfs_ops_t *, fs_handle_t, ipc_callid_t, ipc_call_t *);
+extern void libfs_open_node(libfs_ops_t *, fs_handle_t, ipc_callid_t,
+    ipc_call_t *);
 
 #endif
@@ -89,3 +92,2 @@
 /** @}
  */
-
