Index: trunk/FACT++/src/fitsdump.cc
===================================================================
--- trunk/FACT++/src/fitsdump.cc	(revision 12882)
+++ trunk/FACT++/src/fitsdump.cc	(revision 12883)
@@ -398,4 +398,11 @@
     out << "#" << endl;
 
+
+    vector<const void*> ptrs;
+    for (auto namesIt=listNamesOnly.begin(); namesIt!=listNamesOnly.end(); namesIt++)
+    {
+        ptrs.push_back(fFile->SetPtrAddress(*namesIt));
+    }
+
     while (fFile->GetNextRow())
     {
@@ -405,8 +412,9 @@
 
         rangesIt = ranges.begin();
-
-        for (vector<string>::const_iterator in=listNamesOnly.begin(); in!=listNamesOnly.end(); in++, rangesIt++)
+        auto ptrsIt=ptrs.begin();
+
+        for (vector<string>::const_iterator in=listNamesOnly.begin(); in!=listNamesOnly.end(); in++, rangesIt++, ptrsIt++)
         {
-            const void *ptr = fFile->SetPtrAddress(*in);
+            const void *ptr = *ptrsIt;
 
             const fits::Table::Column &cCol = fColMap.find(*in)->second;
@@ -623,4 +631,10 @@
     vector<minMaxStruct> statData(names.size());
 
+    vector<const void*> ptrs;
+    for (auto namesIt=names.begin(); namesIt!=names.end(); namesIt++)
+    {
+        ptrs.push_back(fFile->SetPtrAddress(*namesIt));
+    }
+
     // Loop over all columns in our list of requested columns
     while (fFile->GetNextRow())
@@ -632,8 +646,9 @@
         auto rangesIt = ranges.begin();
         auto statsIt  = statData.begin();
-
-        for (auto in=names.begin(); in!=names.end(); in++, rangesIt++, statsIt++)
+        auto ptrsIt = ptrs.begin();
+
+        for (auto in=names.begin(); in!=names.end(); in++, rangesIt++, statsIt++, ptrsIt++)
         {
-            const void *ptr = fFile->SetPtrAddress(*in);
+            const void *ptr = *ptrsIt;
 
             const fits::Table::Column &cCol = fColMap.find(*in)->second;
@@ -966,5 +981,5 @@
     {
         if (numElems%2 == 0)
-            out << "Med: " << double(val[numElems/2] + val[numElems/2+1])/2 << '\n';
+            out << "Med: " << double(val[(numElems-1)/2] + val[(numElems-1)/2+1])/2 << '\n';
         else
             out << "Med: " << double(val[numElems/2+1]) << '\n';
@@ -1018,4 +1033,9 @@
         statData.push_back(new char[(rangesIt->second - rangesIt->first)*cCol.size*fFile->GetNumRows()]);
     }
+    vector<const void*> ptrs;
+    for (auto namesIt=names.begin(); namesIt!=names.end(); namesIt++)
+    {
+        ptrs.push_back(fFile->SetPtrAddress(*namesIt));
+    }
 
     while (fFile->GetNextRow())
@@ -1027,8 +1047,9 @@
         rangesIt = ranges.begin();
         auto statsIt = statData.begin();
-
-        for (auto in=names.begin(); in!=names.end(); in++, rangesIt++, statsIt++)
+        auto ptrsIt = ptrs.begin();
+
+        for (auto in=names.begin(); in!=names.end(); in++, rangesIt++, statsIt++, ptrsIt++)
         {
-            const void *ptr = fFile->SetPtrAddress(*in);
+            const void *ptr = *ptrsIt;
 
             const fits::Table::Column &cCol = fColMap.find(*in)->second;
