diff --git a/include/class.i18n.php b/include/class.i18n.php
index b208feb0e7b37b79580edb6d3bd10203b5572891..9156288936378f5f84b4d25096847c9df6c01cff 100644
--- a/include/class.i18n.php
+++ b/include/class.i18n.php
@@ -57,7 +57,7 @@ class Internationalization {
             // help_topic
             'help_topic.yaml' =>    'Topic::__create',
             'filter.yaml' =>        'Filter::create',
-            'team.yaml' =>          'Team::create',
+            'team.yaml' =>          'Team::__create',
             // Organization
             'organization.yaml' =>  'Organization::__create',
             // Ticket
diff --git a/include/class.staff.php b/include/class.staff.php
index 0b53f9296327ac6486b89a8394ea0588e0be8a00..8a79df61e5f5603075b627049f4a3e8ce3cfe8d7 100644
--- a/include/class.staff.php
+++ b/include/class.staff.php
@@ -37,18 +37,20 @@ implements AuthenticatedUser {
                 'constraint' => array('group_id' => 'Group.group_id'),
             ),
             'teams' => array(
-                'constraint' => array('staff_id' => 'StaffTeamMember.staff_id'),
+                'null' => true,
+                'list' => true,
+                'reverse' => 'TeamMember.staff',
             ),
         ),
     );
 
     var $authkey;
     var $departments;
-    var $teams;
     var $timezone;
     var $stats = array();
     var $_extra;
     var $passwd_change;
