Index: uspace/lib/ext4/libext4_block_group.c
===================================================================
--- uspace/lib/ext4/libext4_block_group.c	(revision c83a55c5d0137af9c8191b10a0b65462d2d6a774)
+++ uspace/lib/ext4/libext4_block_group.c	(revision c25e39bba175f99e96d9c806d161bbf1ab88a47a)
@@ -33,5 +33,5 @@
 /**
  * @file	libext4_block_group.c
- * @brief	TODO
+ * @brief	Ext4 block group structure operations
  */
 
Index: uspace/lib/ext4/libext4_block_group.h
===================================================================
--- uspace/lib/ext4/libext4_block_group.h	(revision c83a55c5d0137af9c8191b10a0b65462d2d6a774)
+++ uspace/lib/ext4/libext4_block_group.h	(revision c25e39bba175f99e96d9c806d161bbf1ab88a47a)
@@ -51,4 +51,5 @@
 	uint16_t itable_unused_lo; // Unused inodes count
 	uint16_t checksum; // crc16(sb_uuid+group+desc)
+	/* -------------- */
 	uint32_t block_bitmap_hi; // Blocks bitmap block MSB
 	uint32_t inode_bitmap_hi; // Inodes bitmap block MSB
@@ -66,6 +67,5 @@
 } ext4_block_group_ref_t;
 
-// TODO check value
-#define EXT4_BLOCK_GROUP_DESCRIPTOR_SIZE 32
+#define EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE 32
 
 extern uint64_t ext4_block_group_get_block_bitmap(ext4_block_group_t *);
Index: uspace/lib/ext4/libext4_directory.c
===================================================================
--- uspace/lib/ext4/libext4_directory.c	(revision c83a55c5d0137af9c8191b10a0b65462d2d6a774)
+++ uspace/lib/ext4/libext4_directory.c	(revision c25e39bba175f99e96d9c806d161bbf1ab88a47a)
@@ -33,5 +33,5 @@
 /**
  * @file	libext4_directory.c
- * @brief	TODO
+ * @brief	Ext4 directory structure operations.
  */
 
Index: uspace/lib/ext4/libext4_directory_index.c
===================================================================
--- uspace/lib/ext4/libext4_directory_index.c	(revision c83a55c5d0137af9c8191b10a0b65462d2d6a774)
+++ uspace/lib/ext4/libext4_directory_index.c	(revision c25e39bba175f99e96d9c806d161bbf1ab88a47a)
@@ -33,5 +33,5 @@
 /**
  * @file	libext4_directory_index.c
- * @brief	TODO
+ * @brief	Ext4 directory index operations.
  */
 
Index: uspace/lib/ext4/libext4_extent.c
===================================================================
--- uspace/lib/ext4/libext4_extent.c	(revision c83a55c5d0137af9c8191b10a0b65462d2d6a774)
+++ uspace/lib/ext4/libext4_extent.c	(revision c25e39bba175f99e96d9c806d161bbf1ab88a47a)
@@ -33,5 +33,5 @@
 /**
  * @file	libext4_extent.c
- * @brief	TODO
+ * @brief	Ext4 extent structures operations.
  */
 
Index: uspace/lib/ext4/libext4_filesystem.c
===================================================================
--- uspace/lib/ext4/libext4_filesystem.c	(revision c83a55c5d0137af9c8191b10a0b65462d2d6a774)
+++ uspace/lib/ext4/libext4_filesystem.c	(revision c25e39bba175f99e96d9c806d161bbf1ab88a47a)
@@ -127,36 +127,4 @@
 }
 
