   only need to do this if you wish to stop the handler's destination
   before your app is undeployed"
   [listener]
-  (.close listener))+  (.close listener))
+
+(defn stop 
+  "Destroy a message destination. Typically not necessary since it
+  will be done for you when your app is undeployed. This will fail
+  with a warning if any handlers are listening"
+  [name]
+  (if (or (queue? name) (topic? name))
+    (stop-destination name)
+    (throw (Exception. "Illegal destination name"))))
+

    (apply start-queue name opts)
    (apply start-topic name opts)))

(defn stop 
  "Destroy a message destination. Typically not necessary since it
  will be done for you when your app is undeployed. This will fail
  with a warning if any handlers are listening"
  [name]
  (if (or (queue? name) (topic? name))
    (stop-destination name)
    (throw (Exception. "Illegal destination name"))))

(defn publish 
  "Send a message to a destination"
  [dest-name message & {:as opts}]
  (with-session (fn [session]
                  (let [destination (destination session dest-name)

                    (.send producer encoded delivery priority ttl)))))
    
(defn receive 
  "Receive a message from a destination

   The following options are supported [default]:
    :timeout    time in ms, after which nil is returned [10000]
    :selector   A JMS (SQL 92) expression matching message properties"
  [dest-name & {:keys [timeout selector]}]
  (with-session (fn [session]
                  (let [destination (destination session dest-name)
