     return false unless @started
     @connectionCount > 0
 
-  startComponents: ->
+  startComponents: (callback) ->
+    unless callback
+      callback = ->
+
     # Perform any startup routines necessary for every component.
     for id, process of @processes
       process.component.start()
-
-  sendDefaults: ->
+    do callback
+
+  sendDefaults: (callback) ->
+    unless callback
+      callback = ->
+
     for socket in @defaults
       # Don't send defaults if more than one socket is present on the port.
       # This case should only happen when a subgraph is created as a component

      socket.connect()
      socket.send()
      socket.disconnect()

  start: ->
    do @stop if @started
    @started = true
    @initials = @nextInitials.slice 0
    @startComponents()
    @sendInitials()
    @sendDefaults()

  stop: ->
    # Disconnect all connections

    initial.socket.send initial.data
    initial.socket.disconnect()

  sendInitials: (callback) ->
    unless callback
      callback = ->

    send = =>
      @sendInitial initial for initial in @initials
      @initials = []
      do callback

    if typeof process isnt 'undefined' and process.execPath and process.execPath.indexOf('node') isnt -1
      # nextTick is faster on Node.js
