Index: uspace/lib/ext4/libext4_extent.c
===================================================================
--- uspace/lib/ext4/libext4_extent.c	(revision acd869e9d6dfc10604382d2c9d33fc6ae253c156)
+++ uspace/lib/ext4/libext4_extent.c	(revision 8958a26d6d27095ad71146c9a2ef8bc3ccd02716)
@@ -39,4 +39,21 @@
 #include "libext4_extent.h"
 
+uint32_t ext4_extent_get_first_block(ext4_extent_t *extent)
+{
+	return uint32_t_le2host(extent->first_block);
+}
+
+uint16_t ext4_extent_get_block_count(ext4_extent_t *extent)
+{
+	return uint16_t_le2host(extent->block_count);
+}
+
+uint64_t ext4_extent_get_start(ext4_extent_t *extent)
+{
+	return ((uint64_t)uint16_t_le2host(extent->start_hi)) << 32 |
+			((uint64_t)uint32_t_le2host(extent->start_lo));
+
+}
+
 uint16_t ext4_extent_header_get_magic(ext4_extent_header_t *header)
 {
Index: uspace/lib/ext4/libext4_extent.h
===================================================================
--- uspace/lib/ext4/libext4_extent.h	(revision acd869e9d6dfc10604382d2c9d33fc6ae253c156)
+++ uspace/lib/ext4/libext4_extent.h	(revision 8958a26d6d27095ad71146c9a2ef8bc3ccd02716)
@@ -69,4 +69,10 @@
 
 #define EXT4_EXTENT_MAGIC	0xF30A
+#define	EXT4_EXTENT_FIRST(header)	\
+		((ext4_extent_t *) (((void *) (header)) + sizeof(ext4_extent_header_t)))
+
+extern uint32_t ext4_extent_get_first_block(ext4_extent_t *);
+extern uint16_t ext4_extent_get_block_count(ext4_extent_t *);
+extern uint64_t ext4_extent_get_start(ext4_extent_t *);
 
 extern uint16_t ext4_extent_header_get_magic(ext4_extent_header_t *);
Index: uspace/lib/ext4/libext4_filesystem.c
===================================================================
--- uspace/lib/ext4/libext4_filesystem.c	(revision acd869e9d6dfc10604382d2c9d33fc6ae253c156)
+++ uspace/lib/ext4/libext4_filesystem.c	(revision 8958a26d6d27095ad71146c9a2ef8bc3ccd02716)
@@ -301,13 +301,10 @@
 	block_t *block;
 
-	// TODO extents
+	/* Handle inode using extents */
+	// TODO check "extents" feature in superblock ???
 	if (ext4_inode_has_flag(inode, EXT4_INODE_FLAG_EXTENTS)) {
-		EXT4FS_DBG("Inode contains Extent");
-		// TODO
-		/*
 		current_block = ext4_inode_get_extent_block(inode, iblock);
 		*fblock = current_block;
 		return EOK;
-		*/
 
 	}
Index: uspace/lib/ext4/libext4_inode.c
===================================================================
--- uspace/lib/ext4/libext4_inode.c	(revision acd869e9d6dfc10604382d2c9d33fc6ae253c156)
+++ uspace/lib/ext4/libext4_inode.c	(revision 8958a26d6d27095ad71146c9a2ef8bc3ccd02716)
@@ -104,6 +104,29 @@
 uint32_t ext4_inode_get_extent_block(ext4_inode_t *inode, uint64_t idx)
 {
-	//ext4_extent_header_t *header = ext4_inode_get_extent_header(inode);
-	// TODO search required block
+	ext4_extent_header_t *header = ext4_inode_get_extent_header(inode);
+
+	if (ext4_extent_header_get_depth(header) == 0) {
+
+		ext4_extent_t *extent = EXT4_EXTENT_FIRST(header);
+
+		// TODO more effective searching?
+		for (uint16_t i = 0; i < ext4_extent_header_get_entries_count(header); ++i) {
+
+			uint32_t first = ext4_extent_get_first_block(extent);
+			uint16_t count = ext4_extent_get_block_count(extent);
+			uint64_t block = 0;
+
+			if ((idx >= first) && (idx < first + count)) {
+				block = ext4_extent_get_start(extent) + idx;
+				block -= ext4_extent_get_first_block(extent);
+				return block;
+			}
+			// Go to the next extent
+			++extent;
+		}
+	}
+
+	// TODO binary search for depth > 0
+	EXT4FS_DBG("NOT IMPLEMENTED !!!");
 	return 0;
 
Index: uspace/srv/fs/ext4fs/ext4fs_ops.c
===================================================================
--- uspace/srv/fs/ext4fs/ext4fs_ops.c	(revision acd869e9d6dfc10604382d2c9d33fc6ae253c156)
+++ uspace/srv/fs/ext4fs/ext4fs_ops.c	(revision 8958a26d6d27095ad71146c9a2ef8bc3ccd02716)
@@ -718,8 +718,10 @@
 
 	ext4_filesystem_put_inode_ref(inode_ref);
+
 	return rc;
 }
 
-bool ext4fs_is_dots(const uint8_t *name, size_t name_size) {
+bool ext4fs_is_dots(const uint8_t *name, size_t name_size)
+{
 	if (name_size == 1 && name[0] == '.') {
 		return true;
@@ -745,6 +747,5 @@
 
 	// TODO check if directory uses HTree
-	if (ext4_filesystem_has_feature_compatible(inst->filesystem, EXT4_FEATURE_COMPAT_DIR_INDEX)
-			&& ext4_inode_has_flag(inode_ref->inode, EXT4_INODE_FLAG_INDEX)) {
+	if (ext4_inode_has_flag(inode_ref->inode, EXT4_INODE_FLAG_INDEX)) {
 		EXT4FS_DBG("Directory using HTree");
 	}
@@ -802,12 +803,14 @@
 	if (found) {
 		rc = ext4_directory_iterator_next(&it);
-		if (rc != EOK)
+		if (rc != EOK) {
 			return rc;
+		}
 		next = it.current_offset;
 	}
 
 	rc = ext4_directory_iterator_fini(&it);
-	if (rc != EOK)
-		return rc;
+	if (rc != EOK) {
+		return rc;
+	}
 
 	if (found) {
@@ -832,10 +835,4 @@
 	block_t *block;
 	uint8_t *buffer;
-
-	// TODO Check extent
-	if (ext4_filesystem_has_feature_incompatible(inst->filesystem, EXT4_FEATURE_INCOMPAT_EXTENTS)
-			&& ext4_inode_has_flag(inode_ref->inode, EXT4_INODE_FLAG_EXTENTS)) {
-		EXT4FS_DBG("Extent found");
-	}
 
 	file_size = ext4_inode_get_size(inst->filesystem->superblock,
@@ -901,6 +898,7 @@
 
 	rc = block_put(block);
-	if (rc != EOK)
-		return rc;
+	if (rc != EOK) {
+		return rc;
+	}
 
 	*rbytes = bytes;
