Index: uspace/lib/ext4/libext4_balloc.c
===================================================================
--- uspace/lib/ext4/libext4_balloc.c	(revision ae3d4f846c765359d44016e122488a53c412adc4)
+++ uspace/lib/ext4/libext4_balloc.c	(revision fe27eb454fdeeeac38afd5ac658a4395140cae59)
@@ -96,5 +96,6 @@
 	}
 
-	uint32_t bitmap_block_addr = ext4_block_group_get_block_bitmap(bg_ref->block_group);
+	uint32_t bitmap_block_addr = ext4_block_group_get_block_bitmap(
+			bg_ref->block_group, fs->superblock);
 	block_t *bitmap_block;
 	rc = block_get(&bitmap_block, fs->device, bitmap_block_addr, 0);
@@ -129,7 +130,9 @@
 
 	// Update block group free blocks count
-	uint32_t free_blocks = ext4_block_group_get_free_blocks_count(bg_ref->block_group);
+	uint32_t free_blocks = ext4_block_group_get_free_blocks_count(
+			bg_ref->block_group, fs->superblock);
 	free_blocks++;
-	ext4_block_group_set_free_blocks_count(bg_ref->block_group, free_blocks);
+	ext4_block_group_set_free_blocks_count(bg_ref->block_group,
+			fs->superblock, free_blocks);
 	bg_ref->dirty = true;
 
