 }
 
 public struct WeakDictionaryReference<Value : AnyObject> {
-    fileprivate weak var value: Value?
+    private weak var referencedValue: Value?
+    
+    fileprivate init(value: Value) {
+        referencedValue = value
+    }
+    
+    public var value: Value? {
+        get {
+            return referencedValue
+        }
+    }
 }
 
 private let nilKeyHash = UUID().hashValue
 
 public struct WeakDictionaryKey<Key : AnyObject & Hashable, Value : AnyObject> : Hashable {
     
-    fileprivate weak var baseKey: Key?
+    private weak var baseKey: Key?
     private let hash: Int
     private var retainedValue: Value?
     

        let subStorage = storage[bounds.lowerBound ..< bounds.upperBound]
        var newStorage = WeakDictionary<WeakDictionaryKey<Key, Value>, Value>()
        
        subStorage.filter({ key, value in return key.baseKey != nil && value.value != nil }).forEach({
            key, value in
            newStorage[key] = value.value
        })

    public var hashValue: Int {
        return baseKey != nil ? hash : nilKeyHash
    }
    
    public var key: Key? {
        get {
            return baseKey
        }
    }
}
