 
 
   decorateCommentEvent = (relationship, callback) ->
+    # it will be decorated as
+    # source is JAccount          -- doer
+    # target is JAccount          -- owner of the status update
+    # object is JComment          -- the actual comment
+    # subject is JNewStatusUpdate -- post that is commented on
     {source, target, as, timestamp} = relationship
     modifiedEvent =
       as        : as

    sharedMethods :
      static      : ["fetch"]

  relationshipNames = ["follower", "like", "member", "user", "reply", "author"]
  constructorNames  = ["JAccount", "JNewApp", "JGroup", "JTag", "JNewStatusUpdate", "JComment"]

  JAccount = require './account'

  filterSources = (filters) =>
    relationshipMap =
      "follower" : ["JTag"]
      "like"     : ["JAccount", "JNewStatusUpdate"]
      "member"   : ["JGroup"]
      "user"     : ["JApp"]

    sources = []
    for filter in filters
      sources.concat relationshipMap[filter]

    if sources.length is 0
      return constructorNames
    return sources

  filterTargets = (filters) ->
    validFilters = ["follower", "like", "member", "user"]
    targets = []
    # The only possible options are either returning only "JAccount" or

      object    : target
      timestamp : timestamp

    # rewrite this part without dash ~ C.S
    queue = [
      ->
        source.fetchTags (err, tags) ->
          return callback err if err
          modifiedEvent.subject.tags = tags
          queue.fin()
      # disable for now
      # ->
      #   target.fetchTags (err, tags) ->
      #     return callback err if err
      #     modifiedEvent.object.tags = tags
      #     queue.fin()
      ->
        JAccount.one "_id": source.originId, (err, targetAccount) ->
          return callback err if err
