 private let _contextSpecificName        = UnsafePointer<Void>((_contextSpecificNameString as NSString).UTF8String);
 
 ///
+/// Stores the binding context for the current queue
+///
+private class QueueBindingContext {
+    var context: BindingContext;
+    
+    init(context: BindingContext) {
+        self.context = context;
+    }
+}
+
+///
 /// The binding context is used to keep track of what bindings are being accessed
 ///
 public class BindingContext {

        
        // Create a queue to use the context in
        let queue       = dispatch_queue_create("io.logicalshift.binding", nil);
        let retained    = Unmanaged<BindingContext>.passRetained(newContext).toOpaque();
        
        dispatch_queue_set_specific(queue, _contextSpecificName, UnsafeMutablePointer<Void>(retained), { context in
            // Release the context
            Unmanaged<BindingContext>.fromOpaque(COpaquePointer(context)).release();
        });
        
        return queue;

    private init() {
    }
    
    private static var currentStorage: QueueBindingContext? {
        @inline(__always)
        get {
            // Get the context pointer from the queue
            let unmanagedContext = dispatch_get_specific(_contextSpecificName);
