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();;
diff --git a/tutorial/ocaml/CalcServer.ml b/tutorial/ocaml/CalcServer.ml
new file mode 100755
index 0000000..24d7d03
--- /dev/null
+++ b/tutorial/ocaml/CalcServer.ml
@@ -0,0 +1,89 @@
+(*
+ 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;;
+
+class calc_handler =
+object (self)
+  inherit Calculator.iface
+  val log = Hashtbl.create 23
+  method ping  = Printf.printf "ping()\n" ; flush stdout
+  method add a b =
+    Printf.printf"add(%ld,%ld)\n" (sod a) (sod b); flush stdout ;
+    Int32.add (sod a) (sod b)
+  method calculate logid w =
+    let w = sod w in
+      Printf.printf "calculate(%ld,{%ld,%ld,%ld})\n" (sod logid) (Operation.to_i w#grab_op) w#grab_num1 w#grab_num2; flush stdout ;
+    let rv =
+      match w#grab_op with
+	  Operation.ADD ->
+	    Int32.add w#grab_num1 w#grab_num2
+	| Operation.SUBTRACT ->
+	    Int32.sub w#grab_num1 w#grab_num2
+	| Operation.MULTIPLY ->
+	    Int32.mul w#grab_num1 w#grab_num2
+	| Operation.DIVIDE ->
+	    if w#grab_num2 = Int32.zero then
+	      let io = new invalidOperation in
+		io#set_what (Operation.to_i w#grab_op) ;
+		io#set_why "Cannot divide by 0" ;
+		raise (InvalidOperation io)
+	    else
+	      Int32.div w#grab_num1 w#grab_num2 in
+
+    let ss = new sharedStruct in
+      ss#set_key (sod logid) ;
+    let buffer = Int32.to_string rv in
+      ss#set_value buffer ;
+      Hashtbl.add log (sod logid) ss ;
+      rv
+
+  method zip =
+    Printf.printf "zip()\n"; flush stdout
+
+  method getStruct logid =
+    Printf.printf "getStruct(%ld)\n" (sod logid) ; flush stdout ;
+    Hashtbl.find log (sod logid)
+
+end
+
+let doserver () =
+  let h = new calc_handler in
+  let proc = new Calculator.processor h in
+  let port = 9090 in
+  let pf = new TBinaryProtocol.factory in
+  let server = new TThreadedServer.t
+		 proc
+		 (new TServerSocket.t port)
+		 (new Transport.factory)
+		 pf
+		 pf
+  in
+    server#serve
+;;
+
+doserver();;
diff --git a/tutorial/ocaml/README b/tutorial/ocaml/README
new file mode 100644
index 0000000..f68e835
--- /dev/null
+++ b/tutorial/ocaml/README
@@ -0,0 +1,15 @@
+
+This is the ocaml tutorial example.  It assumes that you've already
+built and installed the thrift ocaml runtime libraries in lib/ocaml.
+
+To compile this, you will need to generate the Thrift sources for
+ocaml in this directory (due to limitations in the OASIS build-tool):
+
+  % thrift -r --gen ocaml ../tutorial.thrift
+  % oasis setup
+  % make
+
+This will produce two executables Calc{Server,Client}.<type> where
+<type> is one of "byte" or "native", depending on your ocaml
+installation.  Just run the server in the background, then the client
+(as you would do for the C++ example).
diff --git a/tutorial/ocaml/_oasis b/tutorial/ocaml/_oasis
new file mode 100644
index 0000000..4cab080
--- /dev/null
+++ b/tutorial/ocaml/_oasis
@@ -0,0 +1,32 @@
+Name: tutorial
+Version: 1.0
+OASISFormat: 0.3
+Synopsis: OCaml Tutorial example
+Authors: Apache Thrift Developers <dev@thrift.apache.org>
+License: Apache-2.0
+Homepage: http://thrift.apache.org
+BuildTools: ocamlbuild
+Plugins:     META (0.3),
+  DevFiles (0.3)
+
+Library tutorial_thrift
+  Path: gen-ocaml
+  FindlibName: tutorial_thrift
+  buildTools: ocamlbuild
+  BuildDepends: threads,thrift
+  Modules: Calculator,Shared_consts,Tutorial_consts,SharedService,Shared_types,Tutorial_types
+  XMETARequires: threads
+
+Executable CalcClient
+  Path: .
+  MainIs: CalcClient.ml
+  Build$: true
+  CompiledObject: best
+  BuildDepends: thrift, tutorial_thrift, threads
+
+Executable CalcServer
+  Path: .
+  MainIs: CalcServer.ml
+  Build$: true
+  CompiledObject: best
+  BuildDepends: thrift, tutorial_thrift, threads
