 	deinit {
 		NotificationCenter.default.removeObserver(self)
 	}
+
+	fileprivate var callback: Callback?
+	fileprivate var setupFlags: SetupFlags = .none
+}
+
+
+
+private struct SetupFlags: OptionSet {
+	public let rawValue: Int
+	public init(rawValue:Int) {
+		self.rawValue = rawValue
+	}
+
+	static let none = SetupFlags(rawValue: 0)
+	static let base = SetupFlags(rawValue: 1)
+	static let mainPSC = SetupFlags(rawValue: 2)
+	static let writePSC = SetupFlags(rawValue: 4)
+
+	static let done : SetupFlags = [.base, .mainPSC, .writePSC]
 }
 
 

fileprivate typealias Setup = RTCoreDataStack
@available(iOS 8.4, watchOS 2.0, tvOS 9.0, *)
fileprivate extension Setup {

	/// Sets up the the whole stack, giving you full control over what model to use and where the resulting file should be.
	///
	/// - parameter dataModelName: String representing the name (without extension) of the model file to use. If not supplied,
	/// - parameter storeURL: Full URL where to create the .sqlite file. Must include the file at the end as well (can't be just directory). If not supplied, user's Documents directory will be used + alphanumerics from app's name. Possible use: when you want to setup the store file into completely custom location. Like say shared container in App Group.
	/// - parameter callback: A block to call once setup is completed. RTCoreDataStack.isReady is set to true before callback is executed.
	func setup(withDataModelNamed dataModelName: String? = nil, storeURL: URL? = nil, callback: Callback = {_ in}) {

		let url: URL
		if let storeURL = storeURL {	//	if the target URL is supplied

		isReady = true

		//	report back
		setupDone(flags: .base)
	}

	/// Attach the persistent stores to the supplied Persistent Store Coordinator.
