diff --git a/miscmaths.cc b/miscmaths.cc
index eab3b18d90a66f35189d5ec8eb48e20d6d6076d3..5e9cf87d9ab44769be5bb7ced4ddee558de37818 100644
--- a/miscmaths.cc
+++ b/miscmaths.cc
@@ -191,21 +191,35 @@ namespace MISCMATHS {
 
   ReturnMatrix read_binary_matrix(const string& filename)
   {
-    Matrix mat;
-    if ( filename.size()<1 ) return mat;
+    Matrix mres;
+    read_binary_matrix(mres,filename);
+    mres.Release();
+    return mres;
+  }
+
+
+  int read_binary_matrix(Matrix& mres, const string& filename)
+  {
+    if ( filename.size()<1 ) return 1;
     ifstream fs(filename.c_str(), ios::in | ios::binary);
     if (!fs) { 
       cerr << "Could not open matrix file " << filename << endl;
-      return mat;
+      return 2;
     }
-    mat = read_binary_matrix(fs);
+    read_binary_matrix(mres,fs);
     fs.close();
-    mat.Release();
-    return mat;
+    return 0;
   }
 
-
   ReturnMatrix read_binary_matrix(ifstream& fs)
+  {
+    Matrix mres;
+    read_binary_matrix(mres,fs);
+    mres.Release();
+    return mres;
+  }
+
+  int read_binary_matrix(Matrix& mres, ifstream& fs)
   {
     bool swapbytes = false;
     unsigned int testval;
@@ -216,9 +230,7 @@ namespace MISCMATHS {
       Swap_Nbytes(1,sizeof(testval),&testval);
       if (testval!=BINFLAG) { 
 	cerr << "Unrecognised binary matrix file format" << endl;
-	Matrix mres;
-	mres.Release();
-	return mres;
+	return 2;
       }
     }
 
@@ -235,7 +247,9 @@ namespace MISCMATHS {
 
     // set up and read matrix (rows fast, cols slow)
     double val;
-    Matrix mres(nx,ny);
+    if ( (((unsigned int) mres.Ncols())!=ny) || (((unsigned int) mres.Nrows())<nx) ) {
+      mres.ReSize(nx,ny);
+    }
     for (unsigned int y=1; y<=ny; y++) {
       for (unsigned int x=1; x<=nx; x++) {
 	fs.read((char*)&val,sizeof(val));
@@ -244,8 +258,7 @@ namespace MISCMATHS {
       }
     }
     
-    mres.Release();
-    return mres;
+    return 0;
   }
 
 
diff --git a/miscmaths.h b/miscmaths.h
index 48de2bfbcc8ab34482dda7235c8f2285149a1fce..197ae442aceade7d3f599460b34610301a2b7b03 100644
--- a/miscmaths.h
+++ b/miscmaths.h
@@ -55,6 +55,7 @@ namespace MISCMATHS {
   ReturnMatrix read_ascii_matrix(int nrows, int ncols, const string& filename);
   ReturnMatrix read_ascii_matrix(const string& filename);
   ReturnMatrix read_vest(string p_fname);
+  int read_binary_matrix(Matrix& mres, const string& filename);
   ReturnMatrix read_binary_matrix(const string& filename);
   ReturnMatrix read_matrix(const string& filename);
 
@@ -71,6 +72,7 @@ namespace MISCMATHS {
   ReturnMatrix read_ascii_matrix(ifstream& fs, int nrows, int ncols);
   ReturnMatrix read_ascii_matrix(int nrows, int ncols, ifstream& fs);
   ReturnMatrix read_ascii_matrix(ifstream& fs);
+  int read_binary_matrix(Matrix& mres, ifstream& fs);
   ReturnMatrix read_binary_matrix(ifstream& fs);
   int write_ascii_matrix(const Matrix& mat, ofstream& fs, int precision=-1);
   int write_ascii_matrix(ofstream& fs, const Matrix& mat, int precision=-1);