             .call(arcTween, scope.percent * τ)
 
       # watch for attribute changes and call the changed function
-      scope.$watch 'contributor', scope.change()
-      scope.$watch 'scope', scope.change()
-
-      # initial run
-      scope.drawD3()
+      scope.$watch 'contributor', (-> scope.change())
+      scope.$watch 'scale', (-> scope.change())
   ]
            .attr("width", scope.radius)
            .attr("height", scope.radius)
            .attr("transform", "translate(#{scope.radius/2},#{scope.radius/2})")
      # get favicon url from contributor name
      ApiGet.own "favicon?company=\"#{scope.contributor.name}\"", scope.draw_favicon, this

      # draw d3 here on the canvas defined above
      scope.drawD3 = ->

    link: (scope, element, attrs)->

      scope.change = ->
        if scope.contributor
          scope.percent = (scope.contributor.total_amount / scope.scale)
          # get favicon url from contributor name
          ApiGet.own "favicon?company=\"#{scope.contributor.name}\"", scope.draw_favicon, this
          scope.drawD3()

      # on window resize, redraw d3 canvas
      scope.$watch( (-> angular.element(window)[0].innerWidth), (-> scope.change()) )
      window.onresize = (-> scope.$apply())
      # make the canvas once
      canvas = d3.select(element[0]).append("svg")
