                                               :args (java.util.ArrayList. ["CAR10" "Chevy" "Volt" "Red" "Nick"])
                                               :proposal-wait-time 10000})
                        ;; 3-1. Proposal
-                       (propose-transaction cli
-                                            "mychannel"
-                                            (make-ChaincodeOpts {:name "fabcar" :version "1.0" :path "github.com/fabcar"}))
+                       (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 

            [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]

(defrecord TransactionOpts [fcn args ;; chaincode-language chaincode-endorsement-policy
                            proposal-wait-time])

#_
(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]
