diff --git a/tutorial/ocaml/CalcClient.ml b/tutorial/ocaml/CalcClient.ml
new file mode 100755
index 0000000..5a8467b
--- /dev/null
+++ b/tutorial/ocaml/CalcClient.ml
@@ -0,0 +1,74 @@
+(*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+*)
+
+open Arg
+open Thrift
+open Tutorial_types
+open Shared_types
+
+exception Die;;
+let sod = function
+    Some v -> v
+  | None -> raise Die;;
+
+type connection = {
+  trans : Transport.t ;
+  proto : Thrift.Protocol.t;
+  calc : Calculator.client ;
+}
+
+let connect ~host port =
+  let tx = new TSocket.t host port in
+  let proto = new TBinaryProtocol.t tx in
+  let calc = new Calculator.client proto proto in
+    tx#opn;
+    { trans = tx ; proto = proto; calc = calc }
+;;
+
+let doclient () =
+  let cli = connect ~host:"127.0.0.1" 9090 in
+  try
+    cli.calc#ping ;
+    Printf.printf "ping()\n" ; flush stdout ;
+    (let sum = cli.calc#add (Int32.of_int 1) (Int32.of_int 1) in
+       Printf.printf "1+1=%ld\n" sum ;
+       flush stdout) ;
+    (let w = new work in
+       w#set_op Operation.DIVIDE ;
+       w#set_num1 (Int32.of_int 1) ;
+       w#set_num2 (Int32.of_int 0) ;
+       try
+	 let quotient = cli.calc#calculate (Int32.of_int 1) w in
+	   Printf.printf "Whoa? We can divide by zero!\n" ; flush stdout
+       with InvalidOperation io ->
+	 Printf.printf "InvalidOperation: %s\n" io#grab_why ; flush stdout) ;
+    (let w = new work in
+       w#set_op Operation.SUBTRACT ;
+       w#set_num1 (Int32.of_int 15) ;
+       w#set_num2 (Int32.of_int 10) ;
+       let diff = cli.calc#calculate (Int32.of_int 1) w in
+	 Printf.printf "15-10=%ld\n" diff ; flush stdout) ;
+    (let ss = cli.calc#getStruct (Int32.of_int 1) in
+       Printf.printf "Check log: %s\n" ss#grab_value ; flush stdout) ;
+    cli.trans#close
+  with Transport.E (_,what) ->
+    Printf.printf "ERROR: %s\n" what ; flush stdout
+;;
+
+doclient();;
