diff --git a/include/ajax.users.php b/include/ajax.users.php
index a978c70543ec73c17587069d0c1f31ba9f4aa57a..97b9ae7dc068a76d96add06aaa69543a5f22e0c9 100644
--- a/include/ajax.users.php
+++ b/include/ajax.users.php
@@ -383,5 +383,48 @@ class UsersAjaxAPI extends AjaxController {
         return $ajax->createNote('U'.$id);
     }
 
+    function manageForms($user_id) {
+        $forms = DynamicFormEntry::forUser($user_id);
+        $info = array('action' => '#users/'.Format::htmlchars($user_id).'/forms/manage');
+        include(STAFFINC_DIR . 'templates/form-manage.tmpl.php');
+    }
+
+    function updateForms($user_id) {
+        global $thisstaff;
+
+        if (!$thisstaff)
+            Http::response(403, "Login required");
+        elseif (!($user = User::lookup($user_id)))
+            Http::response(404, "No such user");
+        elseif (!isset($_POST['forms']))
+            Http::response(422, "Send updated forms list");
+
+        // Add new forms
+        $forms = DynamicFormEntry::forUser($user_id);
+        foreach ($_POST['forms'] as $sort => $id) {
+            $found = false;
+            foreach ($forms as $e) {
+                if ($e->get('form_id') == $id) {
+                    $e->set('sort', $sort);
+                    $e->save();
+                    $found = true;
+                    break;
+                }
+            }
+            // New form added
+            if (!$found && ($new = DynamicForm::lookup($id))) {
+                $user->addForm($new, $sort);
+            }
+        }
+
+        // Deleted forms
+        foreach ($forms as $idx => $e) {
+            if (!in_array($e->get('form_id'), $_POST['forms']))
+                $e->delete();
+        }
+
+        Http::response(201, 'Successfully managed');
+    }
+
 }
 ?>
diff --git a/include/class.dynamic_forms.php b/include/class.dynamic_forms.php
index d26cfb484f21da64b87ec2ac93b41eb3121d4b0a..97348ff2c2e66dff5e50a4fce246925064eaf94d 100644
--- a/include/class.dynamic_forms.php
+++ b/include/class.dynamic_forms.php
@@ -615,6 +615,11 @@ class DynamicFormEntry extends VerySimpleModel {
         $this->object_id = $object_id;
     }
 
+    function forUser($user_id) {
+        return DynamicFormEntry::objects()
+            ->filter(array('object_id'=>$user_id, 'object_type'=>'U'));
+    }
+
     function forOrganization($org_id) {
         return DynamicFormEntry::objects()
             ->filter(array('object_id'=>$org_id, 'object_type'=>'O'));
diff --git a/include/class.user.php b/include/class.user.php
index 89a35ab46f54b35e91a4810ffc654510e20e8e68..098e5611bdf75956b69e93db8355096b31405b45 100644
--- a/include/class.user.php
+++ b/include/class.user.php
@@ -230,6 +230,14 @@ class User extends UserModel {
         return $this->created;
     }
 
+    function addForm($form, $sort=1) {
+        $form = $form->instanciate();
+        $form->set('sort', $sort);
+        $form->set('object_type', 'U');
+        $form->set('object_id', $this->getId());
+        $form->save();
+    }
+
     function to_json() {
 
         $info = array(
diff --git a/include/staff/user-view.inc.php b/include/staff/user-view.inc.php
index 4b267a9cc510d0bb4998ef34804bb1c885b014c4..8e6514447332f4ed3e421139000957ae41edd2c6 100644
--- a/include/staff/user-view.inc.php
+++ b/include/staff/user-view.inc.php
@@ -13,14 +13,10 @@ $org = $user->getOrganization();
              title="Reload"><i class="icon-refresh"></i> <?php echo $user->getName(); ?></a></h2>
         </td>
         <td width="50%" class="right_align has_bottom_border">
-           <?php
-            if ($account) { ?>
             <span class="action-button" data-dropdown="#action-dropdown-more">
                 <span ><i class="icon-cog"></i> More</span>
                 <i class="icon-caret-down"></i>
             </span>
-            <?php
-            } ?>
             <a id="user-delete" class="action-button user-action"
             href="#users/<?php echo $user->getId(); ?>/delete"><i class="icon-trash"></i> Delete User</a>
             <?php
@@ -53,6 +49,12 @@ $org = $user->getOrganization();
                 <?php
 
                 } ?>
+                <li><a href="#ajax.php/users/<?php echo $user->getId();
+                    ?>/forms/manage" onclick="javascript:
+                    $.dialog($(this).attr('href').substr(1), 201);
+                    return false"
+                    ><i class="icon-paste"></i> Manage Forms</a></li>
+
               </ul>
             </div>
         </td>
diff --git a/scp/ajax.php b/scp/ajax.php
index 98dd7f132fa0c6a9830cc1e0db203dfce6645b89..75a3c4ac6597781f3cf366aef8aa9c4304dc4471 100644
--- a/scp/ajax.php
+++ b/scp/ajax.php
@@ -91,7 +91,9 @@ $dispatcher = patterns('',
         url_get('^/(?P<id>\d+)/org(?:/(?P<orgid>\d+))?$', 'updateOrg'),
         url_post('^/(?P<id>\d+)/org$', 'updateOrg'),
         url_get('^/staff$', 'searchStaff'),
-        url_post('^/(?P<id>\d+)/note$', 'createNote')
+        url_post('^/(?P<id>\d+)/note$', 'createNote'),
+        url_get('^/(?P<id>\d+)/forms/manage$', 'manageForms'),
+        url_post('^/(?P<id>\d+)/forms/manage$', 'updateForms')
     )),
     url('^/orgs', patterns('ajax.orgs.php:OrgsAjaxAPI',
         url_get('^$', 'search'),