Index: uspace/lib/ext4/libext4_directory.c
===================================================================
--- uspace/lib/ext4/libext4_directory.c	(revision 1114173d246ded759640f138381b8400a9d28d97)
+++ uspace/lib/ext4/libext4_directory.c	(revision e68c8340d47c44d590ec9f47a0e81614a5ae66a3)
@@ -142,4 +142,6 @@
 		}
 
+		EXT4FS_DBG("next_block_phys_idx: \%d", next_block_phys_idx);
+
 		rc = block_get(&it->current_block, it->fs->device, next_block_phys_idx,
 		    BLOCK_FLAGS_NONE);
@@ -151,4 +153,5 @@
 
 	it->current_offset = pos;
+
 	return ext4_directory_iterator_set(it, block_size);
 }
Index: uspace/lib/ext4/libext4_filesystem.c
===================================================================
--- uspace/lib/ext4/libext4_filesystem.c	(revision 1114173d246ded759640f138381b8400a9d28d97)
+++ uspace/lib/ext4/libext4_filesystem.c	(revision e68c8340d47c44d590ec9f47a0e81614a5ae66a3)
@@ -41,7 +41,4 @@
 #include "libext4.h"
 
-/**
- * TODO doxy
- */
 int ext4_filesystem_init(ext4_filesystem_t *fs, service_id_t service_id)
 {
@@ -86,7 +83,4 @@
 }
 
-/**
- * TODO doxy
- */
 void ext4_filesystem_fini(ext4_filesystem_t *fs)
 {
@@ -95,7 +89,4 @@
 }
 
-/**
- * TODO doxy
- */
 int ext4_filesystem_check_sanity(ext4_filesystem_t *fs)
 {
@@ -110,7 +101,4 @@
 }
 
-/**
- * TODO doxy
- */
 int ext4_filesystem_check_features(ext4_filesystem_t *fs, bool *o_read_only)
 {
@@ -139,12 +127,7 @@
 }
 
-/**
- * TODO doxy
- */
 int ext4_filesystem_get_block_group_ref(ext4_filesystem_t *fs, uint32_t bgid,
     ext4_block_group_ref_t **ref)
 {
-	EXT4FS_DBG("");
-
 	int rc;
 	aoff64_t block_id;
@@ -164,43 +147,24 @@
 	block_id = ext4_superblock_get_first_data_block(fs->superblock) + 1;
 
-	EXT4FS_DBG("block_size = \%d", ext4_superblock_get_block_size(fs->superblock));
-	EXT4FS_DBG("descriptors_per_block = \%d", descriptors_per_block);
-	EXT4FS_DBG("bgid = \%d", bgid);
-	EXT4FS_DBG("first_data_block: \%d", (uint32_t)block_id);
-
 	/* Find the block containing the descriptor we are looking for */
 	block_id += bgid / descriptors_per_block;
 	offset = (bgid % descriptors_per_block) * EXT4_BLOCK_GROUP_DESCRIPTOR_SIZE;
 
-	EXT4FS_DBG("updated block_id: \%d", (uint32_t)block_id);
-
 	rc = block_get(&newref->block, fs->device, block_id, 0);
 	if (rc != EOK) {
-
-		EXT4FS_DBG("block_get error: \%d", rc);
-
 		free(newref);
 		return rc;
 	}
 
-	EXT4FS_DBG("block read");
-
 	newref->block_group = newref->block->data + offset;
 
 	*ref = newref;
 
-	EXT4FS_DBG("finished");
-
-	return EOK;
-}
-
-/**
- * TODO doxy
- */
+	return EOK;
+}
+
 int ext4_filesystem_get_inode_ref(ext4_filesystem_t *fs, uint32_t index,
     ext4_inode_ref_t **ref)
 {
-	EXT4FS_DBG("");
-
 	int rc;
 	aoff64_t block_id;
@@ -221,9 +185,5 @@
 	}
 
-	EXT4FS_DBG("allocated");
-
 	inodes_per_group = ext4_superblock_get_inodes_per_group(fs->superblock);
