 
     public let unixType: UnixType?
 
-    /**
-     Owner's ID.
-     */
-    public private(set) var ownerID: Int?
-
-    /**
-     Owner's group ID.
-     */
-    public private(set) var groupID: Int?
-
-    /**
-     The most recent modification time of the original file or directory.
-     */
-    public private(set) var modificationTime: Date
-
-    /**
-     Owner's user name.
-     */
-    public private(set) var ownerUserName: String?
-
-    /**
-     Owner's group name.
-     */
-    public private(set) var ownerGroupName: String?
+    /// The most recent access time of the original file or directory (PAX only).
+    public let accessTime: Date?
+    
+    /// The most recent modification time of the original file or directory.
+    public let modificationTime: Date
+    
+    /// The creation time of the original file or directory (PAX only).
+    public let creationTime: Date?
+    
+    /// Owner's ID.
+    public let ownerID: Int?
+    
+    /// Owner's group ID.
+    public let groupID: Int?
+
+    /// Owner's user name.
+    public let ownerUserName: String?
+
+    /// Owner's group name.
+    public let ownerGroupName: String?
 
     public let deviceMajorNumber: Int?
 
     public let deviceMinorNumber: Int?
 
-    /// The most recent access time of the original file or directory (PAX only).
-    public private(set) var accessTime: Date?
-
-    /// The creation time of the original file or directory (PAX only).
-    public private(set) var creationTime: Date?
-
     /// Name of the character set used to encode entry's data (PAX only).
-    public private(set) var charset: String?
+    public let charset: String?
 
     /// Comment associated with the entry (PAX only).
-    public private(set) var comment: String?
+    public let comment: String?
 
     // TODO: Describe order in which formats' features are used to set this property.
     /// Path to a linked file for symbolic link entry.
     public let linkName: String?
-
-    /// Other entries from PAX extended headers.
-    public private(set) var unknownExtendedHeaderEntries: [String: String] = [:]
 
     let isGlobalExtendedHeader: Bool
     let isLocalExtendedHeader: Bool

        // Owner's user ID
        guard let ownerAccountID = Int(try pointerData.nullSpaceEndedAsciiString(cutoff: 8))
            else { throw TarError.fieldIsNotNumber }
        ownerID = ownerAccountID

        // Group's user ID
        guard let groupAccountID = Int(try pointerData.nullSpaceEndedAsciiString(cutoff: 8))
            else { throw TarError.fieldIsNotNumber }
        groupID = groupAccountID

        // File size
        guard let octalFileSize = Int(try pointerData.nullSpaceEndedAsciiString(cutoff: 12))
            else { throw TarError.fieldIsNotNumber }
        size = octalFileSize.octalToDecimal()

        // Modification time
        guard let octalMtime = Int(try pointerData.nullSpaceEndedAsciiString(cutoff: 12))
            else { throw TarError.fieldIsNotNumber }
        modificationTime = Date(timeIntervalSince1970: TimeInterval(octalMtime.octalToDecimal()))

        // Checksum
        guard let octalChecksum = Int(try pointerData.nullSpaceEndedAsciiString(cutoff: 8))

            else { throw TarError.wrongHeaderChecksum }

        // File type
        let fileTypeIndicator = pointerData.byte()
        self.isGlobalExtendedHeader = fileTypeIndicator == 103 // "g"
        self.isLocalExtendedHeader = fileTypeIndicator == 120 // "x"
