diff --git a/Plugins/BivariateRepresentations/CMakeLists.txt b/Plugins/BivariateRepresentations/CMakeLists.txt
index d93ef21a..1507cb84 100644
--- a/Plugins/BivariateRepresentations/CMakeLists.txt
+++ b/Plugins/BivariateRepresentations/CMakeLists.txt
@@ -23,29 +23,39 @@ if (PARAVIEW_USE_QT)
     CLASS_NAME vtkPVBivariatePluginLocation
     INTERFACES location_interfaces
     SOURCES location_sources)
+set(qrc_files
+  pqFlipBookResources.qrc
+)
 
   list(APPEND interfaces
     ${location_interfaces})
   list(APPEND sources
     ${location_sources})
 
-  set(resources
-    Bremm.png
-    Schumann.png
-    Steiger.png
-    Teulingfig2.png)
-
-  foreach(inputfile IN LISTS resources)
-    configure_file(
-      ${CMAKE_CURRENT_SOURCE_DIR}/Resources/${inputfile}
-      "${CMAKE_BINARY_DIR}/${_paraview_build_plugin_directory}/Resources/${inputfile}"
-      COPYONLY)
-  endforeach()
-
-  install(
-    DIRECTORY Resources
-    DESTINATION "${_paraview_build_plugin_directory}"
-    COMPONENT   "${_paraview_build_PLUGINS_COMPONENT}")
+  # BCO 2025-06-25: generated a real resources file for this plugin because otherwise
+  #   users will always get messages about missing files when loading a state file with
+  #   the option to load all files from a specific locations
+  set(qrc_files
+    pqBivariateRepresentations.qrc
+  )
+
+#  set(resources
+#    Bremm.png
+#    Schumann.png
+#    Steiger.png
+#    Teulingfig2.png)
+
+#  foreach(inputfile IN LISTS resources)
+#    configure_file(
+#      ${CMAKE_CURRENT_SOURCE_DIR}/Resources/${inputfile}
+#      "${CMAKE_BINARY_DIR}/${_paraview_build_plugin_directory}/Resources/${inputfile}"
+#      COPYONLY)
+#  endforeach()
+
+#  install(
+#    DIRECTORY Resources
+#    DESTINATION "${_paraview_build_plugin_directory}"
+#    COMPONENT   "${_paraview_build_PLUGINS_COMPONENT}")
 endif ()
 
 paraview_add_plugin(BivariateRepresentations
@@ -53,11 +63,17 @@ paraview_add_plugin(BivariateRepresentations
   REQUIRED_ON_SERVER
   VERSION "1.0"
   UI_INTERFACES ${interfaces}
+  UI_RESOURCES ${qrc_files}
   SOURCES ${sources}
   MODULES BivariateRepresentations::vtkBivariateRepresentations
   MODULE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/Representations/vtk.module"
   XML_DOCUMENTATION OFF)
 
+target_link_libraries(BivariateRepresentations
+  PRIVATE
+    VTK::RenderingQt
+)
+
 if (BUILD_TESTING)
   add_subdirectory(Testing)
 endif()
diff --git a/Plugins/BivariateRepresentations/pqBivariateManager.cxx b/Plugins/BivariateRepresentations/pqBivariateManager.cxx
index 878a15ff..db6b74e3 100644
--- a/Plugins/BivariateRepresentations/pqBivariateManager.cxx
+++ b/Plugins/BivariateRepresentations/pqBivariateManager.cxx
@@ -13,14 +13,29 @@
 
 #include "vtkPVBivariatePluginLocation.h"
 #include "vtkSMPropertyHelper.h"
+#include "vtkSMSourceProxy.h"
+#include "vtkSMProxyManager.h"
 #include "vtkSMProxy.h"
 #include "vtkSMRepresentationProxy.h"
 
+#include "vtkQImageToImageSource.h"
+#include "vtkImageData.h"
+#include "vtkDistributedTrivialProducer.h"
+#include "vtkNew.h"
+#include <QPixmap>
+#include <QImage>
+
 #include <QDebug>
 namespace
 {
-// Nice to have : textures names can be retrieved from the ressources directly.
-const std::string TEXTURE_FILES[4]{ "Bremm.png", "Schumann.png", "Steiger.png", "Teulingfig2.png" };
+  // Nice to have : textures names can be retrieved from the ressources directly.
+  //const std::string TEXTURE_FILES[4]{ "Bremm.png", "Schumann.png", "Steiger.png", "Teulingfig2.png" };
+  const std::string TEXTURE_FILES[4]
+  {":/pqBivariateRepresentations/Resources/Bremm.png",
+   ":/pqBivariateRepresentations/Resources/Schumann.png",
+   ":/pqBivariateRepresentations/Resources/Steiger.png",
+   ":/pqBivariateRepresentations/Resources/Teulingfig2.png"
+  };
 }
 
 //-----------------------------------------------------------------------------
@@ -136,16 +151,54 @@ void pqBivariateManager::generateTextureProxies(pqServer* server)
 
   for (auto& textureFile : TEXTURE_FILES)
   {
-    auto texturePath = texturesFolder + textureFile;
-
-    // Create texture proxies. We do not use pqObjectBuilder because we need to specify
-    // a custom proxy name (which is the name of the texture file, minus the extension)
-    vtkSMSessionProxyManager* spxm = server->proxyManager();
-    vtkSMProxy* textureProxy = spxm->NewProxy("textures", "ImageTexture");
-    auto textureName = vtksys::SystemTools::GetFilenameWithoutExtension(textureFile);
-    spxm->RegisterProxy("textures", textureName.c_str(), textureProxy);
-    vtkSMPropertyHelper(textureProxy->GetProperty("FileName")).Set(texturePath.c_str());
-    textureProxy->UpdateVTKObjects();
-    textureProxy->Delete();
+    // BCO 2025-06-26: add the possibility to load bitmaps from Qt resources
+    if(textureFile[0] == ':')
+    {
+      // read the texture file as a QPixmap and convert to QImage
+      QPixmap pix(textureFile.c_str());
+      QImage img = pix.toImage();
+
+      // bring this Qt style bitmap into some VTK format
+      // note: not sure whether the "deep copy" below is really required...
+      vtkNew<vtkQImageToImageSource> qimageToImageSource;
+      qimageToImageSource->SetQImage(&img);
+      qimageToImageSource->Update();
+      vtkNew<vtkImageData> image;
+      image->DeepCopy(qimageToImageSource->GetOutput());
+
+      // the following is just taken over from the below "read from file" code
+      vtkSMSessionProxyManager* spxm = server->proxyManager();
+      vtkSMProxy* textureProxy = spxm->NewProxy("textures", "ImageTexture");
+      auto textureName = vtksys::SystemTools::GetFilenameWithoutExtension(textureFile);
+      spxm->RegisterProxy("textures", textureName.c_str(), textureProxy);
+
+      // it seems that this static function simply generates some global memory
+      // chunk that contains a vtkObject of the class that was passed:
+      // vtkImageData in this case
+      vtkDistributedTrivialProducer::SetGlobalOutput(textureName.c_str(), image);
+
+      // we pass now the "key" of that memory chunk like we are passing the file name below
+      vtkSMPropertyHelper(textureProxy->GetProperty("TrivialProducerKey")).Set(textureName.c_str());
+
+      // note: "Mode" 1 means "ReadFromMemory" (while 0 is the default, meaning "ReadFromMemory")
+      vtkSMPropertyHelper(textureProxy->GetProperty("Mode")).Set(1);
+      textureProxy->UpdateVTKObjects();
+      textureProxy->Delete();
+    }
+    
+    else
+    {
+      auto texturePath = texturesFolder + textureFile;
+
+      // Create texture proxies. We do not use pqObjectBuilder because we need to specify
+      // a custom proxy name (which is the name of the texture file, minus the extension)
+      vtkSMSessionProxyManager* spxm = server->proxyManager();
+      vtkSMProxy* textureProxy = spxm->NewProxy("textures", "ImageTexture");
+      auto textureName = vtksys::SystemTools::GetFilenameWithoutExtension(textureFile);
+      spxm->RegisterProxy("textures", textureName.c_str(), textureProxy);
+      vtkSMPropertyHelper(textureProxy->GetProperty("FileName")).Set(texturePath.c_str());
+      textureProxy->UpdateVTKObjects();
+      textureProxy->Delete();
+    }
   }
 }
