diff --git a/elf.cabal b/elf.cabal
--- a/elf.cabal
+++ b/elf.cabal
@@ -1,5 +1,5 @@
 Name:          elf
-Version:       0.25
+Version:       0.26
 License:       BSD3
 License-file:  LICENSE
 Category:      Data
@@ -8,7 +8,7 @@
 Maintainer:    Erik Charlebois <erikcharlebois@gmail.com>
 Stability:     unstable
 Cabal-Version: >= 1.6
-Homepage:      http://code.fac9.com/elf/
+Homepage:      http://github.com/erikcharlebois/elf
 Build-Depends: base
 Build-Type:    Custom
 Synopsis:      Parser for ELF object format.
diff --git a/src/Data/Elf.hs b/src/Data/Elf.hs
--- a/src/Data/Elf.hs
+++ b/src/Data/Elf.hs
@@ -576,15 +576,16 @@
 
 
 parseElfSegmentEntry :: ElfClass -> ElfReader -> B.ByteString -> Get ElfSegment
-parseElfSegmentEntry elf_class er elf_file =
-  do p_type   <- parseElfSegmentType  `fmap` getWord32 er
+parseElfSegmentEntry elf_class er elf_file = case elf_class of
+  ELFCLASS64 -> do
+     p_type   <- parseElfSegmentType  `fmap` getWord32 er
      p_flags  <- parseElfSegmentFlags `fmap` getWord32 er
-     p_offset <- getWord
-     p_vaddr  <- getWord
-     p_paddr  <- getWord
-     p_filesz <- getWord
-     p_memsz  <- getWord
-     p_align  <- getWord
+     p_offset <- getWord64 er
+     p_vaddr  <- getWord64 er
+     p_paddr  <- getWord64 er
+     p_filesz <- getWord64 er
+     p_memsz  <- getWord64 er
+     p_align  <- getWord64 er
      return ElfSegment
        { elfSegmentType     = p_type
        , elfSegmentFlags    = p_flags
@@ -595,10 +596,24 @@
        , elfSegmentMemSize  = p_memsz
        }
 
-  where getWord = case elf_class of
-                    ELFCLASS64 -> getWord64 er
-                    ELFCLASS32 -> fromIntegral `fmap` getWord32 er
-
+  ELFCLASS32 -> do
+     p_type   <- parseElfSegmentType  `fmap` getWord32 er
+     p_offset <- fromIntegral `fmap` getWord32 er
+     p_vaddr  <- fromIntegral `fmap` getWord32 er
+     p_paddr  <- fromIntegral `fmap` getWord32 er
+     p_filesz <- fromIntegral `fmap` getWord32 er
+     p_memsz  <- fromIntegral `fmap` getWord32 er
+     p_flags  <- parseElfSegmentFlags `fmap` getWord32 er
+     p_align  <- fromIntegral `fmap` getWord32 er
+     return ElfSegment
+       { elfSegmentType     = p_type
+       , elfSegmentFlags    = p_flags
+       , elfSegmentVirtAddr = p_vaddr
+       , elfSegmentPhysAddr = p_paddr
+       , elfSegmentAlign    = p_align
+       , elfSegmentData     = B.take (fromIntegral p_filesz) $ B.drop (fromIntegral p_offset) elf_file
+       , elfSegmentMemSize  = p_memsz
+       }
 
 data ElfSegmentFlag
   = PF_X        -- ^ Execute permission
