diff --git a/tests/render_tests.cpp b/tests/render_tests.cpp
index 57019aa..332c1c7 100644
--- a/tests/render_tests.cpp
+++ b/tests/render_tests.cpp
@@ -434,8 +434,7 @@
 
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
+    RecordImages(m_renderTargets);
 
     if (rotate)
         RotateTriangleVSUniform(Projection, View, Model, &constantBuffer, &cmdBuffer);
@@ -739,8 +738,7 @@
 
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
+    RecordImages(m_renderTargets);
 }
 
 TEST_F(XglRenderTest, TriangleMRT)
@@ -831,9 +829,8 @@
     EndCommandBuffer(cmdBuffer);
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
 
+    RecordImages(m_renderTargets);
 }
 
 TEST_F(XglRenderTest, QuadWithIndexedVertexFetch)
@@ -946,9 +943,7 @@
     EndCommandBuffer(cmdBuffer);
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
-
+    RecordImages(m_renderTargets);
 }
 
 TEST_F(XglRenderTest, GreyandRedCirclesonBlue)
@@ -1041,9 +1036,7 @@
     EndCommandBuffer(cmdBuffer);
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
-
+    RecordImages(m_renderTargets);
 }
 
 TEST_F(XglRenderTest, RedCirclesonBlue)
@@ -1135,9 +1128,7 @@
     EndCommandBuffer(cmdBuffer);
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
-
+    RecordImages(m_renderTargets);
 }
 
 TEST_F(XglRenderTest, GreyCirclesonBlueFade)
@@ -1241,8 +1232,7 @@
     EndCommandBuffer(cmdBuffer);
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
+    RecordImages(m_renderTargets);
 }
 
 TEST_F(XglRenderTest, GreyCirclesonBlueDiscard)
@@ -1336,9 +1326,7 @@
     EndCommandBuffer(cmdBuffer);
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
-
+    RecordImages(m_renderTargets);
 }
 
 
@@ -1412,8 +1400,7 @@
     EndCommandBuffer(cmdBuffer);
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
+    RecordImages(m_renderTargets);
 
     RotateTriangleVSUniform(Projection, View, Model, &MVPBuffer, &cmdBuffer);
 }
@@ -1490,8 +1477,7 @@
     EndCommandBuffer(cmdBuffer);
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
+    RecordImages(m_renderTargets);
 }
 
 TEST_F(XglRenderTest, QuadVertFetchAndVertID)
@@ -1585,8 +1571,7 @@
     EndCommandBuffer(cmdBuffer);
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
+    RecordImages(m_renderTargets);
 }
 
 TEST_F(XglRenderTest, QuadSparseVertFetch)
@@ -1694,8 +1679,7 @@
     EndCommandBuffer(cmdBuffer);
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
+    RecordImages(m_renderTargets);
 }
 
 TEST_F(XglRenderTest, TriVertFetchDeadAttr)
@@ -1793,8 +1777,7 @@
     EndCommandBuffer(cmdBuffer);
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
+    RecordImages(m_renderTargets);
 }
 
 TEST_F(XglRenderTest, CubeWithVertexFetchAndMVP)
@@ -1914,8 +1897,7 @@
     EndCommandBuffer(cmdBuffer);
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
+    RecordImages(m_renderTargets);
 }
 
 TEST_F(XglRenderTest, VSTexture)
@@ -1985,8 +1967,7 @@
     EndCommandBuffer(cmdBuffer);
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
+    RecordImages(m_renderTargets);
 }
 TEST_F(XglRenderTest, TexturedTriangle)
 {
@@ -2058,8 +2039,7 @@
     EndCommandBuffer(cmdBuffer);
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
+    RecordImages(m_renderTargets);
 }
 TEST_F(XglRenderTest, TexturedTriangleClip)
 {
@@ -2142,8 +2122,7 @@
     EndCommandBuffer(cmdBuffer);
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
+    RecordImages(m_renderTargets);
 }
 TEST_F(XglRenderTest, FSTriangle)
 {
@@ -2215,8 +2194,7 @@
     EndCommandBuffer(cmdBuffer);
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
+    RecordImages(m_renderTargets);
 }
 TEST_F(XglRenderTest, SamplerBindingsTriangle)
 {
@@ -2309,9 +2287,7 @@
     EndCommandBuffer(cmdBuffer);
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
-
+    RecordImages(m_renderTargets);
 }
 
 TEST_F(XglRenderTest, TriangleVSUniformBlock)
