diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,11 @@
+## 6.2.0 (2018-05-08)
+
+* Remove field prefixes from `DIDerivedType`, `DIBasicType` and
+  `DISubroutineType` to make the API consistent with the other debug
+  metadata types.
+* Change the type of the scope fields in `DIModule` and `DINamespace`
+  to `Maybe (MDRef DIScope)` to reflect that they can be optional.
+
 ## 6.1.1 (2018-05-06)
 
 * Fix the source distribution by adding missing files to extra-source-files.
diff --git a/llvm-hs.cabal b/llvm-hs.cabal
--- a/llvm-hs.cabal
+++ b/llvm-hs.cabal
@@ -1,5 +1,5 @@
 name: llvm-hs
-version: 6.1.1
+version: 6.2.0
 license: BSD3
 license-file: LICENSE
 author: Anthony Cowley, Stephen Diehl, Moritz Kiefer <moritz.kiefer@purelyfunctional.org>, Benjamin S. Scarlet
@@ -75,7 +75,7 @@
     template-haskell >= 2.5.0.0,
     containers >= 0.4.2.1,
     array >= 0.4.0.0,
-    llvm-hs-pure == 6.1.*
+    llvm-hs-pure == 6.2.*
   hs-source-dirs: src
   default-extensions:
     NoImplicitPrelude
diff --git a/src/LLVM/Internal/Operand.hs b/src/LLVM/Internal/Operand.hs
--- a/src/LLVM/Internal/Operand.hs
+++ b/src/LLVM/Internal/Operand.hs
@@ -542,19 +542,19 @@
 
 instance EncodeM EncodeAST A.DIBasicType (Ptr FFI.DIBasicType) where
   encodeM A.BasicType {..} = do
-    tag <- encodeM typeTag
-    typeName <- encodeM typeName
-    typeEncoding <- encodeM typeEncoding
+    tag <- encodeM tag
+    name <- encodeM name
+    encoding <- encodeM encoding
     Context c <- gets encodeStateContext
-    liftIO (FFI.getDIBasicType c tag typeName sizeInBits alignInBits typeEncoding)
+    liftIO (FFI.getDIBasicType c tag name sizeInBits alignInBits encoding)
 
 
 instance EncodeM EncodeAST A.DISubroutineType (Ptr FFI.DISubroutineType) where
   encodeM A.SubroutineType {..} = do
-    flags <- encodeM typeFlags
-    types <- encodeM typeTypeArray
+    flags <- encodeM flags
+    types <- encodeM typeArray
     Context c <- gets encodeStateContext
-    liftIO (FFI.getDISubroutineType c flags typeCC types)
+    liftIO (FFI.getDISubroutineType c flags cc types)
 
 instance DecodeM DecodeAST A.DISubroutineType (Ptr FFI.DISubroutineType) where
   decodeM p = do
@@ -562,23 +562,23 @@
     cc <-  liftIO (FFI.getSubroutineCC p)
     arr <- decodeM =<< liftIO (FFI.getSubroutineTypeArray p)
     pure A.SubroutineType
-      { A.typeFlags = flags
-      , A.typeCC = cc
-      , A.typeTypeArray = arr
+      { A.flags = flags
+      , A.cc = cc
+      , A.typeArray = arr
       }
 
 instance EncodeM EncodeAST A.DIDerivedType (Ptr FFI.DIDerivedType) where
   encodeM A.DerivedType {..} = do
-    tag <- encodeM derivedTag
-    name <- encodeM derivedName
-    file <- encodeM derivedFile
-    line <- encodeM derivedLine
-    scope <- encodeM derivedScope
-    type' <- encodeM derivedBaseType
-    (addrSpace, addrSpacePresent) <- encodeM derivedAddressSpace
-    flags <- encodeM derivedFlags
+    tag <- encodeM tag
+    name <- encodeM name
+    file <- encodeM file
+    line <- encodeM line
+    scope <- encodeM scope
+    type' <- encodeM baseType
+    (addrSpace, addrSpacePresent) <- encodeM addressSpace
+    flags <- encodeM flags
     Context c <- gets encodeStateContext
-    FFI.upCast <$> liftIO (FFI.getDIDerivedType c tag name file line scope type' sizeInBits alignInBits derivedOffsetInBits addrSpace addrSpacePresent flags)
+    FFI.upCast <$> liftIO (FFI.getDIDerivedType c tag name file line scope type' sizeInBits alignInBits offsetInBits addrSpace addrSpacePresent flags)
 
 instance DecodeM DecodeAST A.DIDerivedType (Ptr FFI.DIDerivedType) where
   decodeM diTy = do
@@ -595,17 +595,17 @@
     flags <- decodeM =<< liftIO (FFI.getTypeFlags diTy')
     addressSpace <- decodeOptional (FFI.getDerivedAddressSpace diTy')
     pure A.DerivedType
-      { A.derivedTag = tag
-      , A.derivedName = name
-      , A.derivedFile = file
-      , A.derivedLine = line
-      , A.derivedScope = scope
-      , A.derivedBaseType = ty
+      { A.tag = tag
+      , A.name = name
+      , A.file = file
+      , A.line = line
+      , A.scope = scope
+      , A.baseType = ty
       , A.sizeInBits = size
       , A.alignInBits = align
-      , A.derivedOffsetInBits = offset
-      , A.derivedAddressSpace = addressSpace
-      , A.derivedFlags = flags
+      , A.offsetInBits = offset
+      , A.addressSpace = addressSpace
+      , A.flags = flags
       }
 
 genCodingInstance [t|A.DerivedTypeTag|] ''FFI.DwTag
diff --git a/test/LLVM/Test/Metadata.hs b/test/LLVM/Test/Metadata.hs
--- a/test/LLVM/Test/Metadata.hs
+++ b/test/LLVM/Test/Metadata.hs
@@ -612,6 +612,7 @@
       let mod = defaultModule
             { moduleDefinitions =
                 [ NamedMetadataDefinition "dummy" [namespaceID]
+                , NamedMetadataDefinition "dummy2" [fileID]
                 , MetadataNodeDefinition namespaceID (DINode (DIScope (DINamespace diNamespace)))
                 , MetadataNodeDefinition fileID (DINode (DIScope (DIFile diFile)))
                 ]
@@ -622,7 +623,7 @@
         fileID = MetadataNodeID 1
 
 genDINamespace :: MDRef DIScope -> Gen DINamespace
-genDINamespace scope = Namespace <$> arbitrarySbs <*> pure scope <*> arbitrary
+genDINamespace scope = Namespace <$> arbitrarySbs <*> QC.elements [Nothing, Just scope] <*> arbitrary
 
 diFlagName :: TestTree
 diFlagName =
