diff --git a/library/phx/display_system.cpp b/library/phx/display_system.cpp
index 675f964211c9f8d7d852aa198436487b267a04ae..cd49d6bed47ea3610b8d56d258decf8efad9607a 100644
--- a/library/phx/display_system.cpp
+++ b/library/phx/display_system.cpp
@@ -22,8 +22,17 @@
 
 #include "display_system.hpp"
 
+#include <vector>
+
 namespace phx {
-DisplaySystem::DisplaySystem(Engine* engine) : System(engine) {}
-DisplaySystem::~DisplaySystem() {}
+void DisplaySystem::Update(const FrameTimer::TimeInfo&) { tick(); }
 
+std::vector<di::opengl_window*> DisplaySystem::OpenGLWindows() const {
+  std::vector<di::opengl_window*> opengl_windows;
+  for (auto window : windows()) {
+    auto opengl_window = dynamic_cast<di::opengl_window*>(window);
+    if (opengl_window) opengl_windows.push_back(opengl_window);
+  }
+  return opengl_windows;
+}
 }  // namespace phx
diff --git a/library/phx/display_system.hpp b/library/phx/display_system.hpp
index 08e2d36364fc6747c9cb8d2605b45e990ebeaa9d..9a22be33ccb0f8194a3c2c3d318d2894c873909e 100644
--- a/library/phx/display_system.hpp
+++ b/library/phx/display_system.hpp
@@ -23,32 +23,22 @@
 #ifndef LIBRARY_PHX_DISPLAY_SYSTEM_HPP_
 #define LIBRARY_PHX_DISPLAY_SYSTEM_HPP_
 
-#include <memory>
+#include <di/systems/display/display_system.hpp>
+#include <di/systems/display/opengl_window.hpp>
+
 #include <vector>
 
 #include "phx/engine.hpp"
 #include "phx/export.hpp"
-#include "phx/render_target.hpp"
 #include "phx/system.hpp"
 
 namespace phx {
-
-class PHOENIX_EXPORT DisplaySystem : public System {
+class PHOENIX_EXPORT DisplaySystem : public System, public di::display_system {
  public:
-  DisplaySystem(const DisplaySystem&) = delete;
-  DisplaySystem(DisplaySystem&&) = default;
-  ~DisplaySystem();
-
-  DisplaySystem& operator=(const DisplaySystem&) = delete;
-  DisplaySystem& operator=(DisplaySystem&&) = default;
+  void Update(const FrameTimer::TimeInfo&) override;
 
-  void Update(const FrameTimer::TimeInfo&) override = 0;
-
- protected:
-  explicit DisplaySystem(Engine* engine);
-  friend DisplaySystem* Engine::CreateSystem<DisplaySystem>();
+  std::vector<di::opengl_window*> OpenGLWindows() const;
 };
-
 }  // namespace phx
 
 #endif  // LIBRARY_PHX_DISPLAY_SYSTEM_HPP_