@@ -148,5 +151,6 @@
 {
 	uint32_t block_group_count = ext4_superblock_get_block_group_count(sb);
-	uint32_t inode_table_first_block = ext4_block_group_get_inode_table_first_block(bg);
+	uint32_t inode_table_first_block = ext4_block_group_get_inode_table_first_block(
+			bg, sb);
 	uint16_t inode_table_item_size = ext4_superblock_get_inode_size(sb);
 	uint32_t inodes_per_group = ext4_superblock_get_inodes_per_group(sb);
@@ -210,5 +214,6 @@
 
 	uint32_t block_group_count = ext4_superblock_get_block_group_count(fs->superblock);
-	uint32_t inode_table_first_block = ext4_block_group_get_inode_table_first_block(bg_ref->block_group);
+	uint32_t inode_table_first_block = ext4_block_group_get_inode_table_first_block(
+			bg_ref->block_group, fs->superblock);
 	uint16_t inode_table_item_size = ext4_superblock_get_inode_size(fs->superblock);
 	uint32_t inode_table_bytes;
@@ -278,5 +283,6 @@
 
 	// Load bitmap
-	bitmap_block_addr = ext4_block_group_get_block_bitmap(bg_ref->block_group);
+	bitmap_block_addr = ext4_block_group_get_block_bitmap(bg_ref->block_group,
+			fs->superblock);
 
 	rc = block_get(&bitmap_block, fs->device, bitmap_block_addr, 0);
@@ -380,5 +386,6 @@
 
 		// Load bitmap
-		bitmap_block_addr = ext4_block_group_get_block_bitmap(bg_ref->block_group);
+		bitmap_block_addr = ext4_block_group_get_block_bitmap(
+				bg_ref->block_group, fs->superblock);
 
 		rc = block_get(&bitmap_block, fs->device, bitmap_block_addr, 0);
@@ -461,7 +468,9 @@
 
 	// Update block group free blocks count
-	uint32_t bg_free_blocks = ext4_block_group_get_free_blocks_count(bg_ref->block_group);
+	uint32_t bg_free_blocks = ext4_block_group_get_free_blocks_count(
+			bg_ref->block_group, fs->superblock);
 	bg_free_blocks--;
-	ext4_block_group_set_free_blocks_count(bg_ref->block_group, bg_free_blocks);
+	ext4_block_group_set_free_blocks_count(bg_ref->block_group,
+			fs->superblock, bg_free_blocks);
 	bg_ref->dirty = true;
 
Index: uspace/lib/ext4/libext4_block_group.c
===================================================================
--- uspace/lib/ext4/libext4_block_group.c	(revision ae3d4f846c765359d44016e122488a53c412adc4)
+++ uspace/lib/ext4/libext4_block_group.c	(revision fe27eb454fdeeeac38afd5ac658a4395140cae59)
@@ -39,43 +39,127 @@
 #include "libext4.h"
 
-uint64_t ext4_block_group_get_block_bitmap(ext4_block_group_t *bg)
-{
-	return ((uint64_t)uint32_t_le2host(bg->block_bitmap_hi) << 32) |
-		uint32_t_le2host(bg->block_bitmap_lo);
-}
-
-uint64_t ext4_block_group_get_inode_bitmap(ext4_block_group_t *bg)
-{
-	return ((uint64_t)uint32_t_le2host(bg->inode_bitmap_hi) << 32) |
-		uint32_t_le2host(bg->inode_bitmap_lo);
-}
-
-uint64_t ext4_block_group_get_inode_table_first_block(ext4_block_group_t *bg)
-{
-	return ((uint64_t)uint32_t_le2host(bg->inode_table_first_block_hi) << 32) |
-		uint32_t_le2host(bg->inode_table_first_block_lo);
-}
-
-uint32_t ext4_block_group_get_free_blocks_count(ext4_block_group_t *bg)
-{
-	return ((uint32_t)uint16_t_le2host(bg->free_blocks_count_hi) << 16) |
-		uint16_t_le2host(bg->free_blocks_count_lo);
-}
-
-void ext4_block_group_set_free_blocks_count(ext4_block_group_t *bg, uint32_t value) {
+uint64_t ext4_block_group_get_block_bitmap(ext4_block_group_t *bg,
+		ext4_superblock_t *sb)
+{
+	if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
+		return ((uint64_t)uint32_t_le2host(bg->block_bitmap_hi) << 32) |
+			uint32_t_le2host(bg->block_bitmap_lo);
+	} else {
+		return uint32_t_le2host(bg->block_bitmap_lo);
+	}
+}
+
+void ext4_block_group_set_block_bitmap(ext4_block_group_t *bg,
+		ext4_superblock_t *sb, uint64_t block_bitmap)
+{
+	bg->block_bitmap_lo = host2uint32_t_le((block_bitmap << 32) >> 32);
+
+	if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
+		bg->block_bitmap_hi = host2uint32_t_le(block_bitmap >> 32);
+	}
+}
+
+uint64_t ext4_block_group_get_inode_bitmap(ext4_block_group_t *bg,
+		ext4_superblock_t *sb)
+{
+	if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
+		return ((uint64_t)uint32_t_le2host(bg->inode_bitmap_hi) << 32) |
+			uint32_t_le2host(bg->inode_bitmap_lo);
+	} else {
+		return uint32_t_le2host(bg->inode_bitmap_lo);
+	}
+
+}
+
+void ext4_block_group_set_inode_bitmap(ext4_block_group_t *bg,
+		ext4_superblock_t *sb, uint64_t inode_bitmap)
+{
+	bg->inode_bitmap_lo = host2uint32_t_le((inode_bitmap << 32) >> 32);
+
+	if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
+		bg->inode_bitmap_hi = host2uint32_t_le(inode_bitmap >> 32);
+	}
+}
+
+uint64_t ext4_block_group_get_inode_table_first_block(ext4_block_group_t *bg,
+		ext4_superblock_t *sb)
+{
+	if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
+		return ((uint64_t)uint32_t_le2host(bg->inode_table_first_block_hi) << 32) |
+			uint32_t_le2host(bg->inode_table_first_block_lo);
+	} else {
+		return uint32_t_le2host(bg->inode_table_first_block_lo);
+	}
+}
+
+void ext4_block_group_set_inode_table_first_block(ext4_block_group_t *bg,
+		ext4_superblock_t *sb, uint64_t ino_tbl_first)
+{
+	bg->inode_table_first_block_lo = host2uint32_t_le((ino_tbl_first << 32) >> 32);
+
+	if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
+		bg->inode_table_first_block_hi = host2uint32_t_le(ino_tbl_first >> 32);
+	}
+}
+
+uint32_t ext4_block_group_get_free_blocks_count(ext4_block_group_t *bg,
+		ext4_superblock_t *sb)
+{
+	if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
+		return ((uint32_t)uint16_t_le2host(bg->free_blocks_count_hi) << 16) |
+			uint16_t_le2host(bg->free_blocks_count_lo);
+	} else {
+		return uint16_t_le2host(bg->free_blocks_count_lo);
+	}
+}
+
+void ext4_block_group_set_free_blocks_count(ext4_block_group_t *bg,
+		ext4_superblock_t *sb, uint32_t value)
+{
 	bg->free_blocks_count_lo = host2uint16_t_le((value << 16) >> 16);
-	bg->free_blocks_count_hi = host2uint16_t_le(value >> 16);
-}
-
-uint32_t ext4_block_group_get_free_inodes_count(ext4_block_group_t *bg)
-{
-	return ((uint32_t)uint16_t_le2host(bg->free_inodes_count_hi) << 16) |
-		uint16_t_le2host(bg->free_inodes_count_lo);
-}
-
-uint32_t ext4_block_group_get_used_dirs_count(ext4_block_group_t *bg)
-{
-	return ((uint32_t)uint16_t_le2host(bg->used_dirs_count_hi) << 16) |
-		uint16_t_le2host(bg->used_dirs_count_lo);
+	if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
+		bg->free_blocks_count_hi = host2uint16_t_le(value >> 16);
+	}
+}
+
+uint32_t ext4_block_group_get_free_inodes_count(ext4_block_group_t *bg,
+		ext4_superblock_t *sb)
+{
+	if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
+		return ((uint32_t)uint16_t_le2host(bg->free_inodes_count_hi) << 16) |
+			uint16_t_le2host(bg->free_inodes_count_lo);
+	} else {
+		return uint16_t_le2host(bg->free_inodes_count_lo);
+	}
+}
+
+void ext4_block_group_set_free_inodes_count(ext4_block_group_t *bg,
+		ext4_superblock_t *sb, uint32_t value)
+{
+	bg->free_inodes_count_lo = host2uint16_t_le((value << 16) >> 16);
+	if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
+		bg->free_inodes_count_hi = host2uint16_t_le(value >> 16);
+	}
+}
+
+
+uint32_t ext4_block_group_get_used_dirs_count(ext4_block_group_t *bg,
+		ext4_superblock_t *sb)
+{
+	if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
+		return ((uint32_t)uint16_t_le2host(bg->used_dirs_count_hi) << 16) |
+			uint16_t_le2host(bg->used_dirs_count_lo);
+	} else {
+		return uint16_t_le2host(bg->used_dirs_count_lo);
+	}
+}
+
+void ext4_block_group_set_used_dirs_count(ext4_block_group_t *bg,
+		ext4_superblock_t *sb, uint32_t count)
+{
+	bg->used_dirs_count_lo = host2uint16_t_le((count << 16) >> 16);
+	if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
+		bg->used_dirs_count_hi = host2uint16_t_le(count >> 16);
+	}
 }
 
@@ -85,8 +169,23 @@
 }
 