-// Feature checkers
-bool ext4_filesystem_has_feature_compatible(ext4_filesystem_t *fs, uint32_t feature)
-{
-	ext4_superblock_t *sb = fs->superblock;
-
-	if (ext4_superblock_get_features_compatible(sb) & feature) {
-		return true;
-	}
-	return false;
-}
-
-bool ext4_filesystem_has_feature_incompatible(ext4_filesystem_t *fs, uint32_t feature)
-{
-	ext4_superblock_t *sb = fs->superblock;
-
-	if (ext4_superblock_get_features_incompatible(sb) & feature) {
-		return true;
-	}
-	return false;
-}
-
-bool ext4_filesystem_has_feature_read_only(ext4_filesystem_t *fs, uint32_t feature)
-{
-	ext4_superblock_t *sb = fs->superblock;
-
-	if (ext4_superblock_get_features_read_only(sb) & feature) {
-		return true;
-	}
-	return false;
-}
-
-
 int ext4_filesystem_get_block_group_ref(ext4_filesystem_t *fs, uint32_t bgid,
     ext4_block_group_ref_t **ref)
@@ -173,6 +141,8 @@
 	}
 
+	//EXT4FS_DBG("desc size = \%u", (uint32_t)ext4_superblock_get_desc_size(fs->superblock));
+
 	descriptors_per_block = ext4_superblock_get_block_size(fs->superblock)
-	    / EXT4_BLOCK_GROUP_DESCRIPTOR_SIZE;
+	    / ext4_superblock_get_desc_size(fs->superblock);
 
 	/* Block group descriptor table starts at the next block after superblock */
@@ -181,5 +151,5 @@
 	/* 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;
+	offset = (bgid % descriptors_per_block) * ext4_superblock_get_desc_size(fs->superblock);
 
 	rc = block_get(&newref->block, fs->device, block_id, 0);
@@ -302,6 +272,6 @@
 
 	/* Handle inode using extents */
-	// TODO check "extents" feature in superblock ???
-	if (ext4_inode_has_flag(inode, EXT4_INODE_FLAG_EXTENTS)) {
+	if (ext4_superblock_has_feature_compatible(fs->superblock, EXT4_FEATURE_INCOMPAT_EXTENTS) &&
+			ext4_inode_has_flag(inode, EXT4_INODE_FLAG_EXTENTS)) {
 		current_block = ext4_inode_get_extent_block(inode, iblock, fs->device);
 		*fblock = current_block;
Index: uspace/lib/ext4/libext4_filesystem.h
===================================================================
--- uspace/lib/ext4/libext4_filesystem.h	(revision c83a55c5d0137af9c8191b10a0b65462d2d6a774)
+++ uspace/lib/ext4/libext4_filesystem.h	(revision c25e39bba175f99e96d9c806d161bbf1ab88a47a)
@@ -47,56 +47,4 @@
 #define EXT4_REV0_INODE_SIZE	128
 
-/* Compatible features */
-// TODO features comments !!!
-#define EXT4_FEATURE_COMPAT_DIR_PREALLOC        0x0001
-#define EXT4_FEATURE_COMPAT_IMAGIC_INODES       0x0002
-#define EXT4_FEATURE_COMPAT_HAS_JOURNAL         0x0004
-#define EXT4_FEATURE_COMPAT_EXT_ATTR            0x0008
-#define EXT4_FEATURE_COMPAT_RESIZE_INODE        0x0010
-#define EXT4_FEATURE_COMPAT_DIR_INDEX           0x0020
-
-/* Read-only compatible features */
-// TODO features comments !!!
-#define EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER     0x0001
-#define EXT4_FEATURE_RO_COMPAT_LARGE_FILE       0x0002
-#define EXT4_FEATURE_RO_COMPAT_BTREE_DIR        0x0004
-#define EXT4_FEATURE_RO_COMPAT_HUGE_FILE        0x0008
-#define EXT4_FEATURE_RO_COMPAT_GDT_CSUM         0x0010
-#define EXT4_FEATURE_RO_COMPAT_DIR_NLINK        0x0020
-#define EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE      0x0040
-
-/* Incompatible features */
-// TODO features comments !!!
-#define EXT4_FEATURE_INCOMPAT_COMPRESSION       0x0001
-#define EXT4_FEATURE_INCOMPAT_FILETYPE          0x0002
-#define EXT4_FEATURE_INCOMPAT_RECOVER           0x0004 /* Needs recovery */
-#define EXT4_FEATURE_INCOMPAT_JOURNAL_DEV       0x0008 /* Journal device */
-#define EXT4_FEATURE_INCOMPAT_META_BG           0x0010
-#define EXT4_FEATURE_INCOMPAT_EXTENTS           0x0040 /* extents support */
-#define EXT4_FEATURE_INCOMPAT_64BIT             0x0080
-#define EXT4_FEATURE_INCOMPAT_MMP               0x0100
-#define EXT4_FEATURE_INCOMPAT_FLEX_BG           0x0200
-#define EXT4_FEATURE_INCOMPAT_EA_INODE          0x0400 /* EA in inode */
-#define EXT4_FEATURE_INCOMPAT_DIRDATA           0x1000 /* data in dirent */
-
-
-// TODO MODIFY features corresponding with implementation
-#define EXT4_FEATURE_COMPAT_SUPP EXT4_FEATURE_COMPAT_EXT_ATTR
-
-#define EXT4_FEATURE_INCOMPAT_SUPP      (EXT4_FEATURE_INCOMPAT_FILETYPE| \
-                                         EXT4_FEATURE_INCOMPAT_RECOVER| \
-                                         EXT4_FEATURE_INCOMPAT_META_BG| \
-                                         EXT4_FEATURE_INCOMPAT_EXTENTS| \
-                                         EXT4_FEATURE_INCOMPAT_64BIT| \
-                                         EXT4_FEATURE_INCOMPAT_FLEX_BG)
-
-#define EXT4_FEATURE_RO_COMPAT_SUPP     (EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER| \
-                                         EXT4_FEATURE_RO_COMPAT_LARGE_FILE| \
-                                         EXT4_FEATURE_RO_COMPAT_GDT_CSUM| \
-                                         EXT4_FEATURE_RO_COMPAT_DIR_NLINK | \
-                                         EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE | \
-                                         EXT4_FEATURE_RO_COMPAT_BTREE_DIR |\
-                                         EXT4_FEATURE_RO_COMPAT_HUGE_FILE)
-
 
 extern int ext4_filesystem_init(ext4_filesystem_t *, service_id_t);
