     objState = stateFromSgfObject sgfObject,
                                   moves: moveToShow,
                                   scoring: scoringMode
+                                  deadStones: @state.deadStones
     {boardState, lastPlayed, prisoners, scores} = objState
     size = parseInt(sgfObject.gameTrees[0].nodes[0].SZ, 10) or 19
     nextColor = null
 
-    if (tesuji_charm.onTurn and \
+    if scoringMode
+      onBoardClick = (xy) =>
+        groupToToggle = go_rules.groupPoints xy.x, xy.y, boardState
+        @setState deadStones: groupToToggle
+    else if (tesuji_charm.onTurn and \
         (@state.viewingMove == null or \
          @state.viewingMove == moveCount(origSgfObject)))
+      # ready to accept a normal (non-dead stone marking) move
       nextColor = nextPlayerInSgfObject origSgfObject
-      onPlaceStone = (xy) =>
+      onBoardClick = (xy) =>
+        return if boardState[xy.y][xy.x] != 'empty'
         # can't put the response form under React control since it needs to be
         # generated by WTForms, server-side
         $('.confirm_button').prop('disabled', false)


  If 'moves' is given as an option, include only that many moves.

  If 'scoring' is given as an option, mark dame and scoring points."
  {moves, scoring} = options
  size = if sgfObject \
         then parseInt(sgfObject.gameTrees[0].nodes[0].SZ, 10) or 19 \
         else 19

    dame = div {className: "territory neutral"}
    blackScore = div {className: "territory black"}
    whiteScore = div {className: "territory white"}
    blackDead = div {className: "stone black dead"}
    whiteDead = div {className: "stone white dead"}
    lastPlayedMarker = div {className: "last-played"}
    hover = if @props.hoverColor \
            then div {className: "placement #{@props.hoverColor}"} \