-uint32_t ext4_block_group_get_itable_unused(ext4_block_group_t *bg)
-{
-	return ((uint32_t)uint16_t_le2host(bg->itable_unused_hi) << 16) |
-		uint16_t_le2host(bg->itable_unused_lo);
+uint32_t ext4_block_group_get_itable_unused(ext4_block_group_t *bg,
+		ext4_superblock_t *sb)
+{
+	if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
+		return ((uint32_t)uint16_t_le2host(bg->itable_unused_hi) << 16) |
+			uint16_t_le2host(bg->itable_unused_lo);
+	} else {
+		return uint16_t_le2host(bg->itable_unused_lo);
+	}
+}
+
+void ext4_block_group_set_itable_unused(ext4_block_group_t *bg,
+		ext4_superblock_t *sb, uint32_t value)
+{
+	bg->itable_unused_lo = host2uint16_t_le((value << 16) >> 16);
+	if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
+		bg->itable_unused_hi = host2uint16_t_le(value >> 16);
+	}
+
 }
 
@@ -94,4 +193,9 @@
 {
 	return uint16_t_le2host(bg->checksum);
+}
+
+void ext4_block_group_set_checksum(ext4_block_group_t *bg, uint16_t checksum)
+{
+	bg->checksum = host2uint16_t_le(checksum);
 }
 
Index: uspace/lib/ext4/libext4_block_group.h
===================================================================
--- uspace/lib/ext4/libext4_block_group.h	(revision ae3d4f846c765359d44016e122488a53c412adc4)
+++ uspace/lib/ext4/libext4_block_group.h	(revision fe27eb454fdeeeac38afd5ac658a4395140cae59)
@@ -37,4 +37,5 @@
 #include <sys/types.h>
 #include "libext4_block_group.h"
+#include "libext4_superblock.h"
 /*
  * Structure of a blocks group descriptor
@@ -69,15 +70,40 @@
 
 #define EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE 32
+#define EXT4_BLOCK_MAX_GROUP_DESCRIPTOR_SIZE 64
 
-extern uint64_t ext4_block_group_get_block_bitmap(ext4_block_group_t *);
-extern uint64_t ext4_block_group_get_inode_bitmap(ext4_block_group_t *);
-extern uint64_t ext4_block_group_get_inode_table_first_block(ext4_block_group_t *);
-extern uint32_t ext4_block_group_get_free_blocks_count(ext4_block_group_t *);
-extern void ext4_block_group_set_free_blocks_count(ext4_block_group_t *, uint32_t);
-extern uint32_t ext4_block_group_get_free_inodes_count(ext4_block_group_t *);
-extern uint32_t ext4_block_group_get_used_dirs_count(ext4_block_group_t *);
+extern uint64_t ext4_block_group_get_block_bitmap(ext4_block_group_t *,
+		ext4_superblock_t *);
+extern void ext4_block_group_set_block_bitmap(ext4_block_group_t *,
+		ext4_superblock_t *, uint64_t);
+extern uint64_t ext4_block_group_get_inode_bitmap(ext4_block_group_t *,
+		ext4_superblock_t *);
+extern void ext4_block_group_set_inode_bitmap(ext4_block_group_t *,
+		ext4_superblock_t *, uint64_t);
+extern uint64_t ext4_block_group_get_inode_table_first_block(
+		ext4_block_group_t *, ext4_superblock_t *);
+extern void ext4_block_group_set_inode_table_first_block(
+		ext4_block_group_t *, ext4_superblock_t *, uint64_t);
+extern uint32_t ext4_block_group_get_free_blocks_count(ext4_block_group_t *,
+		ext4_superblock_t *);
+extern void ext4_block_group_set_free_blocks_count(ext4_block_group_t *,
+		ext4_superblock_t *, uint32_t);
+extern uint32_t ext4_block_group_get_free_inodes_count(ext4_block_group_t *,
+		ext4_superblock_t *);
+extern void ext4_block_group_set_free_inodes_count(ext4_block_group_t *,
+		ext4_superblock_t *, uint32_t);
+extern void ext4_block_group_set_free_inodes_count(ext4_block_group_t *,
+		ext4_superblock_t *, uint32_t);
+extern uint32_t ext4_block_group_get_used_dirs_count(ext4_block_group_t *,
+		ext4_superblock_t *);
+extern void ext4_block_group_set_used_dirs_count(ext4_block_group_t *,
+		ext4_superblock_t *, uint32_t);
 extern uint16_t ext4_block_group_get_flags(ext4_block_group_t *);
-extern uint32_t ext4_block_group_get_itable_unused(ext4_block_group_t *);
+extern void ext4_block_group_set_flags(ext4_block_group_t *, uint16_t);
+extern uint32_t ext4_block_group_get_itable_unused(ext4_block_group_t *,
+		ext4_superblock_t *);
+extern void ext4_block_group_set_itable_unused(ext4_block_group_t *,
+		ext4_superblock_t *, uint32_t);
 extern uint16_t ext4_block_group_get_checksum(ext4_block_group_t *);
+extern void ext4_block_group_set_checksum(ext4_block_group_t *, uint16_t);
 
 #endif
Index: uspace/lib/ext4/libext4_filesystem.c
===================================================================
--- uspace/lib/ext4/libext4_filesystem.c	(revision ae3d4f846c765359d44016e122488a53c412adc4)
+++ uspace/lib/ext4/libext4_filesystem.c	(revision fe27eb454fdeeeac38afd5ac658a4395140cae59)
@@ -234,5 +234,5 @@
 
 	inode_table_start = ext4_block_group_get_inode_table_first_block(
-	    bg_ref->block_group);
+	    bg_ref->block_group, fs->superblock);
 
 	rc = ext4_filesystem_put_block_group_ref(bg_ref);
Index: uspace/lib/ext4/libext4_filesystem.h
===================================================================
--- uspace/lib/ext4/libext4_filesystem.h	(revision ae3d4f846c765359d44016e122488a53c412adc4)
+++ uspace/lib/ext4/libext4_filesystem.h	(revision fe27eb454fdeeeac38afd5ac658a4395140cae59)
@@ -46,4 +46,5 @@
 } ext4_filesystem_t;
 
+#define EXT4_MIN_BLOCK_SIZE		1024  //1 KiB
 #define EXT4_MAX_BLOCK_SIZE 	65536 //64 KiB
 #define EXT4_REV0_INODE_SIZE	128
Index: uspace/lib/ext4/libext4_inode.c
===================================================================
--- uspace/lib/ext4/libext4_inode.c	(revision ae3d4f846c765359d44016e122488a53c412adc4)
+++ uspace/lib/ext4/libext4_inode.c	(revision fe27eb454fdeeeac38afd5ac658a4395140cae59)
@@ -63,13 +63,22 @@
 }
 
-bool ext4_inode_is_type(ext4_superblock_t *sb, ext4_inode_t *inode, uint32_t type)
-{
-	uint32_t mode = ext4_inode_get_mode(sb, inode);
-	return (mode & EXT4_INODE_MODE_TYPE_MASK) == type;
-}
-
-/*
+void ext4_inode_set_mode(ext4_superblock_t *sb, ext4_inode_t *inode, uint32_t mode)
+{
+	inode->mode = host2uint16_t_le((mode << 16) >> 16);
+
+	if (ext4_superblock_get_creator_os(sb) == EXT4_SUPERBLOCK_OS_HURD) {
+		inode->osd2.hurd2.mode_high = host2uint16_t_le(mode >> 16);
+	}
+}
+
 uint32_t ext4_inode_get_uid(ext4_inode_t *inode)
-*/
+{
+	return uint32_t_le2host(inode->uid);
+}
+
+void ext4_inode_set_uid(ext4_inode_t *inode, uint32_t uid)
+{
+	inode->uid = host2uint32_t_le(uid);
+}
 
 uint64_t ext4_inode_get_size(ext4_superblock_t *sb, ext4_inode_t *inode)
