diff --git a/Source/SimulationManager/VTKRenderer/imstkVTKScreenCaptureUtility.cpp b/Source/SimulationManager/VTKRenderer/imstkVTKScreenCaptureUtility.cpp
index 92bd728426130172f849d00ab1aa6dc6d92c3d19..33cfa0cd28be27513199e6b4499b00f072809668 100644
--- a/Source/SimulationManager/VTKRenderer/imstkVTKScreenCaptureUtility.cpp
+++ b/Source/SimulationManager/VTKRenderer/imstkVTKScreenCaptureUtility.cpp
@@ -29,24 +29,23 @@
 namespace imstk
 {
 VTKScreenCaptureUtility::VTKScreenCaptureUtility(vtkRenderWindow* const rw, const std::string prefix /*= "Screenshot-"*/) :
+    ScreenCaptureUtility(prefix),
     m_windowToImageFilter(vtkSmartPointer<vtkWindowToImageFilter>::New()),
     m_pngWriter(vtkSmartPointer<vtkPNGWriter>::New())
 {
-    m_screenShotNumber = 0;
-    m_screenShotPrefix = prefix;
     if (rw != nullptr)
     {
         m_renderWindow = rw;
     }
 }
 
-void
-VTKScreenCaptureUtility::saveScreenShot()
+std::string
+VTKScreenCaptureUtility::saveScreenShot(const std::string& captureName)
 {
     if (m_renderWindow == nullptr)
     {
         LOG(WARNING) << "Render window has not been set yet! ";
-        return;
+        return "";
     }
 
     if (m_windowToImageFilter->GetInput() == nullptr)
@@ -63,13 +62,13 @@ VTKScreenCaptureUtility::saveScreenShot()
 
     m_windowToImageFilter->Modified();
 
-    std::string captureName = m_screenShotPrefix + std::to_string(m_screenShotNumber) + ".png";
+    std::string filename = captureName + ".png";
 
-    m_pngWriter->SetFileName(captureName.data());
+    m_pngWriter->SetFileName(filename.data());
     m_pngWriter->Write();
 
     LOG(INFO) << "Screen shot " << m_screenShotNumber << " saved as " << captureName << "\n";
 
-    m_screenShotNumber++;
+    return filename;
 }
 } // imstk
diff --git a/Source/SimulationManager/VTKRenderer/imstkVTKScreenCaptureUtility.h b/Source/SimulationManager/VTKRenderer/imstkVTKScreenCaptureUtility.h
index d1be6ad193ef5cb4d563ddb72cf3699da7769a7b..1bff766fffd5c59e839233ef172b328930c5a44d 100644
--- a/Source/SimulationManager/VTKRenderer/imstkVTKScreenCaptureUtility.h
+++ b/Source/SimulationManager/VTKRenderer/imstkVTKScreenCaptureUtility.h
@@ -39,6 +39,8 @@ namespace imstk
 class VTKScreenCaptureUtility : public ScreenCaptureUtility
 {
 public:
+    using ScreenCaptureUtility::saveScreenShot;
+
     ///
     /// \brief Constructor
     ///
@@ -52,7 +54,7 @@ public:
     ///
     /// \brief Saves the screenshot as a png file
     ///
-    virtual void saveScreenShot() override;
+    virtual std::string saveScreenShot(const std::string& captureName) override;
 
 protected:
     vtkSmartPointer<vtkWindowToImageFilter> m_windowToImageFilter;
diff --git a/Source/SimulationManager/VulkanRenderer/imstkVulkanScreenCaptureUtility.cpp b/Source/SimulationManager/VulkanRenderer/imstkVulkanScreenCaptureUtility.cpp
index 971fb5e87fcc07b1610b5e46b6c283d3abbbe00d..c2d7b5e9daf7312635625b8a8f7a206713dc222d 100644
--- a/Source/SimulationManager/VulkanRenderer/imstkVulkanScreenCaptureUtility.cpp
+++ b/Source/SimulationManager/VulkanRenderer/imstkVulkanScreenCaptureUtility.cpp
@@ -26,16 +26,14 @@
 namespace imstk
 {
 VulkanScreenCaptureUtility::VulkanScreenCaptureUtility(const std::string prefix /*= "Screenshot-"*/)
+ScreenCaptureUtility(prefix)
 {
-    m_screenShotNumber = 0;
-    m_screenShotPrefix = prefix;
 }
 
-void
-VulkanScreenCaptureUtility::saveScreenShot()
+std::string
+VulkanScreenCaptureUtility::saveScreenShot(const std::string)
 {
     LOG(WARNING) << "Screen capture not supported\n";
-
-    m_screenShotNumber++;
+    return "";
 }
 } // imstk
diff --git a/Source/SimulationManager/VulkanRenderer/imstkVulkanScreenCaptureUtility.h b/Source/SimulationManager/VulkanRenderer/imstkVulkanScreenCaptureUtility.h
index 5813d798bb83864eb306c8fdc977ea0b239c6547..a5af3da587c540ab4103cd81e6cfdada5f43ca3c 100644
--- a/Source/SimulationManager/VulkanRenderer/imstkVulkanScreenCaptureUtility.h
+++ b/Source/SimulationManager/VulkanRenderer/imstkVulkanScreenCaptureUtility.h
@@ -48,7 +48,7 @@ public:
     ///
     /// \brief Saves the screenshot as a png file
     ///
-    virtual void saveScreenShot();
+    std::string saveScreenShot(const std::string&) override;
 
 protected:
 };