@@ -104,7 +52,4 @@
 extern int ext4_filesystem_check_sanity(ext4_filesystem_t *fs);
 extern int ext4_filesystem_check_features(ext4_filesystem_t *, bool *);
-extern bool ext4_filesystem_has_feature_compatible(ext4_filesystem_t *, uint32_t);
-extern bool ext4_filesystem_has_feature_incompatible(ext4_filesystem_t *, uint32_t);
-extern bool ext4_filesystem_has_feature_read_only(ext4_filesystem_t *, uint32_t);
 extern int ext4_filesystem_get_block_group_ref(ext4_filesystem_t *, uint32_t,
     ext4_block_group_ref_t **);
Index: uspace/lib/ext4/libext4_hash.c
===================================================================
--- uspace/lib/ext4/libext4_hash.c	(revision c83a55c5d0137af9c8191b10a0b65462d2d6a774)
+++ uspace/lib/ext4/libext4_hash.c	(revision c25e39bba175f99e96d9c806d161bbf1ab88a47a)
@@ -33,5 +33,5 @@
 /**
  * @file	libext4_hash.c
- * @brief	TODO
+ * @brief	Hashing algorithms for ext4 HTree.
  */
 
Index: uspace/lib/ext4/libext4_inode.c
===================================================================
--- uspace/lib/ext4/libext4_inode.c	(revision c83a55c5d0137af9c8191b10a0b65462d2d6a774)
+++ uspace/lib/ext4/libext4_inode.c	(revision c25e39bba175f99e96d9c806d161bbf1ab88a47a)
@@ -33,5 +33,5 @@
 /**
  * @file	libext4_inode.c
- * @brief	Ext4 inode operations.
+ * @brief	Ext4 inode structure operations.
  */
 
@@ -135,6 +135,4 @@
 					return 0;
 				}