@@ -89,11 +98,53 @@
 }
 
-/*
-extern uint32_t ext4_inode_get_access_time(ext4_inode_t *);
-extern uint32_t ext4_inode_get_change_inode_time(ext4_inode_t *);
-extern uint32_t ext4_inode_get_modification_time(ext4_inode_t *);
-extern uint32_t ext4_inode_get_deletion_time(ext4_inode_t *);
-extern uint32_t ext4_inode_get_gid(ext4_inode_t *);
-*/
+uint32_t ext4_inode_get_access_time(ext4_inode_t *inode)
+{
+	return uint32_t_le2host(inode->access_time);
+}
+
+void ext4_inode_set_access_time(ext4_inode_t *inode, uint32_t time)
+{
+	inode->access_time = host2uint32_t_le(time);
+}
+
+uint32_t ext4_inode_get_change_inode_time(ext4_inode_t *inode)
+{
+	return uint32_t_le2host(inode->change_inode_time);
+}
+
+void ext4_inode_set_change_inode_time(ext4_inode_t *inode, uint32_t time)
+{
+	inode->change_inode_time = host2uint32_t_le(time);
+}
+
+uint32_t ext4_inode_get_modification_time(ext4_inode_t *inode)
+{
+	return uint32_t_le2host(inode->modification_time);
+}
+
+void ext4_inode_set_modification_time(ext4_inode_t *inode, uint32_t time)
+{
+	inode->modification_time = host2uint32_t_le(time);
+}
+
+uint32_t ext4_inode_get_deletion_time(ext4_inode_t *inode)
+{
+	return uint32_t_le2host(inode->deletion_time);
+}
+
+void ext4_inode_set_deletion_time(ext4_inode_t *inode, uint32_t time)
+{
+	inode->deletion_time = host2uint32_t_le(time);
+}
+
+uint32_t ext4_inode_get_gid(ext4_inode_t *inode)
+{
+	return uint32_t_le2host(inode->gid);
+}
+
+void ext4_inode_set_gid(ext4_inode_t *inode, uint32_t gid)
+{
+	inode->gid = host2uint32_t_le(gid);
+}
 
 uint16_t ext4_inode_get_links_count(ext4_inode_t *inode)
@@ -102,4 +153,8 @@
 }
 
+void ext4_inode_set_links_count(ext4_inode_t *inode, uint16_t count)
+{
+	inode->links_count = host2uint16_t_le(count);
+}
 
 uint64_t ext4_inode_get_blocks_count(ext4_superblock_t *sb, ext4_inode_t *inode)
@@ -161,6 +216,4 @@
     }
     return EOK;
-
-
 }
 
@@ -172,4 +225,16 @@
 	inode->flags = host2uint32_t_le(flags);
 }
+
+uint32_t ext4_inode_get_generation(ext4_inode_t *inode)
+{
+	return uint32_t_le2host(inode->generation);
+}
+
+void ext4_inode_set_generation(ext4_inode_t *inode, uint32_t generation)
+{
+	inode->generation = host2uint32_t_le(generation);
+}
+
+/***********************************************************************/
 
 uint32_t ext4_inode_get_direct_block(ext4_inode_t *inode, uint32_t idx)
@@ -260,4 +325,11 @@
 }
 
