Index: branches/OaaS/HeuristicLab.Services.Optimization.Web/Controllers/AccountController.cs
===================================================================
--- branches/OaaS/HeuristicLab.Services.Optimization.Web/Controllers/AccountController.cs	(revision 9549)
+++ branches/OaaS/HeuristicLab.Services.Optimization.Web/Controllers/AccountController.cs	(revision 9556)
@@ -56,80 +56,81 @@
     }
 
-    
-    ////
-    //// GET: /Account/Register
 
-    //public ActionResult Register() {
-    //  return View();
-    //}
+    //
+    // GET: /Account/Register
 
-    ////
-    //// POST: /Account/Register
+    public ActionResult Register() {
+      return View();
+    }
 
-    //[HttpPost]
-    //public ActionResult Register(RegisterModel model) {
-    //  if (ModelState.IsValid) {
-    //    // Attempt to register the user
-    //    MembershipCreateStatus createStatus;
-    //    Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus);
+    //
+    // POST: /Account/Register
 
-    //    if (createStatus == MembershipCreateStatus.Success) {
-    //      FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
-    //      return RedirectToAction("Index", "Home");
-    //    }
-    //    else {
-    //      ModelState.AddModelError("", ErrorCodeToString(createStatus));
-    //    }
-    //  }
+    [HttpPost]
+    public ActionResult Register(RegisterModel model) {
+      if (ModelState.IsValid) {
+        // Attempt to register the user
+        MembershipCreateStatus createStatus;
+        Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus);
+        if (createStatus == MembershipCreateStatus.Success) {
+          Roles.AddUserToRole(model.UserName, "Web User");
+          Roles.AddUserToRole(model.UserName, "Hive User");
+          FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
+          return RedirectToAction("Index", "Home");
+        }
+        else {
+          ModelState.AddModelError("", ErrorCodeToString(createStatus));
+        }
+      }
 
-    //  // If we got this far, something failed, redisplay form
-    //  return View(model);
-    //}
+      // If we got this far, something failed, redisplay form
+      return View(model);
+    }
 
-    ////
-    //// GET: /Account/ChangePassword
+    //
+    // GET: /Account/ChangePassword
 
-    //[Authorize]
-    //public ActionResult ChangePassword() {
-    //  return View();
-    //}
+    [Authorize]
+    public ActionResult ChangePassword() {
+      return View();
+    }
 
-    ////
-    //// POST: /Account/ChangePassword
+    //
+    // POST: /Account/ChangePassword
 
-    //[Authorize]
-    //[HttpPost]
-    //public ActionResult ChangePassword(ChangePasswordModel model) {
-    //  if (ModelState.IsValid) {
+    [Authorize]
+    [HttpPost]
+    public ActionResult ChangePassword(ChangePasswordModel model) {
+      if (ModelState.IsValid) {
 
-    //    // ChangePassword will throw an exception rather
-    //    // than return false in certain failure scenarios.
-    //    bool changePasswordSucceeded;
-    //    try {
-    //      MembershipUser currentUser = Membership.GetUser(User.Identity.Name, true /* userIsOnline */);
-    //      changePasswordSucceeded = currentUser.ChangePassword(model.OldPassword, model.NewPassword);
-    //    }
-    //    catch (Exception) {
-    //      changePasswordSucceeded = false;
-    //    }
+        // ChangePassword will throw an exception rather
+        // than return false in certain failure scenarios.
+        bool changePasswordSucceeded;
+        try {
+          MembershipUser currentUser = Membership.GetUser(User.Identity.Name, true /* userIsOnline */);
+          changePasswordSucceeded = currentUser.ChangePassword(model.OldPassword, model.NewPassword);
+        }
+        catch (Exception) {
+          changePasswordSucceeded = false;
+        }
 
-    //    if (changePasswordSucceeded) {
-    //      return RedirectToAction("ChangePasswordSuccess");
-    //    }
-    //    else {
-    //      ModelState.AddModelError("", "The current password is incorrect or the new password is invalid.");
-    //    }
-    //  }
+        if (changePasswordSucceeded) {
+          return RedirectToAction("ChangePasswordSuccess");
+        }
+        else {
+          ModelState.AddModelError("", "The current password is incorrect or the new password is invalid.");
+        }
+      }
 
-    //  // If we got this far, something failed, redisplay form
-    //  return View(model);
-    //}
+      // If we got this far, something failed, redisplay form
+      return View(model);
+    }
 
-    ////
-    //// GET: /Account/ChangePasswordSuccess
+    //
+    // GET: /Account/ChangePasswordSuccess
 
-    //public ActionResult ChangePasswordSuccess() {
-    //  return View();
-    //}
+    public ActionResult ChangePasswordSuccess() {
+      return View();
+    }
 
     #region Status Codes