@@ -2393,9 +2369,7 @@
     EndCommandBuffer(cmdBuffer);
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
-
+    RecordImages(m_renderTargets);
 }
 
 TEST_F(XglRenderTest, TriangleFSUniformBlockBinding)
@@ -2496,8 +2470,7 @@
     EndCommandBuffer(cmdBuffer);
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
+    RecordImages(m_renderTargets);
 }
 
 TEST_F(XglRenderTest, TriangleFSAnonymousUniformBlockBinding)
@@ -2594,9 +2567,7 @@
     EndCommandBuffer(cmdBuffer);
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
-
+    RecordImages(m_renderTargets);
 }
 
 TEST_F(XglRenderTest, CubeWithVertexFetchAndMVPAndTexture)
@@ -2728,9 +2699,7 @@
     EndCommandBuffer(cmdBuffer);
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
-
+    RecordImages(m_renderTargets);
 }
 
 TEST_F(XglRenderTest, TriangleMixedSamplerUniformBlockBinding)
@@ -2850,9 +2819,7 @@
     EndCommandBuffer(cmdBuffer);
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
-
+    RecordImages(m_renderTargets);
 }
 
 TEST_F(XglRenderTest, TriangleMatchingSamplerUniformBlockBinding)
@@ -2966,9 +2933,7 @@
     EndCommandBuffer(cmdBuffer);
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
-
+    RecordImages(m_renderTargets);
 }
 
 TEST_F(XglRenderTest, TriangleUniformBufferLayout)
@@ -3219,8 +3184,7 @@
     EndCommandBuffer(cmdBuffer);
     cmdBuffer.QueueCommandBuffer(m_memoryRefManager.GetMemoryRefList(), m_memoryRefManager.GetNumRefs());
 
-    for (int i = 0; i < m_renderTargets.size(); i++)
-        RecordImage(m_renderTargets[i]);
+    RecordImages(m_renderTargets);
 }
 
 int main(int argc, char **argv) {
diff --git a/tests/xgltestframework.cpp b/tests/xgltestframework.cpp
index 20b03f2..5a9935f 100644
--- a/tests/xgltestframework.cpp
+++ b/tests/xgltestframework.cpp
@@ -338,30 +338,14 @@
 
 }
 
-void XglTestFramework::RecordImage(XglImage *image, char *tag)
+void XglTestFramework::RecordImages(vector<XglImage *> images)
 {
-    const ::testing::TestInfo* const test_info =
-      ::testing::UnitTest::GetInstance()->current_test_info();
-    ostringstream filestream;
-    string filename;
-
-    filestream << test_info->name() << "-" << tag;
-    filename = filestream.str();
-    // ToDo - scrub string for bad characters
-
-    if (m_save_images || m_compare_images) {
-        WritePPM(filename.c_str(), image);
-        if (m_compare_images) {
-            Compare(filename.c_str(), image);
-        }
-    }
-
-    if (m_show_images) {
-        Show(test_info->name(), image);
+    for (int32_t i = 0; i < images.size(); i++) {
+        RecordImage(images[i]);
     }
 }
 
-void XglTestFramework::RecordImage(XglImage *image)
+void XglTestFramework::RecordImage(XglImage * image)
 {
     const ::testing::TestInfo* const test_info =
       ::testing::UnitTest::GetInstance()->current_test_info();
@@ -382,7 +366,6 @@
         filename = filestream.str();
     }
 
-
     // ToDo - scrub string for bad characters
 
     if (m_save_images || m_compare_images) {
diff --git a/tests/xgltestframework.h b/tests/xgltestframework.h
index 0fb96d5..981dc0e 100644
--- a/tests/xgltestframework.h
+++ b/tests/xgltestframework.h
@@ -79,8 +79,8 @@
     void WritePPM( const char *basename, XglImage *image );
     void Show(const char *comment, XglImage *image);
     void Compare(const char *comment, XglImage *image);
-    void RecordImage(XglImage *image);
-    void RecordImage(XglImage *image, char *tag);
+    void RecordImage(XglImage * image);
+    void RecordImages(vector<XglImage *> image);
     bool GLSLtoSPV(const XGL_PIPELINE_SHADER_STAGE shader_type,
                    const char *pshader,
                    std::vector<unsigned int> &spv);