+bool ext4_inode_is_type(ext4_superblock_t *sb, ext4_inode_t *inode, uint32_t type)
+{
+	uint32_t mode = ext4_inode_get_mode(sb, inode);
+	return (mode & EXT4_INODE_MODE_TYPE_MASK) == type;
+}
+
+
 ext4_extent_header_t * ext4_inode_get_extent_header(ext4_inode_t *inode)
 {
Index: uspace/lib/ext4/libext4_inode.h
===================================================================
--- uspace/lib/ext4/libext4_inode.h	(revision ae3d4f846c765359d44016e122488a53c412adc4)
+++ uspace/lib/ext4/libext4_inode.h	(revision fe27eb454fdeeeac38afd5ac658a4395140cae59)
@@ -55,5 +55,5 @@
 	uint16_t uid; // Low 16 bits of owner uid
 	uint32_t size_lo; // Size in bytes
-	uint32_t acess_time; // Access time
+	uint32_t access_time; // Access time
 	uint32_t change_inode_time; // Inode change time
 	uint32_t modification_time; // Modification time
@@ -150,30 +150,28 @@
 
 extern uint32_t ext4_inode_get_mode(ext4_superblock_t *, ext4_inode_t *);
-extern bool ext4_inode_is_type(ext4_superblock_t *, ext4_inode_t *, uint32_t);
-/*
+extern void ext4_inode_set_mode(ext4_superblock_t *, ext4_inode_t *, uint32_t);
 extern uint32_t ext4_inode_get_uid(ext4_inode_t *);
-*/
+extern void ext4_inode_set_uid(ext4_inode_t *, uint32_t);
 extern uint64_t ext4_inode_get_size(ext4_superblock_t *, ext4_inode_t *);
 extern void ext4_inode_set_size(ext4_inode_t *, uint64_t);
-/*
 extern uint32_t ext4_inode_get_access_time(ext4_inode_t *);
+extern void ext4_inode_set_access_time(ext4_inode_t *, uint32_t);
 extern uint32_t ext4_inode_get_change_inode_time(ext4_inode_t *);
+extern void ext4_inode_set_change_inode_time(ext4_inode_t *, uint32_t);
 extern uint32_t ext4_inode_get_modification_time(ext4_inode_t *);
+extern void ext4_inode_set_modification_time(ext4_inode_t *, uint32_t);
 extern uint32_t ext4_inode_get_deletion_time(ext4_inode_t *);
+extern void ext4_inode_set_deletion_time(ext4_inode_t *, uint32_t);
 extern uint32_t ext4_inode_get_gid(ext4_inode_t *);
-*/
+extern void ext4_inode_set_gid(ext4_inode_t *, uint32_t);
 extern uint16_t ext4_inode_get_links_count(ext4_inode_t *);
+extern void ext4_inode_set_links_count(ext4_inode_t *, uint16_t);
 extern uint64_t ext4_inode_get_blocks_count(ext4_superblock_t *, ext4_inode_t *);
 extern int ext4_inode_set_blocks_count(ext4_superblock_t *, ext4_inode_t *, uint64_t);
 extern uint32_t ext4_inode_get_flags(ext4_inode_t *);
-void ext4_inode_set_flags(ext4_inode_t *, uint32_t);
-extern uint32_t ext4_inode_get_direct_block(ext4_inode_t *, uint32_t);
-extern void ext4_inode_set_direct_block(ext4_inode_t *, uint32_t, uint32_t);
-extern uint32_t ext4_inode_get_indirect_block(ext4_inode_t *, uint32_t);
-extern void ext4_inode_set_indirect_block(ext4_inode_t *, uint32_t, uint32_t);
-extern uint32_t ext4_inode_get_extent_block(ext4_inode_t *, uint64_t, service_id_t);
-/*
-uint32_t blocks[EXT4_INODE_BLOCKS]; // Pointers to blocks
-uint32_t generation;
+extern void ext4_inode_set_flags(ext4_inode_t *, uint32_t);
+extern uint32_t ext4_inode_get_generation(ext4_inode_t *);
+extern void ext4_inode_set_generation(ext4_inode_t *, uint32_t);
+/*
 uint32_t file_acl_lo; // File ACL
 uint16_t extra_isize;
@@ -186,5 +184,13 @@
 */
 
+/******************************************/
+
+extern uint32_t ext4_inode_get_direct_block(ext4_inode_t *, uint32_t);
+extern void ext4_inode_set_direct_block(ext4_inode_t *, uint32_t, uint32_t);
+extern uint32_t ext4_inode_get_indirect_block(ext4_inode_t *, uint32_t);
+extern void ext4_inode_set_indirect_block(ext4_inode_t *, uint32_t, uint32_t);
+extern uint32_t ext4_inode_get_extent_block(ext4_inode_t *, uint64_t, service_id_t);
 extern ext4_extent_header_t * ext4_inode_get_extent_header(ext4_inode_t *);
+extern bool ext4_inode_is_type(ext4_superblock_t *, ext4_inode_t *, uint32_t);
 extern bool ext4_inode_has_flag(ext4_inode_t *, uint32_t);
 extern void ext4_inode_clear_flag(ext4_inode_t *, uint32_t);
Index: uspace/lib/ext4/libext4_superblock.c
===================================================================
--- uspace/lib/ext4/libext4_superblock.c	(revision ae3d4f846c765359d44016e122488a53c412adc4)
+++ uspace/lib/ext4/libext4_superblock.c	(revision fe27eb454fdeeeac38afd5ac658a4395140cae59)
@@ -47,4 +47,9 @@
 }
 
