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();;
