     @listController.resetList()
     @listController.removeAllItems()
 
-  setFilter:(type) -> @currentFilter = if type? then [type] else activityTypes
-
-  getFilter: -> @currentFilter
-
   ownActivityArrived:(activity)-> @listController.ownActivityArrived activity
 
   fetchCurrentGroup:(callback)-> callback @currentGroupSlug
 
   attachEvents:(controller)->
-
-    @listController    = controller
     activityController = KD.getSingleton('activityController')
-
-    controller.on 'LazyLoadThresholdReached', @continueLoadingTeasers.bind @
-    controller.on 'teasersLoaded', @teasersLoaded.bind @
+    activityController.on 'ActivitiesArrived', @bound "activitiesArrived"
+    #activityController.on 'Refresh', @bound "refresh"
+
+    @listController = controller
+    @listController.on 'LazyLoadThresholdReached', @continueLoadingTeasers.bind @
+    @listController.on 'teasersLoaded', @teasersLoaded.bind @
 
     @getView().widgetController.on "FakeActivityHasArrived", (activity)->
       controller.fakeActivityArrived activity
 
     @getView().widgetController.on "OwnActivityHasArrived", @ownActivityArrived.bind @
 
-    activityController.on 'ActivitiesArrived', @bound "activitiesArrived"
-    activityController.on 'Refresh', @bound "refresh"
-
     @getView().innerNav.on "NavItemReceivedClick", (data)=>
       KD.track "Activity", data.type + "FilterClicked"
+
       @isLoading = no
       @resetAll()
-      # the filterList on top of the innerNav is clicked
-      if data.type in ["Public", "Followed"]
-        @feedType = data.type
+
+      if data.type in ["Public", "Followed"] then @setFeedFilter data.type
+      else @setActivityFilter data.type
+
+      @populateActivity()
+
+  setFeedFilter: (feedType) -> @currentFeedFilter = feedType
+  getFeedFilter: -> @currentFeedFilter or "Public"
+
+  setActivityFilter: (activityType)-> @currentActivityFilter = activityType
+  getActivityFilter: -> @currentActivityFilter or "Everything"
+
+  populateActivity:(options = {}, callback)->
+    return  if @isLoading
+
+    @listController.showLazyLoader()
+    @listController.hideNoItemWidget()
+
+    @isLoading       = yes
+    groupsController = KD.getSingleton 'groupsController'
+    {isReady}        = groupsController
+    currentGroup     = groupsController.getCurrentGroup()
+
+    #fetch = ()=>
+      # since it is not working, disabled it,
+      # to-do add isExempt control.
+      # @isExempt (exempt)=>
+      #   if exempt or @getFilter() isnt activityTypes
+
+    options =
+      to     : options.to or Date.now()
+      #from   : options.from
+      group  :
+        slug : currentGroup.slug or "koding"
+        id   : currentGroup.getId()
+      limit  : 20
+      facets : @getActivityFilter()
+
+    @fetchActivities options, (err, cache)=>
+      @isLoading = no
+
+      if err or cache.length is 0
+        warn err  if err
+
+        @listController.hideLazyLoader()
+        @listController.showNoItemWidget()
       else
-        @setFilter data.type
-      @populateActivity()
+        @extractCacheTimeStamps cache
+
+        @sanitizeCache cache, (err, cache)=>
+          @listController.hideLazyLoader()
+          @listController.listActivitiesFromCache cache
+
+    #if isReady
+    #then fetch
+    #else groupsController.once 'groupChanged', fetch
+
+  fetchActivities: (options={}, callback)->
+    {CStatusActivity, CActivity} = KD.remote.api
+
+    if @getFeedFilter() is "Public"
+      CStatusActivity.fetchPublicActivityFeed options, (err, result)=>
+        result.overview.reverse()  if result.overview
+        return callback err, result
+    else
+      CActivity.fetchFolloweeContents options, callback
 
   activitiesArrived:(activities)->
     filter = [

  ]

  @clearQuotes = clearQuotes = (activities)->

    return activities = for activityId, activity of activities
      activity.snapshot = activity.snapshot?.replace /&quot;/g, '\"'
      activity

  constructor:(options={})->

    options.view    = new ActivityAppView
    options.appInfo =
      name          : 'Activity'

    panelHeight      = contentPanel.$('.activity-content')[0].clientHeight

    if scrollViewHeight + headerHeight < panelHeight
      log "teasersLoaded"

      @continueLoadingTeasers()

  createContentDisplay:(activity, callback=->)->
