     
     func testStackCreation_OverrideStoreIfModelIncompatible() throws {
         
-        let storePrefix = String(describing: TestModel1.self)
+        let model       = TestModel1()
+        let prefix      = String(describing: type(of: model.self))
         let storeType   = NSSQLiteStoreType
         
         // Initialize model 3 (no configurations), with model 1s name
-        let _ = try CoreDataStackType(managedObjectModel: TestModel3(), storeNamePrefix: storePrefix)
+        let _ = try CoreDataStackType(managedObjectModel: TestModel3(), storeNamePrefix: prefix)
         
         var options: [AnyHashable: Any] = defaultStoreOptions
         options[OverwriteIncompatibleStoreOption] = true
 
         // Now use model 1 with model 1s name
-        let _ = try CoreDataStackType(managedObjectModel: TestModel1(), storeNamePrefix: storePrefix, configurationOptions: [defaultModelConfigurationName: (storeType: storeType, storeOptions: options, migrationManager: nil)])
-        
-        XCTAssertTrue(try persistentStoreExists(storePrefix: storePrefix, storeType: storeType, configuration: nil))
+        let _ = try CoreDataStackType(managedObjectModel: model, storeNamePrefix: prefix, configurationOptions: [defaultModelConfigurationName: (storeType: storeType, storeOptions: options, migrationManager: nil)])
+        
+        XCTAssertTrue(try persistentStoreExists(storePrefix: prefix, storeType: storeType, configuration: nil))
     }
     
     func testConstruction_WithAsyncErrorHandler() {
         
-        let storePrefix = String(describing: TestModel1.self)
-        
-        do {
-            let _ = try CoreDataStackType(managedObjectModel: TestModel1(), storeNamePrefix: storePrefix, asyncErrorBlock: { (error) -> Void in
+        let model  = TestModel1()
+        let prefix = String(describing: type(of: model.self))
+        
+        do {
+            let _ = try CoreDataStackType(managedObjectModel: model, storeNamePrefix: prefix, asyncErrorBlock: { (error) -> Void in
                 // Async Error block
                 print(error.localizedDescription)
             })
             
-            XCTAssertTrue(try persistentStoreExists(storePrefix: storePrefix, storeType: defaultStoreType))
+            XCTAssertTrue(try persistentStoreExists(storePrefix: prefix, storeType: defaultStoreType))
         } catch {
             XCTFail(error.localizedDescription)
         }

    
    func testConstruction_MultiConfiguration_SQLiteStoreType() throws {
        
        let storePrefix = String(describing: TestModel2.self)
        
        var options: [AnyHashable: Any] = defaultStoreOptions
        options[OverwriteIncompatibleStoreOption] = true
        
        do {
            /// TestModel2 has multiple configurations and should will produce multiple persistent stores.
            let _ = try CoreDataStackType(managedObjectModel: TestModel2(),
                                          storeNamePrefix: storePrefix,
                                          configurationOptions: ["PersistentEntities": (storeType: NSSQLiteStoreType, storeOptions: options, migrationManager: nil),
                                                                 "TransientEntities":  (storeType: NSSQLiteStoreType, storeOptions: options, migrationManager: nil)])
            
            XCTAssertTrue(try persistentStoreExists(storePrefix: storePrefix, storeType: NSSQLiteStoreType, configuration: "PersistentEntities"))
            XCTAssertTrue(try persistentStoreExists(storePrefix: storePrefix, storeType: NSSQLiteStoreType, configuration: "TransientEntities"))
        } catch {
            XCTFail(error.localizedDescription)
        }

    
    func testCRUD () throws {
        
        let model  = TestModel1()
        let prefix = String(describing: type(of: model.self))
        
        let coreDataStack = try CoreDataStackType(managedObjectModel: model, storeNamePrefix: prefix)
        
        let editContext       = coreDataStack.editContext()
        let mainThreadContext = coreDataStack.mainThreadContext()
