 			}
 		}
 		
-		var staminaMax:Int {
-			get {
-				return Stamina.staminaAtLevel(level);
-			}
-		}
-		
-		var date:NSDate = NSDate.init()
-		
-		var group:UserGroup = UserGroup.A;
-		
-		init(level:Int, exp:Int, stamina:Int, date:NSDate, group:UserGroup) {
+		var staminaMax: Int {
+			get {
+				return Stamina.staminaAtLevel(level)
+			}
+		}
+		
+		var date: NSDate = NSDate.init()
+		
+		var group: UserGroup = UserGroup.A
+		
+		var preferLevel = SongLevel.Debut
+		
+		var preferEventLevel = SongLevel.Debut
+		
+		public override init() {
 			super.init()
-			self.level = level
-			self.exp = exp
-			self.stamina = stamina
-			self.date = date
-			self.group = group
-		}
-		
-		required init?(coder aDecoder: NSCoder) {
+		}
+		
+		public required init?(coder aDecoder: NSCoder) {
 			super.init()
 			_level = aDecoder.decodeIntegerForKey("level")
 			_exp = aDecoder.decodeIntegerForKey("exp")
 			_stamina = aDecoder.decodeIntegerForKey("stamina")
 			date = aDecoder.decodeObjectForKey("date") as! NSDate
 			group = UserGroup(rawValue: aDecoder.decodeIntegerForKey("group"))!
+			preferLevel = SongLevel(rawValue: aDecoder.decodeIntegerForKey("preferLevel"))!
+			preferEventLevel = SongLevel(rawValue: aDecoder.decodeIntegerForKey("preferEventLevel"))!
 		}
 
 		
-		func encodeWithCoder(aCoder: NSCoder) {
+		public func encodeWithCoder(aCoder: NSCoder) {
 			aCoder.encodeInteger(version, forKey: "version")
 			aCoder.encodeInteger(_level, forKey: "level")
 			aCoder.encodeInteger(_exp, forKey: "exp")
 			aCoder.encodeInteger(_stamina, forKey: "stamina")
-			aCoder.encodeObject(date, forKey:"date")
+			aCoder.encodeObject(date, forKey: "date")
 			aCoder.encodeInteger(group.rawValue, forKey: "group")
+			aCoder.encodeInteger(preferLevel.rawValue, forKey: "preferLevel")
+			aCoder.encodeInteger(preferEventLevel.rawValue, forKey: "preferEventLevel")
 		}
 	}
 	
 	class Helper: NSObject {
-		static let defaults = NSUserDefaults(suiteName:"group.com.niceb5y.drstm")!
+		static let defaults = NSUserDefaults(suiteName: "group.com.niceb5y.drstm")!
 		static let store = NSUbiquitousKeyValueStore.defaultStore()
 		
-		static func saveObject(value:AnyObject, forKey:String) -> Bool? {
+		static func saveObject(value: AnyObject, forKey: String) -> Bool? {
 			defaults.setObject(value, forKey: forKey)
 			return defaults.synchronize()
 		}
 		
-		static func loadObject(key:String) -> AnyObject? {
+		static func loadObject(key: String) -> AnyObject? {
 			return defaults.objectForKey(key)
 		}
 		
-		static func saveBool(value:Bool, forKey: String) -> Bool? {
+		static func saveBool(value: Bool, forKey: String) -> Bool? {
 			defaults.setBool(value, forKey: forKey)
 			return defaults.synchronize()
 		}
 		
-		static func loadBool(key:String) -> Bool? {
+		static func loadBool(key: String) -> Bool? {
 			return defaults.boolForKey(key)
 		}
 		
-		static func saveObject(value:AnyObject, forKey:String, toCloud:Bool) -> Bool? {
+		static func saveObject(value: AnyObject, forKey: String, toCloud: Bool) -> Bool? {
 			var result = Helper.saveObject(value, forKey: forKey)
 			if toCloud {
 				store.setObject(value, forKey: forKey)

			}
		}
		
		var exp:Int {
			get {
				return _exp
			}

			return result
		}
		
		static func loadBool(key: String, fromCloud: Bool) -> Bool? {
			if fromCloud {
				return store.boolForKey(key)
			} else {