diff --git a/Source/SimulationManager/imstkScreenCaptureUtility.cpp b/Source/SimulationManager/imstkScreenCaptureUtility.cpp
index be19bdb9e020f5a550575b9b83f97e9bfa458c6a..c72310eeeb7a05f173789b6f5f9fecbe2188c20c 100644
--- a/Source/SimulationManager/imstkScreenCaptureUtility.cpp
+++ b/Source/SimulationManager/imstkScreenCaptureUtility.cpp
@@ -23,6 +23,18 @@
 
 namespace imstk
 {
+ScreenCaptureUtility::ScreenCaptureUtility(std::string prefix) : m_screenShotPrefix(prefix), m_screenShotNumber(0)
+{
+}
+
+std::string
+ScreenCaptureUtility::saveScreenShot()
+{
+    std::string captureName = m_screenShotPrefix + std::to_string(m_screenShotNumber) + ".png";
+    ++m_screenShotNumber;
+    return saveScreenShot(captureName);
+}
+
 unsigned int
 ScreenCaptureUtility::getScreenShotNumber() const
 {
diff --git a/Source/SimulationManager/imstkScreenCaptureUtility.h b/Source/SimulationManager/imstkScreenCaptureUtility.h
index 415265b2145dfba525da12b428f67ab88d8f87b6..e714a89f0e7952875dc9cdc1bd3a15b42c98886f 100644
--- a/Source/SimulationManager/imstkScreenCaptureUtility.h
+++ b/Source/SimulationManager/imstkScreenCaptureUtility.h
@@ -34,35 +34,46 @@ class ScreenCaptureUtility
 {
 public:
     ///
-    /// \brief Saves the screenshot as a png file
+    /// \brief Constructor
+    ///
+    ScreenCaptureUtility(std::string prefix = "Screenshot-");
+
+    ///
+    /// \brief Saves a screenshot with a name of <prefix><screenshotNumber>.<implementationImageType>
+    ///        the <ImplementationImageType> is most likely `.png`.
+    /// \return the file name that was actually used to store the file, "" if the file storage failed
+    std::string saveScreenShot();
+
     ///
-    virtual void saveScreenShot() = 0;
+    /// \brief Saves a screenshot with the given name, the implementation will add the image
+    ///        type used to store the file
+    /// \param name base name for the file to store
+    /// \return the file name that was actually used to store the file, "" if the file storage failed
+    virtual std::string saveScreenShot(const std::string& name) = 0;
 
     ///
-    /// \brief Returns the number of the screenshot
+    /// \brief Returns the number of the next screenshot
     ///
     unsigned int getScreenShotNumber() const;
 
     ///
-    /// \brief set/reset the prefix amd the count numbers
+    /// \brief set/reset the prefix and the count numbers
+    ///
     void setScreenShotPrefix(const std::string& newPrefix);
 
     ///
-    /// \brief reset the screenshot number indicator
+    /// \brief reset the screenshot number
+    ///
     void resetScreenShotNumber();
 
 protected:
-    ///
-    /// \brief Constructor
-    ///
-    ScreenCaptureUtility() = default;
 
     ///
     /// \brief Destructor
     ///
     virtual ~ScreenCaptureUtility() = default;
 
-    unsigned int m_screenShotNumber = 0; //> screen shot number is added to the file prefix, and incremented everytime a screen shot is taken
-    std::string  m_screenShotPrefix;     //> the prefix for the screenshots to be saved
+    unsigned int m_screenShotNumber = 0; ///< screen shot number is added to the file prefix, and incremented everytime a screen shot is taken
+    std::string  m_screenShotPrefix;     ///< the prefix for the screenshots to be saved
 };
 } // imstk