diff --git a/include/ajax.orgs.php b/include/ajax.orgs.php
index 3b187b18d8c5256cd9183dd986ad5239f52097d9..7737f57c11fd6780efc82602379a4734f8dc88a9 100644
--- a/include/ajax.orgs.php
+++ b/include/ajax.orgs.php
@@ -252,5 +252,48 @@ class OrgsAjaxAPI extends AjaxController {
 
         return $resp;
     }
+
+    function manageForms($org_id) {
+        $forms = DynamicFormEntry::forOrganization($org_id);
+        $info = array('action' => '#orgs/'.Format::htmlchars($org_id).'/forms/manage');
+        include(STAFFINC_DIR . 'templates/form-manage.tmpl.php');
+    }
+
+    function updateForms($org_id) {
+        global $thisstaff;
+
+        if (!$thisstaff)
+            Http::response(403, "Login required");
+        elseif (!($org = Organization::lookup($org_id)))
+            Http::response(404, "No such ticket");
+        elseif (!isset($_POST['forms']))
+            Http::response(422, "Send updated forms list");
+
+        // Add new forms
+        $forms = DynamicFormEntry::forOrganization($org_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))) {
+                $org->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/ajax.tickets.php b/include/ajax.tickets.php
index 75e43fc4c7f29c018fdfa7abfab1f865d7260c4e..016882de13a4599bbf5976ed940c7b28d2fd73cc 100644
--- a/include/ajax.tickets.php
+++ b/include/ajax.tickets.php
@@ -613,6 +613,8 @@ class TicketsAjaxAPI extends AjaxController {
     }
 
     function manageForms($ticket_id) {
+        $forms = DynamicFormEntry::forTicket($ticket_id);
+        $info = array('action' => '#tickets/'.Format::htmlchars($ticket_id).'/forms/manage');
         include(STAFFINC_DIR . 'templates/form-manage.tmpl.php');
     }
 
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.organization.php b/include/class.organization.php
index 3801bba3a423067dcf32bbf0c64dd92d352776c0..81937964e55c75302872cf1b20ac72c1915a3d4f 100644
--- a/include/class.organization.php
+++ b/include/class.organization.php
@@ -185,6 +185,14 @@ class Organization extends OrganizationModel {
         }
     }
 
+    function addForm($form, $sort=1) {
+        $form = $form->instanciate();
+        $form->set('sort', $sort);
+        $form->set('object_type', 'O');
+        $form->set('object_id', $this->getId());
+        $form->save();
+    }
+
     function to_json() {
 
         $info = array(
diff --git a/include/class.user.php b/include/class.user.php
index 041b7eac3eb1d78a488f979d28138815b26bea81..854d0d962d3c939126ad47dd82638eb680330181 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/org-view.inc.php b/include/staff/org-view.inc.php
index e866e4b5cdbd1b648691b82b05dd76050b10d904..91dbe5aeab113fa62ed4a7dca70334c09838a790 100644
--- a/include/staff/org-view.inc.php
+++ b/include/staff/org-view.inc.php
@@ -9,8 +9,21 @@ if(!defined('OSTSCPINC') || !$thisstaff || !is_object($org)) die('Invalid path')
              title="Reload"><i class="icon-refresh"></i> <?php echo $org->getName(); ?></a></h2>
         </td>
         <td width="50%" class="right_align has_bottom_border">
+            <span class="action-button" data-dropdown="#action-dropdown-more">
+                <span ><i class="icon-cog"></i> More</span>
+                <i class="icon-caret-down"></i>
+            </span>
             <a id="org-delete" class="action-button org-action"
             href="#orgs/<?php echo $org->getId(); ?>/delete"><i class="icon-trash"></i> Delete Organization</a>
+            <div id="action-dropdown-more" class="action-dropdown anchor-right">
+              <ul>
+                <li><a href="#ajax.php/orgs/<?php echo $org->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>
     </tr>
 </table>
diff --git a/include/staff/templates/form-manage.tmpl.php b/include/staff/templates/form-manage.tmpl.php
index 5e59011df9c12931f013395dbaa11920e0a1214f..52f670e91f42b9b3b848b3c1d0da36d763212434 100644
--- a/include/staff/templates/form-manage.tmpl.php
+++ b/include/staff/templates/form-manage.tmpl.php
@@ -5,11 +5,11 @@ Sort the forms on this ticket by click and dragging on them. Use the box
 below the forms list to add new forms to the ticket.
 <br/>
 <br/>
-<form method="post" action="#tickets/<?php echo $ticket_id; ?>/forms/manage">
+<form method="post" action="<?php echo $info['action']; ?>">
 <div id="ticket-entries">
 <?php
 $current_list = array();
-foreach (DynamicFormEntry::forTicket($ticket_id) as $e) { ?>
+foreach ($forms as $e) { ?>
 <div class="sortable-row-item" data-id="<?php echo $e->get('id'); ?>">
     <input type="hidden" name="forms[]" value="<?php echo $e->get('form_id'); ?>" />
     <i class="icon-reorder"></i> <?php echo $e->getForm()->getTitle();
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 2dd902087939a1c2f77240388d428ac3b6ad6878..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'),
@@ -112,7 +114,9 @@ $dispatcher = patterns('',
         url('^/(?P<id>\d+)/import-users$', 'importUsers'),
         url_get('^/(?P<id>\d+)/delete$', 'delete'),
         url_delete('^/(?P<id>\d+)/delete$', 'delete'),
-        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('^/tickets/', patterns('ajax.tickets.php:TicketsAjaxAPI',
         url_get('^(?P<tid>\d+)/change-user$', 'changeUserForm'),