diff --git a/src/gui.rs b/src/gui.rs
index 79446e2dfe9463758146cac3138d3fd8933184f6..00f3efb56a38d3374f09818c6e1dc71158861c97 100644
--- a/src/gui.rs
+++ b/src/gui.rs
@@ -67,28 +67,48 @@ pub fn gui_up(gui: &mut Gui, state: &mut GState) {
                         ui.add(egui::Slider::new(&mut state.cursor_sensitivity, 0.0..=2.0).text("Mouse Sensitivity"));
                         ui.add(egui::Slider::new(&mut state.move_speed, 0.0..=2.0).text("Movement Speed"));
                         ui.heading("Meshes");
+                        let mut meshdel = vec![];
                         for mesh in &mut state.meshes {
                             ui.label(mesh.name.clone());
+                            meshdel.push(ui.small_button("remove mesh").clicked());
                             ui.add(egui::Slider::new(&mut mesh.pos.x, -100.0..=100.0).text("Position.x"));
                             ui.add(egui::Slider::new(&mut mesh.pos.y, -100.0..=100.0).text("Position.y"));
                             ui.add(egui::Slider::new(&mut mesh.pos.z, -100.0..=100.0).text("Position.z"));
                             ui.add(egui::Slider::new(&mut mesh.rot.x.0, 0.0..=360.0).text("Rotation.x"));
                             ui.add(egui::Slider::new(&mut mesh.rot.y.0, 0.0..=360.0).text("Rotation.y"));
                             ui.add(egui::Slider::new(&mut mesh.rot.z.0, 0.0..=360.0).text("Rotation.z"));
+                            ui.add(egui::Slider::new(&mut mesh.scale.x, 0.0..=2.0).text("Scale.x"));
+                            ui.add(egui::Slider::new(&mut mesh.scale.y, 0.0..=2.0).text("Scale.y"));
+                            ui.add(egui::Slider::new(&mut mesh.scale.z, 0.0..=2.0).text("Scale.z"));
+                        }
+                        for i in meshdel.into_iter().enumerate().filter_map(|(a,b)| if b {Some(a)} else {None})
+                        {
+                            state.meshes.remove(i);
                         }
                         ui.heading("Implicit Surfaces");
+                        let mut csgdel = vec![];
                         for csg in &mut state.csg {
                             ui.label(csg.name.clone());
+                            csgdel.push(ui.small_button("remove csg").clicked());
                             ui.add(egui::Slider::new(&mut csg.pos.x, -100.0..=100.0).text("Position.x"));
                             ui.add(egui::Slider::new(&mut csg.pos.y, -100.0..=100.0).text("Position.y"));
                             ui.add(egui::Slider::new(&mut csg.pos.z, -100.0..=100.0).text("Position.z"));
                             ui.add(egui::Slider::new(&mut csg.rot.x.0, 0.0..=360.0).text("Rotation.x"));
                             ui.add(egui::Slider::new(&mut csg.rot.y.0, 0.0..=360.0).text("Rotation.y"));
                             ui.add(egui::Slider::new(&mut csg.rot.z.0, 0.0..=360.0).text("Rotation.z"));
+                            ui.add(egui::Slider::new(&mut csg.scale.x, 0.0..=2.0).text("Scale.x"));
+                            ui.add(egui::Slider::new(&mut csg.scale.y, 0.0..=2.0).text("Scale.y"));
+                            ui.add(egui::Slider::new(&mut csg.scale.z, 0.0..=2.0).text("Scale.z"));
+                        }
+                        for i in csgdel.into_iter().enumerate().filter_map(|(a,b)| if b {Some(a)} else {None})
+                        {
+                            state.csg.remove(i);
                         }
                         ui.heading("Lights");
+                        let mut lightdel = vec![];
                         for light in &mut state.lights {
                             ui.label("Light");
+                            lightdel.push(ui.small_button("remove light").clicked());
                             ui.add(egui::Slider::new(&mut light.pos.x, -100.0..=100.0).text("Position.x"));
                             ui.add(egui::Slider::new(&mut light.pos.y, -100.0..=100.0).text("Position.y"));
                             ui.add(egui::Slider::new(&mut light.pos.z, -100.0..=100.0).text("Position.z"));
@@ -96,10 +116,22 @@ pub fn gui_up(gui: &mut Gui, state: &mut GState) {
                             ui.add(egui::Slider::new(&mut light.colour.y, 0.0..=1.0).text("Colour.g"));
                             ui.add(egui::Slider::new(&mut light.colour.z, 0.0..=1.0).text("Colour.b"));
                         }
+                        for i in lightdel.into_iter().enumerate().filter_map(|(a,b)| if b {Some(a)} else {None})
+                        {
+                            state.lights.remove(i);
+                        }
+                        if (state.lights.len() < 32) {
+                            if ui.small_button("add light").clicked()
+                            {
+                                state.lights.push(Light::default());
+                            }
+                        }
+
                         let fps: PlotPoints = state.fps.iter().enumerate().map(|(x,y)| [x as f64,*y]).collect::<Vec<_>>().into();
                         let line = Line::new(fps);
                         ui.heading("FPS");
                         Plot::new("fps").view_aspect(2.0).show(ui, |plot_ui| plot_ui.line(line));
+
                         ui.heading("Debug");
                         ui.toggle_value(&mut state.debug.bounding_boxes, "Render bounding boxes instead");
                         ui.toggle_value(&mut state.debug.disable_meshcull, "Disable mesh shader culling");