diff --git a/lib/solve.rb b/lib/solve.rb
index <HASH>..<HASH> 100644
--- a/lib/solve.rb
+++ b/lib/solve.rb
@@ -25,7 +25,10 @@ module Solve
     # @param [Array<Solve::Demand>, Array<String, String>] demands
     #
     # @option options [#say] :ui (nil)
-    #   a ui object for output
+    #   a ui object for output, this will be used to output from a Solve::Tracers::HumanReadable if 
+    #   no other tracer is provided in options[:tracer]
+    # @option options [AbstractTracer] :tracer (nil)
+    #   a Tracer object that is used to format and output tracing information
     # @option options [Boolean] :sorted (false)
     #   should the output be a sorted list rather than a Hash
     #
@@ -33,7 +36,7 @@ module Solve
     #
     # @return [Hash]
     def it!(graph, demands, options = {})
-      @tracer = Solve::Tracers.human_readable(options[:ui])
+      @tracer = options[:tracer] || Solve::Tracers.human_readable(options[:ui])
       Solver.new(graph, demands, options[:ui]).resolve(options)
     end
Allow a user to pass in their own Tracer object so they are not forced
into using the HumanReadable one.