       frames: _.clone @frames
 
   canEditInitialValue: ->
-    not @isDependent(true) or @isAccumulator or @isInCycle
+    not @isDependent(true) or @isAccumulator or (@isInCycle and not @hasAccumulatorAncestor)
 
   canEditValueWhileRunning: ->
     not @isDependent(true)

    @color ?= Colors.choices[0].value

    @isInCycle = false      # we always initalize with no links, so we can't be in cycle

    @_collectorImageProps = null


  checkIsInIndependentCycle: ->
    visitedNodes = []
    original = this
    hasAccumulatorAncestor = false
    isOwnAncestor = false

    visit = (node) ->
      visitedNodes.push node
      for link in node.inLinks() when link.relation?.isDefined
        upstreamNode = link.sourceNode
        return true unless upstreamNode.isDependent(true)      # fast exit if we have an independent ancestor
        if upstreamNode is original then isOwnAncestor = true
        if upstreamNode.isAccumulator then hasAccumulatorAncestor = true
        unless _.contains visitedNodes, upstreamNode
          return true if visit upstreamNode

    hasIndependentAncestor = visit @

    @isInCycle = not hasIndependentAncestor and isOwnAncestor
    @hasAccumulatorAncestor = hasAccumulatorAncestor

  infoString: ->
    linkNamer = (link) ->
