diff --git a/server/levels/sessions/LevelSession.coffee b/server/levels/sessions/LevelSession.coffee
index 22306c3c0..7832875c0 100644
--- a/server/levels/sessions/LevelSession.coffee
+++ b/server/levels/sessions/LevelSession.coffee
@@ -50,10 +50,8 @@ LevelSessionSchema.pre 'save', (next) ->
 LevelSessionSchema.statics.privateProperties = ['code', 'submittedCode', 'unsubscribed']
 LevelSessionSchema.statics.editableProperties = ['multiplayer', 'players', 'code', 'codeLanguage', 'completed', 'state',
                                                  'levelName', 'creatorName', 'levelID', 'screenshot',
-                                                 'chat', 'teamSpells', 'submitted', 'submittedCodeLanguage', 
+                                                 'chat', 'teamSpells', 'submitted', 'submittedCodeLanguage',
                                                  'unsubscribed', 'playtime', 'heroConfig', 'team', 'transpiledCode']
 LevelSessionSchema.statics.jsonSchema = jsonschema
 
-LevelSessionSchema.index {user: 1, changed: -1}, {sparse: true, name: 'last played index'}
-
 module.exports = LevelSession = mongoose.model('level.session', LevelSessionSchema, 'level.sessions')
diff --git a/server/routes/contact.coffee b/server/routes/contact.coffee
index bce7e8612..2ae8564fc 100644
--- a/server/routes/contact.coffee
+++ b/server/routes/contact.coffee
@@ -2,6 +2,9 @@ config = require '../../server_config'
 log = require 'winston'
 User = require '../users/User'
 sendwithus = require '../sendwithus'
+async = require 'async'
+LevelSession = require '../levels/sessions/LevelSession'
+moment = require 'moment'
 
 module.exports.setup = (app) ->
   app.post '/contact', (req, res) ->
@@ -19,7 +22,8 @@ createMailContext = (sender, message, user, recipientID, subject, done) ->
   content = """
     #{message}
 
-    #{user.get('name') or 'Anonymous'} - Level #{level}#{if premium then ' - Subscriber' else ''} - #{user._id}
+    --
+    <a href='http://codecombat.com/user/#{user.get('slug') or user.get('_id')}'>#{user.get('name') or 'Anonymous'}</a> - Level #{level}#{if premium then ' - Subscriber' else ''}
   """
 
   context =
@@ -39,8 +43,31 @@ createMailContext = (sender, message, user, recipientID, subject, done) ->
       if err
         log.error "Error looking up recipient to email from #{recipientID}: #{err}" if err
       else
-        context.bcc = [context.to, sender]
-        context.to = document.get('email')
+        context.recipient.bcc = [context.recipient.address, sender]
+        context.recipient.address = document.get('email')
+        context.email_data.content = message
       done context
   else
-    done context
+    async.waterfall [
+      fetchRecentSessions.bind undefined, user, context
+      # Can add other data-grabbing stuff here if we want.
+      # TODO: grab platform/browser/browser version/screen size from client
+      # TODO: try automatically including Surface screenshot if opening contact form from level?
+    ], (err, results) ->
+      console.error "Error getting contact message context for #{sender}: #{err}" if err
+      done context
+
+fetchRecentSessions = (user, context, callback) ->
+  query = creator: user.get('_id') + ''
+  projection = levelID: 1, levelName: 1, changed: 1, team: 1, codeLanguage: 1, 'state.complete': 1, playtime: 1
+  sort = changed: -1
+  LevelSession.find(query).select(projection).sort(sort).limit(3).lean().exec (err, sessions) ->
+    return callback err if err
+    console.log 'found', sessions.length, 'sessions'
+    for s in sessions
+      if s.playtime < 120 then playtime = "#{s.playtime}s played"
+      else if s.playtime < 7200 then playtime = "#{Math.round(s.playtime / 60)}m played"
+      else playtime = "#{Math.round(s.playtime / 3600)}h played"
+      ago = moment(s.changed).fromNow()
+      context.email_data.content += "\n<a href='http://codecombat.com/play/level/#{s.levelID}?session=#{s._id}&team=#{s.team or 'humans'}&dev=true'>#{s.levelName}#{if s.team is 'ogres' then ' ' + s.team else ''}</a>#{if s.state?.complete then ' complete ' else ''}- #{s.codeLanguage}, #{playtime}, #{ago}"
+    callback null