 (defrecord TransactionOpts [fcn args ;; chaincode-language chaincode-endorsement-policy
                             proposal-wait-time])
 
-(defn propose-transaction
-  ([client channel-id chaincode-opts transaction-opts]
-   (propose-transaction client channel-id chaincode-opts transaction-opts nil))
-  ([client channel-id chaincode-opts {:keys [fcn args proposal-wait-time]} peers]
-   (let [channel (get-or-make-channel client channel-id)
-         req (hf-client/new-transaction-proposal-request client)]
-     (when-not (channel/is-initialized channel)
-       (channel/initialize channel))
-     (transaction-request/set-chaincode-id req (get-or-make-chaincode chaincode-opts))
-     ;; Transaction options
-     ;; FIXME: what about chaincode-language, chaincode-endorsement-policy ?
-     (when fcn
-       (transaction-request/set-fcn req fcn))
-     (when args
-       (transaction-request/set-args req args))
-     (when proposal-wait-time
-       (transaction-request/set-proposal-wait-time req proposal-wait-time))
-     ;; Send Tx proposal to peers
-     (apply channel/send-transaction-proposal channel req peers))))
+#_
+(defn make-proposal-tx-request
+  [client channel-id chaincode-opts {:keys [fcn args proposal-wait-time]}]
+  (let [channel (get-or-make-channel client channel-id)
+        req (hf-client/new-transaction-proposal-request client)]
+    (when-not (channel/is-initialized channel)
+      (channel/initialize channel))
+    (transaction-request/set-chaincode-id req (get-or-make-chaincode chaincode-opts))
+    ;; Transaction options
+    ;; FIXME: what about chaincode-language, chaincode-endorsement-policy ?
+    (when fcn
+      (transaction-request/set-fcn req fcn))
+    (when args
+      (transaction-request/set-args req args))
+    (when proposal-wait-time
+      (transaction-request/set-proposal-wait-time req proposal-wait-time))
+    req))
+
+(defn prepare-chaincode-proposal-tx-req
+  [channel proposal-tx-req chaincode-opts {:keys [fcn args proposal-wait-time]}]
+  (when-not (channel/is-initialized channel)
+    (channel/initialize channel))
+  (transaction-request/set-chaincode-id proposal-tx-req (get-or-make-chaincode chaincode-opts))
+  ;; Transaction options
+  ;; FIXME: what about chaincode-language, chaincode-endorsement-policy ?
+  (when fcn
+    (transaction-request/set-fcn proposal-tx-req fcn))
+  (when args
+    (transaction-request/set-args proposal-tx-req args))
+  (when proposal-wait-time
+    (transaction-request/set-proposal-wait-time proposal-tx-req proposal-wait-time))
+  proposal-tx-req)
 
 (defn order-transaction
   ([client channel-id proposal-responses]

            [clojure-fabric.chaincode-id :as chaincode-id]
            [clojure-fabric.transaction-request :as transaction-request]
            [clojure-fabric.query-by-chaincode-request :as query-by-chaincode-request]
            ;; [clojure-fabric.base-exception :as base-exception]
            ;; [clojure-fabric.instantiate-proposal-request :as instantiate-proposal-request]
            ;; [clojure-fabric.blockchain-info :as blockchain-info]

                                              :args (java.util.ArrayList. ["CAR10" "Chevy" "Volt" "Red" "Nick"])
                                              :proposal-wait-time 10000})
                       ;; 3-1. Proposal
                       (prepare-chaincode-proposal-tx-req cli
                                                "mychannel"
                                                (make-ChaincodeOpts {:name "fabcar" :version "1.0" :path "github.com/fabcar"}))
                       
                       ;; Send Tx proposal to peers
                       (apply channel/send-transaction-proposal channel req)
                       ;; 3-2 Order
                       (order-transaction cli "mychannel"))]
    ;; 4. Get Tx result 
