       convertSubExpression: (parts) ->
         exp = @expression_builder.build()
         for x in parts
-          exp = exp.append(@process(x))
+          converted_part = @process(x)
+          exp = exp.append(converted_part)
         exp
 
       convertObject: (object)->

        @blank_builder = @opts.blank_builder || components.blank
        @multiplication_builder = @opts.multiplication_builder || components.multiplication

      process: (object_to_convert)->
        return @blank_builder.build() unless object_to_convert
        if object_to_convert instanceof Array
          @convertSubExpression(object_to_convert)

          power: power
        )

      convertImplicitSubexp = (subexp)->
        processed = @process(subexp)
        if typeof subexp == "number"
          @expression_builder.build(expression: [processed])
        else if subexp == null || subexp == false
          @expression_builder.build(expression: [])
        else if subexp instanceof Array
          processed
        else
          @expression_builder.build(expression: [processed])

      convertImplicitSubexp: logger().instrument(name: "convertImplicitSubexp", fn: convertImplicitSubexp)

    class_mixer BuildExpressionFromJavascriptObject

    BuildExpressionFromJavascriptObject.buildExpression = ->
      builder = BuildExpressionFromJavascriptObject.build()
      arguments_as_array = Array.prototype.slice.call(arguments, 0)
      converted_part = builder.process(arguments_as_array)
      logger().info("returned converted from process in buildExpression", converted_part.toString(), arguments_as_array)
      converted_part

    return BuildExpressionFromJavascriptObject

