     template: '<li><small>${id}</small> ${title}</li>'
 
   # Add GFM auto-completion to all input fields, that accept GFM input.
-  setup: ->
-    input = $('.js-gfm-input')
+  setup: (wrap) ->
+    @input = $('.js-gfm-input')
 
+    # destroy previous instances
+    @destroyAtWho()
+
+    # set up instances
+    @setupAtWho()
+
+    if @dataSource
+      if !@dataLoading
+        @dataLoading = true
+
+        # We should wait until initializations are done
+        # and only trigger the last .setup since
+        # The previous .dataSource belongs to the previous issuable
+        # and the last one will have the **proper** .dataSource property
+        # TODO: Make this a singleton and turn off events when moving to another page
+        setTimeout( =>
+          fetch = @fetchData(@dataSource)
+          fetch.done (data) =>
+            @dataLoading = false
+            @loadData(data)
+        , 1000)
+
+
+  setupAtWho: ->
     # Emoji
-    input.atwho
+    @input.atwho
       at: ':'
       displayTpl: @Emoji.template
       insertTpl: ':${name}:'
 
     # Team Members
-    input.atwho
+    @input.atwho
       at: '@'
       displayTpl: @Members.template
       insertTpl: '${atwho-at}${username}'


window.GitLab ?= {}
GitLab.GfmAutoComplete =
  dataSource: ''

  # Emoji

            title:  sanitize(m.title)
            search: "#{m.iid} #{m.title}"

  destroyAtWho: ->
    @input.atwho('destroy')

  fetchData: (dataSource) ->
    $.getJSON(dataSource)

  loadData: (data) ->
    # load members
    @input.atwho 'load', '@', data.members
    # load issues
    @input.atwho 'load', 'issues', data.issues
    # load merge requests
    @input.atwho 'load', 'mergerequests', data.mergerequests
    # load emojis
    @input.atwho 'load', ':', data.emojis
