--- /dev/null
+diff --git a/src/file_.cpp b/src/file_.cpp
+index 4071886..6bfa648 100644
+--- a/src/file_.cpp
++++ b/src/file_.cpp
+@@ -347,10 +347,10 @@ int i;
+ if (i>0) sleep ( 1 );
+ #endif
+ if (TextMode) {
+- if (ReadOnly) hFile = fopen ( FName,"r" );
++ if (ReadOnly) hFile = fopen ( FName,"rt" );
+ else hFile = fopen ( FName,"r+t" );
+ } else {
+- if (ReadOnly) hFile = fopen ( FName,"r" );
++ if (ReadOnly) hFile = fopen ( FName,"rb" );
+ else hFile = fopen ( FName,"r+b" );
+ }
+ #ifndef _MVS
+diff --git a/src/machine_.h b/src/machine_.h
+old mode 100644
+new mode 100755
+index 2e81264..c658981
+--- a/src/machine_.h
++++ b/src/machine_.h
+@@ -1,4 +1,4 @@
+-// $Id: 1.21-allignment.patch,v 1.1 2010/06/30 20:55:04 jlec Exp $
++// $Id: 1.21-allignment.patch,v 1.1 2010/06/30 20:55:04 jlec Exp $
+ // =================================================================
+ //
+ // CCP4 Coordinate Library: support of coordinate-related
+@@ -127,8 +127,12 @@
+ # define CALL_LIKE_VMS 1
+
+ // MVS stands for Microsoft Visual Studio
+-#elif defined(_MVS)
++#elif defined(_MSC_VER)
++# if (_MSC_VER) >= 800
++# define CALL_LIKE_MVS 2
++# else
+ # define CALL_LIKE_MVS 1
++# endif
+
+ #elif defined(F2C) || defined(G77)
+ # define CALL_LIKE_SUN 8
+@@ -400,6 +404,36 @@ typedef double apireal; // FORTRAN real*8
+
+ #elif defined(CALL_LIKE_MVS)
+
++# if ( CALL_LIKE_MVS == 2 )
++
++ typedef pstr fpstr;
++
++# define FTN_STR(s) s
++# define FTN_LEN(s) s##_len
++
++# define char_struct(s) \
++ pstr s; \
++ int s##_len;
++# define fill_char_struct(s,str) \
++ s = str; \
++ s##_len = strlen(str);
++
++# ifdef __cplusplus
++# define FORTRAN_SUBR(NAME,name,p_sun,p_stardent,p_mvs) \
++ extern "C" void NAME p_sun
++# else
++# define FORTRAN_SUBR(NAME,name,p_sun,p_stardent,p_mvs) \
++ void NAME p_sun
++# endif
++
++# define FORTRAN_EXTERN(NAME,name,p_sun,p_stardent,p_mvs) \
++ extern "C" void NAME p_sun
++
++# define FORTRAN_CALL(NAME,name,p_sun,p_stardent,p_mvs) \
++ NAME p_sun
++
++# else
++
+ typedef pstr fpstr;
+
+ # define FTN_STR(s) s
+@@ -425,7 +459,7 @@ typedef double apireal; // FORTRAN real*8
+
+ # define FORTRAN_CALL(NAME,name,p_sun,p_stardent,p_mvs) \
+ NAME p_mvs
+-
++# endif
+ #else
+
+ # error Unknown machine!!!
+diff --git a/src/mmdb_atom.h b/src/mmdb_atom.h
+old mode 100644
+new mode 100755
+index 45049c8..672e11a
+--- a/src/mmdb_atom.h
++++ b/src/mmdb_atom.h
+@@ -1,4 +1,4 @@
+-// $Id: 1.21-allignment.patch,v 1.1 2010/06/30 20:55:04 jlec Exp $
++// $Id: 1.21-allignment.patch,v 1.1 2010/06/30 20:55:04 jlec Exp $
+ // =================================================================
+ //
+ // CCP4 Coordinate Library: support of coordinate-related
+@@ -290,7 +290,7 @@ class CAtom : public CUDData {
+ void CalcAtomStatistics ( RSAtomStat AS );
+ realtype GetDist2 ( PCAtom a );
+ realtype GetDist2 ( PCAtom a, mat44 & tm ); // tm applies to A
+- realtype GetDist2 ( PCAtom a, mat33 & r, vect3 & t );// tm applies to A
++ realtype GetDist2 ( PCAtom a, mat33 & r, vect3 & t ); // tm applies to A
+ realtype GetDist2 ( realtype ax, realtype ay, realtype az );
+
+ // GetCosine(a1,a2) calculates cosine of angle a1-this-a2,
+diff --git a/src/mmdb_chain.cpp b/src/mmdb_chain.cpp
+old mode 100644
+new mode 100755
+index a6f66c2..1fa165b
+--- a/src/mmdb_chain.cpp
++++ b/src/mmdb_chain.cpp
+@@ -1,4 +1,4 @@
+-// $Id: 1.21-allignment.patch,v 1.1 2010/06/30 20:55:04 jlec Exp $
++// $Id: 1.21-allignment.patch,v 1.1 2010/06/30 20:55:04 jlec Exp $
+ // =================================================================
+ //
+ // CCP4 Coordinate Library: support of coordinate-related
+@@ -672,7 +672,8 @@ int i,k,sN;
+ i = 0;
+ sN = 1;
+ while (i<numRes) {
+- PutInteger ( &(S[8]),sN,2 );
++ //PutInteger ( &(S[8]),sN,2 );
++ PutInteger ( &(S[7]),sN,3 );
+ k = 19;
+ while ((i<numRes) && (k<70)) {
+ if (resName[i][0])
+diff --git a/src/mmdb_rwbrook.cpp b/src/mmdb_rwbrook.cpp
+old mode 100644
+new mode 100755
+index dc33086..ef58641
+--- a/src/mmdb_rwbrook.cpp
++++ b/src/mmdb_rwbrook.cpp
+@@ -1,4 +1,4 @@
+-// $Id: 1.21-allignment.patch,v 1.1 2010/06/30 20:55:04 jlec Exp $
++// $Id: 1.21-allignment.patch,v 1.1 2010/06/30 20:55:04 jlec Exp $
+ // =================================================================
+ //
+ // CCP4 Coordinate Library: support of coordinate-related
+@@ -1478,7 +1478,6 @@ AltLoc altLoc;
+ SegID sgID;
+ Element element;
+ PCAtom atom;
+-pstr p;
+ char charge[10];
+
+ strcpy ( LastFunc,"MMDB_F_Atom" );
+@@ -1552,10 +1551,9 @@ char charge[10];
+ } else
+ charge [0] = char(0);
+
+-/*
+ if (FTN_STR(ID)[0]==' ') {
+ atomName[0] = char(0);
+- if ((FTN_STR(AtNam)[1]=='H') ||
++ if ((FTN_STR(AtNam)[1]=='H') && (FTN_STR(AtNam)[0]!='H') ||
+ ((FTN_STR(AtNam)[1]=='D') && (FTN_STR(ID)[2]=='D'))) {
+ i = 0;
+ while ((i<nHydAtomNames) &&
+@@ -1563,12 +1561,16 @@ char charge[10];
+ if (i<nHydAtomNames)
+ GetStrTer ( atomName,FTN_STR(AtNam),4,5,FTN_LEN(AtNam) );
+ }
+- if (!atomName[0]) {
++
++ if ((FTN_STR(AtNam)[0]=='A') || ((FTN_STR(AtNam)[0]=='N') && (FTN_STR(ID)[1]!='N'))) {
++ GetStrTer ( atomName,FTN_STR(AtNam),4,5,FTN_LEN(AtNam) );
++ } else if ((FTN_STR(ID)[1]=='N') && ( (FTN_STR(AtNam)[0]=='N') && (FTN_STR(AtNam)[1]=='N') )) {
++ GetStrTer ( atomName,FTN_STR(AtNam),4,5,FTN_LEN(AtNam) );
++ } else if (!atomName[0]) {
+ atomName[0] = ' ';
+ GetStrTer ( &(atomName[1]),FTN_STR(AtNam),3,4,FTN_LEN(AtNam) );
+ }
+ } else
+-*/
+ GetStrTer ( atomName,FTN_STR(AtNam),4,5,4 );
+
+
+diff --git a/src/mmdb_sbase0.cpp b/src/mmdb_sbase0.cpp
+old mode 100644
+new mode 100755
+index a210d62..3bf0d52
+--- a/src/mmdb_sbase0.cpp
++++ b/src/mmdb_sbase0.cpp
+@@ -1,4 +1,4 @@
+-// $Id: 1.21-allignment.patch,v 1.1 2010/06/30 20:55:04 jlec Exp $
++// $Id: 1.21-allignment.patch,v 1.1 2010/06/30 20:55:04 jlec Exp $
+ // =================================================================
+ //
+ // CCP4 Coordinate Library: support of coordinate-related
+@@ -1320,7 +1320,11 @@ PPCSBIndex Index1;
+ dirpath = new char[i+10];
+ strcpy ( dirpath,path );
+ if (i>0) {
++#if defined(_MSC_VER) || defined (WIN32)
++ if (dirpath[i-1]!='\\') strcat ( dirpath,"\\" );
++#else
+ if (dirpath[i-1]!='/') strcat ( dirpath,"/" );
++#endif
+ }
+ }
+
+diff --git a/src/mmdb_selmngr.cpp b/src/mmdb_selmngr.cpp
+old mode 100644
+new mode 100755
+index b923529..3a9e249
+--- a/src/mmdb_selmngr.cpp
++++ b/src/mmdb_selmngr.cpp
+@@ -1,4 +1,4 @@
+-// $Id: 1.21-allignment.patch,v 1.1 2010/06/30 20:55:04 jlec Exp $
++// $Id: 1.21-allignment.patch,v 1.1 2010/06/30 20:55:04 jlec Exp $
+ // =================================================================
+ //
+ // CCP4 Coordinate Library: support of coordinate-related
+@@ -1158,7 +1158,7 @@ void CMMDBSelManager::Select (
+ int selKey // selection key
+ ) {
+ int i,j,k,n,m1,m2,c, sk,nsel;
+-Boolean noRes,modelSel,chainSel,resSel,selAND;
++Boolean noRes,modelSel(False),chainSel,resSel,selAND;
+ PCModel model;
+ PCChain chain;
+ PCResidue res;
+diff --git a/src/mmdb_title.cpp b/src/mmdb_title.cpp
+old mode 100644
+new mode 100755
+index b0b2ae5..1033ae5
+--- a/src/mmdb_title.cpp
++++ b/src/mmdb_title.cpp
+@@ -1,4 +1,4 @@
+-// $Id: 1.21-allignment.patch,v 1.1 2010/06/30 20:55:04 jlec Exp $
++// $Id: 1.21-allignment.patch,v 1.1 2010/06/30 20:55:04 jlec Exp $
+ // =================================================================
+ //
+ // CCP4 Coordinate Library: support of coordinate-related
+@@ -1381,6 +1381,10 @@ MakeStreamFunctions(CRemark)
+ #define R350_CHAINS 2
+ #define R350_BIOMT 3
+
++#ifdef _WIN32
++#define strcasestr(s, t) strstr(strupr(s), t)
++#endif
++
+ void getRemarkKey ( RPCRemark rem, int & lkey ) {
+ if (rem) {
+ if (rem->remarkNum!=350) lkey = R350_END;
+@@ -1458,7 +1462,7 @@ int l,lkey,nAdd,j;
+
+ while ((i<l) && (lkey==R350_NONE)) {
+
+- p = strcasestr ( rem->Remark,"CHAINS:" );
++ p = strcasestr( rem->Remark,"CHAINS:" );
+ if (p) p += 7;
+ else {
+ p = rem->Remark;
+@@ -1513,7 +1517,7 @@ pstr p1,p2;
+ int l,j,lkey;
+
+ sprintf ( PN,"BIOMT%1i",biomtNo );
+- p1 = strcasestr ( rem->Remark,PN );
++ p1 = strcasestr( rem->Remark,PN );
+ if (!p1) return R350_ERRBIOMT;
+
+ p1 += 6;
+@@ -1972,7 +1976,7 @@ int i,l;
+ if (rem) {
+ if (rem->remarkNum==2) {
+ if (rem->Remark) {
+- p = strcasestr ( rem->Remark,"RESOLUTION" );
++ p = strcasestr( rem->Remark,"RESOLUTION" );
+ if (p) {
+ while ((*p) && (*p!=' ')) p++;
+ if (*p) {