diff --git a/include/class.ticket.php b/include/class.ticket.php
index 9f8ce96d5649c75c9a9035aad404e9aef39fdeb8..727d0a82ed3c53de35a4a5deb017317aff9cb2a9 100644
--- a/include/class.ticket.php
+++ b/include/class.ticket.php
@@ -680,16 +680,18 @@ class Ticket {
     }
  
     //Set staff ID...assign/unassign/release (id can be 0)
-    function setStaffId($staffId){
+    function setStaffId($staffId) {
+
+        if(!is_numeric($staffId)) return false;
        
         $sql='UPDATE '.TICKET_TABLE.' SET updated=NOW(), staff_id='.db_input($staffId)
             .' WHERE ticket_id='.db_input($this->getId());
 
-        if (db_query($sql)  && db_affected_rows()) {
-            $this->staff_id = $staffId;
-            return true;
-        }
-        return false;
+        if (!db_query($sql)  || !db_affected_rows())
+            return false;
+        
+        $this->staff_id = $staffId;
+        return true;
     }
 
     function setSLAId($slaId) {
@@ -730,12 +732,14 @@ class Ticket {
     }
 
     //Set team ID...assign/unassign/release (id can be 0)
-    function setTeamId($teamId){
-
-      $sql='UPDATE '.TICKET_TABLE.' SET updated=NOW(), team_id='.db_input($teamId)
-          .' WHERE ticket_id='.db_input($this->getId());
+    function setTeamId($teamId) {
+        
+        if(!is_numeric($teamId)) return false;
+      
+        $sql='UPDATE '.TICKET_TABLE.' SET updated=NOW(), team_id='.db_input($teamId)
+            .' WHERE ticket_id='.db_input($this->getId());
 
-      return (db_query($sql)  && db_affected_rows());
+        return (db_query($sql)  && db_affected_rows());
     }
 
     //Status helper.
@@ -996,8 +1000,8 @@ class Ticket {
 
         $this->reload();
 
-        $note=$note?$note:'Ticket assignment';
-        $assigner =$thisstaff?$thisstaff:'SYSTEM (Auto Assignment)';
+        $comments = $comments?$comments:'Ticket assignment';
+        $assigner = $thisstaff?$thisstaff:'SYSTEM (Auto Assignment)';
         
         //Log an internal note - no alerts on the internal note.
         $this->postNote('Ticket Assigned to '.$assignee->getName(), $comments, $assigner, false);
@@ -1328,15 +1332,23 @@ class Ticket {
         if(!$this->isAssigned()) //We can't release what is not assigned buddy!
             return true;
 
-        //We're unassigning in the order of precedence.
-        if($this->getStaffId())
-            return $this->setStaffId(0);
-        elseif($this->getTeamId())
-            return $this->setTeamId(0);
+        //We can only unassigned OPEN tickets.
+        if($this->isClosed())
+            return false;
 
-        return false;
-    }
+        //Unassign staff (if any)
+        if($this->getStaffId() && !$this->setStaffId(0))
+            return false;
+
+        //unassign team (if any)
+        if($this->getTeamId() && !$this->setTeamId(0))
+            return false;
 
+        $this->reload();
+
+        return true;
+    }
+    
     function release() {
         return $this->unassign();
     }