 
 	@available(iOS 10.0, tvOS 10.0, *)
 	var storeDescription: NSPersistentStoreDescription {
-		let sd = NSPersistentStoreDescription(url: storeURL)
-		//	use options that allow automatic model migrations
-		sd.setOption(true as NSObject?, forKey: NSMigratePersistentStoresAutomaticallyOption)
-		sd.shouldInferMappingModelAutomatically = true
-		return sd
+		switch storeType {
+		case NSSQLiteStoreType:
+			guard let storeURL = storeURL else { fatalError("E | StoreURL missing. It's required when using SQLiteStoreType.")}
+			let sd = NSPersistentStoreDescription(url: storeURL)
+			//	use options that allow automatic model migrations
+			sd.setOption(true as NSObject?, forKey: NSMigratePersistentStoresAutomaticallyOption)
+			sd.shouldInferMappingModelAutomatically = true
+			return sd
+
+		case NSInMemoryStoreType:
+			let sd = NSPersistentStoreDescription()
+			sd.type = storeType
+			//	use options that allow automatic model migrations
+			sd.setOption(true as NSObject?, forKey: NSMigratePersistentStoresAutomaticallyOption)
+			sd.shouldInferMappingModelAutomatically = true
+			return sd
+
+		default:
+			fatalError("E | Must use either `NSSQLiteStoreType` (\( NSSQLiteStoreType )) or `NSInMemoryStoreType` (\( NSInMemoryStoreType )) as storeType.")
+			break
+		}
 	}
 
 	/// Verifies that store URL path exists. It will create all the intermediate directories specified in the path.

	/// Managed Model instance used by the stack
	public private(set) var dataModel: NSManagedObjectModel!

	/// Full URL to the location of the SQLite file
	public private(set) var storeURL: URL!

	/// Instantiates 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.
	///
	/// - returns: Instance of RTCoreDataStack
	public init(withDataModelNamed dataModel: String? = nil, storeURL: URL? = nil, callback: @escaping Callback = {}) {
		DispatchQueue.main.async { [unowned self] in
			self.setup(withDataModelNamed: dataModel, storeURL: storeURL, callback: callback)
		}

			psc.addPersistentStore(with: storeDescription, completionHandler: { [unowned self] (sd, error) in
				if let error = error {
					let log = String(format: "E | %@:%@/%@ Error adding persistent stores to coordinator %@:\n%@",
									 String(describing: self), #file, #line, String(describing: psc), error.localizedDescription)
					fatalError(log)
				}
				if let postConnect = postConnect {
