public async Task InitializeAsync(Setup item)
		{
			string defaultPostPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data/Setup/defaultPost.dxt");

			var defaultPostTask = this.GetDefaultPostContent(defaultPostPath, item.SiteDomain.Host);
			var membershipTask = this.CreateMembershipAndRole(item);

			BlogConfigurationDto configuration = new BlogConfigurationDto(item.BlogName, item.SiteDomain);
			configuration.TimeZone = TimeZoneInfo.FindSystemTimeZoneById("UTC");

			this.configurationDataService.CreateSetupConfiguration(configuration);
			this.logger.Debug("Created blog configuration.");

			//Creating default category
			this.categoryService.SaveOrUpdate(new CategoryDto
				                                  {
					                                  Name = "Various",
													  IsDefault = true
				                                  });

			this.logger.Debug("Created default category.");

			PostDto defaultPost = new PostDto();

			defaultPost.Title = "Welcome to Dexter!";
			defaultPost.Tags = new[] { "Dexter" };
			defaultPost.Categories = new[] { "Various" };
			defaultPost.Status = ItemStatus.Published;
			defaultPost.PublishAt = DateTimeOffset.Now.AsMinutes();
			defaultPost.Author = item.AdminUsername;
			defaultPost.AllowComments = true;

			await Task.WhenAll(defaultPostTask, membershipTask);

			defaultPost.Content = defaultPostTask.Result;

			this.postDataService.SaveOrUpdate(defaultPost);
			this.logger.Debug("Created default post.");
		}
		public Task CreateMembershipAndRole(Setup item)
		{
			//NOTE:The membership use a different session, so it could be runned in an async thread. Unluckily this request is not under transaction

			return Task.Run(() =>
				{
					var user = Membership.GetUser(item.AdminUsername);

					if (user == null)
					{
						// Creating user
						Membership.CreateUser(item.AdminUsername, item.AdminPassword, item.Email.Address);
						this.logger.Debug("Created admin user.");
					}

					var roles = Roles.GetAllRoles();

					if (!roles.Contains(Constants.AdministratorRole))
					{
						// Creating administrator role
						Roles.CreateRole(Constants.AdministratorRole);
						this.logger.Debug("Created administrator role.");
					}

					if (!roles.Contains(Constants.Editor))
					{
						// Creating administrator role
						Roles.CreateRole(Constants.Editor);
						this.logger.Debug("Created editor role.");
					}

					if (!roles.Contains(Constants.Moderator))
					{
						// Creating administrator role
						Roles.CreateRole(Constants.Moderator);
						this.logger.Debug("Created moderator role.");
					}

					// Adding user to role
					Roles.AddUserToRole(item.AdminUsername, Constants.AdministratorRole);
					Roles.AddUserToRole(item.AdminUsername, Constants.Editor);
					Roles.AddUserToRole(item.AdminUsername, Constants.Moderator);
					this.logger.Debug("Assigned user to administration role.");
				});
		}