diff --git a/include/class.forms.php b/include/class.forms.php
index 46d9600ccd6e0506cdcc5906a6b4ac82d05097df..135916269df01fbd118dabdcabcde286ef1a9c50 100644
--- a/include/class.forms.php
+++ b/include/class.forms.php
@@ -2257,6 +2257,11 @@ class AssigneeField extends ChoiceField {
             $id = key($id);
         }
 
+        if ($id[0] == 's')
+            return Staff::lookup(substr($id, 1));
+        elseif ($id[0] == 't')
+            return Team::lookup(substr($id, 1));
+
         return $id;
     }
 
@@ -3941,13 +3946,8 @@ class AssignmentForm extends Form {
 
     function getAssignee() {
 
-        if (!isset($this->_assignee)) {
-            $value = $this->getField('assignee')->getClean();
-            if ($value[0] == 's')
-                $this->_assignee = Staff::lookup(substr($value, 1));
-            elseif ($value[0] == 't')
-                $this->_assignee = Team::lookup(substr($value, 1));
-        }
+        if (!isset($this->_assignee))
+            $this->_assignee = $this->getField('assignee')->getClean();
 
         return $this->_assignee;
     }
@@ -3958,6 +3958,7 @@ class AssignmentForm extends Form {
             return array('dept_id' =>$dept);
         };
     }
