     category: 'NewAccount', label: 'VerifyAccount'
   }
 
-  @identifyAndTrack = (username, event, eventProperties = {}) ->
-    @identify username
-    @track username, event, eventProperties
+  @identifyAndTrack = (username, event, eventProperties = {}, callback = ->) ->
+    @identify username, {}, (err) =>
+      return callback err  if err
+
+      @track username, event, eventProperties, callback
 
 
-  @identify = (username, traits = {}) ->
+  @identify = (username, traits = {}, callback = ->) ->
+
     return  unless KONFIG.sendEventsToSegment
 
     # use `forcedRecipientEmail` for both username and email

    event.properties   = @addDefaults { options, username }

    unless mqClient
      return console.error 'Tracker: RabbitMQ client not set'

    sendMessage = ->
      mqClient.exchange "#{exchangeName}", exchangeOpts, (exchange) ->
        unless exchange
          return console.error "Tracker: Exchange not found to queue: #{exchangeName}"

        exchange.publish '', event, { type: EVENT_TYPE }
        exchange.close()

    if mqClient.readyEmitted then sendMessage()
    else mqClient.on 'ready', -> sendMessage()


    callback()

  errMQClientNotSet = new Error 'Tracker: RabbitMQ client not set'

  @track = (username, event, options = {}, callback = ->) ->

    return callback null  unless KONFIG.sendEventsToSegment

    _.extend options, @properties[event.subject]

