     # Produce proxy object wrapping output in legacy-style port API
     outProxy = getOutputProxy config.outPorts, output
 
-    debug "PC: CALL WITH", data, groups, component.params, context.scope
+    debug "WirePattern Process API call with", data, groups, component.params, context.scope
 
     unless config.async
+      # Set up custom error handlers
+      errorHandler = setupErrorHandler component, config, output, ->
+        return output.done()
       # Synchronous WirePattern, call done here
       func.call component, data, groups, outProxy
+      do errorHandler
       output.done()
-      return
 
     # Async WirePattern will call the output.done callback itself
-    func.call component, data, groups, outProxy, output.done.bind output
+    errorHandler = setupErrorHandler component, config, output, ->
+      output.done()
+    func.call component, data, groups, outProxy, (err) ->
+      do errorHandler
+      output.done err
 
 # Provide deprecation warnings on certain more esoteric WirePattern features
 checkDeprecation = (config, func) ->
   needsFallback = false
+  # First check the conditions that force us to fall back on legacy WirePattern
   if config.group
-    platform.deprecated 'noflo.helpers.WirePattern group option is deprecated. Please port Process API'
+    platform.deprecated 'noflo.helpers.WirePattern group option is deprecated. Please port to Process API'
     needsFallback = true
   if config.field
-    platform.deprecated 'noflo.helpers.WirePattern field option is deprecated. Please port Process API'
+    platform.deprecated 'noflo.helpers.WirePattern field option is deprecated. Please port to Process API'
     needsFallback = true
   if func.length > 4
     platform.deprecated 'noflo.helpers.WirePattern postpone and resume are deprecated. Please port to Process API'
     needsFallback = true
+  # Then add deprecation warnings for other unwanted behaviors
+  unless config.async
+    platform.deprecated 'noflo.helpers.WirePattern synchronous is deprecated. Please port to Process API'
   return needsFallback
 
 # Updates component port definitions to control prots for WirePattern

# `group` is an optional group ID which will be used to wrap all error
# packets emitted by the component.
exports.MultiError = (component, group = '', errorPort = 'error', forwardedGroups = [], scope = null) ->
  component.hasErrors = false
  component.errors = []
  group = component.name if component.name and not group

# MapComponent maps a single inport to a single outport, forwarding all
# groups from in to out and calling `func` on each incoming packet
exports.MapComponent = (component, func, config) ->
  platform.deprecated 'noflo.helpers.MapComponent is deprecated. Please port to Process API'
  config = {} unless config
  config.inPort = 'in' unless config.inPort
  config.outPort = 'out' unless config.outPort