-
-	EXT4FS_DBG("inodes_per_group_loaded");
 
 	/* inode numbers are 1-based, but it is simpler to work with 0-based
@@ -234,8 +194,4 @@
 	offset_in_group = index % inodes_per_group;
 
-	EXT4FS_DBG("index: \%d", index);
-	EXT4FS_DBG("inodes_per_group: \%d", inodes_per_group);
-	EXT4FS_DBG("bg_id: \%d", block_group);
-
 	rc = ext4_filesystem_get_block_group_ref(fs, block_group, &bg_ref);
 	if (rc != EOK) {
@@ -243,12 +199,8 @@
 		return rc;
 	}
-
-	EXT4FS_DBG("block_group_ref loaded");
 
 	inode_table_start = ext4_block_group_get_inode_table_first_block(
 	    bg_ref->block_group);
 
-	EXT4FS_DBG("inode_table block loaded");
-
 	inode_size = ext4_superblock_get_inode_size(fs->superblock);
 	block_size = ext4_superblock_get_block_size(fs->superblock);
@@ -259,6 +211,4 @@
 	offset_in_block = byte_offset_in_group % block_size;
 
-	EXT4FS_DBG("superblock info loaded");
-
 	rc = block_get(&newref->block, fs->device, block_id, 0);
 	if (rc != EOK) {
@@ -266,6 +216,4 @@
 		return rc;
 	}
-
-	EXT4FS_DBG("block got");
 
 	newref->inode = newref->block->data + offset_in_block;
@@ -277,8 +225,7 @@
 	*ref = newref;
 
-	EXT4FS_DBG("finished");
-
-	return EOK;
-}
+	return EOK;
+}
+
 
 int ext4_filesystem_put_inode_ref(ext4_inode_ref_t *ref)
@@ -307,5 +254,5 @@
 
 	/* Handle simple case when we are dealing with direct reference */
