     deferred = Q.defer()
     user = @records[id]
     if not user
-      # Read user data from file
-      fs.readFile @filename(id)[0], (err, buffer) =>
-        if err then return deferred.reject("err_no_user")
-        data = shrink.expand msgpack.unpack(buffer)
-        user = @records[id] = new @(data)
-        deferred.resolve user._clone()
+      File.read(id)
+        .then (data) =>
+          user = @records[id] = new @(data)
+          deferred.resolve user._clone()
+        .fail (err) ->
+          deferred.reject(err)
     else
       deferred.resolve user._clone()
     return deferred.promise

      fs.writeFile(path, data, deferred.resolve)
    return deferred.promise

  # Delete user file
  del: (id) ->
    deferred = Q.defer()

# ---------------

File =

  # Write user object to file
  write: (user) ->
    deferred = Q.defer()
