         else if Array.isArray v
           fnl_props[k] = v.join ','
         else if typeof v isnt 'string'
-          return callback Error "Invalid value type '#{typeof v}' for property '#{k}'"
+          throw Error "Invalid value type '#{typeof v}' for property '#{k}'"
         else fnl_props[k] = v
-      do_compare()
-    do_compare = ->
+    @call ->
       keys = {}
       for k in Object.keys(org_props) then keys[k] = true
       for k in Object.keys(fnl_props) then keys[k] = true unless keys[k]?

###
module.exports.push required: true, handler: ->
  return if @registered 'hconfigure'
  @register 'hconfigure', (options, callback) ->
    fnl_props = {}
    org_props = {}
    updated = 0
    options.source ?= options.destination
    do_read_source = ->
      options.log? "Read source properties from '#{options.source}'"
      # Populate org_props and, if merge, fnl_props
      properties.read options.ssh, options.source, (err, props) ->

        continue unless org_props[k] isnt fnl_props[k]
        options.log? "Property '#{k}' was '#{org_props[k]}' and is now '#{fnl_props[k]}'"
        updated = true
    @call ->
      options.content = properties.stringify fnl_props
      options.source = null
      @write options