-	if (iblock < EXT4_INODE_DIRECT_BLOCKS) {
+	if (iblock < EXT4_INODE_DIRECT_BLOCK_COUNT) {
 		current_block = ext4_inode_get_direct_block(inode, (uint32_t)iblock);
 		*fblock = current_block;
@@ -317,5 +264,5 @@
 	 */
 	block_ids_per_block = ext4_superblock_get_block_size(fs->superblock) / sizeof(uint32_t);
-	limits[0] = EXT4_INODE_DIRECT_BLOCKS;
+	limits[0] = EXT4_INODE_DIRECT_BLOCK_COUNT;
 	blocks_per_level[0] = 1;
 	for (i = 1; i < 4; i++) {
Index: uspace/srv/fs/ext4fs/ext4fs_ops.c
===================================================================
--- uspace/srv/fs/ext4fs/ext4fs_ops.c	(revision 1114173d246ded759640f138381b8400a9d28d97)
+++ uspace/srv/fs/ext4fs/ext4fs_ops.c	(revision e68c8340d47c44d590ec9f47a0e81614a5ae66a3)
@@ -147,6 +147,4 @@
 int ext4fs_global_init(void)
 {
-	EXT4FS_DBG("");
-
 	if (!hash_table_create(&open_nodes, OPEN_NODES_BUCKETS,
 	    OPEN_NODES_KEYS, &open_nodes_ops)) {
@@ -159,6 +157,4 @@
 int ext4fs_global_fini(void)
 {
-	EXT4FS_DBG("");
-
 	hash_table_destroy(&open_nodes);
 	return EOK;
@@ -172,6 +168,4 @@
 int ext4fs_instance_get(service_id_t service_id, ext4fs_instance_t **inst)
 {
-	EXT4FS_DBG("");
-
 	ext4fs_instance_t *tmp;
 
@@ -200,6 +194,4 @@
 int ext4fs_root_get(fs_node_t **rfn, service_id_t service_id)
 {
-	EXT4FS_DBG("");
-
 	return ext4fs_node_get(rfn, service_id, EXT4_INODE_ROOT_INDEX);
 }
@@ -208,6 +200,4 @@
 int ext4fs_match(fs_node_t **rfn, fs_node_t *pfn, const char *component)
 {
-	EXT4FS_DBG("");
-
 	ext4fs_node_t *eparent = EXT4FS_NODE(pfn);
 	ext4_filesystem_t *fs;
@@ -413,5 +403,5 @@
 int ext4fs_create_node(fs_node_t **rfn, service_id_t service_id, int flags)
 {
-	EXT4FS_DBG("");
+	EXT4FS_DBG("not supported");
 
 	// TODO
@@ -422,5 +412,5 @@
 int ext4fs_destroy_node(fs_node_t *fn)
 {
-	EXT4FS_DBG("");
+	EXT4FS_DBG("not supported");
 
 	// TODO
@@ -431,5 +421,5 @@
 int ext4fs_link(fs_node_t *pfn, fs_node_t *cfn, const char *name)
 {
-	EXT4FS_DBG("");
+	EXT4FS_DBG("not supported");
 
 	// TODO
@@ -440,5 +430,5 @@
 int ext4fs_unlink(fs_node_t *pfn, fs_node_t *cfn, const char *nm)
 {
-	EXT4FS_DBG("");
+	EXT4FS_DBG("not supported");
 
 	// TODO
@@ -449,7 +439,49 @@
 int ext4fs_has_children(bool *has_children, fs_node_t *fn)
 {
-	EXT4FS_DBG("");
-
-	// TODO
+	ext4fs_node_t *enode = EXT4FS_NODE(fn);
+	ext4_directory_iterator_t it;
+	ext4_filesystem_t *fs;
+	int rc;
+	bool found = false;
+	size_t name_size;
+
+	fs = enode->instance->filesystem;
+
+	if (!ext4_inode_is_type(fs->superblock, enode->inode_ref->inode,
+	    EXT4_INODE_MODE_DIRECTORY)) {
+		*has_children = false;
+		return EOK;
+	}
+
+	rc = ext4_directory_iterator_init(&it, fs, enode->inode_ref, 0);
+	if (rc != EOK) {
+		return rc;
+	}
+
+	/* Find a non-empty directory entry */
+	while (it.current != NULL) {
+		if (it.current->inode != 0) {
+			name_size = ext4_directory_entry_ll_get_name_length(fs->superblock,
+				it.current);
+			if (!ext4fs_is_dots(&it.current->name, name_size)) {
+				found = true;
+				break;
+			}
+		}
+
+		rc = ext4_directory_iterator_next(&it);
+		if (rc != EOK) {
+			ext4_directory_iterator_fini(&it);
+			return rc;
+		}
+	}
+
+	rc = ext4_directory_iterator_fini(&it);
+	if (rc != EOK) {
+		return rc;
+	}
+
+	*has_children = found;
+
 	return EOK;
 }
@@ -482,8 +514,8 @@
 bool ext4fs_is_directory(fs_node_t *fn)
 {
-	EXT4FS_DBG("");
-
-	// TODO
-	return false;
+	ext4fs_node_t *enode = EXT4FS_NODE(fn);
+	bool is_dir = ext4_inode_is_type(enode->instance->filesystem->superblock,
+	    enode->inode_ref->inode, EXT4_INODE_MODE_DIRECTORY);
+	return is_dir;
 }
 
@@ -500,8 +532,6 @@
 service_id_t ext4fs_service_get(fs_node_t *fn)
 {
-	EXT4FS_DBG("");
-
-	// TODO
-	return 0;
+	ext4fs_node_t *enode = EXT4FS_NODE(fn);
+	return enode->instance->service_id;
 }
 
@@ -536,6 +566,4 @@
    fs_index_t *index, aoff64_t *size, unsigned *lnkcnt)
 {
-	EXT4FS_DBG("");
-
 	int rc;
 	ext4_filesystem_t *fs;
@@ -616,6 +644,4 @@
 static int ext4fs_unmounted(service_id_t service_id)
 {
-	EXT4FS_DBG("");
-
 	int rc;
 	ext4fs_instance_t *inst;
@@ -651,6 +677,4 @@
     size_t *rbytes)
 {
-	EXT4FS_DBG("");
-
 	ext4fs_instance_t *inst;
 	ext4_inode_ref_t *inode_ref;
@@ -712,5 +736,4 @@
     ext4fs_instance_t *inst, ext4_inode_ref_t *inode_ref, size_t *rbytes)
 {
-	EXT4FS_DBG("");
 
 	ext4_directory_iterator_t it;
@@ -720,4 +743,6 @@
 	int rc;
 	bool found = false;
+
+	EXT4FS_DBG("inode = \%d", inode_ref->index);
 
 	rc = ext4_directory_iterator_init(&it, inst->filesystem, inode_ref, pos);
@@ -732,4 +757,5 @@
 	 */
 	while (it.current != NULL) {
+
 		if (it.current->inode == 0) {
 			goto skip;
@@ -738,4 +764,10 @@
 		name_size = ext4_directory_entry_ll_get_name_length(
 		    inst->filesystem->superblock, it.current);
+
+
+		char* name = (char *)(&it.current->name);
+
+		EXT4FS_DBG("name: \%s", name);
+		EXT4FS_DBG("inode-number: \%d", it.current->inode);
 
 		/* skip . and .. */
@@ -878,4 +910,6 @@
     size_t *wbytes, aoff64_t *nsize)
 {
+	EXT4FS_DBG("not supported");
+
 	// TODO
 	return ENOTSUP;
@@ -886,4 +920,6 @@
 ext4fs_truncate(service_id_t service_id, fs_index_t index, aoff64_t size)
 {
+	EXT4FS_DBG("not supported");
+
 	// TODO
 	return ENOTSUP;
@@ -900,4 +936,6 @@
 static int ext4fs_destroy(service_id_t service_id, fs_index_t index)
 {
+	EXT4FS_DBG("not supported");
+
 	//TODO
 	return ENOTSUP;
@@ -907,4 +945,6 @@
 static int ext4fs_sync(service_id_t service_id, fs_index_t index)
 {
+	EXT4FS_DBG("not supported");
+
 	// TODO
 	return ENOTSUP;