diff --git a/Plugins/BivariateRepresentations/pqBivariateRepresentations.qrc b/Plugins/BivariateRepresentations/pqBivariateRepresentations.qrc
new file mode 100644
index 00000000..b4213c07
--- /dev/null
+++ b/Plugins/BivariateRepresentations/pqBivariateRepresentations.qrc
@@ -0,0 +1,11 @@
+<!-- SPDX-FileCopyrightText: Copyright (c) cobo GmbH -->
+<!-- SPDX-License-Identifier: BSD-3-Clause -->
+<RCC>
+    <qresource prefix="/pqBivariateRepresentations">
+        <file>Resources/Bremm.png</file>
+        <file>Resources/Schumann.png</file>
+        <file>Resources/Steiger.png</file>
+        <file>Resources/Teulingfig2.png</file>
+    </qresource>
+</RCC>
+
diff --git a/VTKExtensions/FiltersRendering/vtkNetworkImageSource.cxx b/VTKExtensions/FiltersRendering/vtkNetworkImageSource.cxx
index d788eb64..647386a7 100644
--- a/VTKExtensions/FiltersRendering/vtkNetworkImageSource.cxx
+++ b/VTKExtensions/FiltersRendering/vtkNetworkImageSource.cxx
@@ -212,6 +212,7 @@ int vtkNetworkImageSource::ReadImageFromMemory(const char* trivialProducerKey)
     vtkErrorMacro("TrivialProducerKey must be set.");
     return 0;
   }
