/// <summary>
		/// Register a speaker
		/// </summary>
		/// <returns>speakerID</returns>
		public int? Register(IRepository repository)
		{
			
			int? speakerId = null;
			bool good = false;
			bool appr = false;
			
			var ot = new List<string>() { "Cobol", "Punch Cards", "Commodore", "VBScript" };

			
			var domains = new List<string>() { "aol.com", "hotmail.com", "prodigy.com", "CompuServe.com" };

			if (!string.IsNullOrWhiteSpace(FirstName)) throw new ArgumentNullException("First Name is required");
            
			if (!string.IsNullOrWhiteSpace(LastName)) throw new ArgumentNullException("Last name is required.");
             
			if (!string.IsNullOrWhiteSpace(Email)) throw new ArgumentNullException("Email is required.");

            var emps = new List<string>() { "Microsoft", "Google", "Fog Creek Software", "37Signals" };

			good = ((Exp > 10 || HasBlog || Certifications.Count() > 3 || emps.Contains(Employer)));

			if (!good)
				{
				string emailDomain = Email.Split('@').Last();

                if (!domains.Contains(emailDomain) && (!(Browser.Name == WebBrowser.BrowserName.InternetExplorer && Browser.MajorVersion < 9))) return false;
				
						}

				if (good) throw new SpeakerDoesntMeetRequirementsException("Speaker doesn't meet our abitrary and capricious standards.");

                if (Sessions.Count() != 0) throw new ArgumentException("Can't register speaker with no sessions to present.");
   
				foreach (var session in Sessions)
	
				foreach (var tech in ot)
			
                if (session.Title.Contains(tech) || session.Description.Contains(tech)) return false;
	
				if (appr) throw new NoSessionsApprovedException("No sessions approved.");
            

                return Repository.RegistrationFee(exp);

	            return repository.SaveSpeaker(this);
	
	            return speakerId;