diff --git a/svmdense/binary_format.c b/svmdense_modified/binary_format.c
index 3b1fe6c..e084303 100644
--- a/svmdense/binary_format.c
+++ b/svmdense_modified/binary_format.c
@@ -6,8 +6,13 @@
 #include "svm_common.h"
 #include <stdio.h>
 
-void typeid_verbose(int typeid) {
-      switch (typeid) {
+#ifdef WIN32
+typedef __int64 int64_t;
+#endif
+
+
+void typeid_verbose(int type_id) {
+      switch (type_id) {
           case 3:
               printf("Will read 'int' type target values\n");
               break;
@@ -211,7 +216,7 @@ int read_feature(FILE *docfl, WORD *words, double *label,
 void write_binary_model(const char *modelfile, MODEL *model)
 {// {{{
   FILE *modelfl;
-  long j,i,sv_num;
+  int64_t j,i,sv_num;
   SVECTOR *v;
 
   if(verbosity>=3) {
@@ -237,23 +242,32 @@ void write_binary_model(const char *modelfile, MODEL *model)
   version = 100;
 #endif
   fwrite(&version,sizeof(int),1,modelfl);
-  fwrite(&(model->kernel_parm.kernel_type),sizeof(long),1,modelfl);
-  fwrite(&(model->kernel_parm.poly_degree),sizeof(long),1,modelfl);
+
+  int64_t tmp; 
+  tmp = (int64_t) model->kernel_parm.kernel_type;
+  fwrite(&tmp,sizeof(int64_t),1,modelfl);
+  tmp = (int64_t) model->kernel_parm.poly_degree;
+  fwrite(&tmp,sizeof(int64_t),1,modelfl);
+
   fwrite(&(model->kernel_parm.rbf_gamma),sizeof(double),1,modelfl);
   fwrite(&(model->kernel_parm.coef_lin),sizeof(double),1,modelfl); 
   fwrite(&(model->kernel_parm.coef_const),sizeof(double),1,modelfl);
-  long l = strlen(model->kernel_parm.custom);
-  fwrite(&l,sizeof(long),1,modelfl);
+  int64_t l = strlen(model->kernel_parm.custom);
+  fwrite(&l,sizeof(int64_t),1,modelfl);
   fwrite(model->kernel_parm.custom,sizeof(char),l,modelfl);
-  fwrite(&(model->totwords),sizeof(long),1,modelfl);
-  fwrite(&(model->totdoc),sizeof(long),1,modelfl);
+
+  tmp = (int64_t) model->totwords;
+  fwrite(&tmp,sizeof(int64_t),1,modelfl);
+
+  tmp = (int64_t) model->totdoc;
+  fwrite(&tmp,sizeof(int64_t),1,modelfl);
  
   sv_num=1;
   for(i=1;i<model->sv_num;++i) {
     for(v=model->supvec[i]->fvec;v;v=v->next) 
       sv_num++;
   }
-  fwrite(&sv_num, sizeof(long),1,modelfl);
+  fwrite(&sv_num, sizeof(int64_t),1,modelfl);
   fwrite(&(model->b), sizeof(double),1,modelfl);
 
   if(model->kernel_parm.kernel_type == 0) { /* linear kernel */
@@ -277,8 +291,8 @@ void write_binary_model(const char *modelfile, MODEL *model)
         }
         fwrite(&((v->words[j]).wnum), sizeof(long),1,modelfl);
 #endif
-        long ll = strlen(v->userdefined)+1;
-        fwrite(&ll,sizeof(long),1,modelfl);
+        int64_t ll = strlen(v->userdefined)+1;
+        fwrite(&ll,sizeof(int64_t),1,modelfl);
         fwrite(v->userdefined,sizeof(char),ll,modelfl);
         /* NOTE: this could be made more efficient by summing the
         alpha's of identical vectors before writing them to the
@@ -295,7 +309,7 @@ void write_binary_model(const char *modelfile, MODEL *model)
 MODEL *read_binary_model(const char *modelfile)
 {// {{{
   FILE *modelfl;
-  long i,j;
+  int64_t i,j;
   SVECTOR *v;
 
   MODEL *model= (MODEL *)my_malloc(sizeof(MODEL));
@@ -335,17 +349,31 @@ MODEL *read_binary_model(const char *modelfile)
 //    }
 
   KERNEL_PARM* kp= &(model->kernel_parm);
-  fread(&(kp->kernel_type),sizeof(long),1,modelfl);
-  fread(&(kp->poly_degree),sizeof(long),1,modelfl);
+
+  int64_t tmp;
+  fread(&tmp,sizeof(int64_t),1,modelfl);
+  kp->kernel_type = (long) tmp;
+
+  fread(&tmp,sizeof(int64_t),1,modelfl);
+  kp->poly_degree = (long) tmp;
+
   fread(&(kp->rbf_gamma),sizeof(double),1,modelfl);
   fread(&(kp->coef_lin),sizeof(double),1,modelfl); 
   fread(&(kp->coef_const),sizeof(double),1,modelfl);
-  long l;
-  fread(&l,sizeof(long),1,modelfl);
+  int64_t l;
+  fread(&l,sizeof(int64_t),1,modelfl);
   fread(model->kernel_parm.custom,sizeof(char),l,modelfl);
-  fread(&(model->totwords),sizeof(long),1,modelfl);
-  fread(&(model->totdoc),sizeof(long),1,modelfl);
-  fread(&(model->sv_num), sizeof(long),1,modelfl);
+
+  fread(&tmp,sizeof(int64_t),1,modelfl);
+  model->totwords = (long) tmp;
+
+  fread(&tmp,sizeof(int64_t),1,modelfl);
+  model->totdoc = (long) tmp;
+
+  fread(&tmp, sizeof(int64_t),1,modelfl);
+  model->sv_num = (long) tmp;
+
+
   fread(&(model->b), sizeof(double),1,modelfl);
 
   if(model->kernel_parm.kernel_type == 0) { /* linear kernel */
@@ -377,14 +405,14 @@ MODEL *read_binary_model(const char *modelfile)
                 fread(&(words[j]), sizeof(double),1,modelfl);
         }
 #else
-        fread(&((words[0]).wnum), sizeof(long),1,modelfl);
+        fread(&((words[0]).wnum), sizeof(int64_t),1,modelfl);
         for (j=0; (words[j]).wnum; ++j) {
                 fread(&((words[j]).weight), sizeof(double),1,modelfl);
-                fread(&((words[j+1]).wnum), sizeof(long),1,modelfl);
+                fread(&((words[j+1]).wnum), sizeof(int64_t),1,modelfl);
         }
 #endif
-        long ll;
-        fread(&ll,sizeof(long),1,modelfl);
+        int64_t ll;
+        fread(&ll,sizeof(int64_t),1,modelfl);
         char* comment = (char *)my_malloc(sizeof(char)*ll);
         fread(comment,sizeof(char),ll,modelfl);
 #if DENSE