Index: branches/OaaS/HeuristicLab.Services.Optimization.Web/Controllers/OrderAdminController.cs
===================================================================
--- branches/OaaS/HeuristicLab.Services.Optimization.Web/Controllers/OrderAdminController.cs	(revision 9556)
+++ branches/OaaS/HeuristicLab.Services.Optimization.Web/Controllers/OrderAdminController.cs	(revision 9556)
@@ -0,0 +1,35 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using System.Web.Mvc;
+using HeuristicLab.Services.Optimization.Web.Models;
+using HeuristicLab.Services.Optimization.Billing.Interfaces;
+using HeuristicLab.Services.Optimization.Billing;
+
+namespace HeuristicLab.Services.Optimization.Web.Controllers
+{
+    public class OrderAdminController : Controller
+    {
+        private IOptimizationBilling billing = new MockupOptimizationBilling();
+
+        //
+        // GET: /OrderAdmin/
+
+        public ActionResult Index()
+        {
+            var orders = billing.GetOrdersByState(Billing.Model.OrderState.Created);
+            return View(new OrderAdminModel() { Orders = orders });
+        }
+
+        [HttpPost]
+        public ActionResult ActivateOrder(OrderAdminModel model) {
+          var order = (from o in billing.GetOrdersByState(Billing.Model.OrderState.Created) where o.Id == model.OrderId select o).FirstOrDefault();
+          order.State = Billing.Model.OrderState.Active;
+          // TODO: Probably activate order via different method
+          billing.SaveOrder(order);
+          return RedirectToAction("Index");
+        }
+
+    }
+}
Index: branches/OaaS/HeuristicLab.Services.Optimization.Web/Controllers/OrderController.cs
===================================================================
--- branches/OaaS/HeuristicLab.Services.Optimization.Web/Controllers/OrderController.cs	(revision 9556)
+++ branches/OaaS/HeuristicLab.Services.Optimization.Web/Controllers/OrderController.cs	(revision 9556)
@@ -0,0 +1,88 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using System.Web.Mvc;
+using HeuristicLab.Services.Optimization.Web.Models;
+using HeuristicLab.Services.Optimization.Billing.Model;
+using HeuristicLab.Services.Optimization.Billing.Interfaces;
+using HeuristicLab.Services.Optimization.Billing;
+using System.Web.Security;
+
+namespace HeuristicLab.Services.Optimization.Web.Controllers
+{
+    public class OrderController : Controller
+    {
+        private IOptimizationBilling billing = new MockupOptimizationBilling();
+
+        //
+        // GET: /Order/
+
+        public ActionResult Index()
+        {
+          return CreateOrder(new OrderModel()); //View();
+        }
+
+
+        [HttpPost]
+        public ActionResult CreateOrder(OrderModel model) {
+          Session["order"] = model;
+          return AddProduct();
+        }
+
+        public ActionResult AddProduct() {
+          return View("AddProduct", new ProductsModel() { Products = billing.GetProducts() });
+        }
+
+        [HttpPost]
+        public ActionResult AddProduct(ProductsModel product) {
+          var order = Session["order"] as OrderModel;
+          var prod = (from b in billing.GetProducts() 
+                      where b.Id == product.ProductId
+                      select b).FirstOrDefault();
+          order.ProductQuantities[prod.Id] = product.Quantity;
+          return AddProduct();
+        }
+
+        public ActionResult SaveOrder() {
+          var orderModel = Session["order"] as OrderModel;
+          foreach (var key in orderModel.ProductQuantities.Keys) {
+            var product = (from p in billing.GetProducts() where p.Id == key select p).FirstOrDefault();
+            orderModel.Products[key] = product;            
+          }
+          return View(orderModel);
+        }
+
+        [HttpPost]
+        [ActionName("SaveOrder")]
+        public ActionResult SaveOrderPost() {
+          var orderModel = Session["order"] as OrderModel;
+          //TODO: Save order via back-end
+          var order = new Order() {
+            State = OrderState.Created,
+            User = new User() { Name = Membership.GetUser().UserName },
+            BillingType = orderModel.BillingType,
+            BillingPeriod = orderModel.BillingPeriod
+          };
+          
+          var orderLines = new List<OrderLine>();
+          var products = billing.GetProducts();
+          foreach (var key in orderModel.ProductQuantities.Keys) {
+            var product = (from p in products where p.Id == key select p).FirstOrDefault();
+            orderLines.Add(new OrderLine() {
+               Order = order,
+               Product = product,
+               ProductPrice = product.Price,
+               Quantity = orderModel.ProductQuantities[key]
+            });
+          }
+          order.OrderLines = orderLines;
+          billing.SaveOrder(order);
+          return RedirectToAction("OrderSaved");
+        }
+
+        public ActionResult OrderSaved() {
+          return View();
+        }
+    }
+}