-				EXT4FS_DBG("get block");
-
 
 				header = (ext4_extent_header_t *)block->data;
Index: uspace/lib/ext4/libext4_superblock.c
===================================================================
--- uspace/lib/ext4/libext4_superblock.c	(revision c83a55c5d0137af9c8191b10a0b65462d2d6a774)
+++ uspace/lib/ext4/libext4_superblock.c	(revision c25e39bba175f99e96d9c806d161bbf1ab88a47a)
@@ -190,4 +190,15 @@
 }
 
+uint16_t ext4_superblock_get_desc_size(ext4_superblock_t *sb)
+{
+	uint16_t size = uint16_t_le2host(sb->desc_size);
+
+	if (size < EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
+		size = EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE;
+	}
+
+	return size;
+}
+
 uint32_t ext4_superblock_get_flags(ext4_superblock_t *sb)
 {
@@ -197,5 +208,5 @@
 
 /*
- * More complex superblock functions
+ * More complex superblock operations
  */
 
@@ -207,4 +218,30 @@
 	return false;
 }
+
+// Feature checkers
+bool ext4_superblock_has_feature_compatible(ext4_superblock_t *sb, uint32_t feature)
+{
+	if (ext4_superblock_get_features_compatible(sb) & feature) {
+		return true;
+	}
+	return false;
+}
+
+bool ext4_superblock_has_feature_incompatible(ext4_superblock_t *sb, uint32_t feature)
+{
+	if (ext4_superblock_get_features_incompatible(sb) & feature) {
+		return true;
+	}
+	return false;
+}
+
+bool ext4_superblock_has_feature_read_only(ext4_superblock_t *sb, uint32_t feature)
+{
+	if (ext4_superblock_get_features_read_only(sb) & feature) {
+		return true;
+	}
+	return false;
+}
+
 
 int ext4_superblock_read_direct(service_id_t service_id,
Index: uspace/lib/ext4/libext4_superblock.h
===================================================================
--- uspace/lib/ext4/libext4_superblock.h	(revision c83a55c5d0137af9c8191b10a0b65462d2d6a774)
+++ uspace/lib/ext4/libext4_superblock.h	(revision c25e39bba175f99e96d9c806d161bbf1ab88a47a)
@@ -151,4 +151,53 @@
 #define EXT4_SUPERBLOCK_FLAGS_TEST_FILESYS	0x0004  /* to test development code */
 
+/* Compatible features */
+#define EXT4_FEATURE_COMPAT_DIR_PREALLOC        0x0001
+#define EXT4_FEATURE_COMPAT_IMAGIC_INODES       0x0002
+#define EXT4_FEATURE_COMPAT_HAS_JOURNAL         0x0004
+#define EXT4_FEATURE_COMPAT_EXT_ATTR            0x0008
+#define EXT4_FEATURE_COMPAT_RESIZE_INODE        0x0010
+#define EXT4_FEATURE_COMPAT_DIR_INDEX           0x0020
+
+/* Read-only compatible features */
+#define EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER     0x0001
+#define EXT4_FEATURE_RO_COMPAT_LARGE_FILE       0x0002
+#define EXT4_FEATURE_RO_COMPAT_BTREE_DIR        0x0004
+#define EXT4_FEATURE_RO_COMPAT_HUGE_FILE        0x0008
+#define EXT4_FEATURE_RO_COMPAT_GDT_CSUM         0x0010
+#define EXT4_FEATURE_RO_COMPAT_DIR_NLINK        0x0020
+#define EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE      0x0040
+
+/* Incompatible features */
+#define EXT4_FEATURE_INCOMPAT_COMPRESSION       0x0001
+#define EXT4_FEATURE_INCOMPAT_FILETYPE          0x0002
+#define EXT4_FEATURE_INCOMPAT_RECOVER           0x0004 /* Needs recovery */
+#define EXT4_FEATURE_INCOMPAT_JOURNAL_DEV       0x0008 /* Journal device */
+#define EXT4_FEATURE_INCOMPAT_META_BG           0x0010
+#define EXT4_FEATURE_INCOMPAT_EXTENTS           0x0040 /* extents support */
+#define EXT4_FEATURE_INCOMPAT_64BIT             0x0080
+#define EXT4_FEATURE_INCOMPAT_MMP               0x0100
+#define EXT4_FEATURE_INCOMPAT_FLEX_BG           0x0200
+#define EXT4_FEATURE_INCOMPAT_EA_INODE          0x0400 /* EA in inode */
+#define EXT4_FEATURE_INCOMPAT_DIRDATA           0x1000 /* data in dirent */
+
+// TODO MODIFY features corresponding with implementation
+#define EXT4_FEATURE_COMPAT_SUPP EXT4_FEATURE_COMPAT_EXT_ATTR
+
+#define EXT4_FEATURE_INCOMPAT_SUPP      (EXT4_FEATURE_INCOMPAT_FILETYPE| \
+                                         EXT4_FEATURE_INCOMPAT_RECOVER| \
+                                         EXT4_FEATURE_INCOMPAT_META_BG| \
+                                         EXT4_FEATURE_INCOMPAT_EXTENTS| \
+                                         EXT4_FEATURE_INCOMPAT_64BIT| \
+                                         EXT4_FEATURE_INCOMPAT_FLEX_BG)
+
+#define EXT4_FEATURE_RO_COMPAT_SUPP     (EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER| \
+                                         EXT4_FEATURE_RO_COMPAT_LARGE_FILE| \
+                                         EXT4_FEATURE_RO_COMPAT_GDT_CSUM| \
+                                         EXT4_FEATURE_RO_COMPAT_DIR_NLINK | \
+                                         EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE | \
+                                         EXT4_FEATURE_RO_COMPAT_BTREE_DIR |\
+                                         EXT4_FEATURE_RO_COMPAT_HUGE_FILE)
+
+
 
 extern uint32_t ext4_superblock_get_inodes_count(ext4_superblock_t *);
