diff --git a/ParticleGenerator/res/config/imgui.ini b/ParticleGenerator/res/config/imgui.ini
index d59a5fdfcef08d8835f66e92dac664ae8fff0534..18995efe87ec47f0e8d5646debd4463175ab3d00 100644
--- a/ParticleGenerator/res/config/imgui.ini
+++ b/ParticleGenerator/res/config/imgui.ini
@@ -3,6 +3,6 @@ Pos=60,60
 Size=400,400
 
 [Window][Particle Generator]
-Pos=60,60
-Size=504,424
+Pos=83,81
+Size=864,632
 
diff --git a/ParticleGenerator/src/Interface/Manager.cpp b/ParticleGenerator/src/Interface/Manager.cpp
index 57b2e8d809db74849d6b323ceb6a154f92d5b278..0fcb4841b7d3636f5e27b089f520c73773ad23fc 100644
--- a/ParticleGenerator/src/Interface/Manager.cpp
+++ b/ParticleGenerator/src/Interface/Manager.cpp
@@ -32,10 +32,25 @@ namespace pg::interface {
         this->_historical.count(current_time);
 
         if(ImGui::Begin(this->_title.c_str())) {
+
+            auto current = this->_manager.current();
             if(ImGui::BeginTabBar("")) {
                 if(ImGui::BeginTabItem("Scene")) {
-                    auto current = this->_manager.current();
-                    if(current.has_value()) {
+                    if(!this->_manager.getScenes().empty()) {
+                        std::string name = !current.has_value() ? (*this->_manager.getScenes().begin())->name() : (*current)->name();
+                        if(ImGui::BeginCombo("Current Scene", name.c_str())) {
+                            for(auto & scene : this->_manager.getScenes()) {
+                                bool is_selected = (scene->name() == name);
+                                if(ImGui::Selectable(scene->name().c_str(), is_selected)) {
+                                    this->_manager.setCurrent(*scene);
+                                }
+                            }
+                            ImGui::EndCombo();
+                        }
+                        ImGui::Separator();
+                    }
+
+                    if(current.has_value() && (*current)->interface().has_value()) {
                         (*(*current)->interface())->render(current_time);
                     }
 
diff --git a/ParticleGenerator/src/Interface/Scene/MeshGenerator.cpp.old b/ParticleGenerator/src/Interface/Scene/MeshGenerator.cpp
similarity index 100%
rename from ParticleGenerator/src/Interface/Scene/MeshGenerator.cpp.old
rename to ParticleGenerator/src/Interface/Scene/MeshGenerator.cpp
diff --git a/ParticleGenerator/src/Interface/Scene/MeshGenerator.hpp.old b/ParticleGenerator/src/Interface/Scene/MeshGenerator.hpp
similarity index 100%
rename from ParticleGenerator/src/Interface/Scene/MeshGenerator.hpp.old
rename to ParticleGenerator/src/Interface/Scene/MeshGenerator.hpp
diff --git a/ParticleGenerator/src/Interface/Scene/MeshScene.cpp.old b/ParticleGenerator/src/Interface/Scene/MeshScene.cpp
similarity index 100%
rename from ParticleGenerator/src/Interface/Scene/MeshScene.cpp.old
rename to ParticleGenerator/src/Interface/Scene/MeshScene.cpp
diff --git a/ParticleGenerator/src/Interface/Scene/MeshScene.hpp.old b/ParticleGenerator/src/Interface/Scene/MeshScene.hpp
similarity index 100%
rename from ParticleGenerator/src/Interface/Scene/MeshScene.hpp.old
rename to ParticleGenerator/src/Interface/Scene/MeshScene.hpp
diff --git a/ParticleGenerator/src/Interface/Scene/PathScene.cpp.old b/ParticleGenerator/src/Interface/Scene/PathScene.cpp
similarity index 100%
rename from ParticleGenerator/src/Interface/Scene/PathScene.cpp.old
rename to ParticleGenerator/src/Interface/Scene/PathScene.cpp
diff --git a/ParticleGenerator/src/Interface/Scene/PathScene.hpp.old b/ParticleGenerator/src/Interface/Scene/PathScene.hpp
similarity index 100%
rename from ParticleGenerator/src/Interface/Scene/PathScene.hpp.old
rename to ParticleGenerator/src/Interface/Scene/PathScene.hpp
diff --git a/ParticleGenerator/src/Interface/Scene/PhysicScene.cpp.old b/ParticleGenerator/src/Interface/Scene/PhysicScene.cpp
similarity index 100%
rename from ParticleGenerator/src/Interface/Scene/PhysicScene.cpp.old
rename to ParticleGenerator/src/Interface/Scene/PhysicScene.cpp
diff --git a/ParticleGenerator/src/Interface/Scene/PhysicScene.hpp.old b/ParticleGenerator/src/Interface/Scene/PhysicScene.hpp
similarity index 100%
rename from ParticleGenerator/src/Interface/Scene/PhysicScene.hpp.old
rename to ParticleGenerator/src/Interface/Scene/PhysicScene.hpp
diff --git a/ParticleGenerator/src/Mesh/Trajectory.cpp b/ParticleGenerator/src/Mesh/Trajectory.cpp
index edcd8927e273f5cce4fbe95ab0e7e21fc5a8d57e..e8f0d3adc1ecb17d1f4fbfc10f8d858f110349cc 100644
--- a/ParticleGenerator/src/Mesh/Trajectory.cpp
+++ b/ParticleGenerator/src/Mesh/Trajectory.cpp
@@ -56,6 +56,7 @@ namespace pg {
     }
 
     void Trajectory::draw(const Camera & camera, double current_time) {
+        glEnable(GL_LINE_SMOOTH);
         this->_vao.bind();
 
         glEnable(GL_PROGRAM_POINT_SIZE); 
diff --git a/ParticleGenerator/src/Scene/Manager.cpp b/ParticleGenerator/src/Scene/Manager.cpp
index 8f93c281e09351a41a6bebb2bf6ad245d7ddd198..6616635856bae4941f0677a8f6d5631ad3e9a393 100644
--- a/ParticleGenerator/src/Scene/Manager.cpp
+++ b/ParticleGenerator/src/Scene/Manager.cpp
@@ -5,35 +5,29 @@
 
 namespace pg {
     Manager::Manager(const Window & window) 
-    :   _current(this->_scenes.begin()), 
+    :   _current(), 
         _sceneRenderer(window, *this) {}
 
     Manager::~Manager() {
-        if(this->_current != this->_scenes.end()) {
+        if(this->_current.has_value()) {
             (*this->_current)->destroy();
         }
     }
 
     std::optional<scene::Scene *> Manager::current() const {
-        return this->_current != this->_scenes.end() ? std::optional<scene::Scene *>((*this->_current).get()) : std::optional<scene::Scene *>();
+        return this->_current;
     }
 
     void Manager::setCurrent(scene::Scene & scene) {
-        if(this->_current != this->_scenes.end()) {
+        if(this->_current.has_value()) {
            (*this->_current)->destroy();
         }
 
-        auto ptr = std::shared_ptr<scene::Scene>(&scene);
-        if(!this->_scenes.contains(ptr)) {
-            this->_scenes.insert(ptr);
-        }
-
-        this->_current = std::find(this->_scenes.begin(), this->_scenes.end(), ptr);
+        this->_current = std::optional<scene::Scene*>(&scene);
         (*this->_current)->initialize();
     }
 
     void Manager::render(const Camera & camera, double current_time) {
-        auto current = this->current();
-        this->_sceneRenderer.render(current, camera, current_time);
+        this->_sceneRenderer.render(this->_current, camera, current_time);
     }
 }
\ No newline at end of file
diff --git a/ParticleGenerator/src/Scene/Manager.hpp b/ParticleGenerator/src/Scene/Manager.hpp
index ca30daf84eea527802b4494d36a0a7d88f7432d6..4e05e8bdcfa013c196168fe8d9fa1c60e29501c7 100644
--- a/ParticleGenerator/src/Scene/Manager.hpp
+++ b/ParticleGenerator/src/Scene/Manager.hpp
@@ -9,12 +9,12 @@
 #include "../Renderer/Camera/Camera.hpp"
 
 namespace pg {
-    using SceneContainer =  std::set<std::shared_ptr<scene::Scene>>;
+    using SceneContainer = std::set<scene::Scene *>;
 
     class Manager {
         private:
             SceneContainer _scenes;
-            SceneContainer::iterator _current;
+            std::optional<scene::Scene *> _current;
 
             scene::Renderer _sceneRenderer;
            
@@ -26,7 +26,7 @@ namespace pg {
             inline const SceneContainer & getScenes() const {return this->_scenes;}
             inline const scene::Renderer & getSceneRenderer() const {return this->_sceneRenderer;}
 
-            inline void add(scene::Scene * scene) {this->_scenes.insert(std::shared_ptr<scene::Scene>(scene));}
+            inline void add(scene::Scene * scene) {this->_scenes.insert(scene);}
 
             std::optional<scene::Scene *> current() const;
 
diff --git a/ParticleGenerator/src/Scene/Renderer.cpp b/ParticleGenerator/src/Scene/Renderer.cpp
index c8264994ec3f7832ead60f4b4ba5680b6f8828d0..4bb373645f04899e4982134933f60a0f98178511 100644
--- a/ParticleGenerator/src/Scene/Renderer.cpp
+++ b/ParticleGenerator/src/Scene/Renderer.cpp
@@ -39,6 +39,7 @@ namespace pg::scene {
         this->_grid.render(camera, current_time);
 
         if(scene.has_value()) {
+            (*scene)->update(current_time);
             (*scene)->render(camera, current_time);
         }
 
diff --git a/ParticleGenerator/src/Scene/Scenes/Grid.hpp b/ParticleGenerator/src/Scene/Scenes/Grid.hpp
index bc2f71ec847cb1ad96ee02fea55e3639a875af3b..faa1e52c44bbec0299ff964ce4e592e66f17813a 100644
--- a/ParticleGenerator/src/Scene/Scenes/Grid.hpp
+++ b/ParticleGenerator/src/Scene/Scenes/Grid.hpp
@@ -25,5 +25,6 @@ namespace pg::scene
 		void destroy() override;
 
 		std::string name() const override;
+		std::optional<interface::Interface *> interface() override {return std::optional<interface::Interface *>();}
 	};
 }
\ No newline at end of file
diff --git a/ParticleGenerator/src/Scene/Scenes/Mesh.cpp.old b/ParticleGenerator/src/Scene/Scenes/Mesh.cpp
similarity index 99%
rename from ParticleGenerator/src/Scene/Scenes/Mesh.cpp.old
rename to ParticleGenerator/src/Scene/Scenes/Mesh.cpp
index c80904f0b3dd84718f2b63e8306d33611d6dbb0d..ccf2f55023e6caa78f50fc9dee08a0ce5baacb3f 100644
--- a/ParticleGenerator/src/Scene/Scenes/Mesh.cpp.old
+++ b/ParticleGenerator/src/Scene/Scenes/Mesh.cpp
@@ -189,10 +189,6 @@ namespace pg::scene
 		return "Mesh Scene";
 	}
 
-	interface::Interface* Mesh::interface() {
-		return &this->_interface;
-	}
-
 	void Mesh::setMesh(const std::string & path) {
 		Model gridModel(path);
 		this->_mesh.generate(gridModel.getMeshGeometry().vertices, gridModel.getMeshGeometry().indices);
diff --git a/ParticleGenerator/src/Scene/Scenes/Mesh.hpp.old b/ParticleGenerator/src/Scene/Scenes/Mesh.hpp
similarity index 89%
rename from ParticleGenerator/src/Scene/Scenes/Mesh.hpp.old
rename to ParticleGenerator/src/Scene/Scenes/Mesh.hpp
index 385128e1b2b582a38eedf191eb6b118a792dcb4c..586e5e8e77f9c843585fa4368e1ba77752f60fc8 100644
--- a/ParticleGenerator/src/Scene/Scenes/Mesh.hpp.old
+++ b/ParticleGenerator/src/Scene/Scenes/Mesh.hpp
@@ -43,6 +43,7 @@ namespace pg::scene
 
 		public:
 			Mesh(ct::CurveGenerator *, const ct::Curve &);
+   virtual ~Mesh() = default;
 
 			void initialize() override;
 			void update(double) override;
@@ -50,7 +51,7 @@ namespace pg::scene
 			void destroy() override;
 
 			std::string name() const override;
-			interface::Interface* interface() override;
+			virtual std::optional<interface::Interface *> interface() {return std::optional<interface::Interface *>(&this->_interface);}
 
 			void setMesh(const std::string &);
 			void setTexture(const std::string &);
diff --git a/ParticleGenerator/src/Scene/Scenes/MeshGenerator.cpp.old b/ParticleGenerator/src/Scene/Scenes/MeshGenerator.cpp
similarity index 100%
rename from ParticleGenerator/src/Scene/Scenes/MeshGenerator.cpp.old
rename to ParticleGenerator/src/Scene/Scenes/MeshGenerator.cpp
diff --git a/ParticleGenerator/src/Scene/Scenes/MeshGenerator.hpp.old b/ParticleGenerator/src/Scene/Scenes/MeshGenerator.hpp
similarity index 88%
rename from ParticleGenerator/src/Scene/Scenes/MeshGenerator.hpp.old
rename to ParticleGenerator/src/Scene/Scenes/MeshGenerator.hpp
index 9bbefc8e2212a750bf73cb6708e2ffd2123569e6..58609cfab987e98418f1d27d304cfca2a591817c 100644
--- a/ParticleGenerator/src/Scene/Scenes/MeshGenerator.hpp.old
+++ b/ParticleGenerator/src/Scene/Scenes/MeshGenerator.hpp
@@ -30,9 +30,7 @@ namespace pg::scene {
 
         public:
             MeshGenerator();
-            /*virtual ~MeshGenerator() {
-                
-            };*/
+   virtual ~MeshGenerator() = default;
 
             virtual void initialize();
             virtual void update(double);
@@ -40,7 +38,7 @@ namespace pg::scene {
             virtual void destroy();
 
             virtual std::string name() const {return "Mesh Generator Scene";};
-            virtual interface::Interface * interface() {return &this->_interface;}
+            virtual std::optional<interface::Interface *> interface() {return std::optional<interface::Interface *>(&this->_interface);}
 
             void changeMesh(const std::string &);
 			void changeTexture(const std::string &);
diff --git a/ParticleGenerator/src/Scene/Scenes/Path.cpp.old b/ParticleGenerator/src/Scene/Scenes/Path.cpp
similarity index 100%
rename from ParticleGenerator/src/Scene/Scenes/Path.cpp.old
rename to ParticleGenerator/src/Scene/Scenes/Path.cpp
diff --git a/ParticleGenerator/src/Scene/Scenes/Path.hpp.old b/ParticleGenerator/src/Scene/Scenes/Path.hpp
similarity index 89%
rename from ParticleGenerator/src/Scene/Scenes/Path.hpp.old
rename to ParticleGenerator/src/Scene/Scenes/Path.hpp
index b50c5a47231936f5fef70f9884bb046de3e30bbb..f89c30ce0f492e251ddb070b55ea5f03d23ea5d7 100644
--- a/ParticleGenerator/src/Scene/Scenes/Path.hpp.old
+++ b/ParticleGenerator/src/Scene/Scenes/Path.hpp
@@ -26,6 +26,7 @@ namespace pg::scene {
 
         public:
             Path(ct::CurveGenerator *, const ct::Curve &);
+   virtual ~Path() = default;
 
             virtual void initialize();
             virtual void render(const Camera &, double);
@@ -39,7 +40,7 @@ namespace pg::scene {
             void changeParticletexture(const std::string &);
 
             virtual std::string name() const {return "Path Scene";}
-            virtual interface::Interface * interface() {return &this->_interface;}
+            virtual std::optional<interface::Interface *> interface() {return std::optional<interface::Interface *>(&this->_interface);}
 
             friend class pg::interface::PathScene;
     };
diff --git a/ParticleGenerator/src/Scene/Scenes/Physic.cpp.old b/ParticleGenerator/src/Scene/Scenes/Physic.cpp
similarity index 100%
rename from ParticleGenerator/src/Scene/Scenes/Physic.cpp.old
rename to ParticleGenerator/src/Scene/Scenes/Physic.cpp
diff --git a/ParticleGenerator/src/Scene/Scenes/Physic.hpp.old b/ParticleGenerator/src/Scene/Scenes/Physic.hpp
similarity index 88%
rename from ParticleGenerator/src/Scene/Scenes/Physic.hpp.old
rename to ParticleGenerator/src/Scene/Scenes/Physic.hpp
index 65d1c993a22ffb2db91446de3ac3f15f20701c3a..419c40a5fa7dce39a2bb8391b19899cb185df3ed 100644
--- a/ParticleGenerator/src/Scene/Scenes/Physic.hpp.old
+++ b/ParticleGenerator/src/Scene/Scenes/Physic.hpp
@@ -23,6 +23,7 @@ namespace pg::scene {
 
         public:
             Physic();
+   virtual ~Physic() = default;
 
             inline const Program & getProgram() const {return this->_program;}
             inline const Material & getTexture() const {return this->_texture;}
@@ -31,6 +32,7 @@ namespace pg::scene {
             void changeParticletexture(const std::string &);
 
             virtual std::string name() const {return "Physic Scene";}
+            virtual std::optional<interface::Interface *> interface() {return std::optional<interface::Interface *>(&this->_interface);}
 
             virtual void initialize();
             virtual void render(const Camera &, double);
diff --git a/ParticleGenerator/src/Scene/Scenes/Scene.hpp b/ParticleGenerator/src/Scene/Scenes/Scene.hpp
index 454a9dcaaec58ce4bbdfeb813f64a9ce9e02757a..a9f08bd4b60eb265d6ae8ae7b25bff1c1bbe3735 100644
--- a/ParticleGenerator/src/Scene/Scenes/Scene.hpp
+++ b/ParticleGenerator/src/Scene/Scenes/Scene.hpp
@@ -13,7 +13,7 @@ namespace pg::scene {
             virtual ~Scene() = default;
 
             virtual std::string name() const {return "Scene";}
-            virtual std::optional<interface::Interface *> interface() const {return std::optional<interface::Interface *>();}
+            virtual std::optional<interface::Interface *> interface() = 0;// const {return std::optional<interface::Interface *>();}
 
             virtual void initialize() = 0;
             virtual void update(double) = 0;
diff --git a/ParticleGenerator/src/main.cpp b/ParticleGenerator/src/main.cpp
index 282260691a5f9f2ffc46807a1a57171403b0e7ca..efa5244124d7661edc63d16de62e7d20af156fd8 100644
--- a/ParticleGenerator/src/main.cpp
+++ b/ParticleGenerator/src/main.cpp
@@ -7,10 +7,11 @@
 #include "Scene/Manager.hpp"
 #include "Interface/Manager.hpp"
 
-//#include "Scene/Scenes/Physic.hpp"
-//#include "Scene/Scenes/Path.hpp"
-//#include "Scene/Scenes/Mesh.hpp"
-//#include "Scene/Scenes/MeshGenerator.hpp"
+#include "Scene/Scenes/Physic.hpp"
+#include "Scene/Scenes/Path.hpp"
+#include "Scene/Scenes/Mesh.hpp"
+#include "Scene/Scenes/MeshGenerator.hpp"
+#include "Scene/Scenes/Grid.hpp"
 
 #include "Interface/Manager.hpp"
 
@@ -73,14 +74,18 @@ int main(int argc, const char * argv[]) {
 
         ct::BezierGenerator bezier(ctrlPoints.size());
 
-        //pg::scene::Physic physic;
-        //pg::scene::MeshGenerator meshGenerator;
-        //pg::scene::Path path(&bezier, ctrlPoints);
-        //pg::scene::Mesh mesh(&bezier, ctrlPoints);
+        pg::scene::Physic physic;
+        pg::scene::MeshGenerator meshGenerator;
+        pg::scene::Path path(&bezier, ctrlPoints);
+        pg::scene::Mesh mesh(&bezier, ctrlPoints);
         
         pg::Manager manager(window);
         pg::interface::Manager imanager(window, manager);
-        //pg::interface::Global interface(window, manager, "Particle Generator Settings");
+        
+        manager.add(&path);
+        manager.add(&physic);
+        manager.add(&meshGenerator);
+        manager.add(&mesh);
 
         while(window.isOpen()) {
             double current_time = glfwGetTime();