diff --git a/client/cmd/transaction.go b/client/cmd/transaction.go
index 55cf8d6c44c8b9eed260ede1100d35222dfbcb9f..f6c8e0b1c17b3f10594a3e73c444d36706e05480 100644
--- a/client/cmd/transaction.go
+++ b/client/cmd/transaction.go
@@ -66,7 +66,7 @@ func buildTransactionCommand() {
 	}
 	nameCmd.Flags().StringVarP(&clientDo.AmtFlag, "amt", "a", "", "specify an amount")
 	nameCmd.Flags().StringVarP(&clientDo.NameFlag, "name", "n", "", "specify a name")
-	nameCmd.Flags().StringVarP(&clientDo.DataFlag, "data", "d", "", "specify some data")
+	nameCmd.Flags().StringVarP(&clientDo.DataFlag, "data", "", "", "specify some data")
 	nameCmd.Flags().StringVarP(&clientDo.DataFileFlag, "data-file", "", "", "specify a file with some data")
 	nameCmd.Flags().StringVarP(&clientDo.FeeFlag, "fee", "f", "", "specify the fee to send")
 
@@ -76,13 +76,13 @@ func buildTransactionCommand() {
 		Short: "eris-client tx call --amt <amt> --fee <fee> --gas <gas> --to <contract addr> --data <data>",
 		Long:  "eris-client tx call --amt <amt> --fee <fee> --gas <gas> --to <contract addr> --data <data>",
 		Run:   func(cmd *cobra.Command, args []string) {
-			// transaction.Call(clientDo)
+			transaction.Call(clientDo)
 		},
 		PreRun: assertParameters,
 	}
 	callCmd.Flags().StringVarP(&clientDo.AmtFlag, "amt", "a", "", "specify an amount")
 	callCmd.Flags().StringVarP(&clientDo.ToFlag, "to", "t", "", "specify an address to send to")
-	callCmd.Flags().StringVarP(&clientDo.DataFlag, "data", "d", "", "specify some data")
+	callCmd.Flags().StringVarP(&clientDo.DataFlag, "data", "", "", "specify some data")
 	callCmd.Flags().StringVarP(&clientDo.FeeFlag, "fee", "f", "", "specify the fee to send")
 	callCmd.Flags().StringVarP(&clientDo.GasFlag, "gas", "g", "", "specify the gas limit for a CallTx")
 
diff --git a/client/core/core.go b/client/core/core.go
index 04dc839d7593b8f5f1da6ddd422403ee8755e128..8bf19723dc4f602df7fb12b8c10bf1289b8bacaf 100644
--- a/client/core/core.go
+++ b/client/core/core.go
@@ -72,35 +72,35 @@ func Send(nodeAddr, signAddr, pubkey, addr, toAddr, amtS, nonceS string) (*txs.S
 	return tx, nil
 }
 