+    var $_teams = null;
 
     function __onload() {
         // WE have to patch info here to support upgrading from old versions.
@@ -375,16 +377,13 @@ implements AuthenticatedUser {
 
     function getTeams() {
 
-        if (!isset($this->teams)) {
-            $this->teams = array();
-            $sql='SELECT team_id FROM '.TEAM_MEMBER_TABLE
-                .' WHERE staff_id='.db_input($this->getId());
-            if(($res=db_query($sql)) && db_num_rows($res))
-                while(list($id)=db_fetch_row($res))
-                    $this->teams[] = $id;
+        if (!isset($this->_teams)) {
+            $this->_teams = array();
+            foreach ($this->teams as $team)
+                 $this->_teams[] = $team->team_id;
         }
 
-        return $this->teams;
+        return $this->_teams;
     }
     /* stats */
 
@@ -530,27 +529,30 @@ implements AuthenticatedUser {
     }
 
     function updateTeams($team_ids) {
-        if ($team_ids && is_array($team_ids)) {
-            $teams = StaffTeamMember::objects()
+
+        if (is_array($team_ids)) {
+            $members = TeamMember::objects()
                 ->filter(array('staff_id' => $this->getId()));
-            foreach ($teams as $member) {
+            foreach ($members as $member) {
                 if ($idx = array_search($member->team_id, $team_ids)) {
-                    // XXX: Do we really need to track the time of update?
-                    $member->updated = SqlFunction::NOW();
-                    $member->save();
                     unset($team_ids[$idx]);
-                }
-                else {
+                } else {
                     $member->delete();
                 }
             }
+
             foreach ($team_ids as $id) {
-                StaffTeamMember::create(array(
-                    'updated'=>SqlFunction::NOW(),
-                    'staff_id'=>$this->getId(), 'team_id'=>$id
+                TeamMember::create(array(
+                    'staff_id'=>$this->getId(),
+                    'team_id'=>$id
                 ))->save();
             }
+        } else {
+            TeamMember::objects()
+                ->filter(array('staff_id'=>$this->getId()))
+                ->delete();
         }
+
         return true;
     }
 
@@ -573,9 +575,7 @@ implements AuthenticatedUser {
                 .' WHERE staff_id='.db_input($this->getId()));
 
         // Cleanup Team membership table.
-        TeamMember::objects()
-            ->filter(array('staff_id'=>$this->getId()))
-            ->delete();
+        $this->updateTeams(array());
 
         return true;
     }
@@ -809,19 +809,4 @@ implements AuthenticatedUser {
         return false;
     }
 }
-
-class StaffTeamMember extends VerySimpleModel {
-    static $meta = array(
-        'table' => TEAM_MEMBER_TABLE,
-        'pk' => array('staff_id', 'team_id'),
-        'joins' => array(
-            'staff' => array(
-                'constraint' => array('staff_id' => 'Staff.staff_id'),
-            ),
-            'team' => array(
-                'constraint' => array('team_id' => 'Team.team_id'),
-            ),
-        ),
-    );
-}
 ?>
diff --git a/include/class.team.php b/include/class.team.php
index 8ba31af52bc5ee2800dae7936875149df6003e5f..7784d87bc842db4fb9bac561c89b70c6bdb62908 100644
--- a/include/class.team.php
+++ b/include/class.team.php
@@ -20,16 +20,19 @@ class Team extends VerySimpleModel {
         'table' => TEAM_TABLE,
         'pk' => array('team_id'),
         'joins' => array(
-            'staffmembers' => array(
-                'reverse' => 'StaffTeamMember.team'
-            ),
             'lead' => array(
+                'null' => true,
                 'constraint' => array('lead_id' => 'Staff.staff_id'),
             ),
+            'members' => array(
+                'null' => true,
+                'list' => true,
+                'reverse' => 'TeamMember.team',
+            ),
         ),
     );
 
-    var $members;
+    var $_members;
 
     function asVar() {
         return $this->__toString();
@@ -52,16 +55,18 @@ class Team extends VerySimpleModel {
     }
 
     function getMembers() {
-        if (!isset($this->members)) {
-            $this->members = Staff::objects()
-                ->filter(array('teams__team_id'=>$this->getId()))
-                ->order_by('lastname', 'firstname');
+
+        if (!isset($this->_members)) {
+            $this->_members = array();
+            foreach ($this->members as $m)
+                $this->_members[] = $m->staff;
         }
-        return $this->members;
+
+        return $this->_members;
     }
 
     function hasMember($staff) {
-        return $this->getMembers()
+        return $this->members
             ->filter(array('staff_id'=>$staff->getId()))
             ->count() !== 0;
     }
@@ -114,16 +119,58 @@ class Team extends VerySimpleModel {
         return $T != $tag ? $T : $default;
     }
 
-    function updateMembership($vars) {
+    function update($vars, &$errors=array()) {
 
-        // Delete staff marked for removal...
-        if ($vars['remove']) {
-            $this->staffmembers
-                ->filter(array(
-                    'staff_id__in' => $vars['remove']))
-                ->delete();
+        if (!$vars['name']) {
+            $errors['name']=__('Team name is required');
+        } elseif(($tid=self::getIdByName($vars['name'])) && $tid!=$vars['id']) {
+            $errors['name']=__('Team name already exists');
         }
-        return true;
+
+        if ($errors)
+            return false;
+
+        // Reset team lead if they're getting removed
+        if (isset($this->lead_id)
+                && $this->lead_id == $vars['lead_id']
+                && $vars['remove']
+                && in_array($this->lead_id, $vars['remove']))
+            $vars['lead_id'] =0 ;
+
+        $this->isenabled = $vars['isenabled'];
+        $this->noalerts = isset($vars['noalerts']) ? $vars['noalerts'] : 0;
+        $this->lead_id = $vars['lead_id'] ?: 0;
+        $this->name = $vars['name'];
+        $this->notes = Format::sanitize($vars['notes']);
+
+        if ($this->save()) {
+            // Remove checked members
+            if ($vars['remove'] && is_array($vars['remove'])) {
+                TeamMember::objects()
+                    ->filter(array(
+                        'staff_id__in' => $vars['remove']))
+                    ->delete();
+            }
+
+            return true;
+        }
+
+        if (isset($this->team_id)) {
+            $errors['err']=sprintf(__('Unable to update %s.'), __('this team'))
+               .' '.__('Internal error occurred');
+        } else {
+            $errors['err']=sprintf(__('Unable to create %s.'), __('this team'))
+               .' '.__('Internal error occurred');
+        }
+
+        return false;
+    }
+
+    function save($refetch=false) {
+        if ($this->dirty)
+            $this->updated = SqlFunction::NOW();
+
+        return parent::save($refetch || $this->dirty);
     }
 
     function delete() {
@@ -146,106 +193,88 @@ class Team extends VerySimpleModel {
         return true;
     }
 
-    function save($refetch=false) {
-        if ($this->dirty)
-            $this->updated = SqlFunction::NOW();
-        return parent::save($refetch || $this->dirty);
-    }
-
     /* ----------- Static function ------------------*/
+    static function getIdByName($name) {
 
-    static function getIdbyName($name) {
-        $row = static::objects()
-            ->filter(array('name'=>$name))
+        $row = self::objects()
+            ->filter(array('name'=>trim($name)))
             ->values_flat('team_id')
             ->first();
 
-        return $row ? $row[0] : null;
+        return $row ? $row[0] : 0;
     }
 
-    static function getTeams( $availableOnly=false ) {
-        static $names;
-
-        if (isset($names))
-            return $names;
-
-        $names = array();
-        $teams = static::objects()
-            ->values_flat('team_id', 'name', 'isenabled');
+    static function getTeams($criteria=array()) {
+        static $teams = null;
+        if (!$teams || $criteria) {
+            $teams = array();
+            $query = static::objects()
+                ->values_flat('team_id', 'name', 'isenabled')
+                ->order_by('name');
 
-        if ($availableOnly) {
-            //Make sure the members are active...TODO: include group check!!
-            $teams->annotate(array('members'=>Aggregate::COUNT('staffmembers')))
+            if (isset($criteria['active']) && $criteria['active']) {
+                $query->annotate(array('members_count'=>Aggregate::COUNT('members')))
                 ->filter(array(
                     'isenabled'=>1,
-                    'staffmembers__staff__isactive'=>1,
-                    'staffmembers__staff__onvacation'=>0,
-                    'staffmembers__staff__group__group_enabled'=>1,
+                    'members__staff__isactive'=>1,
+                    'members__staff__onvacation'=>0,
+                    'members__staff__group__group_enabled'=>1,
                 ))
-                ->filter(array('members__gt'=>0))
-                ->order_by('name');
-        }
-
-        foreach ($teams as $row) {
-            list($id, $name, $isenabled) = $row;
-            $names[$id] = self::getLocalById($id, 'name', $name);
-            if (!$isenabled)
-                $names[$id] .= ' ' . __('(disabled)');
+                ->filter(array('members_count__gt'=>0));
+            }
+
+            $items = array();
+            foreach ($query as $row) {
+                //TODO: Fix enabled - flags is a bit field.
+                list($id, $name, $enabled) = $row;
+                $items[$id] = sprintf('%s%s',
+                    self::getLocalById($id, 'name', $name),
+                    $enabled ? '' : ' ' . __('(disabled)'));
+            }
+
+            //TODO: sort if $criteria['localize'];
+            if ($criteria)
+                return $items;
+
+            $teams = $items;
         }
 
-        return $names;
+        return $teams;
     }
 
     static function getActiveTeams() {
-        return self::getTeams(true);
+        static $teams = null;
+
+        if (!isset($teams))
+            $teams = self::getTeams(array('active'=>true));
+
+        return $teams;
     }
 
-    static function create($vars=array()) {
+    static function create($vars=false) {
         $team = parent::create($vars);
         $team->created = SqlFunction::NOW();
         return $team;
     }
 
-    function update($vars, &$errors) {
-        if (isset($this->team_id) && $this->getId() != $vars['id'])
-            $errors['err']=__('Missing or invalid team');
-
-        if(!$vars['name']) {
-            $errors['name']=__('Team name is required');
-        } elseif(strlen($vars['name'])<3) {
-            $errors['name']=__('Team name must be at least 3 chars.');
-        } elseif(($tid=static::getIdByName($vars['name']))
-                && (!isset($this->team_id) || $tid!=$this->getId())) {
-            $errors['name']=__('Team name already exists');
-        }
-
-        if ($errors)
-            return false;
-
-        $this->isenabled = $vars['isenabled'];
-        $this->name = $vars['name'];
-        $this->noalerts = isset($vars['noalerts'])?$vars['noalerts']:0;
-        $this->notes = Format::sanitize($vars['notes']);
-        if (isset($vars['lead_id']))
-            $this->lead_id = $vars['lead_id'];
-
-        // reset team lead if they're being removed from the team
-        if ($this->getLeadId() == $vars['lead_id']
-                && $vars['remove'] && in_array($this->getLeadId(), $vars['remove']))
-            $this->lead_id = 0;
+    static function __create($vars, &$errors) {
+        return self::create($vars)->save();
+    }
 
-        if ($this->save())
-            return $this->updateMembership($vars);
+}
 
-        if ($this->__new__) {
-            $errors['err']=sprintf(__('Unable to create %s.'), __('this team'))
-               .' '.__('Internal error occurred');
-        }
-        else {
-            $errors['err']=sprintf(__('Unable to update %s.'), __('this team'))
-               .' '.__('Internal error occurred');
-        }
-        return false;
-    }
+class TeamMember extends VerySimpleModel {
+    static $meta = array(
+        'table' => TEAM_MEMBER_TABLE,
+        'pk' => array('team_id', 'staff_id'),
+        'joins' => array(
+            'team' => array(
+                'constraint' => array('team_id' => 'Team.team_id'),
+            ),
+            'staff' => array(
+                'constraint' => array('staff_id' => 'Staff.staff_id'),
+            ),
+        ),
+    );
 }
 ?>
diff --git a/include/staff/team.inc.php b/include/staff/team.inc.php
index 0d5fdd2d37e231408761e92d70adcd41b9dd531b..ec651205c6a9bf6e4529de325ba2c921e125c47d 100644
--- a/include/staff/team.inc.php
+++ b/include/staff/team.inc.php
@@ -1,8 +1,8 @@
 <?php
 if(!defined('OSTADMININC') || !$thisstaff || !$thisstaff->isAdmin()) die('Access Denied');
-$info=array();
+$info=$members=array();
 $qstr='';
-if($team && $_REQUEST['a']!='add'){
+if ($team && $_REQUEST['a']!='add') {
     //Editing Team
     $title=__('Update Team');
     $action='update';
@@ -11,7 +11,8 @@ if($team && $_REQUEST['a']!='add'){
     $info['id']=$team->getId();
     $trans['name'] = $team->getTranslateTag('name');
     $qstr.='&id='.$team->getId();
-}else {
+    $members = $team->getMembers();
+} else {
     $title=__('Add New Team');
     $action='create';
     $submit_text=__('Create Team');
@@ -19,16 +20,29 @@ if($team && $_REQUEST['a']!='add'){
     $info['noalerts']=0;
     $qstr.='&a='.$_REQUEST['a'];
 }
-$info=Format::htmlchars(($errors && $_POST)?$_POST:$info);
+
+$info = Format::htmlchars(($errors && $_POST) ? $_POST : $info);
 ?>
 <form action="teams.php?<?php echo $qstr; ?>" method="post" id="save">
  <?php csrf_token(); ?>
  <input type="hidden" name="do" value="<?php echo $action; ?>">
  <input type="hidden" name="a" value="<?php echo Format::htmlchars($_REQUEST['a']); ?>">
  <input type="hidden" name="id" value="<?php echo $info['id']; ?>">
- <h2><?php echo __('Team');?>
+ <h2><?php echo __('Team');?>&nbsp;
     <i class="help-tip icon-question-sign" href="#teams"></i>
     </h2>
+<br>
+<ul class="tabs">
+    <li class="active"><a href="#team">
+        <i class="icon-file"></i> <?php echo __('Team'); ?></a></li>
+    <?php
+    if ($members) { ?>
+    <li><a href="#members">
+        <i class="icon-group"></i> <?php echo __('Members'); ?></a></li>
+    <?php
+    } ?>
+</ul>
+<div id="team" class="tab_content">
  <table class="form_table" width="940" border="0" cellspacing="0" cellpadding="2">
     <thead>
         <tr>
@@ -71,9 +85,8 @@ $info=Format::htmlchars(($errors && $_POST)?$_POST:$info);
                 <span>
                 <select name="lead_id">
                     <option value="0">&mdash; <?php echo __('None');?> &mdash;</option>
-                    <option value="" disabled="disabled"><?php echo __('Select Team Lead (Optional)');?></option>
                     <?php
-                    if($team && ($members=$team->getMembers())){
+                    if ($members) {
                         foreach($members as $k=>$staff){
                             $selected=($info['lead_id'] && $staff->getId()==$info['lead_id'])?'selected="selected"':'';
                             echo sprintf('<option value="%d" %s>%s</option>',$staff->getId(),$selected,$staff->getName());
@@ -96,25 +109,6 @@ $info=Format::htmlchars(($errors && $_POST)?$_POST:$info);
                 <i class="help-tip icon-question-sign" href="#assignment_alert"></i>
             </td>
         </tr>
-        <?php
-        if($team && ($members=$team->getMembers())){ ?>
-        <tr>
-            <th colspan="2">
-                <em><strong><?php echo __('Team Members'); ?></strong>:
-                <i class="help-tip icon-question-sign" href="#members"></i>
-</em>
-            </th>
-        </tr>
-        <?php
-            foreach($members as $k=>$staff){
-                echo sprintf('<tr><td colspan=2><span style="width:350px;padding-left:5px; display:block;" class="pull-left">
-                            <b><a href="staff.php?id=%d">%s</a></span></b>
-                            &nbsp;<input type="checkbox" name="remove[]" value="%d"><i>'.__('Remove').'</i></td></tr>',
-                          $staff->getId(),$staff->getName(),$staff->getId());
-
-
-            }
-        } ?>
         <tr>
             <th colspan="2">
                 <em><strong><?php echo __('Admin Notes');?></strong>: <?php echo __('Internal notes viewable by all admins.');?>&nbsp;</em>
@@ -128,9 +122,39 @@ $info=Format::htmlchars(($errors && $_POST)?$_POST:$info);
         </tr>
     </tbody>
 </table>
+</div>
+<?php
+if ($members) { ?>
+<div id="members" class="tab_content" style="display:none">
+   <table class="form_table" width="940" border="0" cellspacing="0" cellpadding="2">
+    <thead>
+        <tr>
+            <th>
+                <em><?php echo __('Agents who are members of this team'); ?><i
+                    class="help-tip icon-question-sign" href="#members"></i></em>
+            </th>
+        </tr>
+    </thead>
+    <tbody>
+    <?php
+        foreach($members as $k=>$staff) {
+            echo sprintf('<tr><td colspan=2><span style="width:350px;padding-left:5px; display:block;" class="pull-left">
+                        <b><a href="staff.php?id=%d">%s</a></span></b>
+                        &nbsp;<input type="checkbox" name="remove[]" value="%d"><i>'.__('Remove').'</i></td></tr>',
+                        $staff->getId() ,
+                        $staff->getName(),
+                        $staff->getId());
+
+        }
+     ?>
+    </tbody>
+   </table>
+</div>
+<?php
+} ?>
 <p style="text-align:center">
     <input type="submit" name="submit" value="<?php echo $submit_text; ?>">
     <input type="reset"  name="reset"  value="<?php echo __('Reset');?>">
-    <input type="button" name="cancel" value="<?php echo __('Cancel');?>" onclick='window.location.href="teams.php"'>
+    <input type="button" name="cancel" value="<?php echo __('Cancel');?>" onclick='window.location.href="?"'>
 </p>
 </form>
diff --git a/include/staff/teams.inc.php b/include/staff/teams.inc.php
index d05c371d7a3e20ad36543d6a21e072b20b8273f9..22c08c2073dbf428d406df8320620d6cc7383615 100644
--- a/include/staff/teams.inc.php
+++ b/include/staff/teams.inc.php
@@ -2,40 +2,44 @@
 if(!defined('OSTADMININC') || !$thisstaff || !$thisstaff->isAdmin()) die('Access Denied');
 
 $qstr='';
-$sql='SELECT team.*,count(m.staff_id) as members,CONCAT_WS(" ",lead.firstname,lead.lastname) as team_lead '.
-     ' FROM '.TEAM_TABLE.' team '.
-     ' LEFT JOIN '.TEAM_MEMBER_TABLE.' m ON(m.team_id=team.team_id) '.
-     ' LEFT JOIN '.STAFF_TABLE.' lead ON(lead.staff_id=team.lead_id) ';
-$sql.=' WHERE 1';
-$sortOptions=array('name'=>'team.name','status'=>'team.isenabled','members'=>'members','lead'=>'team_lead','created'=>'team.created');
-$orderWays=array('DESC'=>'DESC','ASC'=>'ASC');
-$sort=($_REQUEST['sort'] && $sortOptions[strtolower($_REQUEST['sort'])])?strtolower($_REQUEST['sort']):'name';
+$sortOptions=array(
+        'name' => 'name',
+        'status' => 'isenabled',
+        'members' => 'members_count',
+        'lead' => 'lead__lastname',
+        'created' => 'created',
+        'updated' => '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];
+if ($sort && $sortOptions[$sort]) {
+    $order_column = $sortOptions[$sort];
 }
-$order_column=$order_column?$order_column:'team.name';
 
-if($_REQUEST['order'] && $orderWays[strtoupper($_REQUEST['order'])]) {
-    $order=$orderWays[strtoupper($_REQUEST['order'])];
+$order_column = $order_column ? $order_column : 'name';
+
+if ($_REQUEST['order'] && isset($orderWays[strtoupper($_REQUEST['order'])])) {
+    $order = $orderWays[strtoupper($_REQUEST['order'])];
+} else {
+    $order = 'ASC';
 }
-$order=$order?$order:'ASC';
 
-if($order_column && strpos($order_column,',')){
+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 ";
-
+$page = ($_GET['p'] && is_numeric($_GET['p'])) ? $_GET['p'] : 1;
+$count = Team::objects()->count();
+$pageNav = new Pagenate($count, $page, PAGE_LIMIT);
+$_qstr = $qstr.'&sort='.urlencode($_REQUEST['sort']).'&order='.urlencode($_REQUEST['order']);
+$pageNav->setURL('teams.php', $_qstr);
+$showing = $pageNav->showing().' '._N('team', 'teams', $count);
 $qstr.='&order='.($order=='DESC'?'ASC':'DESC');
 
-$query="$sql GROUP BY team.team_id ORDER BY $order_by";
-$res=db_query($query);
-if($res && ($num=db_num_rows($res)))
-    $showing=sprintf(__('Showing 1-%1$d of %2$d teams'), $num, $num);
-else
-    $showing=__('No teams found!');
 
 ?>
 <div class="pull-left" style="width:700px;padding-top:5px;">
@@ -65,38 +69,52 @@ else
     </thead>
     <tbody>
     <?php
-        $total=0;
-        $ids=($errors && is_array($_POST['ids']))?$_POST['ids']:null;
-        if($res && db_num_rows($res)):
-            while ($row = db_fetch_array($res)) {
+        $ids= ($errors && is_array($_POST['ids'])) ? $_POST['ids'] : null;
+        if ($count) {
+            $teams = Team::objects()
+                ->annotate(array(
+                        'members_count'=>SqlAggregate::COUNT('members', true),
+                ))
+                ->order_by(sprintf('%s%s',
+                            strcasecmp($order, 'DESC') ? '' : '-',
+                            $order_column))
+                ->limit($pageNav->getLimit())
+                ->offset($pageNav->getStart());
+
+            foreach ($teams as $team) {
+                $id = $team->getId();
                 $sel=false;
-                if($ids && in_array($row['team_id'],$ids))
+                if ($ids && in_array($id, $ids))
                     $sel=true;
                 ?>
-            <tr id="<?php echo $row['team_id']; ?>">
+            <tr id="<?php echo $id; ?>">
                 <td width=7px>
-                  <input type="checkbox" class="ckb" name="ids[]" value="<?php echo $row['team_id']; ?>"
-                            <?php echo $sel?'checked="checked"':''; ?>> </td>
-                <td><a href="teams.php?id=<?php echo $row['team_id']; ?>"><?php echo $row['name']; ?></a> &nbsp;</td>
-                <td>&nbsp;<?php echo $row['isenabled']?__('Active'):'<b>'.__('Disabled').'</b>'; ?></td>
+                  <input type="checkbox" class="ckb" name="ids[]"
+                  value="<?php echo $id; ?>"
+                            <?php echo $sel ? 'checked="checked"' : ''; ?>> </td>
+                <td><a href="teams.php?id=<?php echo $id; ?>"><?php echo
+                $team->getName(); ?></a> &nbsp;</td>
+                <td>&nbsp;<?php echo $team->isActive() ? __('Active') : '<b>'.__('Disabled').'</b>'; ?></td>
                 <td style="text-align:right;padding-right:25px">&nbsp;&nbsp;
-                    <?php if($row['members']>0) { ?>
-                        <a href="staff.php?tid=<?php echo $row['team_id']; ?>"><?php echo $row['members']; ?></a>
-                    <?php }else{ ?> 0
+                    <?php if ($team->members_count > 0) { ?>
+                        <a href="staff.php?tid=<?php echo $id; ?>"><?php
+                            echo $team->members_count; ?></a>
+                    <?php } else { ?> 0
                     <?php } ?>
                     &nbsp;
                 </td>
-                <td><a href="staff.php?id=<?php echo $row['lead_id']; ?>"><?php echo $row['team_lead']; ?>&nbsp;</a></td>
-                <td><?php echo Format::date($row['created']); ?>&nbsp;</td>
-                <td><?php echo Format::datetime($row['updated']); ?>&nbsp;</td>
+                <td><a href="staff.php?id=<?php
+                    echo $team->getLeadId(); ?>"><?php echo $team->lead ?: ''; ?>&nbsp;</a></td>
+                <td><?php echo Format::date($team->created); ?>&nbsp;</td>
+                <td><?php echo Format::datetime($team->updated); ?>&nbsp;</td>
             </tr>
             <?php
-            } //end of while.
-        endif; ?>
+            } //end of foreach
+        }?>
     <tfoot>
      <tr>
         <td colspan="7">
-            <?php if($res && $num){ ?>
+            <?php if ($count){ ?>
             <?php echo __('Select');?>:&nbsp;
             <a id="selectAll" href="#ckb"><?php echo __('All');?></a>&nbsp;&nbsp;
             <a id="selectNone" href="#ckb"><?php echo __('None');?></a>&nbsp;&nbsp;
@@ -109,7 +127,8 @@ else
     </tfoot>
 </table>
 <?php
-if($res && $num): //Show options..
+if ($count): //Show options..
+     echo '<div>&nbsp;'.__('Page').':'.$pageNav->getPageLinks().'&nbsp;</div>';
 ?>
 <p class="centered" id="actions">
     <input class="button" type="submit" name="enable" value="<?php echo __('Enable');?>" >
diff --git a/scp/teams.php b/scp/teams.php
index 42fb2cbdd1bd8d38b6b215f4220db5c395558ff8..28e72adbf8e850a6c59a3f85b846514b2222f2d2 100644
--- a/scp/teams.php
+++ b/scp/teams.php
@@ -33,8 +33,8 @@ if($_POST){
             }
             break;
         case 'create':
-            $team = Team::create();
-            if ($team->update($_POST,$errors)) {
+            $_team = Team::create();
+            if (($_team->update($_POST, $errors))){
                 $msg=sprintf(__('Successfully added %s'),Format::htmlchars($_POST['team']));
                 $_REQUEST['a']=null;
             }elseif(!$errors['err']){
@@ -49,10 +49,13 @@ if($_POST){
                 $count=count($_POST['ids']);
                 switch(strtolower($_POST['a'])) {
                     case 'enable':
-                        $sql='UPDATE '.TEAM_TABLE.' SET isenabled=1 '
-                            .' WHERE team_id IN ('.implode(',', db_input($_POST['ids'])).')';
+                        $num = Team::objects()->filter(array(
+                            'team_id__in' => $_POST['ids']
+                        ))->update(array(
+                            'isenabled' => 1
+                        ));
 
-                        if(db_query($sql) && ($num=db_affected_rows())) {
+                        if ($num) {
                             if($num==$count)
                                 $msg = sprintf(__('Successfully activated %s'),
                                     _N('selected team', 'selected teams', $count));
@@ -65,10 +68,13 @@ if($_POST){
                         }
                         break;
                     case 'disable':
-                        $sql='UPDATE '.TEAM_TABLE.' SET isenabled=0 '
-                            .' WHERE team_id IN ('.implode(',', db_input($_POST['ids'])).')';
+                        $num = Team::objects()->filter(array(
+                            'team_id__in' => $_POST['ids']
+                        ))->update(array(
+                            'isenabled' => 0
+                        ));
 
-                        if(db_query($sql) && ($num=db_affected_rows())) {
+                        if ($num) {
                             if($num==$count)
                                 $msg = sprintf(__('Successfully disabled %s'),
                                     _N('selected team', 'selected teams', $count));