diff --git a/include/ajax.orgs.php b/include/ajax.orgs.php
new file mode 100644
index 0000000000000000000000000000000000000000..9b29f714834deffbf9ae08848442b7cc695bb705
--- /dev/null
+++ b/include/ajax.orgs.php
@@ -0,0 +1,155 @@
+<?php
+/*********************************************************************
+    ajax.orgs.php
+
+    Peter Rotich <peter@osticket.com>
+    Jared Hancock <jared@osticket.com>
+    Copyright (c)  2014 osTicket
+    http://www.osticket.com
+
+    Released under the GNU General Public License WITHOUT ANY WARRANTY.
+    See LICENSE.TXT for details.
+
+    vim: expandtab sw=4 ts=4 sts=4:
+**********************************************************************/
+
+if(!defined('INCLUDE_DIR')) die('403');
+
+include_once(INCLUDE_DIR.'class.ticket.php');
+
+class OrgsAjaxAPI extends AjaxController {
+
+    function search($type = null) {
+
+        if(!isset($_REQUEST['q'])) {
+            Http::response(400, 'Query argument is required');
+        }
+
+        $limit = isset($_REQUEST['limit']) ? (int) $_REQUEST['limit']:25;
+        $orgs=array();
+
+        $escaped = db_input(strtolower($_REQUEST['q']), false);
+        $sql='SELECT DISTINCT org.id, org.name '
+            .' FROM '.ORGANIZATION_TABLE.' org '
+            .' LEFT JOIN '.FORM_ENTRY_TABLE.' entry ON (entry.object_type=\'O\' AND entry.object_id = org.id)
+               LEFT JOIN '.FORM_ANSWER_TABLE.' value ON (value.entry_id=entry.id) '
+            .' WHERE org.name LIKE \'%'.$escaped.'%\' OR value.value LIKE \'%'.$escaped.'%\''
+            .' ORDER BY org.created '
+            .' LIMIT '.$limit;
+
+        if(($res=db_query($sql)) && db_num_rows($res)){
+            while(list($id, $name)=db_fetch_row($res)) {
+                $orgs[] = array('name' => Format::htmlchars($name), 'info' => $name,
+                    'id' => $id, '/bin/true' => $_REQUEST['q']);
+            }
+        }
+
+        return $this->json_encode(array_values($orgs));
+
+    }
+
+    function editOrg($id) {
+        global $thisstaff;
+
+        if(!$thisstaff)
+            Http::response(403, 'Login Required');
+        elseif(!($org = Organization::lookup($id)))
+            Http::response(404, 'Unknown organization');
+
+        $info = array(
+            'title' => sprintf('Update %s', $org->getName())
+        );
+
+        $forms = $org->getForms();
+
+        include(STAFFINC_DIR . 'templates/org.tmpl.php');
+    }
+
+    function updateOrg($id) {
+        global $thisstaff;
+
+        if(!$thisstaff)
+            Http::response(403, 'Login Required');
+        elseif(!($org = Organization::lookup($id)))
+            Http::response(404, 'Unknown organization');
+
+        $errors = array();
+        if($org->update($_POST, $errors))
+             Http::response(201, $org->to_json());
+
+        $forms = $org->getForms();
+        include(STAFFINC_DIR . 'templates/org.tmpl.php');
+    }
+
+
+    function delete($id) {
+        global $thisstaff;
+
+        if (!$thisstaff)
+            Http::response(403, 'Login Required');
+        elseif (!($org = Organization::lookup($id)))
+            Http::response(404, 'Unknown user');
+
+        $info = array();
+        if ($_SERVER['REQUEST_METHOD'] == 'DELETE') {
+
+            if ($org->delete())
+                 Http::response(204, 'Organization deleted successfully');
+            else
+                $info['error'] = 'Unable to delete organization - try again!';
+        }
+
+        include(STAFFINC_DIR . 'templates/org-delete.tmpl.php');
+    }
+
+
+    function addOrg() {
+
+        $info = array();
+
+        if ($_POST) {
+            $form = OrganizationForm::getDefaultForm()->getForm($_POST);
+            if (($org = Organization::fromForm($form)))
+                Http::response(201, $org->to_json());
+
+            $info = array('error' =>'Error adding organization - try again!');
+        }
+
+        $info['title'] = 'Add New Organization';
+        $info['search'] = false;
+
+        return self::_lookupform($form, $info);
+    }
+
+    function lookup() {
+        return self::_lookupform();
+    }
+
+    function selectOrg($id) {
+
+        if ($id) $org = Organization::lookup($id);
+
+        $info = array('title' => 'Select Organization');
+
+        ob_start();
+        include(STAFFINC_DIR . 'templates/org-lookup.tmpl.php');
+        $resp = ob_get_contents();
+        ob_end_clean();
+        return $resp;
+
+    }
+
+    static function _lookupform($form=null, $info=array()) {
+
+        if (!$info or !$info['title'])
+            $info += array('title' => 'Organization Lookup');
+
+        ob_start();
+        include(STAFFINC_DIR . 'templates/org-lookup.tmpl.php');
+        $resp = ob_get_contents();
+        ob_end_clean();
+
+        return $resp;
+    }
+}
+?>
diff --git a/include/class.user.php b/include/class.user.php
index fc215f282b23bcba3819ecd5829b6bc53bf73ebe..77131657e62e097fe36c980e254b08cef0bd54c9 100644
--- a/include/class.user.php
+++ b/include/class.user.php
@@ -543,6 +543,7 @@ class UserAccountModel extends VerySimpleModel {
 class UserAccount extends UserAccountModel {
     var $_options = null;
     var $_user;
+    var $_org;
 
     const CONFIRMED             = 0x0001;
     const LOCKED                = 0x0002;
@@ -616,6 +617,30 @@ class UserAccount extends UserAccountModel {
         return $this->_user;
     }
 
+    function getOrgId() {
+         return $this->get('org_id');
+    }
+
+    function getOrganization() {
+
+        if (!isset($this->_org))
+            $this->_org = Organization::lookup($this->getOrgId());
+
+        return $this->_org;
+    }
+
+    function setOrganization($org) {
+        if (!$org instanceof Organization)
+            return false;
+
+        $this->set('org_id', $org->getId());
+        $this->_org = null;
+        $this->save();
+
+        return true;
+   }
+
+
     function sendResetEmail() {
         return static::sendUnlockEmail('pwreset-client') === true;
     }
diff --git a/include/staff/org-view.inc.php b/include/staff/org-view.inc.php
new file mode 100644
index 0000000000000000000000000000000000000000..fee2e518173b28c75f1dd3164aedde8f2f0237d8
--- /dev/null
+++ b/include/staff/org-view.inc.php
@@ -0,0 +1,90 @@
+<?php
+if(!defined('OSTSCPINC') || !$thisstaff || !is_object($org)) die('Invalid path');
+
+?>
+<table width="940" cellpadding="2" cellspacing="0" border="0">
+    <tr>
+        <td width="50%" class="has_bottom_border">
+             <h2><a href="orgs.php?id=<?php echo $org->getId(); ?>"
+             title="Reload"><i class="icon-refresh"></i> <?php echo $org->getName(); ?></a></h2>
+        </td>
+        <td width="50%" class="right_align has_bottom_border">
+            <a id="org-delete" class="action-button org-action"
+            href="#orgs/<?php echo $org->getId(); ?>/delete"><i class="icon-trash"></i> Delete Organization</a>
+        </td>
+    </tr>
+</table>
+<table class="ticket_info" cellspacing="0" cellpadding="0" width="940" border="0">
+    <tr>
+        <td width="50">
+            <table border="0" cellspacing="" cellpadding="4" width="100%">
+                <tr>
+                    <th width="100">Name:</th>
+                    <td><b><a href="#orgs/<?php echo $org->getId();
+                    ?>/edit" class="org-action"><i
+                    class="icon-edit"></i>&nbsp;<?php echo
+                    $org->getName();
+                    ?></a></td>
+                </tr>
+                <tr>
+                    <th>Users:</th>
+                    <td> {num-here}
+                    </td>
+                </tr>
+            </table>
+        </td>
+        <td width="50%" style="vertical-align:top">
+            <table border="0" cellspacing="" cellpadding="4" width="100%">
+                <tr>
+                    <th>Created:</th>
+                    <td><?php echo Format::db_datetime($org->getCreateDate()); ?></td>
+                </tr>
+                <tr>
+                    <th>Updated:</th>
+                    <td><?php echo Format::db_datetime($org->getUpdateDate()); ?></td>
+                </tr>
+            </table>
+        </td>
+    </tr>
+</table>
+<br>
+<div class="clear"></div>
+<ul class="tabs">
+    <li><a class="active" id="users_tab" href="#users"><i
+    class="icon-list-alt"></i>&nbsp;Users</a></li>
+</ul>
+<div id="users">
+<div style="width:700px; float:left;">
+   <?php
+    if ($results) {
+        echo  sprintf('<strong>Showing 1 - %d of %s</strong>',
+            count($results), count($results));
+    } else {
+        echo 'Organization does not have users';
+    }
+   ?>
+</div>
+<div style="float:right;text-align:right;padding-right:5px;">
+    <b><a class="Icon newStaff" href="users.php?a=open&oid=<?php echo
+    $org->getId(); ?>"> Add New User</a></b>
+</div>
+<br/>
+</div>
+
+<script type="text/javascript">
+$(function() {
+    $(document).on('click', 'a.org-action', function(e) {
+        e.preventDefault();
+        var url = 'ajax.php/'+$(this).attr('href').substr(1);
+        $.dialog(url, [201, 204], function (xhr) {
+            if (xhr.status == 204)
+                window.location.href = 'orgs.php';
+            else
+                window.location.href = window.location.href;
+         }, {
+            onshow: function() { $('#org-search').focus(); }
+         });
+        return false;
+    });
+});
+</script>
diff --git a/include/staff/orgs.inc.php b/include/staff/orgs.inc.php
new file mode 100644
index 0000000000000000000000000000000000000000..0df382c6d9aa02f431f2bb952ca7683cb03c56e0
--- /dev/null
+++ b/include/staff/orgs.inc.php
@@ -0,0 +1,164 @@
+<?php
+if(!defined('OSTSCPINC') || !$thisstaff) die('Access Denied');
+
+$qstr='';
+
+$select = 'SELECT org.* ';
+
+$from = 'FROM '.ORGANIZATION_TABLE.' org ';
+
+$where = ' WHERE 1 ';
+
+if ($_REQUEST['query']) {
+
+    $from .=' LEFT JOIN '.FORM_ENTRY_TABLE.' entry
+                ON (entry.object_type=\'O\' AND entry.object_id = org.id)
+              LEFT JOIN '.FORM_ANSWER_TABLE.' value
+                ON (value.entry_id=entry.id) ';
+
+    $search = db_input(strtolower($_REQUEST['query']), false);
+    $where .= ' AND (
+                    org.name LIKE \'%'.$search.'%\' OR value.value LIKE \'%'.$search.'%\'
+                )';
+
+    $qstr.='&query='.urlencode($_REQUEST['query']);
+}
+
+$sortOptions = array('name' => 'org.name',
+                     'users' => 'users',
+                     'create' => 'org.created',
+                     'update' => 'org.updated');
+$orderWays = array('DESC'=>'DESC','ASC'=>'ASC');
+$sort= ($_REQUEST['sort'] && $sortOptions[strtolower($_REQUEST['sort'])]) ? strtolower($_REQUEST['sort']) : 'name';
+//Sorting options...
+if ($sort && $sortOptions[$sort])
+    $order_column =$sortOptions[$sort];
+
+$order_column = $order_column ?: 'org.name';
+
+if ($_REQUEST['order'] && $orderWays[strtoupper($_REQUEST['order'])])
+    $order = $orderWays[strtoupper($_REQUEST['order'])];
+
+$order=$order ?: 'ASC';
+if ($order_column && strpos($order_column,','))
+    $order_column = str_replace(','," $order,",$order_column);
+
+$x=$sort.'_sort';
+$$x=' class="'.strtolower($order).'" ';
+$order_by="$order_column $order ";
+
+$total=db_count('SELECT count(DISTINCT org.id) '.$from.' '.$where);
+$page=($_GET['p'] && is_numeric($_GET['p']))?$_GET['p']:1;
+$pageNav=new Pagenate($total,$page,PAGE_LIMIT);
+$pageNav->setURL('orgs.php',$qstr.'&sort='.urlencode($_REQUEST['sort']).'&order='.urlencode($_REQUEST['order']));
+//Ok..lets roll...create the actual query
+$qstr.='&order='.($order=='DESC'?'ASC':'DESC');
+
+$select .= ', count(DISTINCT user.id) as users ';
+
+$from .= ' LEFT JOIN '.USER_ACCOUNT_TABLE.' user ON (user.org_id = org.id) ';
+
+
+$query="$select $from $where GROUP BY org.id ORDER BY $order_by LIMIT ".$pageNav->getStart().",".$pageNav->getLimit();
+//echo $query;
+?>
+<h2>Organizations</h2>
+<div style="width:700px; float:left;">
+    <form action="orgs.php" method="get">
+        <?php csrf_token(); ?>
+        <input type="hidden" name="a" value="search">
+        <table>
+            <tr>
+                <td><input type="text" id="basic-org-search" name="query" size=30 value="<?php echo Format::htmlchars($_REQUEST['query']); ?>"
+                autocomplete="off" autocorrect="off" autocapitalize="off"></td>
+                <td><input type="submit" name="basic_search" class="button" value="Search"></td>
+                <!-- <td>&nbsp;&nbsp;<a href="" id="advanced-user-search">[advanced]</a></td> -->
+            </tr>
+        </table>
+    </form>
+ </div>
+ <div style="float:right;text-align:right;padding-right:5px;">
+    <b><a href="#orgs/add" class="Icon newDepartment add-org">Add New Organization</a></b></div>
+<div class="clear"></div>
+<?php
+$showing = $search ? 'Search Results: ' : '';
+$res = db_query($query);
+if($res && ($num=db_num_rows($res)))
+    $showing .= $pageNav->showing();
+else
+    $showing .= 'No organizations found!';
+?>
+<form action="orgs.php" method="POST" name="staff" >
+ <?php csrf_token(); ?>
+ <input type="hidden" name="do" value="mass_process" >
+ <input type="hidden" id="action" name="a" value="" >
+ <table class="list" border="0" cellspacing="1" cellpadding="0" width="940">
+    <caption><?php echo $showing; ?></caption>
+    <thead>
+        <tr>
+            <th width="400"><a <?php echo $name_sort; ?> href="orgs.php?<?php echo $qstr; ?>&sort=name">Name</a></th>
+            <th width="100"><a <?php echo $users_sort; ?> href="orgs.php?<?php echo $qstr; ?>&sort=users">Users</a></th>
+            <th width="150"><a <?php echo $create_sort; ?> href="orgs.php?<?php echo $qstr; ?>&sort=create">Created</a></th>
+            <th width="145"><a <?php echo $update_sort; ?> href="orgs.php?<?php echo $qstr; ?>&sort=update">Updated</a></th>
+        </tr>
+    </thead>
+    <tbody>
+    <?php
+        if($res && db_num_rows($res)):
+            $ids=($errors && is_array($_POST['ids']))?$_POST['ids']:null;
+            while ($row = db_fetch_array($res)) {
+
+                $sel=false;
+                if($ids && in_array($row['id'], $ids))
+                    $sel=true;
+                ?>
+               <tr id="<?php echo $row['id']; ?>">
+                <td>&nbsp; <a href="orgs.php?id=<?php echo $row['id']; ?>"><?php echo $row['name']; ?></a> </td>
+                <td>&nbsp;<?php echo $row['users']; ?></td>
+                <td><?php echo Format::db_date($row['created']); ?></td>
+                <td><?php echo Format::db_datetime($row['updated']); ?>&nbsp;</td>
+               </tr>
+            <?php
+            } //end of while.
+        endif; ?>
+    <tfoot>
+     <tr>
+        <td colspan="5"> &nbsp; </td>
+     </tr>
+    </tfoot>
+</table>
+<?php
+if($res && $num): //Show options..
+    echo '<div>&nbsp;Page:'.$pageNav->getPageLinks().'&nbsp;</div>';
+endif;
+?>
+</form>
+
+<script type="text/javascript">
+$(function() {
+    $('input#basic-org-search').typeahead({
+        source: function (typeahead, query) {
+            $.ajax({
+                url: "ajax.php/orgs/search?q="+query,
+                dataType: 'json',
+                success: function (data) {
+                    typeahead.process(data);
+                }
+            });
+        },
+        onselect: function (obj) {
+            window.location.href = 'orgs.php?id='+obj.id;
+        },
+        property: "/bin/true"
+    });
+
+    $(document).on('click', 'a.add-org', function(e) {
+        e.preventDefault();
+        $.orgLookup('ajax.php/orgs/add', function (org) {
+            window.location.href = 'orgs.php?id='+org.id;
+         });
+
+        return false;
+     });
+});
+</script>
diff --git a/include/staff/templates/org-lookup.tmpl.php b/include/staff/templates/org-lookup.tmpl.php
new file mode 100644
index 0000000000000000000000000000000000000000..a7c82f5daa4f40149b2bd802df2eb3cb8b7374ee
--- /dev/null
+++ b/include/staff/templates/org-lookup.tmpl.php
@@ -0,0 +1,123 @@
+<?php
+
+if (!$info['title'])
+    $info['title'] = 'Organization Lookup';
+
+$msg_info = 'Search existing organizations or add a new one';
+if ($info['search'] === false)
+    $msg_info = 'Complete the form below to add a new organization';
+
+?>
+<div id="the-lookup-form">
+<h3><?php echo $info['title']; ?></h3>
+<b><a class="close" href="#"><i class="icon-remove-circle"></i></a></b>
+<hr/>
+<div><p id="msg_info"><i class="icon-info-sign"></i>&nbsp; <?php echo $msg_info; ?></p></div>
+<?php
+if ($info['search'] !== false) { ?>
+<div style="margin-bottom:10px;">
+    <input type="text" class="search-input" style="width:100%;"
+    placeholder="Search by name" id="org-search" autocorrect="off" autocomplete="off"/>
+</div>
+<?php
+}
+
+if ($info['error']) {
+    echo sprintf('<p id="msg_error">%s</p>', $info['error']);
+} elseif ($info['warning']) {
+    echo sprintf('<p id="msg_warning">%s</p>', $info['warning']);
+} elseif ($info['msg']) {
+    echo sprintf('<p id="msg_notice">%s</p>', $info['msg']);
+} ?>
+<div id="selected-org-info" style="display:<?php echo $org ? 'block' :'none'; ?>;margin:5px;">
+<form method="post" class="org" action="<?php echo $info['action'] ?: '#orgs/lookup'; ?>">
+    <input type="hidden" id="org-id" name="orgid" value="<?php echo $org ? $org->getId() : 0; ?>"/>
+    <i class="icon-group icon-4x pull-left icon-border"></i>
+    <a class="action-button pull-right" style="overflow:inherit"
+        id="unselect-org"  href="#"><i class="icon-remove"></i> Add New Organization</a>
+    <div><strong id="org-name"><?php echo $org ?  Format::htmlchars($org->getName()) : ''; ?></strong></div>
+<?php if ($org) { ?>
+    <table style="margin-top: 1em;">
+<?php foreach ($org->getDynamicData() as $entry) { ?>
+    <tr><td colspan="2" style="border-bottom: 1px dotted black"><strong><?php
+         echo $entry->getForm()->get('title'); ?></strong></td></tr>
+<?php foreach ($entry->getAnswers() as $a) { ?>
+    <tr style="vertical-align:top"><td style="width:30%;border-bottom: 1px dotted #ccc"><?php echo Format::htmlchars($a->getField()->get('label'));
+         ?>:</td>
+    <td style="border-bottom: 1px dotted #ccc"><?php echo $a->display(); ?></td>
+    </tr>
+<?php }
+    } ?>
+   </table>
+ <?php
+  } ?>
+<div class="clear"></div>
+<hr>
+<p class="full-width">
+    <span class="buttons" style="float:left">
+        <input type="button" name="cancel" class="close"  value="Cancel">
+    </span>
+    <span class="buttons" style="float:right">
+        <input type="submit" value="Continue">
+    </span>
+ </p>
+</form>
+</div>
+<div id="new-org-form" style="display:<?php echo $org ? 'none' :'block'; ?>;">
+<form method="post" class="org" action="<?php echo $info['action'] ?: '#orgs/add'; ?>">
+    <table width="100%" class="fixed">
+    <?php
+        if (!$form) $form = OrganizationForm::getInstance();
+        $form->render(true, 'Create New Organization'); ?>
+    </table>
+    <hr>
+    <p class="full-width">
+        <span class="buttons" style="float:left">
+            <input type="reset" value="Reset">
+            <input type="button" name="cancel" class="<?php echo $org ? 'cancel' : 'close' ?>"  value="Cancel">
+        </span>
+        <span class="buttons" style="float:right">
+            <input type="submit" value="Add Organization">
+        </span>
+     </p>
+</form>
+</div>
+<div class="clear"></div>
+</div>
+<script type="text/javascript">
+$(function() {
+    var last_req;
+    $('#org-search').typeahead({
+        source: function (typeahead, query) {
+            if (last_req) last_req.abort();
+            last_req = $.ajax({
+                url: "ajax.php/orgs/search?q="+query,
+                dataType: 'json',
+                success: function (data) {
+                    typeahead.process(data);
+                }
+            });
+        },
+        onselect: function (obj) {
+            $('#the-lookup-form').load(
+                '<?php echo $info['onselect'] ?: 'ajax.php/orgs/select'; ?>/'+encodeURIComponent(obj.id)
+            );
+        },
+        property: "/bin/true"
+    });
+
+    $('a#unselect-org').click( function(e) {
+        e.preventDefault();
+        $('div#selected-org-info').hide();
+        $('div#new-org-form').fadeIn({start: function(){ $('#org-search').focus(); }});
+        return false;
+     });
+
+    $(document).on('click', 'form.org input.cancel', function (e) {
+        e.preventDefault();
+        $('div#new-org-form').hide();
+        $('div#selected-org-info').fadeIn({start: function(){ $('#org-search').focus(); }});
+        return false;
+     });
+});
+</script>
diff --git a/include/staff/templates/org.tmpl.php b/include/staff/templates/org.tmpl.php
new file mode 100644
index 0000000000000000000000000000000000000000..b1d58427a0b46c7245c5263bc319839c608cd5eb
--- /dev/null
+++ b/include/staff/templates/org.tmpl.php
@@ -0,0 +1,88 @@
+<?php
+if (!$info['title'])
+    $info['title'] = Format::htmlchars($org->getName());
+?>
+<h3><?php echo $info['title']; ?></h3>
+<b><a class="close" href="#"><i class="icon-remove-circle"></i></a></b>
+<hr/>
+<?php
+if ($info['error']) {
+    echo sprintf('<p id="msg_error">%s</p>', $info['error']);
+} elseif ($info['msg']) {
+    echo sprintf('<p id="msg_notice">%s</p>', $info['msg']);
+} ?>
+<div id="org-profile" style="display:<?php echo $forms ? 'none' : 'block'; ?>;margin:5px;">
+    <i class="icon-group icon-4x pull-left icon-border"></i>
+    <?php
+    if ($account) { ?>
+    <a class="action-button pull-right user-action" style="overflow:inherit"
+        href="#users/<?php echo $account->getUserId(); ?>/org/<?php echo $org->getId(); ?>" ><i class="icon-user"></i> Change Organization</a>
+    <?php
+    } ?>
+    <div><b><a href="#" id="editorg"><i class="icon-edit"></i>&nbsp;<?php
+    echo Format::htmlchars($org->getName()); ?></a></b></div>
+    <table style="margin-top: 1em;">
+<?php foreach ($org->getDynamicData() as $entry) {
+?>
+    <tr><td colspan="2" style="border-bottom: 1px dotted black"><strong><?php
+         echo $entry->getForm()->get('title'); ?></strong></td></tr>
+<?php foreach ($entry->getAnswers() as $a) { ?>
+    <tr style="vertical-align:top"><td style="width:30%;border-bottom: 1px dotted #ccc"><?php echo Format::htmlchars($a->getField()->get('label'));
+         ?>:</td>
+    <td style="border-bottom: 1px dotted #ccc"><?php echo $a->display(); ?></td>
+    </tr>
+<?php }
+}
+?>
+    </table>
+    <div class="clear"></div>
+    <hr>
+    <div class="faded">Last updated <b><?php echo Format::db_datetime($org->getUpdateDate()); ?> </b></div>
+</div>
+<div id="org-form" style="display:<?php echo $forms ? 'block' : 'none'; ?>;">
+<div><p id="msg_info"><i class="icon-info-sign"></i>&nbsp; Please note that updates will be reflected system-wide.</p></div>
+<?php
+$action = $info['action'] ? $info['action'] : ('#orgs/'.$org->getId());
+if ($ticket && $ticket->getOwnerId() == $user->getId())
+    $action = '#tickets/'.$ticket->getId().'/user';
+?>
+<form method="post" class="org" action="<?php echo $action; ?>">
+    <input type="hidden" name="id" value="<?php echo $org->getId(); ?>" />
+    <table width="100%">
+    <?php
+        if (!$forms) $forms = $org->getForms();
+        foreach ($forms as $form)
+            $form->render();
+    ?>
+    </table>
+    <hr>
+    <p class="full-width">
+        <span class="buttons" style="float:left">
+            <input type="reset" value="Reset">
+            <input type="button" name="cancel" class="<?php
+    echo $account ? 'cancel' : 'close'; ?>"  value="Cancel">
+        </span>
+        <span class="buttons" style="float:right">
+            <input type="submit" value="Update Organization">
+        </span>
+     </p>
+</form>
+</div>
+<div class="clear"></div>
+<script type="text/javascript">
+$(function() {
+    $('a#editorg').click( function(e) {
+        e.preventDefault();
+        $('div#org-profile').hide();
+        $('div#org-form').fadeIn();
+        return false;
+     });
+
+    $(document).on('click', 'form.org input.cancel', function (e) {
+        e.preventDefault();
+        $('div#org-form').hide();
+        $('div#org-profile').fadeIn();
+        return false;
+     });
+});
+</script>
diff --git a/include/staff/user-view.inc.php b/include/staff/user-view.inc.php
index 03c23c86629339acf616e54ac6a76069c950f098..a7319912468b7902a7f9e5d64657784b46ba519c 100644
--- a/include/staff/user-view.inc.php
+++ b/include/staff/user-view.inc.php
@@ -1,6 +1,10 @@
 <?php
 if(!defined('OSTSCPINC') || !$thisstaff || !is_object($user)) die('Invalid path');
 
+$account = $user->getAccount();
+$org = $account ? $account->getOrganization() : null;
+
+
 ?>
 <table width="940" cellpadding="2" cellspacing="0" border="0">
     <tr>
@@ -10,7 +14,7 @@ if(!defined('OSTSCPINC') || !$thisstaff || !is_object($user)) die('Invalid path'
         </td>
         <td width="50%" class="right_align has_bottom_border">
            <?php
-            if ($user->getAccount()) { ?>
+            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>
@@ -20,7 +24,7 @@ if(!defined('OSTSCPINC') || !$thisstaff || !is_object($user)) die('Invalid path'
             <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
-            if ($user->getAccount()) { ?>
+            if ($account) { ?>
             <a id="user-manage" class="action-button user-action"
             href="#users/<?php echo $user->getId(); ?>/manage"><i class="icon-edit"></i> Manage Account</a>
             <?php
@@ -32,8 +36,8 @@ if(!defined('OSTSCPINC') || !$thisstaff || !is_object($user)) die('Invalid path'
             <div id="action-dropdown-more" class="action-dropdown anchor-right">
               <ul>
                 <?php
-                if ($user->getAccount()) {
-                    if (!$user->getAccount()->isConfirmed()) {
+                if ($account) {
+                    if (!$account->isConfirmed()) {
                         ?>
                     <li><a class="confirm-action" href="#confirmlink"><i
                         class="icon-envelope"></i> Send Activation Email</a></li>
@@ -73,10 +77,22 @@ if(!defined('OSTSCPINC') || !$thisstaff || !is_object($user)) die('Invalid path'
                     </td>
                 </tr>
                 <tr>
-                    <th>Company:</th>
+                    <th>Organization:</th>
                     <td>
-                        <span id="user-<?php echo $user->getId();
-                        ?>-org"><?php echo $user->getOrg(); ?></span>
+                        <span id="user-<?php echo $user->getId(); ?>-org">
+                        <?php
+                            if ($org)
+                                echo sprintf('<a href="#users/%d/org"
+                                        class="user-action">%s</a>',
+                                        $user->getId(), $org->getName());
+                            elseif ($account)
+                                echo sprintf('<a href="#users/%d/org"
+                                        class="user-action">Add Organization</a>',
+                                        $user->getId());
+                            else
+                                echo '&nbsp;';
+                        ?>
+                        </span>
                     </td>
                 </tr>
             </table>
diff --git a/scp/ajax.php b/scp/ajax.php
index 37cbff3521b0944bd137475396b007620d3dc794..b13822d17c0ebefd04d02a89d4af76c79d8c9980 100644
--- a/scp/ajax.php
+++ b/scp/ajax.php
@@ -86,6 +86,21 @@ $dispatcher = patterns('',
         url_post('^/(?P<id>\d+)/org$', 'updateOrg'),
         url_get('^/staff$', 'searchStaff')
     )),
+    url('^/orgs', patterns('ajax.orgs.php:OrgsAjaxAPI',
+        url_get('^$', 'search'),
+        url_get('^/search$', 'search'),
+        url_get('^/(?P<id>\d+)$', 'getOrg'),
+        url_post('^/(?P<id>\d+)$', 'updateOrg'),
+        url_get('^/(?P<id>\d+)/edit$', 'editOrg'),
+        url_get('^/lookup/form$', 'lookup'),
+        url_post('^/lookup/form$', 'addOrg'),
+        url_get('^/add$', 'addOrg'),
+        url_post('^/add$', 'addOrg'),
+        url_get('^/select$', 'selectOrg'),
+        url_get('^/select/(?P<id>\d+)$', 'selectOrg'),
+        url_get('^/(?P<id>\d+)/delete$', 'delete'),
+        url_delete('^/(?P<id>\d+)/delete$', 'delete')
+    )),
     url('^/tickets/', patterns('ajax.tickets.php:TicketsAjaxAPI',
         url_get('^(?P<tid>\d+)/change-user$', 'changeUserForm'),
         url_post('^(?P<tid>\d+)/change-user$', 'changeUser'),
diff --git a/scp/js/scp.js b/scp/js/scp.js
index 92100b60d405713e44eb0c1cc73abdc7fbc457e9..2119131553d6c7f48d4601be8f8a529f2d7f3114 100644
--- a/scp/js/scp.js
+++ b/scp/js/scp.js
@@ -501,6 +501,15 @@ $(document).ready(function(){
         });
     };
 
+    $.orgLookup = function (url, cb) {
+        $.dialog(url, 201, function (xhr) {
+            var org = $.parseJSON(xhr.responseText);
+            if (cb) cb(org);
+        }, {
+            onshow: function() { $('#org-search').focus(); }
+        });
+    };
+
     $('#advanced-search').delegate('#status', 'change', function() {
         switch($(this).val()) {
             case 'closed':
diff --git a/scp/orgs.php b/scp/orgs.php
new file mode 100644
index 0000000000000000000000000000000000000000..0ecb8d1892cbed3f27610139a5a6fb0d4e3a53af
--- /dev/null
+++ b/scp/orgs.php
@@ -0,0 +1,26 @@
+<?php
+/*********************************************************************
+    orgs.php
+
+    Peter Rotich <peter@osticket.com>
+    Jared Hancock <jared@osticket.com>
+    Copyright (c)  2006-2014 osTicket
+    http://www.osticket.com
+
+    Released under the GNU General Public License WITHOUT ANY WARRANTY.
+    See LICENSE.TXT for details.
+
+    vim: expandtab sw=4 ts=4 sts=4:
+**********************************************************************/
+require('staff.inc.php');
+$org = null;
+if ($_REQUEST['id'])
+    $org = Organization::lookup($_REQUEST['id']);
+
+
+$page = $org? 'org-view.inc.php' : 'orgs.inc.php';
+$nav->setTabActive('users');
+require(STAFFINC_DIR.'header.inc.php');
+require(STAFFINC_DIR.$page);
+include(STAFFINC_DIR.'footer.inc.php');
+?>