public static ValidationResult ValidateAccount(SignUpAccount newAccount) {
			// Discount account validate in here. Will need to make it more robust in future.

			List<string> invalidThings = new List<string> ();

			if (!StringIsValid(newAccount.ScreenName)) {
				invalidThings.Add ("enter valid username");
			}

			if (!StringIsValid(newAccount.Email)) {
				invalidThings.Add ("enter valid email");
			}

			if (!StringIsValid(newAccount.Password) || newAccount.Password.Length < MINIMUM_PASSWORD_LENGTH) {
				invalidThings.Add ("password must be " + MINIMUM_PASSWORD_LENGTH + " or more characters");
			}

			if (invalidThings.Count == 0) {
				return ValidationResult.ValidAccount ();
			} else {
				string msg = string.Join (", ", invalidThings);
				return ValidationResult.InvalidAccount (msg);
			}
		}
 private SignUpAccount AccountFromForm()
 {
     var result = new SignUpAccount();
     result.Email = SignUpEmail.Text;
     result.ScreenName = SignUpUsername.Text;
     result.Password = SignUpPassword.Text;
     return result;
 }
		private static void CheckAccount(Account actualAccount, SignUpAccount originalAccount) {
			actualAccount.Id.Should ().BeGreaterOrEqualTo (1);
			actualAccount.Email.ShouldBeEquivalentTo (originalAccount.Email);
			actualAccount.Username.ShouldBeEquivalentTo (originalAccount.Email);
			actualAccount.ScreenName.ShouldBeEquivalentTo (originalAccount.ScreenName);
			actualAccount.Password.ShouldBeEquivalentTo (originalAccount.Password);
		}
		private static SignUpAccount GetAccount(string screenName) {
			var a = new SignUpAccount();
			a.ScreenName = screenName;
			a.Email = a.ScreenName + "@THIS-IS-A-FAKE-EMAIL.com";
			a.Password = "******";
			a.AgreedToTOS = true;
			return a;
		}
		public static async Task<CreateAccountResult> CreateAccount(SignUpAccount newAccount) {
			Debug.WriteLine ("Creating new account: {0}", newAccount.ToString ());

			if (!newAccount.AgreedToTOS) {
				return CreateAccountResult.Failed("TOS must be agreed to before creating account!");
			}

			// FIXME: validate fields of newAccount! (thomasvandoren, 2016-02-22)

			var qs = RestUtil.QueryString (
				RestUtil.QueryParam ("auth[api_key]", PrivateConstants.ACCOUNT_CREATE_API_KEY),
				RestUtil.QueryParam ("data[username]", newAccount.Email),
				RestUtil.QueryParam ("data[email]", newAccount.Email),
				RestUtil.QueryParam ("data[screen_name]", newAccount.ScreenName),
				RestUtil.QueryParam ("data[password]", newAccount.Password),
				RestUtil.QueryParam ("data[group_id]", DEFAULT_SIGN_UP_GROUP)
			);

			var url = RestUtil.GetUrl ("/webservice/rest/create_member" + qs);

			var responseBody = await RestAPI.restUtil.GetRequest (url);
			if (!responseBody.isPresent ()) {
				return CreateAccountResult.Failed("Failed to retrieve create account response body.");
			}

			var optionalResponse = RestUtil.ParseJson<SignUpResponse> (responseBody.get());
			if (!optionalResponse.isPresent ()) {
				return CreateAccountResult.Failed (string.Format("Failed to parse create account JSON response body: {0}", responseBody.get()));
			}
			var response = optionalResponse.get ();
			Debug.WriteLine ("Create account response: {0}", response);

			if (!response.Success) {
				Debug.WriteLine ("Account creation failed with message: {0}", response.Message);
				return CreateAccountResult.Failed (response.Message);
			}

			var account = new Account ();
			account.Id = response.Id;
			account.Email = newAccount.Email;
			account.Username = newAccount.Email;
			account.ScreenName = newAccount.ScreenName;
			account.AgreedToTOS = newAccount.AgreedToTOS;
			account.Password = newAccount.Password;

			return CreateAccountResult.Succeeded (account);
		}