Index: uspace/srv/fs/minixfs/mfs.h
===================================================================
--- uspace/srv/fs/minixfs/mfs.h	(revision 147c9f6e44144d3a6a406112230f9a46faf75248)
+++ uspace/srv/fs/minixfs/mfs.h	(revision 2cada66349b5226678043bb2b7d9094d760d591c)
@@ -43,4 +43,6 @@
 
 #define DEBUG_MODE
+
+#define min(a, b)	((a) < (b) ? (a) : (b))
 
 #ifdef DEBUG_MODE
@@ -89,4 +91,5 @@
 	int ino_per_block;
 	int dirsize;
+	unsigned max_name_len;
 	bool long_names;
 	bool native;
Index: uspace/srv/fs/minixfs/mfs_ops.c
===================================================================
--- uspace/srv/fs/minixfs/mfs_ops.c	(revision 147c9f6e44144d3a6a406112230f9a46faf75248)
+++ uspace/srv/fs/minixfs/mfs_ops.c	(revision 2cada66349b5226678043bb2b7d9094d760d591c)
@@ -55,4 +55,5 @@
 static devmap_handle_t mfs_device_get(fs_node_t *fsnode);
 static aoff64_t mfs_size_get(fs_node_t *node);
+static int mfs_match(fs_node_t **rfn, fs_node_t *pfn, const char *component);
 
 static
@@ -74,4 +75,5 @@
 	.node_open = mfs_node_open,
 	.index_get = mfs_index_get,
+	.match = mfs_match,
 	.plb_get_char = mfs_plb_get_char,
 	.has_children = mfs_has_children,
@@ -190,4 +192,5 @@
 		sbi->block_size = conv16(native, sb3->s_block_size);
 		sbi->dirsize = MFS3_DIRSIZE;
+		sbi->max_name_len = MFS3_MAX_NAME_LEN;
 	} else {
 		sbi->ninodes = conv16(native, sb->s_ninodes);
@@ -202,4 +205,6 @@
 			sbi->nzones = conv32(native, sb->s_nzones2);
 		sbi->dirsize = longnames ? MFSL_DIRSIZE : MFS_DIRSIZE;
+		sbi->max_name_len = longnames ? MFS_L_MAX_NAME_LEN :
+				MFS_MAX_NAME_LEN;
 	}
  
@@ -238,4 +243,45 @@
 	struct mfs_node *node = fsnode->data;
 	return node->instance->handle;
+}
+
+static int mfs_match(fs_node_t **rfn, fs_node_t *pfn, const char *component)
+{
+	struct mfs_node *mnode = pfn->data;
+	struct mfs_ino_info *ino_i = mnode->ino_i;
+	struct mfs_dentry_info *d_info;
+
+	if (!S_ISDIR(ino_i->i_mode))
+		return ENOTDIR;
+
+	mfsdebug("mfs_match()\n");
+
+	struct mfs_sb_info *sbi = mnode->instance->sbi;
+	const size_t comp_size = str_size(component);
+
+	int i = 2;
+	while (1) {
+		d_info = read_directory_entry(mnode, i++);
+		if (!d_info) {
+			/*Reached the end of the directory entry list*/
+			break;
+		}
+
+		if (!d_info->d_inum) {
+			/*This entry is not used*/
+			continue;
+		}
+
+		if (!bcmp(component, d_info->d_name, min(sbi->max_name_len,
+				comp_size))) {
+			/*Hit!*/
+			mfs_node_core_get(rfn, mnode->instance,
+				d_info->d_inum);
+			goto found;
+		}
+	}
+	*rfn = NULL;
+	return ENOENT;
+found:
+	return EOK;
 }
 
@@ -475,5 +521,6 @@
 
 	for (link = inst_list.next; link != &inst_list; link = link->next) {
-		instance_ptr = list_get_instance(link, struct mfs_instance, link);
+		instance_ptr = list_get_instance(link, struct mfs_instance,
+				link);
 		
 		if (instance_ptr->handle == handle) {
