Index: uspace/lib/libfs/libfs.c
===================================================================
--- uspace/lib/libfs/libfs.c	(revision d4f572ecfabcfb4d032b0bb720805422aeeaa1e4)
+++ uspace/lib/libfs/libfs.c	(revision 736c164f56cd1cac7084f1032aaca53396bc3c3f)
@@ -149,5 +149,5 @@
 	void *par = NULL;
 	void *cur = ops->root_get();
-	void *tmp = ops->child_get(cur);
+	void *tmp;
 
 	if (ops->plb_get_char(next) == '/')
@@ -156,5 +156,5 @@
 	char component[NAME_MAX + 1];
 	int len = 0;
-	while (tmp && next <= last) {
+	while (ops->has_children(cur) && next <= last) {
 
 		/* collect the component */
@@ -177,6 +177,5 @@
 
 		/* match the component */
-		while (tmp && !ops->match(cur, tmp, component))
-			tmp = ops->sibling_get(tmp);
+		tmp = ops->match(cur, component);
 
 		/* handle miss: match amongst siblings */
@@ -229,9 +228,8 @@
 		par = cur;
 		cur = tmp;
-		tmp = ops->child_get(tmp);
 	}
 
 	/* handle miss: excessive components */
-	if (!tmp && next <= last) {
+	if (!ops->has_children(cur) && next <= last) {
 		if (lflag & (L_CREATE | L_LINK)) {
 			if (!ops->is_directory(cur)) {
Index: uspace/lib/libfs/libfs.h
===================================================================
--- uspace/lib/libfs/libfs.h	(revision d4f572ecfabcfb4d032b0bb720805422aeeaa1e4)
+++ uspace/lib/libfs/libfs.h	(revision 736c164f56cd1cac7084f1032aaca53396bc3c3f)
@@ -43,5 +43,5 @@
 
 typedef struct {
-	bool (* match)(void *, void *, const char *);
+	void * (* match)(void *, const char *);
 	void * (* node_get)(fs_handle_t, dev_handle_t, fs_index_t);
 	void * (* create)(int);
@@ -52,6 +52,5 @@
 	size_t (* size_get)(void *);
 	unsigned (* lnkcnt_get)(void *);
-	void *(* child_get)(void *);
-	void *(* sibling_get)(void *);
+	bool (* has_children)(void *);
 	void *(* root_get)(void);
 	char (* plb_get_char)(unsigned pos);	
