   have to unzip and zip the tree for each added move. If
   remove-existing-moves? is true, any previously existing moves at the point
   of insertion are removed."
-  [game uci-moves & {:keys [node-id remove-existing-moves?]
-                     :or {node-id (current-node-id game)}}]
-  (add-move-sequence game board/move-from-uci uci-moves
-                     node-id
-                     remove-existing-moves?))
+  [game uci-moves & {:keys [node-id remove-existing-moves?]}]
+  (let [node-id (or node-id (current-node-id game))]
+    (add-move-sequence game board/move-from-uci uci-moves
+                       node-id
+                       remove-existing-moves?)))
 
 
 (defn add-byte-move-sequence

  added as the last child. If no node id is supplied, the current node of the
  game is used. If remove-existing-moves? is true, any previously existing
  moves at the point of insertion are removed."
  [game byte-move & {:keys [node-id remove-existing-moves?]
                     :or {:node-id (current-node-id game)}}]
  (add-move game board/move-from-byte byte-move
            node-id remove-existing-moves?))


(defn add-map-move

  id. The move is added as the last child. If no node id is supplied,
  the current node of the game is used. If remove-existing-moves? is true,
  any previously existing moves at the point of insertion are removed."
  [game san-move & {:keys [node-id remove-existing-moves?]}]
  (let [node-id (or node-id (current-node-id game))]
    (add-move game board/move-from-san san-move
              node-id
