diff --git a/src/clojure/contrib/sql.clj b/src/clojure/contrib/sql.clj
index 5398c49..43ec8b2 100644
--- a/src/clojure/contrib/sql.clj
+++ b/src/clojure/contrib/sql.clj
@@ -51,6 +51,8 @@
     :username    (optional) a String
     :password    (optional) a String, required if :username is supplied
 
+  Connection:
+    :connection  (required) an existing connection.
   JNDI:
     :name        (required) a String or javax.naming.Name
     :environment (optional) a java.util.Map"
diff --git a/src/clojure/contrib/sql/internal.clj b/src/clojure/contrib/sql/internal.clj
index 290ebec..eb93984 100644
--- a/src/clojure/contrib/sql/internal.clj
+++ b/src/clojure/contrib/sql/internal.clj
@@ -67,31 +67,43 @@
     :username    (optional) a String
     :password    (optional) a String, required if :username is supplied
 
+  Connection:
+    :connection  (required) an existing connection object.
+  
   JNDI:
     :name        (required) a String or javax.naming.Name
     :environment (optional) a java.util.Map"
   [{:keys [factory
            classname subprotocol subname
            datasource username password
+           connection
            name environment]
     :as db-spec}]
   (cond
+   connection
+   connection
+    
    factory
    (factory (dissoc db-spec :factory))
+    
    (and classname subprotocol subname)
    (let [url (format "jdbc:%s:%s" subprotocol subname)
          etc (dissoc db-spec :classname :subprotocol :subname)]
      (RT/loadClassForName classname)
      (DriverManager/getConnection url (as-properties etc)))
+    
    (and datasource username password)
    (.getConnection datasource username password)
+    
    datasource
    (.getConnection datasource)
+    
    name
    (let [env (and environment (Hashtable. environment))
          context (InitialContext. env)
          datasource (.lookup context name)]
      (.getConnection datasource))
+    
    :else
    (throw-arg "db-spec %s is missing a required parameter" db-spec)))
 
