 		//	then override the language with current in-app choice
 		if let languageCode = UserDefaults.languageCode {
 			comps[NSLocale.Key.languageCode.rawValue] = languageCode
-		} else {
-			//	if customer has not yet chosen anything custom, 
-			//	then default to primary language on his device
-			//	WARNING:
-			//	user language must be one of the ones available in the app
-			//	so make sure that whatever ends up as result, it actually has its own .lproj file
-			if let userPreferredLanguage = cur.languageCode {
-				comps[NSLocale.Key.languageCode.rawValue] = userPreferredLanguage
-			}
 		}
 
+		//	WARNING:
+		//	user language must be one of the ones available in the app
+		//	so make sure that whatever ends up as result, it actually has its own .lproj file
+		//	this is good moment to make sanity checks
+
 		//	finally return all of those settings combined
-		let identifier = localeIdentifier(fromComponents: comps)
+		let identifier = NSLocale.localeIdentifier(fromComponents: comps)
 		return identifier
 	}
 
+	class var identifier: String { return shared.localeIdentifier }
+}
 
-	///	This is used to to override `current` and `autoupdatingCurrent`
-	///	using `appIdentifier`
+extension NSLocale {
+
+	///	This is used to override `current`. It uses `AppLocale.identifier`
 	class var app: Locale {
-		return Locale(identifier: appIdentifier)
+		return Locale(identifier: AppLocale.identifier)
 	}
 
 


	///	Call this as early as possible in application lifecycle, say in application(_:willFinishLaunchingWithOptions:)
	static func setupInitialLanguage() {
		if let languageCode = UserDefaults.languageCode {
			enforceLanguage(code: languageCode)
			return;
		}


}

extension Locale {
	///	This should be set to the language you used as Base localization
	fileprivate static var fallbackLanguageCode: String { return "en" }