@@ -205,5 +254,9 @@
 uint8_t s_def_hash_version; // Default hash version to use
 uint8_t s_jnl_backup_type;
-uint16_t s_desc_size; // Size of group descriptor
+*/
+
+extern uint16_t ext4_superblock_get_desc_size(ext4_superblock_t *);
+
+/*
 uint32_t s_default_mount_opts; // Default mount options
 uint32_t s_first_meta_bg; // First metablock block group
@@ -243,4 +296,7 @@
 /* More complex superblock functions */
 extern bool ext4_superblock_has_flag(ext4_superblock_t *, uint32_t);
+extern bool ext4_superblock_has_feature_compatible(ext4_superblock_t *, uint32_t);
+extern bool ext4_superblock_has_feature_incompatible(ext4_superblock_t *, uint32_t);
+extern bool ext4_superblock_has_feature_read_only(ext4_superblock_t *, uint32_t);
 extern int ext4_superblock_read_direct(service_id_t, ext4_superblock_t **);
 extern int ext4_superblock_check_sanity(ext4_superblock_t *);
Index: uspace/srv/fs/ext4fs/ext4fs_ops.c
===================================================================
--- uspace/srv/fs/ext4fs/ext4fs_ops.c	(revision c83a55c5d0137af9c8191b10a0b65462d2d6a774)
+++ uspace/srv/fs/ext4fs/ext4fs_ops.c	(revision c25e39bba175f99e96d9c806d161bbf1ab88a47a)
@@ -224,6 +224,6 @@
 	}
 
-	// TODO check super block COMPAT FEATURES
-	if (ext4_inode_has_flag(eparent->inode_ref->inode, EXT4_INODE_FLAG_INDEX)) {
+	if (ext4_superblock_has_feature_compatible(fs->superblock, EXT4_FEATURE_COMPAT_DIR_INDEX) &&
+			ext4_inode_has_flag(eparent->inode_ref->inode, EXT4_INODE_FLAG_INDEX)) {
 
 		rc = ext4_directory_dx_find_entry(&it, fs, eparent->inode_ref, component_size, component);
