diff --git a/lib/ocaml/src/TBinaryProtocol.ml b/lib/ocaml/src/TBinaryProtocol.ml
index a06cc9a..6d7500e 100644
--- a/lib/ocaml/src/TBinaryProtocol.ml
+++ b/lib/ocaml/src/TBinaryProtocol.ml
@@ -22,6 +22,7 @@
 module P = Protocol
 
 let get_byte i b = 255 land (i lsr (8*b))
+let get_byte32 i b = 255 land (Int32.to_int (Int32.shift_right i (8*b)))
 let get_byte64 i b = 255 land (Int64.to_int (Int64.shift_right i (8*b)))
 
 
@@ -35,7 +36,7 @@
     for i=0 to (n-1) do
       s:= Int32.logor !s (Int32.shift_left (Int32.of_int (int_of_char b.[i])) (8*(n-1-i)))
     done;
-    Int32.to_int (Int32.shift_right (Int32.shift_left !s sb) sb)
+    Int32.shift_right (Int32.shift_left !s sb) sb
 
 let comp_int64 b n =
   let s = ref 0L in
@@ -44,8 +45,8 @@
     done;
     !s
 
-let version_mask = 0xffff0000
-let version_1 = 0x80010000
+let version_mask = 0xffff0000l
+let version_1 = 0x80010000l
 
 class t trans =
 object (self)
@@ -63,7 +64,7 @@
       ibyte.[0] <- char_of_int (gb 1);
       trans#write ibyte 0 2
   method writeI32 i =
-    let gb = get_byte i in
+    let gb = get_byte32 i in
       for i=0 to 3 do
         ibyte.[3-i] <- char_of_int (gb i)
       done;
@@ -78,13 +79,13 @@
     self#writeI64 (Int64.bits_of_float d)
   method writeString s=
     let n = String.length s in
-      self#writeI32(n);
+      self#writeI32 (Int32.of_int n);
       trans#write s 0 n
   method writeBinary a = self#writeString a
   method writeMessageBegin (n,t,s) =
-    self#writeI32 (version_1 lor (P.message_type_to_i t));
+    self#writeI32 (Int32.logor version_1 (Int32.of_int (P.message_type_to_i t)));
     self#writeString n;
-    self#writeI32 s
+    self#writeI32 (Int32.of_int s)
   method writeMessageEnd = ()
   method writeStructBegin s = ()
   method writeStructEnd = ()
@@ -93,26 +94,26 @@
     self#writeI16 i
   method writeFieldEnd = ()
   method writeFieldStop =
-    self#writeByte (tv (Protocol.T_STOP))
+    self#writeByte (tv (P.T_STOP))
   method writeMapBegin (k,v,s) =
     self#writeByte (tv k);
     self#writeByte (tv v);
-    self#writeI32 s
+    self#writeI32 (Int32.of_int s)
   method writeMapEnd = ()
   method writeListBegin (t,s) =
     self#writeByte (tv t);
-    self#writeI32 s
+    self#writeI32 (Int32.of_int s)
   method writeListEnd = ()
   method writeSetBegin (t,s) =
     self#writeByte (tv t);
