diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
index c5cb983dba..56e7e3389d 100644
--- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
+++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
@@ -2136,6 +2136,7 @@
+
diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/RegisterMember.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/RegisterMember.cshtml
new file mode 100644
index 0000000000..46422928a6
--- /dev/null
+++ b/src/Umbraco.Web.UI/Umbraco/PartialViews/Templates/RegisterMember.cshtml
@@ -0,0 +1,74 @@
+@inherits Umbraco.Web.Macros.PartialViewMacroPage
+
+@using System.Web.Mvc.Html
+@using ClientDependency.Core.Mvc
+@using umbraco.cms.businesslogic.member
+@using Umbraco.Web.UmbracoModels
+@using Umbraco.Web.UmbracoControllers
+
+@{
+ Html.EnableClientValidation();
+ Html.EnableUnobtrusiveJavaScript();
+
+ // TODO: CDF doesn't work at the moment, Shannon is looking at it
+ //Html.RequiresJs("/umbraco_client/ui/jquery.js");
+ //Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.min.js");
+ //Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.unobtrusive.min.js");
+
+ // TODO: Make a helper for this
+ var memberTypeAlias = "UmbracoMember";
+ if (Model.MacroParameters.Any() && Model.MacroParameters.ContainsKey("memberTypeAlias"))
+ {
+ var alias = Model.MacroParameters["memberTypeAlias"];
+ if (string.IsNullOrWhiteSpace(alias.ToString()) == false)
+ {
+ memberTypeAlias = alias.ToString();
+ }
+ }
+
+ var registerModel = new RegisterModel
+ {
+ MemberProperties = new List(),
+ MemberTypeAlias = memberTypeAlias
+ };
+
+ // TODO: Fill model somewhere else
+ var memberType = MemberType.GetByAlias(registerModel.MemberTypeAlias);
+ foreach (var prop in memberType.PropertyTypes.Where(memberType.MemberCanEdit))
+ {
+ registerModel.MemberProperties.Add(new UmbracoProperty {Alias = prop.Alias, Name = prop.Name, Value = string.Empty});
+ }
+}
+
+
+
+
+
+@using (Html.BeginUmbracoForm("HandleRegisterMember"))
+{
+
+}
\ No newline at end of file
diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj
index f8ea9e4b15..0674411598 100644
--- a/src/Umbraco.Web/Umbraco.Web.csproj
+++ b/src/Umbraco.Web/Umbraco.Web.csproj
@@ -293,6 +293,8 @@
+
+
diff --git a/src/Umbraco.Web/UmbracoControllers/LoginController.cs b/src/Umbraco.Web/UmbracoControllers/LoginController.cs
index f9c592eae9..0b58073c70 100644
--- a/src/Umbraco.Web/UmbracoControllers/LoginController.cs
+++ b/src/Umbraco.Web/UmbracoControllers/LoginController.cs
@@ -11,6 +11,7 @@ namespace Umbraco.Web.UmbracoControllers
[HttpPost]
public ActionResult HandleLogin([Bind(Prefix="loginModel")]LoginModel model)
{
+ // TODO: Use new Member API
if (ModelState.IsValid)
{
var m = Member.GetMemberFromLoginNameAndPassword(model.Username, model.Password);
diff --git a/src/Umbraco.Web/UmbracoControllers/RegisterController.cs b/src/Umbraco.Web/UmbracoControllers/RegisterController.cs
new file mode 100644
index 0000000000..e3b9e66d3b
--- /dev/null
+++ b/src/Umbraco.Web/UmbracoControllers/RegisterController.cs
@@ -0,0 +1,45 @@
+using System.Linq;
+using System.Web.Mvc;
+using System.Xml;
+using umbraco.BusinessLogic;
+using umbraco.cms.businesslogic.member;
+using Umbraco.Web.Mvc;
+using Umbraco.Web.UmbracoModels;
+
+namespace Umbraco.Web.UmbracoControllers
+{
+ public class RegisterController : SurfaceController
+ {
+ [HttpPost]
+ public ActionResult HandleRegisterMember([Bind(Prefix="registerModel")]RegisterModel model)
+ {
+ //TODO: Use new Member API
+ if (ModelState.IsValid)
+ {
+ var user = new User(0);
+
+ var mt = MemberType.GetByAlias(model.MemberTypeAlias) ?? MemberType.MakeNew(user, model.MemberTypeAlias);
+
+ var member = Member.MakeNew(model.Email, mt, user);
+ member.Email = model.Email;
+ member.LoginName = model.Email;
+ member.Password = model.Password;
+
+ foreach (var property in model.MemberProperties)
+ {
+ member.getProperty(property.Alias).Value = property.Value;
+ }
+
+ member.Save();
+
+ member.XmlGenerate(new XmlDocument());
+
+ Member.AddMemberToCache(member);
+
+ Response.Redirect("/");
+ }
+
+ return CurrentUmbracoPage();
+ }
+ }
+}
diff --git a/src/Umbraco.Web/UmbracoModels/RegisterModel.cs b/src/Umbraco.Web/UmbracoModels/RegisterModel.cs
new file mode 100644
index 0000000000..498b68db90
--- /dev/null
+++ b/src/Umbraco.Web/UmbracoModels/RegisterModel.cs
@@ -0,0 +1,28 @@
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+
+namespace Umbraco.Web.UmbracoModels
+{
+ public class RegisterModel
+ {
+ [Required]
+ [RegularExpression(@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?",
+ ErrorMessage = "Please enter a valid e-mail address")]
+ public string Email { get; set; }
+
+ [Required]
+ public string Password { get; set; }
+
+ public string MemberTypeAlias { get; set; }
+
+ public List MemberProperties { get; set; }
+ }
+
+ public class UmbracoProperty
+ {
+ public string Alias { get; set; }
+ public string Value { get; set; }
+ public string Name { get; set; }
+ }
+}