+
 }
 
 class TransferForm extends Form {
diff --git a/include/class.task.php b/include/class.task.php
index 5f9206e8069ced89007d7cace68f54d35ec2d4fb..348e693932f62acef199d42ab493035399e286af 100644
--- a/include/class.task.php
+++ b/include/class.task.php
@@ -1129,9 +1129,11 @@ class Task extends TaskModel implements RestrictedAccess, Threadable {
     }
 
     static function create($vars=false) {
-        global $cfg;
+        global $thisstaff, $cfg;
 
-        if (!is_array($vars))
+        if (!is_array($vars)
+                || !$thisstaff
+                || !$thisstaff->hasPerm(Task::PERM_CREATE, false))
             return null;
 
         $task = parent::create(array(
@@ -1142,15 +1144,14 @@ class Task extends TaskModel implements RestrictedAccess, Threadable {
             'created' => new SqlFunction('NOW'),
             'updated' => new SqlFunction('NOW'),
         ));
-        // Save internal fields.
-        if ($vars['internal_formdata']['staff_id'])
-            $task->staff_id = $vars['internal_formdata']['staff_id'];
+
         if ($vars['internal_formdata']['dept_id'])
             $task->dept_id = $vars['internal_formdata']['dept_id'];
         if ($vars['internal_formdata']['duedate'])
             $task->duedate = $vars['internal_formdata']['duedate'];
 
-        $task->save(true);
+        if (!$task->save(true))
+            return false;
 
         // Add dynamic data
         $task->addDynamicData($vars['default_formdata']);
@@ -1158,6 +1159,23 @@ class Task extends TaskModel implements RestrictedAccess, Threadable {
         // Create a thread + message.
         $thread = TaskThread::create($task);
         $thread->addDescription($vars);
+
+
+        $task->logEvent('created', null, $thisstaff);
+
+        // Get role for the dept
+        $role = $thisstaff->getRole($task->dept_id);
+
+        // Assignment
+        if ($vars['internal_formdata']['assignee']
+                // skip assignment if the user doesn't have perm.
+                && $role->hasPerm(Task::PERM_ASSIGN)) {
+            $_errors = array();
+            $form = AssignmentForm::instantiate(array(
+                        'assignee' => $vars['internal_formdata']['assignee']));
+            $task->assign($form, $_errors);
+        }
+
         Signal::send('task.created', $task);
 
         return $task;
@@ -1348,7 +1366,7 @@ extends AbstractForm {
                     'required' => true,
                     'layout' => new GridFluidCell(6),
                     )),
-                'staff_id' => new AssigneeField(array(
+                'assignee' => new AssigneeField(array(
                     'id'=>2,
                     'label' => __('Assignee'),
                     'required' => false,
diff --git a/include/staff/tasks.inc.php b/include/staff/tasks.inc.php
index d908312bda49ebf96e3f6b16174cebcd99332f66..49cdd5e22ac9ece74a17b58a9c7f6d3a8c1ecaa9 100644
--- a/include/staff/tasks.inc.php
+++ b/include/staff/tasks.inc.php
@@ -168,7 +168,8 @@ default:
 
 // Apply requested pagination
 $page=($_GET['p'] && is_numeric($_GET['p']))?$_GET['p']:1;
-$pageNav=new Pagenate($tasks->count(), $page, PAGE_LIMIT);
+$count = $tasks->count();
+$pageNav=new Pagenate($count, $page, PAGE_LIMIT);
 $pageNav->setURL('tasks.php', $args);
 $tasks = $pageNav->paginate($tasks);
 
@@ -262,7 +263,8 @@ return false;">
         </div>
         <div class="pull-right flush-right">
            <?php
-            Task::getAgentActions($thisstaff, array('status' => $status));
+           if ($count)
+                echo Task::getAgentActions($thisstaff, array('status' => $status));
             ?>
         </div>
     </div>
diff --git a/include/staff/templates/task-view.tmpl.php b/include/staff/templates/task-view.tmpl.php
index 1ca83b30ec8e12c28f7d7a408310b0f4e67e71ec..f1efebc3a655efd5b49a168061134dfb3dab01c4 100644
--- a/include/staff/templates/task-view.tmpl.php
+++ b/include/staff/templates/task-view.tmpl.php
@@ -394,11 +394,11 @@ else
                     <div><?php echo __('Status');?>
                         <span class="faded"> - </span>
                         <select  name="task_status">
-                            <option value="1" <?php
+                            <option value="open" <?php
                                 echo $task->isOpen() ?
                                 'selected="selected"': ''; ?>> <?php
                                 echo _('Open'); ?></option>
-                            <option value="0" <?php
+                            <option value="closed" <?php
                                 echo $task->isClosed() ?
                                 'selected="selected"': ''; ?>> <?php
                                 echo _('Closed'); ?></option>
@@ -449,11 +449,11 @@ else
                     <div><?php echo __('Status');?>
                         <span class="faded"> - </span>
                         <select  name="task_status">
-                            <option value="1" <?php
+                            <option value="open" <?php
                                 echo $task->isOpen() ?
                                 'selected="selected"': ''; ?>> <?php
                                 echo _('Open'); ?></option>
-                            <option value="0" <?php
+                            <option value="closed" <?php
                                 echo $task->isClosed() ?
                                 'selected="selected"': ''; ?>> <?php
                                 echo _('Closed'); ?></option>
diff --git a/include/staff/ticket-tasks.inc.php b/include/staff/ticket-tasks.inc.php
index 9085ab239b3bf51c72d6141558dd53eddf4a4041..a7a6d12abee2864d1ab49f5709081ea37be65f35 100644
--- a/include/staff/ticket-tasks.inc.php
+++ b/include/staff/ticket-tasks.inc.php
@@ -40,7 +40,8 @@ $showing = $pageNav->showing().' '._N('task', 'tasks', $count);
             print __('Add New Task'); ?></a>
     <?php
     }
-    Task::getAgentActions($thisstaff, array('morelabel' => __('Options')));
+    if ($count)
+        Task::getAgentActions($thisstaff, array('morelabel' => __('Options')));
     ?>
 </div>
 <div class="clear"></div>
@@ -162,7 +163,8 @@ $(function() {
         $.dialog(url, [201], function (xhr) {
             var tid = parseInt(xhr.responseText);
             if (tid) {
-                var url = 'ajax.php/tasks/'+tid+'/view';
+                var url = 'ajax.php/tickets/'+<?php echo $ticket->getId();
+                ?>+'/tasks/'+tid+'/view';
                 var $container = $('div#task_content');
                 $container.load(url, function () {
                     $('.tip_box').remove();
diff --git a/include/staff/tickets.inc.php b/include/staff/tickets.inc.php
index 270f1e287cb6d43a5d25d4fe74ea9a38464459b8..73554b33a5ef91d3fb7ac7153335adcc5c9796ac 100644
--- a/include/staff/tickets.inc.php
+++ b/include/staff/tickets.inc.php
@@ -187,7 +187,8 @@ if (!$view_all_tickets) {
 
 // Apply requested pagination
 $page=($_GET['p'] && is_numeric($_GET['p']))?$_GET['p']:1;
-$pageNav = new Pagenate($tickets->count(), $page, PAGE_LIMIT);
+$count = $tickets->count();
+$pageNav = new Pagenate($count, $page, PAGE_LIMIT);
 $pageNav->setURL('tickets.php', $args);
 $tickets = $pageNav->paginate($tickets);
 
@@ -367,15 +368,17 @@ return false;">
         </div>
         <div class="pull-right flush-right">
             <?php
-            if ($thisstaff->canManageTickets()) {
-                echo TicketStatus::status_options();
-            }
-            if ($thisstaff->hasPerm(TicketModel::PERM_DELETE, false)) { ?>
-            <a id="tickets-delete" class="red button action-button tickets-action"
-                href="#tickets/status/delete"><i
-            class="icon-trash"></i> <?php echo __('Delete'); ?></a>
-            <?php
-            } ?>
+            if ($count) {
+                if ($thisstaff->canManageTickets()) {
+                    echo TicketStatus::status_options();
+                }
+                if ($thisstaff->hasPerm(TicketModel::PERM_DELETE, false)) { ?>
+                <a id="tickets-delete" class="red button action-button tickets-action"
+                    href="#tickets/status/delete"><i
+                class="icon-trash"></i> <?php echo __('Delete'); ?></a>
+                <?php
+                }
+            }?>
         </div>
     </div>
 </div>