Index: uspace/lib/ext4/libext4_directory.h
===================================================================
--- uspace/lib/ext4/libext4_directory.h	(revision 22ceff3a80ac18ff36c3836ced4e7fe4470aca56)
+++ uspace/lib/ext4/libext4_directory.h	(revision 12f552207db9b0ddb3dbefce8346fd46011fbe95)
@@ -37,5 +37,5 @@
 #include "libext4_inode.h"
 
-#define EXT4_FILENAME_LEN	255
+#define EXT4_DIRECTORY_FILENAME_LEN	255
 
 /**
@@ -50,5 +50,5 @@
 		uint8_t inode_type; // Type of referenced inode (in rev >= 0.5)
 	} __attribute__ ((packed));
-	uint8_t name[EXT4_FILENAME_LEN]; // Entry name
+	uint8_t name[EXT4_DIRECTORY_FILENAME_LEN]; // Entry name
 } __attribute__ ((packed)) ext4_directory_entry_ll_t;
 
@@ -60,4 +60,39 @@
 	ext4_directory_entry_ll_t *current;
 } ext4_directory_iterator_t;
+
+
+/* Structures for indexed directory */
+
+typedef struct ext4_directory_dx_dot_entry {
+	uint32_t inode;
+	uint16_t entry_length;
+    uint8_t name_length;
+    uint8_t inode_type;
+    uint8_t name[4];
+} ext4_directory_dx_dot_entry_t;
+
+typedef struct ext4_directory_dx_root_info {
+	uint32_t reserved_zero;
+	uint8_t hash_version;
+	uint8_t info_length;
+	uint8_t indirect_levels;
+	uint8_t unused_flags;
+} ext4_directory_dx_root_info_t;
+
+typedef struct ext4_directory_dx_entry {
+	uint32_t hash;
+	uint32_t block;
+} ext4_directory_dx_entry_t;
+
+typedef struct ext4_directory_dx_root {
+		ext4_directory_dx_dot_entry_t dots[2];
+		// TODO insert root info items instead of special datatype
+		ext4_directory_dx_root_info_t info;
+		ext4_directory_dx_entry_t *entries;
+} ext4_directory_dx_root_t;
+
+
+#define EXT4_DIRECTORY_HTREE_EOF  0x7fffffff
+
 
 extern uint32_t	ext4_directory_entry_ll_get_inode(ext4_directory_entry_ll_t *);
Index: uspace/srv/fs/ext4fs/ext4fs_ops.c
===================================================================
--- uspace/srv/fs/ext4fs/ext4fs_ops.c	(revision 22ceff3a80ac18ff36c3836ced4e7fe4470aca56)
+++ uspace/srv/fs/ext4fs/ext4fs_ops.c	(revision 12f552207db9b0ddb3dbefce8346fd46011fbe95)
@@ -75,4 +75,6 @@
 static int ext4fs_read_directory(ipc_callid_t, aoff64_t, size_t,
     ext4fs_instance_t *, ext4_inode_ref_t *, size_t *);
+static int ext4fs_read_dx_directory(ipc_callid_t, aoff64_t, size_t,
+    ext4fs_instance_t *, ext4_inode_ref_t *, size_t *);
 static int ext4fs_read_file(ipc_callid_t, aoff64_t, size_t, ext4fs_instance_t *,
     ext4_inode_ref_t *, size_t *);
@@ -746,7 +748,9 @@
 	bool found = false;
 
-	// TODO check if directory uses HTree
+	// TODO check super block COMPAT FEATURES
 	if (ext4_inode_has_flag(inode_ref->inode, EXT4_INODE_FLAG_INDEX)) {
-		EXT4FS_DBG("Directory using HTree");
+		rc = ext4fs_read_dx_directory(callid, pos, size, inst, inode_ref, rbytes);
+		// TODO return...
+		// return rc;
 	}
 
@@ -821,4 +825,11 @@
 		return ENOENT;
 	}
+}
+
+int ext4fs_read_dx_directory(ipc_callid_t callid, aoff64_t pos, size_t size,
+    ext4fs_instance_t *inst, ext4_inode_ref_t *inode_ref, size_t *rbytes)
+{
+	EXT4FS_DBG("Directory using HTree index");
+	return ENOTSUP;
 }
 
