diff --git a/SPIRV/SPVRemapper.cpp b/SPIRV/SPVRemapper.cpp
index e6f13ae3655e9136155e9365a81a30917a8bdefa..d276807157a8ce2a3d1fd468bc70ca5a4fba2d38 100644
--- a/SPIRV/SPVRemapper.cpp
+++ b/SPIRV/SPVRemapper.cpp
@@ -266,7 +266,7 @@ namespace spv {
             [this](spv::Id& id) {
                 id = localId(id);
                 assert(id != unused && id != unmapped);
-        }
+            }
         );
     }
 
@@ -309,7 +309,7 @@ namespace spv {
                 if (isStripOp(opCode))
                     stripInst(start);
                 return true;
-        },
+            },
             op_fn_nop);
     }
 
@@ -319,7 +319,7 @@ namespace spv {
 
         mapped.clear();
         idMapL.clear();
-        nameMap.clear();
+//      preserve nameMap, so we don't clear that.
         fnPos.clear();
         fnPosDCE.clear();
         fnCalls.clear();
@@ -342,9 +342,9 @@ namespace spv {
 
                 if (opCode == spv::Op::OpName) {
                     const spv::Id    target = asId(start+1);
-                    const std::string  name   = literalString(start+2);
+                    const std::string  name = literalString(start+2);
                     nameMap[name] = target;
-                    return true;
+
                 } else if (opCode == spv::Op::OpFunctionCall) {
                     ++fnCalls[asId(start + 3)];
                 } else if (opCode == spv::Op::OpEntryPoint) {
@@ -371,7 +371,7 @@ namespace spv {
                 }
 
                 return false;
-        },
+            },
 
             [this](spv::Id& id) { localId(id, unmapped); }
         );
@@ -713,7 +713,6 @@ namespace spv {
         );
 
         strip();          // strip out data we decided to eliminate
-        buildLocalMaps(); // rebuild ID mapping data
     }
 
     // remove bodies of uncalled functions
@@ -798,7 +797,6 @@ namespace spv {
         );
 
         strip();          // strip out data we decided to eliminate
-        buildLocalMaps(); // rebuild ID mapping data
     }
 
     // remove bodies of uncalled functions
@@ -860,7 +858,7 @@ namespace spv {
             [&](spv::Op opCode, unsigned start) {
                 if (opCode == spv::OpVariable) { ++varUseCount[asId(start+2)]; return true; }
                 return false;
-        },
+            },
 
             [&](spv::Id& id) { if (varUseCount[id]) ++varUseCount[id]; }
         );
@@ -874,7 +872,7 @@ namespace spv {
                         stripInst(start);
                 }
                 return true;
-        },
+            },
             op_fn_nop);
     }
 
@@ -1116,6 +1114,8 @@ namespace spv {
 
         spv.resize(strippedPos);
         stripRange.clear();
+
+        buildLocalMaps();
     }
 
     // Strip a single binary by removing ranges given in stripRange
@@ -1131,6 +1131,8 @@ namespace spv {
 
         msg(3, 4, std::string("ID bound: ") + std::to_string(bound()));
 
+        strip();        // strip out data we decided to eliminate
+
         if (options & OPT_LOADSTORE) optLoadStore();
         if (options & OPT_FWD_LS)    forwardLoadStores();
         if (options & DCE_FUNCS)     dceFuncs();
@@ -1139,7 +1141,6 @@ namespace spv {
         if (options & MAP_TYPES)     mapTypeConst();
         if (options & MAP_NAMES)     mapNames();
         if (options & MAP_FUNCS)     mapFnBodies();
-        // if (options & STRIP)         stripDebug();
 
         mapRemainder(); // map any unmapped IDs
         applyMap();     // Now remap each shader to the new IDs we've come up with