diff --git a/app/templates/courses/course-details.jade b/app/templates/courses/course-details.jade
index 87e3f958a..be01acffc 100644
--- a/app/templates/courses/course-details.jade
+++ b/app/templates/courses/course-details.jade
@@ -80,21 +80,28 @@ mixin progress-summary-stats
       td 
         if courseInstance
           div #{courseInstance.get('members').length}
-    tr
-      td Average level play time:
-      td TODO
-    tr
-      td Total play time:
-      td TODO
-    tr
-      td Average levels completed:
-      td TODO
-    tr
-      td Total levels completed:
-      td TODO
-    tr
-      td Furthest level completed:
-      td TODO
+    if instanceStats
+      tr
+        td Average level play time:
+        if instanceStats.averageLevelPlaytime > 0
+          td= moment.duration(instanceStats.averageLevelPlaytime, "seconds").humanize()
+        else
+          td 0
+      tr
+        td Total play time:
+        if instanceStats.totalPlayTime > 0
+          td= moment.duration(instanceStats.totalPlayTime, "seconds").humanize()
+        else
+          td 0
+      tr
+        td Average levels completed:
+        td #{instanceStats.averageLevelsCompleted.toFixed(2)}
+      tr
+        td Total levels completed:
+        td= instanceStats.totalLevelsCompleted
+      tr
+        td Furthest level completed:
+        td= instanceStats.furthestLevelCompleted.replace('Course: ', '')
 
 mixin progress-summary-concepts
   h3 Concepts Covered
@@ -160,9 +167,9 @@ mixin progress-members
 mixin progress-members-individual(memberID)
   - var name = memberUserMap[memberID] ? memberUserMap[memberID].get('name') : 'Anoner'
   a(href="/user/#{memberID}")= name || 'Anoner'
-  div TODO: levels completed
-  div TODO: total time played
-  div TODO: last played
+  if memberStats && memberStats[memberID]
+    div #{memberStats[memberID].totalLevelsCompleted} levels
+    div Played #{moment.duration(memberStats[memberID].totalPlayTime, "seconds").humanize()}
 
 mixin progress-members-concepts(memberID)
   if course && userLevelStateMap[memberID]
diff --git a/app/views/courses/CourseDetailsView.coffee b/app/views/courses/CourseDetailsView.coffee
index 6d423e2d4..93b3a246c 100644
--- a/app/views/courses/CourseDetailsView.coffee
+++ b/app/views/courses/CourseDetailsView.coffee
@@ -42,8 +42,10 @@ module.exports = class CourseDetailsView extends RootView
     context.course = @course if @course?.loaded
     context.courseInstance = @courseInstance if @courseInstance?.loaded
     context.courseInstances = @courseInstances?.models ? []
+    context.instanceStats = @instanceStats
     context.levelConceptMap = @levelConceptMap ? {}
     context.memberSort = @memberSort
+    context.memberStats = @memberStats
     context.memberUserMap = @memberUserMap ? {}
     context.noCourseInstance = @noCourseInstance
     context.noCourseInstanceSelected = @noCourseInstanceSelected
@@ -118,17 +120,36 @@ module.exports = class CourseDetailsView extends RootView
 
   onLevelSessionsSync: ->
     # console.log 'onLevelSessionsSync'
+    @instanceStats = averageLevelsCompleted: 0, furthestLevelCompleted: '', totalLevelsCompleted: 0, totalPlayTime: 0
+    @memberStats = {}
     @userConceptStateMap = {}
     @userLevelStateMap = {}
+    levelStateMap = {}
     for levelSession in @levelSessions.models
       userID = levelSession.get('creator')
       levelID = levelSession.get('level').original
-      @userConceptStateMap[userID] ?= {}
-      @userLevelStateMap[userID] ?= {}
       state = if levelSession.get('state')?.complete then 'complete' else 'started'
-      @userLevelStateMap[userID][levelID] = state
+      levelStateMap[levelID] = state
+
+      @instanceStats.totalLevelsCompleted++ if state is 'complete'
+      @instanceStats.totalPlayTime += levelSession.get('playtime')
+
+      @memberStats[userID] ?= totalLevelsCompleted: 0, totalPlayTime: 0
+      @memberStats[userID].totalLevelsCompleted++ if state is 'complete'
+      @memberStats[userID].totalPlayTime += levelSession.get('playtime')
+
+      @userConceptStateMap[userID] ?= {}
       for concept of @levelConceptMap[levelID]
         @userConceptStateMap[userID][concept] = state
+
+      @userLevelStateMap[userID] ?= {}
+      @userLevelStateMap[userID][levelID] = state
+
+    if @courseInstance.get('members').length > 0
+      @instanceStats.averageLevelsCompleted = @instanceStats.totalLevelsCompleted / @courseInstance.get('members').length
+    for levelID, level of @campaign.get('levels')
+      @instanceStats.furthestLevelCompleted = level.name if levelStateMap[levelID] is 'complete'
+
     @conceptsCompleted = {}
     for userID, conceptStateMap of @userConceptStateMap
       for concept, state of conceptStateMap