             @addBbox @tools[@currentTool].bbox end.x, end.y
         # are interpolation adds an eliptical (circular) arc to the path
         else if @mode is 'cw' or @mode is 'ccw'
+          # throw if tool isn't a circle
+          unless @tools[@currentTool].stroke['stroke-linecap'] is 'round'
+            throw new Error "tool #{@currentTool} is not circular and cannot
+                             stroke arcs"
           r = Math.sqrt end.i**2 + end.j**2
           sweep = if @mode is 'cw' then 0 else 1
           large = 0

        # linear interpolation adds an absolute line to the path
        if @mode is 'i'
          # add the segment to the path
          @trace.path += "L#{end.x} #{end.y}"
          # add the segment to the bbox
          if @trace.region
            @addBbox {


      # finally, if it's a 1, we've got an interpolate
      else if op is '1'
        # throw if tool isn't traceable
        if not @trace.region and not @tools[@currentTool].stroke
          throw new Error "tool #{@currentTool} is not a strokeable tool"
        # if there's no path yet, we need to move to the current point
        unless @trace.path
          @trace.path = "M#{start.x} #{start.y}"
