Index: uspace/lib/ext2/libext2_filesystem.c
===================================================================
--- uspace/lib/ext2/libext2_filesystem.c	(revision ce13577fe1bbc2e3cc10732baad6a223d0f5a27b)
+++ uspace/lib/ext2/libext2_filesystem.c	(revision 5352d72a1c169f0bcb66fde90819e94f703d561a)
@@ -225,5 +225,5 @@
 	}
 	
-	newref->inode = newref->block->data + offset_in_group;
+	newref->inode = newref->block->data + (offset_in_group*inode_size);
 	
 	*ref = newref;
Index: uspace/lib/ext2/libext2_inode.c
===================================================================
--- uspace/lib/ext2/libext2_inode.c	(revision ce13577fe1bbc2e3cc10732baad6a223d0f5a27b)
+++ uspace/lib/ext2/libext2_inode.c	(revision 5352d72a1c169f0bcb66fde90819e94f703d561a)
@@ -38,4 +38,119 @@
 #include <byteorder.h>
 
+/**
+ * Get mode stored in the inode
+ * 
+ * @param inode pointer to inode
+ */
+inline uint16_t ext2_inode_get_mode(ext2_inode_t *inode)
+{
+	return uint16_t_le2host(inode->mode);
+}
+
+/**
+ * Get uid this inode is belonging to
+ * 
+ * @param inode pointer to inode
+ */
+inline uint32_t ext2_inode_get_user_id(ext2_inode_t *inode)
+{
+	// TODO: use additional OS specific bits
+	return uint16_t_le2host(inode->user_id);
+}
+
+/**
+ * Get size of file
+ * 
+ * @param inode pointer to inode
+ */
+inline uint32_t ext2_inode_get_size(ext2_inode_t *inode)
+{
+	// TODO: Directory ACLS!
+	return uint16_t_le2host(inode->size);
+}
+
+/**
+ * Get gid this inode belongs to
+ * 
+ * @param inode pointer to inode
+ */
+inline uint32_t ext2_inode_get_group_id(ext2_inode_t *inode)
+{
+	// TODO: use additional OS specific bits
+	return uint16_t_le2host(inode->group_id);
+}
+
+/**
+ * Get usage count (i.e. hard link count)
+ * A value of 1 is common, while 0 means that the inode should be freed
+ * 
+ * @param inode pointer to inode
+ */
+inline uint16_t ext2_inode_get_usage_count(ext2_inode_t *inode)
+{
+	return uint16_t_le2host(inode->usage_count);
+}
+
+/**
+ * Get size of inode in 512 byte blocks
+ * TODO: clarify this
+ * 
+ * @param inode pointer to inode
+ */
+inline uint32_t ext2_inode_get_reserved_512_blocks(ext2_inode_t *inode)
+{
+	return uint32_t_le2host(inode->reserved_512_blocks);
+}
+
+/**
+ * Get inode flags
+ * 
+ * @param inode pointer to inode
+ */
+
+inline uint32_t ext2_inode_get_flags(ext2_inode_t *inode) {
+	return uint32_t_le2host(inode->flags);
+}
+
+/**
+ * Get direct block ID
+ * 
+ * @param inode pointer to inode
+ * @param idx Index to block. Valid values are 0 <= idx < 12
+ */
+inline uint32_t ext2_inode_get_direct_block(ext2_inode_t *inode, uint8_t idx)
+{
+	return uint32_t_le2host(inode->direct_blocks[idx]);
+}
+
+/**
+ * Get indirect block ID
+ * 
+ * @param inode pointer to inode
+ */
+inline uint32_t ext2_inode_get_single_indirect_block(ext2_inode_t *inode)
+{
+	return uint32_t_le2host(inode->single_indirect_block);
+}
+
+/**
+ * Get double indirect block ID
+ * 
+ * @param inode pointer to inode
+ */
+inline uint32_t ext2_inode_get_double_indirect_block(ext2_inode_t *inode)
+{
+	return uint32_t_le2host(inode->double_indirect_block);
+}
+
+/**
+ * Get triple indirect block ID
+ * 
+ * @param inode pointer to inode
+ */
+inline uint32_t ext2_inode_get_triple_indirect_block(ext2_inode_t *inode)
+{
+	return uint32_t_le2host(inode->triple_indirect_block);
+}
 
 
Index: uspace/lib/ext2/libext2_inode.h
===================================================================
--- uspace/lib/ext2/libext2_inode.h	(revision ce13577fe1bbc2e3cc10732baad6a223d0f5a27b)
+++ uspace/lib/ext2/libext2_inode.h	(revision 5352d72a1c169f0bcb66fde90819e94f703d561a)
@@ -55,8 +55,29 @@
 } ext2_inode_t;
 
+#define EXT2_INODE_MODE_FIFO		0x1000
+#define EXT2_INODE_MODE_CHARDEV		0x2000
+#define EXT2_INODE_MODE_DIRECTORY	0x4000
+#define EXT2_INODE_MODE_BLOCKDEV	0x6000
+#define EXT2_INODE_MODE_FILE		0x8000
+#define EXT2_INODE_MODE_SOFTLINK	0xA000
+#define EXT2_INODE_MODE_SOCKET		0xC000
+#define EXT2_INODE_MODE_ACCESS_MASK	0x0FFF
+
 typedef struct ext2_inode_ref {
 	block_t *block; // Reference to a block containing this inode
 	ext2_inode_t *inode;
 } ext2_inode_ref_t;
+
+inline uint16_t ext2_inode_get_mode(ext2_inode_t *);
+inline uint32_t ext2_inode_get_user_id(ext2_inode_t *);
+inline uint32_t ext2_inode_get_size(ext2_inode_t *);
+inline uint32_t ext2_inode_get_group_id(ext2_inode_t *);
+inline uint16_t ext2_inode_get_usage_count(ext2_inode_t *);
+inline uint32_t ext2_inode_get_reserved_512_blocks(ext2_inode_t *);
+inline uint32_t ext2_inode_get_flags(ext2_inode_t *);
+inline uint32_t ext2_inode_get_direct_block(ext2_inode_t *, uint8_t);
+inline uint32_t ext2_inode_get_single_indirect_block(ext2_inode_t *);
+inline uint32_t ext2_inode_get_double_indirect_block(ext2_inode_t *);
+inline uint32_t ext2_inode_get_triple_indirect_block(ext2_inode_t *);
 
 
