             throw DeserializationError.ParseError
         }
         
-        storage = (data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8], data[9], data[10], data[11])
+        self._storage = data
     }
     
-    public init(raw: Raw) {
-        storage = raw
+    public init(raw storage: Raw) {
+        self._storage = [storage.0, storage.1, storage.2, storage.3, storage.4, storage.5, storage.6, storage.7, storage.8, storage.9, storage.10, storage.11]
     }
     
     public init(bytes data: [UInt8]) throws {
         guard data.count == 12 else {
             throw DeserializationError.InvalidElementSize
         }
-        
-        storage = (data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8], data[9], data[10], data[11])
+
+        self._storage = data
     }
     
     public var hexString: String {
-        let data = [storage.0, storage.1, storage.2, storage.3, storage.4, storage.5, storage.6, storage.7, storage.8, storage.9, storage.10, storage.11]
-        return data.map {
+        return _storage.map {
             var s = String($0, radix: 16, uppercase: false)
             while s.characters.count < 2 {
                 s = "0" + s

    #endif
    private static var counter: Int16 = 0
    
    public var storage: Raw
    
    /// Generate a new random ObjectId.
    public init() {

        data += ObjectId.counter.bytes
        ObjectId.counter += 1
        
        self._storage = data
    }
    
    /// Initialize a new ObjectId from given Hexadecimal string, such as "0123456789abcdef01234567".