+void ext4_superblock_set_inodes_count(ext4_superblock_t *sb, uint32_t count)
+{
+	sb->inodes_count = host2uint32_t_le(count);
+}
+
 uint64_t ext4_superblock_get_blocks_count(ext4_superblock_t *sb)
 {
@@ -53,4 +58,10 @@
 }
 
+void ext4_superblock_set_blocks_count(ext4_superblock_t *sb, uint64_t count)
+{
+	sb->blocks_count_lo = host2uint32_t_le((count << 32) >> 32);
+	sb->blocks_count_hi = host2uint32_t_le(count >> 32);
+}
+
 uint64_t ext4_superblock_get_reserved_blocks_count(ext4_superblock_t *sb)
 {
@@ -59,4 +70,10 @@
 }
 
+void ext4_superblock_set_reserved_blocks_count(ext4_superblock_t *sb, uint64_t count)
+{
+	sb->reserved_blocks_count_lo = host2uint32_t_le((count << 32) >> 32);
+	sb->reserved_blocks_count_hi = host2uint32_t_le(count >> 32);
+}
+
 uint64_t ext4_superblock_get_free_blocks_count(ext4_superblock_t *sb)
 {
@@ -76,4 +93,9 @@
 }
 
+void ext4_superblock_set_free_inodes_count(ext4_superblock_t *sb, uint32_t count)
+{
+	sb->free_inodes_count = host2uint32_t_le(count);
+}
+
 uint32_t ext4_superblock_get_first_data_block(ext4_superblock_t *sb)
 {
@@ -81,4 +103,9 @@
 }
 
+void ext4_superblock_set_first_data_block(ext4_superblock_t *sb, uint32_t first)
+{
+	sb->first_data_block = host2uint32_t_le(first);
+}
+
 uint32_t ext4_superblock_get_log_block_size(ext4_superblock_t *sb)
 {
@@ -86,4 +113,9 @@
 }
 
+void ext4_superblock_set_log_block_size(ext4_superblock_t *sb, uint32_t log_size)
+{
+	sb->log_block_size = host2uint32_t_le(log_size);
+}
+
 uint32_t ext4_superblock_get_block_size(ext4_superblock_t *sb)
 {
@@ -91,4 +123,17 @@
 }
 
+void ext4_superblock_set_block_size(ext4_superblock_t *sb, uint32_t size)
+{
+	uint32_t log = 0;
+	uint32_t tmp = size / EXT4_MIN_BLOCK_SIZE;
+
+	tmp >>= 1;
+	while (tmp) {
+		log++;
+		tmp >>= 1;
+	}
+
+	ext4_superblock_set_log_block_size(sb, log);
+}
 
 uint32_t ext4_superblock_get_blocks_per_group(ext4_superblock_t *sb)
@@ -97,4 +142,9 @@
 }
 
+void ext4_superblock_set_blocks_per_group(ext4_superblock_t *sb, uint32_t blocks)
+{
+	sb->blocks_per_group = host2uint32_t_le(blocks);
+}
+
 uint32_t ext4_superblock_get_inodes_per_group(ext4_superblock_t *sb)
 {
@@ -102,4 +152,9 @@
 }
 
+void ext4_superblock_set_inodes_per_group(ext4_superblock_t *sb, uint32_t inodes)
+{
+	sb->inodes_per_group = host2uint32_t_le(inodes);
+}
+
 uint32_t ext4_superblock_get_mount_time(ext4_superblock_t *sb)
 {
@@ -107,4 +162,9 @@
 }
 
+void ext4_superblock_set_mount_time(ext4_superblock_t *sb, uint32_t time)
+{
+	sb->mount_time = host2uint32_t_le(time);
+}
+
 uint32_t ext4_superblock_get_write_time(ext4_superblock_t *sb)
 {
@@ -112,4 +172,9 @@
 }
 
+void ext4_superblock_set_write_time(ext4_superblock_t *sb, uint32_t time)
+{
+	sb->write_time = host2uint32_t_le(time);
+}
+
 uint16_t ext4_superblock_get_mount_count(ext4_superblock_t *sb)
 {
@@ -117,4 +182,9 @@
 }
 
+void ext4_superblock_set_mount_count(ext4_superblock_t *sb, uint16_t count)
+{
+	sb->mount_count = host2uint16_t_le(count);
+}
+
 uint16_t ext4_superblock_get_max_mount_count(ext4_superblock_t *sb)
 {
@@ -122,4 +192,9 @@
 }
 
+void ext4_superblock_set_max_mount_count(ext4_superblock_t *sb, uint16_t count)
+{
+	sb->max_mount_count = host2uint16_t_le(count);
+}
+
 uint16_t ext4_superblock_get_magic(ext4_superblock_t *sb)
 {
@@ -132,4 +207,9 @@
 }
 
+void ext4_superblock_set_state(ext4_superblock_t *sb, uint16_t state)
+{
+	sb->state = host2uint16_t_le(state);
+}
+
 uint16_t ext4_superblock_get_errors(ext4_superblock_t *sb)
 {
@@ -137,4 +217,8 @@
 }
 
+void ext4_superblock_set_errors(ext4_superblock_t *sb, uint16_t errors)
+{
+	sb->errors = host2uint16_t_le(errors);
+}
 
 uint16_t ext4_superblock_get_minor_rev_level(ext4_superblock_t *sb)
@@ -143,7 +227,17 @@
 }
 
+void ext4_superblock_set_minor_rev_level(ext4_superblock_t *sb, uint16_t level)
+{
+	sb->minor_rev_level = host2uint16_t_le(level);
+}
+
 uint32_t ext4_superblock_get_last_check_time(ext4_superblock_t *sb)
 {
 	return uint32_t_le2host(sb->last_check_time);
+}
+
+void ext4_superblock_set_last_check_time(ext4_superblock_t *sb, uint32_t time)
+{
+	sb->state = host2uint32_t_le(time);
 }
 