-// func Call(nodeAddr, signAddr, pubkey, addr, toAddr, amtS, nonceS, gasS, feeS, data string) (*txs.CallTx, error) {
-// 	pub, amt, nonce, err := checkCommon(nodeAddr, signAddr, pubkey, addr, amtS, nonceS)
-// 	if err != nil {
-// 		return nil, err
-// 	}
+func Call(nodeAddr, signAddr, pubkey, addr, toAddr, amtS, nonceS, gasS, feeS, data string) (*txs.CallTx, error) {
+	pub, amt, nonce, err := checkCommon(nodeAddr, signAddr, pubkey, addr, amtS, nonceS)
+	if err != nil {
+		return nil, err
+	}
 
-// 	toAddrBytes, err := hex.DecodeString(toAddr)
-// 	if err != nil {
-// 		return nil, fmt.Errorf("toAddr is bad hex: %v", err)
-// 	}
+	toAddrBytes, err := hex.DecodeString(toAddr)
+	if err != nil {
+		return nil, fmt.Errorf("toAddr is bad hex: %v", err)
+	}
 
-// 	fee, err := strconv.ParseInt(feeS, 10, 64)
-// 	if err != nil {
-// 		return nil, fmt.Errorf("fee is misformatted: %v", err)
-// 	}
+	fee, err := strconv.ParseInt(feeS, 10, 64)
+	if err != nil {
+		return nil, fmt.Errorf("fee is misformatted: %v", err)
+	}
 
-// 	gas, err := strconv.ParseInt(gasS, 10, 64)
-// 	if err != nil {
-// 		return nil, fmt.Errorf("gas is misformatted: %v", err)
-// 	}
+	gas, err := strconv.ParseInt(gasS, 10, 64)
+	if err != nil {
+		return nil, fmt.Errorf("gas is misformatted: %v", err)
+	}
 
-// 	dataBytes, err := hex.DecodeString(data)
-// 	if err != nil {
-// 		return nil, fmt.Errorf("data is bad hex: %v", err)
-// 	}
+	dataBytes, err := hex.DecodeString(data)
+	if err != nil {
+		return nil, fmt.Errorf("data is bad hex: %v", err)
+	}
 
-// 	tx := types.NewCallTxWithNonce(pub, toAddrBytes, dataBytes, amt, gas, fee, int(nonce))
-// 	return tx, nil
-// }
+	tx := txs.NewCallTxWithNonce(pub, toAddrBytes, dataBytes, amt, gas, fee, int(nonce))
+	return tx, nil
+}
 
 // func Name(nodeAddr, signAddr, pubkey, addr, amtS, nonceS, feeS, name, data string) (*txs.NameTx, error) {
 // 	pub, amt, nonce, err := checkCommon(nodeAddr, signAddr, pubkey, addr, amtS, nonceS)
diff --git a/client/transaction/transaction.go b/client/transaction/transaction.go
index ea59c2d3db27359b3b4c701d7715fb06819bff63..faef29683f2a89da2375f74568fc58ee7126ad45 100644
--- a/client/transaction/transaction.go
+++ b/client/transaction/transaction.go
@@ -28,16 +28,38 @@ import (
 )
 
 func Send(do *definitions.ClientDo) {
+	// form the send transaction
 	sendTransaction, err := core.Send(do.NodeAddrFlag, do.SignAddrFlag,
 		do.PubkeyFlag, do.AddrFlag, do.ToFlag, do.AmtFlag, do.NonceFlag)
 	if err != nil {
-		log.Fatalf("Failed on Send Transaction: %s", err)
+		log.Fatalf("Failed on forming Send Transaction: %s", err)
+		return
 	}
+	// TODO: [ben] we carry over the sign bool, but always set it to true,
+	// as we move away from and deprecate the api that allows sending unsigned
+	// transactions and relying on (our) receiving node to sign it. 
 	unpackSignAndBroadcast(
 		core.SignAndBroadcast(do.ChainidFlag, do.NodeAddrFlag,
 		do.SignAddrFlag, sendTransaction, true, do.BroadcastFlag, do.WaitFlag))
 }
 
+func Call(do *definitions.ClientDo) {
+	// form the call transaction
+	callTransaction, err := core.Call(do.NodeAddrFlag, do.SignAddrFlag,
+		do.PubkeyFlag, do.AddrFlag, do.ToFlag, do.AmtFlag, do.NonceFlag,
+		do.GasFlag, do.FeeFlag, do.DataFlag)
+	if err != nil {
+		log.Fatalf("Failed on forming Call Transaction: %s", err)
+		return
+	}
+	// TODO: [ben] we carry over the sign bool, but always set it to true,
+	// as we move away from and deprecate the api that allows sending unsigned
+	// transactions and relying on (our) receiving node to sign it. 
+	unpackSignAndBroadcast(
+		core.SignAndBroadcast(do.ChainidFlag, do.NodeAddrFlag,
+		do.SignAddrFlag, callTransaction, true, do.BroadcastFlag, do.WaitFlag))
+}
+
 //----------------------------------------------------------------------
 // Helper functions