public function GetAnnouncements($Wheres = '') {
      $Session = Gdn::Session();
      $Limit = Gdn::Config('Vanilla.Discussions.PerPage', 50);
      $Offset = 0;
      $UserID = $Session->UserID > 0 ? $Session->UserID : 0;

      // Get the discussion IDs of the announcements.
      $CacheKey = 'Announcements';
      
      $AnnouncementIDs = $this->SQL
         ->Cache($CacheKey)
         ->Select('d.DiscussionID')
         ->From('Discussion d')
         ->Where('d.Announce >', '0')->Get()->ResultArray();

      $AnnouncementIDs = ConsolidateArrayValuesByKey($AnnouncementIDs, 'DiscussionID');

      // Short circuit querying when there are no announcements.
      if (count($AnnouncementIDs) == 0)
         return new Gdn_DataSet();

      $this->DiscussionSummaryQuery(array(), FALSE);
      
      if (!empty($Wheres))
         $this->SQL->Where($Wheres);

      if ($UserID) {
         $this->SQL->Select('w.UserID', '', 'WatchUserID')
         ->Select('w.DateLastViewed, w.Dismissed, w.Bookmarked')
         ->Select('w.CountComments', '', 'CountCommentWatch')
         ->Join('UserDiscussion w', 'd.DiscussionID = w.DiscussionID and w.UserID = '.$UserID, 'left');
      } else {
         // Don't join in the user table when we are a guest.
         $this->SQL->Select('null as WatchUserID, null as DateLastViewed, null as Dismissed, null as Bookmarked, null as CountCommentWatch');
      }
      
      // Add conditions passed.
//      if (is_array($Wheres))
//         $this->SQL->Where($Wheres);
//
//      $this->SQL
//         ->Where('d.Announce', '1');

      $this->SQL->WhereIn('d.DiscussionID', $AnnouncementIDs);
      
      // If we aren't viewing announcements in a category then only show global announcements.
      if (!$Wheres) {
         $this->SQL->Where('d.Announce', 1);
      } else {
         $this->SQL->Where('d.Announce >', 0);
      }

      // If we allow users to dismiss discussions, skip ones this user dismissed
      if (C('Vanilla.Discussions.Dismiss', 1) && $UserID) {
         $this->SQL
            ->Where('coalesce(w.Dismissed, \'0\')', '0', FALSE);
      }

      $this->SQL
         ->OrderBy(self::GetSortField(), 'desc')
         ->Limit($Limit, $Offset);

      $Data = $this->SQL->Get();
      
      // Save the announcements that were fetched for later removal.
      $AnnouncementIDs = array();
      foreach ($Data as $Row) {
         $AnnouncementIDs[] = GetValue('DiscussionID', $Row);
      }
      $this->_AnnouncementIDs = $AnnouncementIDs;
			
		$this->AddDiscussionColumns($Data);
      
      if (C('Vanilla.Views.Denormalize', FALSE))
         $this->AddDenormalizedViews($Data);
      
      Gdn::UserModel()->JoinUsers($Data, array('FirstUserID', 'LastUserID'));
      CategoryModel::JoinCategories($Data);
      
		// Prep and fire event
		$this->EventArguments['Data'] = $Data;
		$this->FireEvent('AfterAddColumns');

		return $Data;
   }