       campaign = null
 
       queue = [
-        ->
-
+
+        (next) ->
           # TODO Add fetcher for active campaign ~ GG
           JRewardCampaign.isValid 'register', (err, res) ->
-            return logError err  if err
+            return next err  if err
             return  unless res.isValid
 
             campaign = res.campaign
-            queue.next()
-
-        ->
-
+            next()
+
+        (next) ->
           fetchReferrer account, (err, _referrer) ->
-            return logError err  if err
+            return next err  if err
             return  unless _referrer
             referrer = _referrer
-            queue.next()
-
-        ->
-
-          createRewards campaign, referrer, account, (err) ->
-            return logError err  if err
-            queue.next()
-
-        ->
-
-          createRewards campaign, account, referrer, (err) ->
-            return logError err  if err
-            queue.next()
+            next()
+
+        (next) ->
+          createRewards campaign, referrer, account, next
+
+        (next) ->
+          createRewards campaign, account, referrer, next
 
       ]
 
-      daisy queue
+      async.series queue, (err) ->
+        logError err  if err
 
 
   addEmailConfimedListener = ->


      queue = [

        ->

          user.fetchOwnAccount (err, myAccount) ->
            return logError err  if err
            # if account not found then do nothing and return
            return logError "Account couldn't found" unless myAccount

            me = myAccount
            queue.next()

        ->

          if me.referralUsed
            return logError 'User already get the referrer'

          fetchReferrer me, (err, _referrer) ->
            return logError err  if err
            return  unless _referrer
            referrer = _referrer
            queue.next()

        ->

          me.update { $set: { 'referralUsed': yes } }, (err) ->
            return logError err if err
            queue.next()

        ->

          confirmRewards referrer, me, (err) ->
            return logError err if err
            queue.next()

        ->

          confirmRewards me, referrer, (err) ->
            return logError err if err
            queue.next()

      ]

      daisy queue


  do ->

        rewards ?= []

        rewards.forEach (reward) ->
          queue.push (next) ->

            JAccount.one { _id: reward.providedBy }, (err, account) ->
              if not err and account