+
   auto producer = vtk::TakeSmartPointer(vtkDistributedTrivialProducer::New());
   producer->UpdateFromGlobal(trivialProducerKey);
   if (auto image = vtkImageData::SafeDownCast(producer->GetOutputDataObject(0)))
diff --git a/bivariate_texture_resources.diff b/bivariate_texture_resources.diff
new file mode 100644
index 00000000..2bfabf3c
--- /dev/null
+++ b/bivariate_texture_resources.diff
@@ -0,0 +1,203 @@
+diff --git a/Plugins/BivariateRepresentations/CMakeLists.txt b/Plugins/BivariateRepresentations/CMakeLists.txt
+index d93ef21a..1507cb84 100644
+--- a/Plugins/BivariateRepresentations/CMakeLists.txt
++++ b/Plugins/BivariateRepresentations/CMakeLists.txt
+@@ -23,29 +23,39 @@ if (PARAVIEW_USE_QT)
+     CLASS_NAME vtkPVBivariatePluginLocation
+     INTERFACES location_interfaces
+     SOURCES location_sources)
++set(qrc_files
++  pqFlipBookResources.qrc
++)
+ 
+   list(APPEND interfaces
+     ${location_interfaces})
+   list(APPEND sources
+     ${location_sources})
+ 
+-  set(resources
+-    Bremm.png
+-    Schumann.png
+-    Steiger.png
+-    Teulingfig2.png)
+-
+-  foreach(inputfile IN LISTS resources)
+-    configure_file(
+-      ${CMAKE_CURRENT_SOURCE_DIR}/Resources/${inputfile}
+-      "${CMAKE_BINARY_DIR}/${_paraview_build_plugin_directory}/Resources/${inputfile}"
+-      COPYONLY)
+-  endforeach()
+-
+-  install(
+-    DIRECTORY Resources
+-    DESTINATION "${_paraview_build_plugin_directory}"
+-    COMPONENT   "${_paraview_build_PLUGINS_COMPONENT}")
++  # BCO 2025-06-25: generated a real resources file for this plugin because otherwise
++  #   users will always get messages about missing files when loading a state file with
++  #   the option to load all files from a specific locations
++  set(qrc_files
++    pqBivariateRepresentations.qrc
++  )
++
++#  set(resources
++#    Bremm.png
++#    Schumann.png
++#    Steiger.png
++#    Teulingfig2.png)
++
++#  foreach(inputfile IN LISTS resources)
++#    configure_file(
++#      ${CMAKE_CURRENT_SOURCE_DIR}/Resources/${inputfile}
++#      "${CMAKE_BINARY_DIR}/${_paraview_build_plugin_directory}/Resources/${inputfile}"
++#      COPYONLY)
++#  endforeach()
++
++#  install(
++#    DIRECTORY Resources
++#    DESTINATION "${_paraview_build_plugin_directory}"
++#    COMPONENT   "${_paraview_build_PLUGINS_COMPONENT}")
+ endif ()
+ 
+ paraview_add_plugin(BivariateRepresentations
+@@ -53,11 +63,17 @@ paraview_add_plugin(BivariateRepresentations
+   REQUIRED_ON_SERVER
+   VERSION "1.0"
+   UI_INTERFACES ${interfaces}
++  UI_RESOURCES ${qrc_files}
+   SOURCES ${sources}
+   MODULES BivariateRepresentations::vtkBivariateRepresentations
+   MODULE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/Representations/vtk.module"
+   XML_DOCUMENTATION OFF)
+ 
++target_link_libraries(BivariateRepresentations
++  PRIVATE
++    VTK::RenderingQt
++)
++
+ if (BUILD_TESTING)
+   add_subdirectory(Testing)
+ endif()
+diff --git a/Plugins/BivariateRepresentations/pqBivariateManager.cxx b/Plugins/BivariateRepresentations/pqBivariateManager.cxx
+index 878a15ff..db6b74e3 100644
+--- a/Plugins/BivariateRepresentations/pqBivariateManager.cxx
++++ b/Plugins/BivariateRepresentations/pqBivariateManager.cxx
+@@ -13,14 +13,29 @@
+ 
+ #include "vtkPVBivariatePluginLocation.h"
+ #include "vtkSMPropertyHelper.h"
++#include "vtkSMSourceProxy.h"
++#include "vtkSMProxyManager.h"
+ #include "vtkSMProxy.h"
+ #include "vtkSMRepresentationProxy.h"
+ 
++#include "vtkQImageToImageSource.h"
++#include "vtkImageData.h"
++#include "vtkDistributedTrivialProducer.h"
++#include "vtkNew.h"
++#include <QPixmap>
++#include <QImage>
++
+ #include <QDebug>
+ namespace
+ {
+-// Nice to have : textures names can be retrieved from the ressources directly.
+-const std::string TEXTURE_FILES[4]{ "Bremm.png", "Schumann.png", "Steiger.png", "Teulingfig2.png" };
++  // Nice to have : textures names can be retrieved from the ressources directly.
++  //const std::string TEXTURE_FILES[4]{ "Bremm.png", "Schumann.png", "Steiger.png", "Teulingfig2.png" };
++  const std::string TEXTURE_FILES[4]
++  {":/pqBivariateRepresentations/Resources/Bremm.png",
++   ":/pqBivariateRepresentations/Resources/Schumann.png",
++   ":/pqBivariateRepresentations/Resources/Steiger.png",
++   ":/pqBivariateRepresentations/Resources/Teulingfig2.png"
++  };
+ }
+ 
+ //-----------------------------------------------------------------------------
+@@ -136,16 +151,54 @@ void pqBivariateManager::generateTextureProxies(pqServer* server)
+ 
+   for (auto& textureFile : TEXTURE_FILES)
+   {
+-    auto texturePath = texturesFolder + textureFile;
+-
+-    // Create texture proxies. We do not use pqObjectBuilder because we need to specify
+-    // a custom proxy name (which is the name of the texture file, minus the extension)
+-    vtkSMSessionProxyManager* spxm = server->proxyManager();
+-    vtkSMProxy* textureProxy = spxm->NewProxy("textures", "ImageTexture");
+-    auto textureName = vtksys::SystemTools::GetFilenameWithoutExtension(textureFile);
+-    spxm->RegisterProxy("textures", textureName.c_str(), textureProxy);
+-    vtkSMPropertyHelper(textureProxy->GetProperty("FileName")).Set(texturePath.c_str());
+-    textureProxy->UpdateVTKObjects();
+-    textureProxy->Delete();
++    // BCO 2025-06-26: add the possibility to load bitmaps from Qt resources
++    if(textureFile[0] == ':')
++    {
++      // read the texture file as a QPixmap and convert to QImage
++      QPixmap pix(textureFile.c_str());
++      QImage img = pix.toImage();
++
++      // bring this Qt style bitmap into some VTK format
++      // note: not sure whether the "deep copy" below is really required...
++      vtkNew<vtkQImageToImageSource> qimageToImageSource;
++      qimageToImageSource->SetQImage(&img);
++      qimageToImageSource->Update();
++      vtkNew<vtkImageData> image;
++      image->DeepCopy(qimageToImageSource->GetOutput());
++
++      // the following is just taken over from the below "read from file" code
++      vtkSMSessionProxyManager* spxm = server->proxyManager();
++      vtkSMProxy* textureProxy = spxm->NewProxy("textures", "ImageTexture");
++      auto textureName = vtksys::SystemTools::GetFilenameWithoutExtension(textureFile);
++      spxm->RegisterProxy("textures", textureName.c_str(), textureProxy);
++
++      // it seems that this static function simply generates some global memory
++      // chunk that contains a vtkObject of the class that was passed:
++      // vtkImageData in this case
++      vtkDistributedTrivialProducer::SetGlobalOutput(textureName.c_str(), image);
++
++      // we pass now the "key" of that memory chunk like we are passing the file name below
++      vtkSMPropertyHelper(textureProxy->GetProperty("TrivialProducerKey")).Set(textureName.c_str());
++
++      // note: "Mode" 1 means "ReadFromMemory" (while 0 is the default, meaning "ReadFromMemory")
++      vtkSMPropertyHelper(textureProxy->GetProperty("Mode")).Set(1);
++      textureProxy->UpdateVTKObjects();
++      textureProxy->Delete();
++    }
++    
++    else
++    {
++      auto texturePath = texturesFolder + textureFile;
++
++      // Create texture proxies. We do not use pqObjectBuilder because we need to specify
++      // a custom proxy name (which is the name of the texture file, minus the extension)
++      vtkSMSessionProxyManager* spxm = server->proxyManager();
++      vtkSMProxy* textureProxy = spxm->NewProxy("textures", "ImageTexture");
++      auto textureName = vtksys::SystemTools::GetFilenameWithoutExtension(textureFile);
++      spxm->RegisterProxy("textures", textureName.c_str(), textureProxy);
++      vtkSMPropertyHelper(textureProxy->GetProperty("FileName")).Set(texturePath.c_str());
++      textureProxy->UpdateVTKObjects();
++      textureProxy->Delete();
++    }
+   }
+ }
+diff --git a/Plugins/BivariateRepresentations/pqBivariateRepresentations.qrc b/Plugins/BivariateRepresentations/pqBivariateRepresentations.qrc
+new file mode 100644
+index 00000000..b4213c07
+--- /dev/null
++++ b/Plugins/BivariateRepresentations/pqBivariateRepresentations.qrc
+@@ -0,0 +1,11 @@
++<!-- SPDX-FileCopyrightText: Copyright (c) cobo GmbH -->
++<!-- SPDX-License-Identifier: BSD-3-Clause -->
++<RCC>
++    <qresource prefix="/pqBivariateRepresentations">
++        <file>Resources/Bremm.png</file>
++        <file>Resources/Schumann.png</file>
++        <file>Resources/Steiger.png</file>
++        <file>Resources/Teulingfig2.png</file>
++    </qresource>
++</RCC>
++
+diff --git a/VTKExtensions/FiltersRendering/vtkNetworkImageSource.cxx b/VTKExtensions/FiltersRendering/vtkNetworkImageSource.cxx
+index d788eb64..647386a7 100644
+--- a/VTKExtensions/FiltersRendering/vtkNetworkImageSource.cxx
++++ b/VTKExtensions/FiltersRendering/vtkNetworkImageSource.cxx
+@@ -212,6 +212,7 @@ int vtkNetworkImageSource::ReadImageFromMemory(const char* trivia
\ No newline at end of file
