diff --git a/server/plugins/plugins.coffee b/server/plugins/plugins.coffee
index 2fdce3bef..114294ed8 100644
--- a/server/plugins/plugins.coffee
+++ b/server/plugins/plugins.coffee
@@ -30,6 +30,10 @@ module.exports.NamedPlugin = (schema) ->
   schema.add({name: String, slug: String})
   schema.index({'slug': 1}, {unique: true, sparse: true, name: 'slug index'})
 
+  schema.statics.getBySlug = (slug, done) ->
+    @findOne {slug: slug}, (err, doc) ->
+      if err then done err else done doc
+
   schema.pre('save', (next) ->
     if schema.uses_coco_versions
       v = @get('version')
diff --git a/server/users/user_handler.coffee b/server/users/user_handler.coffee
index fbd13ec19..5b4241c92 100644
--- a/server/users/user_handler.coffee
+++ b/server/users/user_handler.coffee
@@ -239,31 +239,38 @@ UserHandler = class UserHandler extends Handler
       documents = (LevelSessionHandler.formatEntity(req, doc) for doc in documents)
       @sendSuccess(res, documents)
 
-  getLevelSessions: (req, res, userID) ->
-    query = creator: userID
-    isAuthorized = req.user._id+'' is userID or req.user.isAdmin()
-    projection = {}
-    if req.query.project
-      projection[field] = 1 for field in req.query.project.split(',') when isAuthorized or not (field in LevelSessionHandler.privateProperties)
-    else unless isAuthorized
-      projection[field] = 0 for field in LevelSessionHandler.privateProperties
+  IDify: (idOrSlug, done) ->
+    if Handler.isID idOrSlug
+      done idOrSlug
+    else
+      User.getBySlug idOrSlug, (user) -> done user?.get '_id'
 
-    LevelSession.find(query).select(projection).exec (err, documents) =>
-      return @sendDatabaseError(res, err) if err
-      documents = (LevelSessionHandler.formatEntity(req, doc) for doc in documents)
-      @sendSuccess(res, documents)
+  getLevelSessions: (req, res, userIDOrSlug) ->
+    @IDify userIDOrSlug, (userID) =>
+      query = creator: userID + ''
+      isAuthorized = req.user._id+'' is userID or req.user.isAdmin()
+      projection = {}
+      if req.query.project
+        projection[field] = 1 for field in req.query.project.split(',') when isAuthorized or not (field in LevelSessionHandler.privateProperties)
+      else unless isAuthorized
+        projection[field] = 0 for field in LevelSessionHandler.privateProperties
 
-  getEarnedAchievements: (req, res, userID) ->
-    queryObject = {$query: {user: userID}, $orderby: {changed: -1}}
-    queryObject.$query.notified = false if req.query.notified is 'false'
-    query = EarnedAchievement.find(queryObject)
-    query.exec (err, documents) =>
-      return @sendDatabaseError(res, err) if err?
-      cleandocs = (@formatEntity(req, doc) for doc in documents)
-      for doc in documents  # Maybe move this logic elsewhere
-        doc.set('notified', true)
-        doc.save()
-      @sendSuccess(res, cleandocs)
+      LevelSession.find(query).select(projection).exec (err, documents) =>
+        return @sendDatabaseError(res, err) if err
+        documents = (LevelSessionHandler.formatEntity(req, doc) for doc in documents)
+        @sendSuccess(res, documents)
+
+  getEarnedAchievements: (req, res, userIDOrSlug) ->
+    @IDify userIDOrSlug, (userID) =>
+      query = user: userID + ''
+      query.notified = false if req.query.notified is 'false'
+      EarnedAchievement.find(query).sort(changed: -1).exec (err, documents) =>
+        return @sendDatabaseError(res, err) if err?
+        cleandocs = (@formatEntity(req, doc) for doc in documents)
+        for doc in documents  # TODO Ruben Maybe move this logic elsewhere
+          doc.set('notified', true)
+          doc.save()
+        @sendSuccess(res, cleandocs)
 
   trackActivity: (req, res, userID, activityName, increment=1) ->
     return @sendMethodNotAllowed res unless req.method is 'POST'