diff --git a/modules/io/src/img/map_io_mrc_handler.cc b/modules/io/src/img/map_io_mrc_handler.cc
index bdde9d1e1701bb7180874db98d9bf9f7f8dc47a1..55d4f69138c1e48b90d797f2c3aefe31b2b8efe2 100644
--- a/modules/io/src/img/map_io_mrc_handler.cc
+++ b/modules/io/src/img/map_io_mrc_handler.cc
@@ -585,13 +585,13 @@ void real_filler(img::image_state::RealSpatialImageState& isi,
   img::Progress::Instance().Register(&this_dummy,header.ns*header.nr,100);
   for(int is=0;is<header.ns;++is) {
     pnt[maps]=header.nsstart+is;
+    std::vector<B> buffer(header.nr*header.nc);
+    f.read(&buffer[0],header.nr*header.nc);
     for(int ir=0;ir<header.nr;++ir) {
       pnt[mapr]=header.nrstart+ir;
       for(int ic=0;ic<header.nc;++ic) {
         pnt[mapc]=header.ncstart+ic;
-        B tmp;
-        f >> tmp;
-        isi.Value(pnt) = static_cast<Real>(tmp);
+        isi.Value(pnt) = img::Val2Val<B,Real>(buffer[header.nc*ir+ic]);
       }
       img::Progress::Instance().AdvanceProgress(&this_dummy);
     }