public ActionResult Start(StartRegistrationModel startRegistrationModel)
		{
			if (_repository.GetAll<User>().Any(x => x.Username == startRegistrationModel.Username))
			{
				ModelState.AddModelError("Username", "Username is already in use");
			}

			if (_repository.GetAll<User>().Any(x => x.EmailAddress == startRegistrationModel.EmailAddress))
			{
				ModelState.AddModelError("EmailAddress", "Email address is already in use");
			}

			if (ModelState.IsValid)
			{
				var verificationCode = Cryptography.RandomString(12);
				var user = new Registration
				{
					Id = Guid.NewGuid(),
					Username = startRegistrationModel.Username,
					EmailAddress = startRegistrationModel.EmailAddress,
					Password = Cryptography.Hash(startRegistrationModel.Password),
					Expires = DateTime.UtcNow.AddDays(3),
					VerificationCode = Cryptography.Hash(verificationCode)
				};

				var registrationConfirmation = new RegistrationConfirmation
				{
					Username = startRegistrationModel.Username,
					EmailAddress = startRegistrationModel.EmailAddress,
					VerificationCode = verificationCode
				};
				_confirmationEmailer.Send(registrationConfirmation);

				_repository.SaveOrUpdate(user);

				return RedirectToAction(
					"Complete", "Registration", new { startRegistrationModel.Username, startRegistrationModel.EmailAddress });
			}

			return View(startRegistrationModel);
		}