-    self#writeI32 s
+    self#writeI32 (Int32.of_int s)
   method writeSetEnd = ()
   method readByte =
     ignore (trans#readAll ibyte 0 1);
-    (comp_int ibyte 1)
+    Int32.to_int (comp_int ibyte 1)
   method readI16 =
     ignore (trans#readAll ibyte 0 2);
-    comp_int ibyte 2
+    Int32.to_int (comp_int ibyte 2)
   method readI32 =
     ignore (trans#readAll ibyte 0 4);
     comp_int ibyte 4
@@ -124,20 +125,19 @@
   method readBool =
     self#readByte = 1
   method readString =
-    let sz = self#readI32 in
+    let sz = Int32.to_int (self#readI32) in
     let buf = String.create sz in
       ignore (trans#readAll buf 0 sz);
       buf
   method readBinary = self#readString
   method readMessageBegin =
     let ver = self#readI32 in
-      if (ver land version_mask != version_1) then
-        (print_int ver;
-        raise (P.E (P.BAD_VERSION, "Missing version identifier")))
+      if Int32.compare (Int32.logand ver version_mask) version_1 != 0 then
+        raise (P.E (P.BAD_VERSION, "Missing version identifier"))
       else
         let s = self#readString in
-        let mt = P.message_type_of_i (ver land 0xFF) in
-          (s,mt, self#readI32)
+        let mt = P.message_type_of_i (Int32.to_int (Int32.logand ver 0xFFl)) in
+          (s,mt, Int32.to_int self#readI32)
   method readMessageEnd = ()
   method readStructBegin =
     ""
@@ -152,15 +152,15 @@
   method readMapBegin =
     let kt = vt (self#readByte) in
     let vt = vt (self#readByte) in
-      (kt,vt, self#readI32)
+      (kt,vt, Int32.to_int self#readI32)
   method readMapEnd = ()
   method readListBegin =
     let t = vt (self#readByte) in
-    (t,self#readI32)
+    (t, Int32.to_int self#readI32)
   method readListEnd = ()
   method readSetBegin =
     let t = vt (self#readByte) in
-    (t, self#readI32);
+    (t, Int32.to_int self#readI32);
   method readSetEnd = ()
 end
 
diff --git a/lib/ocaml/src/TSimpleServer.ml b/lib/ocaml/src/TSimpleServer.ml
index d19d8c5..2927c08 100644
--- a/lib/ocaml/src/TSimpleServer.ml
+++ b/lib/ocaml/src/TSimpleServer.ml
@@ -26,13 +26,15 @@
   method serve =
     try
       st#listen;
-      let c = st#accept in
-      let trans = tf#getTransport c in
-      let inp = ipf#getProtocol trans in
-      let op = opf#getProtocol trans in
-        try
-          while (pf#process inp op) do () done;
-          trans#close
-        with e -> trans#close; raise e
+      while true do
+        let c = st#accept in
+        let trans = tf#getTransport c in
+        let inp = ipf#getProtocol trans in
+        let op = opf#getProtocol trans in
+          try
+            while (pf#process inp op) do () done;
+            trans#close
+          with e -> trans#close; raise e
+      done
     with _ -> ()
 end
diff --git a/lib/ocaml/src/Thrift.ml b/lib/ocaml/src/Thrift.ml
index 8dc9afa..fdf2649 100644
--- a/lib/ocaml/src/Thrift.ml
+++ b/lib/ocaml/src/Thrift.ml
@@ -177,7 +177,7 @@
     method virtual writeBool : bool -> unit
     method virtual writeByte : int -> unit
     method virtual writeI16 : int -> unit
-    method virtual writeI32 : int -> unit
+    method virtual writeI32 : Int32.t -> unit
     method virtual writeI64 : Int64.t -> unit
     method virtual writeDouble : float -> unit
     method virtual writeString : string -> unit
@@ -198,7 +198,7 @@
     method virtual readBool : bool
     method virtual readByte : int
     method virtual readI16 : int
-    method virtual readI32: int
+    method virtual readI32: Int32.t
     method virtual readI64 : Int64.t
     method virtual readDouble : float
     method virtual readString : string
@@ -294,20 +294,20 @@
       | MISSING_RESULT
 
   let typ_of_i = function
-      0 -> UNKNOWN
-    | 1 -> UNKNOWN_METHOD
-    | 2 -> INVALID_MESSAGE_TYPE
-    | 3 -> WRONG_METHOD_NAME
-    | 4 -> BAD_SEQUENCE_ID
-    | 5 -> MISSING_RESULT
+      0l -> UNKNOWN
+    | 1l -> UNKNOWN_METHOD
+    | 2l -> INVALID_MESSAGE_TYPE
+    | 3l -> WRONG_METHOD_NAME
+    | 4l -> BAD_SEQUENCE_ID
+    | 5l -> MISSING_RESULT
     | _ -> raise Thrift_error;;
   let typ_to_i = function
-    | UNKNOWN -> 0
-    | UNKNOWN_METHOD -> 1
-    | INVALID_MESSAGE_TYPE -> 2
-    | WRONG_METHOD_NAME -> 3
-    | BAD_SEQUENCE_ID -> 4
-    | MISSING_RESULT -> 5
+    | UNKNOWN -> 0l
+    | UNKNOWN_METHOD -> 1l
+    | INVALID_MESSAGE_TYPE -> 2l
+    | WRONG_METHOD_NAME -> 3l
+    | BAD_SEQUENCE_ID -> 4l
+    | MISSING_RESULT -> 5l
 
   class t =
   object (self)
@@ -337,23 +337,21 @@
 
   let read (iprot : Protocol.t) =
     let msg = ref "" in
-    let typ = ref 0 in
+    let typ = ref 0l in
       ignore iprot#readStructBegin;
       (try
            while true do
              let (name,ft,id) =iprot#readFieldBegin in
-               if ft = Protocol.T_STOP then
-                 raise Break
+               if ft = Protocol.T_STOP
+               then raise Break
                else ();
                (match id with
-             | 1 -> (if ft = Protocol.T_STRING then
-                         msg := (iprot#readString)
-                     else
-                         iprot#skip ft)
-             | 2 -> (if ft = Protocol.T_I32 then
-                         typ := iprot#readI32
-                     else
-                         iprot#skip ft)
+             | 1 -> (if ft = Protocol.T_STRING
+               then msg := (iprot#readString)
+               else iprot#skip ft)
+             | 2 -> (if ft = Protocol.T_I32
+               then typ := iprot#readI32
+               else iprot#skip ft)
              | _ -> iprot#skip ft);
                iprot#readFieldEnd
       done
