         [overtone.sc.defaults :only [foundation-groups*]])
   (:require [clojure.zip :as zip]
             [overtone.config.log :as log]))
+
+(defonce ^{:dynamic true} *non-active-node-modification-exceptions* true)
 
 (defonce ^{:private true}
   _PROTOCOLS_

  {:pre [(server-connected?)]}
  (if (node-active? node)
    (snd "/n_free" (to-synth-id node))
    (throw (Exception. (str "Trying to free a synth node that has been destroyed: " node)))))

(defn- node-destroyed
  "Frees up a synth node to keep in sync with the server."

  (let [node-id (to-synth-id node)]
    (if (node-active? node)
      (apply snd "/n_set" node-id (floatify (stringify (bus->id name-values))))
      (let [err-msg (str "Trying to control a synth node that has been destroyed: " node)]
        (if *non-active-node-modification-exceptions*
          (throw (Exception. err-msg))
          (println "Warning - " err-msg))))
    node))

(defn node-get-control
  "Get one or more synth control values by name.  Returns a map of