@@ -152,4 +246,9 @@
 }
 
+void ext4_superblock_set_check_interval(ext4_superblock_t *sb, uint32_t interval)
+{
+	sb->check_interval = host2uint32_t_le(interval);
+}
+
 uint32_t ext4_superblock_get_creator_os(ext4_superblock_t *sb)
 {
@@ -157,7 +256,47 @@
 }
 
+void ext4_superblock_set_creator_os(ext4_superblock_t *sb, uint32_t os)
+{
+	sb->creator_os = host2uint32_t_le(os);
+}
+
 uint32_t ext4_superblock_get_rev_level(ext4_superblock_t *sb)
 {
 	return uint32_t_le2host(sb->rev_level);
+}
+
+void ext4_superblock_set_rev_level(ext4_superblock_t *sb, uint32_t level)
+{
+	sb->rev_level = host2uint32_t_le(level);
+}
+
+uint16_t ext4_superblock_get_def_resuid(ext4_superblock_t *sb)
+{
+	return uint16_t_le2host(sb->def_resuid);
+}
+
+void ext4_superblock_set_def_resuid(ext4_superblock_t *sb, uint16_t uid)
+{
+	sb->def_resuid = host2uint16_t_le(uid);
+}
+
+uint16_t ext4_superblock_get_def_resgid(ext4_superblock_t *sb)
+{
+	return uint16_t_le2host(sb->def_resgid);
+}
+
+void ext4_superblock_set_def_resgid(ext4_superblock_t *sb, uint16_t gid)
+{
+	sb->def_resgid = host2uint16_t_le(gid);
+}
+
+uint32_t ext4_superblock_get_first_inode(ext4_superblock_t *sb)
+{
+	return uint32_t_le2host(sb->first_inode);
+}
+
+void ext4_superblock_set_first_inode(ext4_superblock_t *sb, uint32_t first_inode)
+{
+	sb->first_inode = host2uint32_t_le(first_inode);
 }
 
@@ -170,4 +309,9 @@
 }
 
+void ext4_superblock_set_inode_size(ext4_superblock_t *sb, uint16_t size)
+{
+	sb->inode_size = host2uint16_t_le(size);
+}
+
 uint16_t ext4_superblock_get_block_group_number(ext4_superblock_t *sb)
 {
@@ -175,4 +319,9 @@
 }
 
+void ext4_superblock_set_block_group_number(ext4_superblock_t *sb, uint16_t bg)
+{
+	sb->block_group_number = host2uint16_t_le(bg);
+}
+
 uint32_t ext4_superblock_get_features_compatible(ext4_superblock_t *sb)
 {
@@ -180,4 +329,9 @@
 }
 
+void ext4_superblock_set_features_compatible(ext4_superblock_t *sb, uint32_t features)
+{
+	sb->features_compatible = host2uint32_t_le(features);
+}
+
 uint32_t ext4_superblock_get_features_incompatible(ext4_superblock_t *sb)
 {
@@ -185,4 +339,9 @@
 }
 
+void ext4_superblock_set_features_incompatible(ext4_superblock_t *sb, uint32_t features)
+{
+	sb->features_incompatible = host2uint32_t_le(features);
+}
+
 uint32_t ext4_superblock_get_features_read_only(ext4_superblock_t *sb)
 {
@@ -190,4 +349,8 @@
 }
 
+void ext4_superblock_set_features_read_only(ext4_superblock_t *sb, uint32_t features)
+{
+	sb->features_read_only = host2uint32_t_le(features);
+}
 
 uint32_t* ext4_superblock_get_hash_seed(ext4_superblock_t *sb)
@@ -207,7 +370,17 @@
 }
 
+void ext4_superblock_set_desc_size(ext4_superblock_t *sb, uint16_t size)
+{
+	sb->desc_size = host2uint16_t_le(size);
+}
+
 uint32_t ext4_superblock_get_flags(ext4_superblock_t *sb)
 {
 	return uint32_t_le2host(sb->flags);
+}
+
+void ext4_superblock_set_flags(ext4_superblock_t *sb, uint32_t flags)
+{
+	sb->flags = host2uint32_t_le(flags);
 }
 
@@ -307,4 +480,8 @@
 	}
 
+	// block size
+	// desc size
+
+
 	// TODO more checks !!!
 
Index: uspace/lib/ext4/libext4_superblock.h
===================================================================
--- uspace/lib/ext4/libext4_superblock.h	(revision ae3d4f846c765359d44016e122488a53c412adc4)
+++ uspace/lib/ext4/libext4_superblock.h	(revision fe27eb454fdeeeac38afd5ac658a4395140cae59)
@@ -202,38 +202,62 @@
 
 extern uint32_t ext4_superblock_get_inodes_count(ext4_superblock_t *);
+extern void ext4_superblock_set_inodes_count(ext4_superblock_t *, uint32_t);
 extern uint64_t ext4_superblock_get_blocks_count(ext4_superblock_t *);
+extern void ext4_superblock_set_blocks_count(ext4_superblock_t *, uint64_t);
 extern uint64_t ext4_superblock_get_reserved_blocks_count(ext4_superblock_t *);
+extern void ext4_superblock_set_reserved_blocks_count(ext4_superblock_t *, uint64_t);
 extern uint64_t ext4_superblock_get_free_blocks_count(ext4_superblock_t *);
 extern void ext4_superblock_set_free_blocks_count(ext4_superblock_t *, uint64_t);
 extern uint32_t ext4_superblock_get_free_inodes_count(ext4_superblock_t *);
