diff --git a/include/ajax.users.php b/include/ajax.users.php
index 6291fd3627c44b8938b0e0688ca5fdf637939aaa..a0e3b234e616e8b091524aa33b54d7a6e6056738 100644
--- a/include/ajax.users.php
+++ b/include/ajax.users.php
@@ -20,7 +20,7 @@ if(!defined('INCLUDE_DIR')) die('403');
 include_once(INCLUDE_DIR.'class.ticket.php');
 
 class UsersAjaxAPI extends AjaxController {
-   
+
     /* Assumes search by emal for now */
     function search() {
 
@@ -54,14 +54,51 @@ class UsersAjaxAPI extends AjaxController {
 
     }
 
-    function getLookupForm() {
-        $user_info = array();
-        if ($_REQUEST['id']) {
-            $user = User::lookup($_REQUEST['id']);
-            $user_info += array(
-                'name'=>$user->getName(), 'email'=>$user->getEmail());
+    function getUser() {
+
+        if(($user=User::lookup($_REQUEST['id'])))
+           Http::response(201, $user->to_json());
+
+        $info = array('error' =>'Unknown or invalid user');
+
+        return self::_lookupform(null, $info);
+    }
+
+    function addUser() {
+
+        $errors = $info = array();
+        $user = null;
+
+        $form = UserForm::getInstance();
+        if ($form->isValid()) {
+            if (($f=$form->getField('email'))
+                    && User::lookup(array('emails__address'=>$f->getClean())))
+                $f->addError('Email is assigned to another user');
+            elseif (($user = User::fromForm($form->getClean())))
+                Http::response(201, $user->to_json());
         }
+
+        if (!$info || !$info['error'])
+            $info += array('error' =>'Error adding user - try again!');
+
+        return self::_lookupform($form, $info);
+    }
+
+    function getLookupForm() {
+        return self::_lookupform();
+    }
+
+    static function _lookupform($form=null, $info=array()) {
+
+        if (!$info or !$info['title'])
+            $info += array('title' => 'User Lookup');
+
+        ob_start();
         include(STAFFINC_DIR . 'templates/user-lookup.tmpl.php');
+        $resp = ob_get_contents();
+        ob_end_clean();
+        return $resp;
     }
+
 }
 ?>
diff --git a/scp/ajax.php b/scp/ajax.php
index 26d4e21a1cc58cd8da129dcd683cfc01916e19aa..460248be22a420910f6bf54bf88a20a826a66727 100644
--- a/scp/ajax.php
+++ b/scp/ajax.php
@@ -61,7 +61,10 @@ $dispatcher = patterns('',
     )),
     url('^/users', patterns('ajax.users.php:UsersAjaxAPI',
         url_get('^$', 'search'),
-        url_get('^/lookup$', 'getLookupForm')
+        url_get('^/(?P<id>\d+)$', 'getUser'),
+        url_get('^/lookup$', 'getUser'),
+        url_get('^/lookup/form$', 'getLookupForm'),
+        url_post('^/lookup/form$', 'addUser')
     )),
     url('^/tickets/', patterns('ajax.tickets.php:TicketsAjaxAPI',
         url_get('^(?P<tid>\d+)/preview', 'previewTicket'),
diff --git a/scp/css/scp.css b/scp/css/scp.css
index 684f2c98191fa3918fd200429688d2d3ff057409..d99c0ecb4f3a488af78cf4235c8e31c881d47c1d 100644
--- a/scp/css/scp.css
+++ b/scp/css/scp.css
@@ -45,11 +45,11 @@ a {
 
 #msg_info { margin: 0; padding: 5px; margin-bottom: 10px; color: #3a87ad; border: 1px solid #bce8f1;  background-color: #d9edf7; }
 
-#msg_notice { margin: 0; padding: 5px 10px 5px 36px; height: 16px; line-height: 16px; margin-bottom: 10px; border: 1px solid #0a0; background: url('../images/icons/ok.png') 10px 50% no-repeat #e0ffe0; }
+#msg_notice { margin: 0; padding: 5px 10px 5px 36px; margin-bottom: 10px; border: 1px solid #0a0; background: url('../images/icons/ok.png') 10px 50% no-repeat #e0ffe0; }
 
-#msg_warning { margin: 0; padding: 5px 10px 5px 36px; height: 16px; line-height: 16px; margin-bottom: 10px; border: 1px solid #f26522; background: url('../images/icons/alert.png') 10px 50% no-repeat #ffffdd; }
+#msg_warning { margin: 0; padding: 5px 10px 5px 36px; margin-bottom: 10px; border: 1px solid #f26522; background: url('../images/icons/alert.png') 10px 50% no-repeat #ffffdd; }
 
-#msg_error { margin: 0; padding: 5px 10px 5px 36px; height: 16px; line-height: 16px; margin-bottom: 10px; border: 1px solid #a00; background: url('../images/icons/error.png') 10px 50% no-repeat #fff0f0; }
+#msg_error { margin: 0; padding: 5px 10px 5px 36px; margin-bottom: 10px; border: 1px solid #a00; background: url('../images/icons/error.png') 10px 50% no-repeat #fff0f0; }
 
 #notice_bar { margin: 0; padding: 5px 10px 5px 36px; height: 16px; line-height: 16px; border: 1px solid #0a0; background: url('../images/icons/ok.png') 10px 50% no-repeat #e0ffe0; }