+extern void ext4_superblock_set_free_inodes_count(ext4_superblock_t *, uint32_t);
 extern uint32_t ext4_superblock_get_first_data_block(ext4_superblock_t *);
+extern void ext4_superblock_set_first_data_block(ext4_superblock_t *, uint32_t);
 extern uint32_t ext4_superblock_get_log_block_size(ext4_superblock_t *);
+extern void ext4_superblock_set_log_block_size(ext4_superblock_t *, uint32_t);
 extern uint32_t ext4_superblock_get_block_size(ext4_superblock_t *);
+extern void ext4_superblock_set_block_size(ext4_superblock_t *, uint32_t);
 extern uint32_t ext4_superblock_get_blocks_per_group(ext4_superblock_t *);
+extern void ext4_superblock_set_blocks_per_group(ext4_superblock_t *, uint32_t);
 extern uint32_t ext4_superblock_get_inodes_per_group(ext4_superblock_t *);
+extern void ext4_superblock_set_inodes_per_group(ext4_superblock_t *, uint32_t);
 extern uint32_t ext4_superblock_get_mount_time(ext4_superblock_t *);
+extern void ext4_superblock_set_mount_time(ext4_superblock_t *, uint32_t);
 extern uint32_t ext4_superblock_get_write_time(ext4_superblock_t *);
+extern void ext4_superblock_set_write_time(ext4_superblock_t *, uint32_t);
 extern uint16_t ext4_superblock_get_mount_count(ext4_superblock_t *);
+extern void ext4_superblock_set_mount_count(ext4_superblock_t *, uint16_t);
 extern uint16_t ext4_superblock_get_max_mount_count(ext4_superblock_t *);
+extern void ext4_superblock_set_max_mount_count(ext4_superblock_t *, uint16_t);
 extern uint16_t ext4_superblock_get_magic(ext4_superblock_t *);
 extern uint16_t ext4_superblock_get_state(ext4_superblock_t *);
+extern void ext4_superblock_set_state(ext4_superblock_t *, uint16_t);
 extern uint16_t ext4_superblock_get_errors(ext4_superblock_t *);
+extern void ext4_superblock_set_errors(ext4_superblock_t *, uint16_t);
 extern uint16_t ext4_superblock_get_minor_rev_level(ext4_superblock_t *);
+extern void ext4_superblock_set_minor_rev_level(ext4_superblock_t *, uint16_t);
 extern uint32_t ext4_superblock_get_last_check_time(ext4_superblock_t *);
+extern void ext4_superblock_set_last_check_time(ext4_superblock_t *, uint32_t);
 extern uint32_t ext4_superblock_get_check_interval(ext4_superblock_t *);
+extern void ext4_superblock_set_check_interval(ext4_superblock_t *, uint32_t);
 extern uint32_t ext4_superblock_get_creator_os(ext4_superblock_t *);
+extern void ext4_superblock_set_creator_os(ext4_superblock_t *, uint32_t);
 extern uint32_t ext4_superblock_get_rev_level(ext4_superblock_t *);
-
-/*
-uint16_t s_def_resuid; // Default uid for reserved blocks
-uint16_t s_def_resgid; // Default gid for reserved blocks
-*/
-
+extern void ext4_superblock_set_rev_level(ext4_superblock_t *, uint32_t);
+extern uint16_t ext4_superblock_get_def_resuid(ext4_superblock_t *);
+extern void ext4_superblock_set_def_resuid(ext4_superblock_t *, uint16_t);
+extern uint16_t ext4_superblock_get_def_resgid(ext4_superblock_t *);
+extern void ext4_superblock_set_def_resgid(ext4_superblock_t *, uint16_t);
 extern uint32_t ext4_superblock_get_first_inode(ext4_superblock_t *);
+extern void ext4_superblock_set_first_inode(ext4_superblock_t *, uint32_t);
 extern uint16_t ext4_superblock_get_inode_size(ext4_superblock_t *);
+extern void ext4_superblock_set_inode_size(ext4_superblock_t *, uint16_t);
 extern uint16_t ext4_superblock_get_block_group_number(ext4_superblock_t *);
+extern void ext4_superblock_set_block_group_number(ext4_superblock_t *, uint16_t);
 extern uint32_t	ext4_superblock_get_features_compatible(ext4_superblock_t *);
+extern void	ext4_superblock_set_features_compatible(ext4_superblock_t *, uint32_t);
 extern uint32_t	ext4_superblock_get_features_incompatible(ext4_superblock_t *);
+extern void	ext4_superblock_set_features_incompatible(ext4_superblock_t *, uint32_t);
 extern uint32_t	ext4_superblock_get_features_read_only(ext4_superblock_t *);
+extern void	ext4_superblock_set_features_read_only(ext4_superblock_t *, uint32_t);
 
 /*
@@ -251,5 +275,4 @@
 */
 extern uint32_t* ext4_superblock_get_hash_seed(ext4_superblock_t *);
-
 /*
 uint8_t s_def_hash_version; // Default hash version to use
@@ -258,4 +281,5 @@
 
 extern uint16_t ext4_superblock_get_desc_size(ext4_superblock_t *);
+extern void ext4_superblock_set_desc_size(ext4_superblock_t *, uint16_t);
 
 /*
@@ -268,4 +292,5 @@
 */
 extern uint32_t ext4_superblock_get_flags(ext4_superblock_t *);
+extern void ext4_superblock_set_flags(ext4_superblock_t *, uint32_t);
 /*
 uint16_t s_raid_stride; // RAID stride
