diff --git a/Cargo.toml b/Cargo.toml
index 57204e5..aac894b 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -14,7 +14,7 @@ chrono = { version = "0.4.35", features = ["serde"] }
 anyhow = { version = "1.0.86", features = ["backtrace"] }
 indexmap = { version = "2.2.6", features = ["rayon"] }
 shaderc = { version = "0.8.3", features = ["build-from-source"] }
-rusqlite = { version = "0.32.0", features = ["bundled"] }
+rusqlite = { version = "0.33.0", features = ["bundled"] }
 cgmath = "0.18.0"
 http = "1.1.0"
 iterchunks = "0.5.0"
@@ -36,7 +36,7 @@ sdl2 = { version = "0.37.0" }
 syn = { version = "2.0.67", features = ["extra-traits", "full"] }
 quote = "1.0.35"
 proc-macro2 = "1.0.86"
-downcast-rs = "1.2.1"
+downcast-rs = "2.0.0"
 
 utilities = { git = "https://gavania.de/hodasemi/utilities.git" }
 vulkan-rs = { git = "https://gavania.de/hodasemi/vulkan_lib.git" }
diff --git a/character_window/src/lib.rs b/character_window/src/lib.rs
index 981557d..83940c7 100644
--- a/character_window/src/lib.rs
+++ b/character_window/src/lib.rs
@@ -6,7 +6,7 @@ mod page_content;
 mod traits;
 
 use anyhow::Result;
-use downcast_rs::{impl_downcast, Downcast};
+use downcast_rs::{Downcast, impl_downcast};
 use engine::prelude::*;
 use rpg_components::{
     components::{
@@ -21,8 +21,8 @@ use std::{
     collections::HashMap,
     ops::{Deref, DerefMut},
     sync::{
-        atomic::{AtomicUsize, Ordering::SeqCst},
         Arc, Mutex, RwLock, RwLockReadGuard, RwLockWriteGuard,
+        atomic::{AtomicUsize, Ordering::SeqCst},
     },
 };
 
@@ -125,19 +125,19 @@ pub struct CharacterWindow {
 
     tabs: RwLock<[Box<dyn Page>; 3]>,
     tab: AtomicUsize,
-
-    engine: Arc<Engine>,
 }
 
 impl CharacterWindow {
     pub fn new<A: Ability + 'static>(
-        engine: Arc<Engine>,
+        world: &World,
         hero: Entity,
         name: &str,
         close: Box<dyn FutureStateChange>,
     ) -> Result<Arc<Self>> {
-        let menu_gui =
-            GuiBuilder::from_str(engine.gui_handler(), include_str!("../resources/menu.xml"))?;
+        let menu_gui = GuiBuilder::from_str(
+            world.resources.get::<Arc<GuiHandler>>(),
+            include_str!("../resources/menu.xml"),
+        )?;
 
         let content_grid = menu_gui.element("tab_content")?;
         let open_character_page: Arc<Button> = menu_gui.element("open_statistics")?;
diff --git a/rpg_components/src/components/attributes.rs b/rpg_components/src/components/attributes.rs
index 7606c93..501d356 100644
--- a/rpg_components/src/components/attributes.rs
+++ b/rpg_components/src/components/attributes.rs
@@ -1,11 +1,12 @@
 use anyhow::bail;
 use engine::prelude::{image::RgbaImage, *};
+use serde::{Deserialize, Serialize};
 
 use std::{cmp::Ordering, slice::Iter, str::FromStr};
 
 use crate::{
     config::attributes::{AttributeColorSettings, StartingAttributes},
-    items::{ability_book::Ability, ItemSystem},
+    items::{ItemSystem, ability_book::Ability},
 };
 
 generate_stat!(Agility, u32, "Agility");
diff --git a/rpg_components/src/components/character_status.rs b/rpg_components/src/components/character_status.rs
index 9588a13..2e09cd1 100644
--- a/rpg_components/src/components/character_status.rs
+++ b/rpg_components/src/components/character_status.rs
@@ -2,6 +2,7 @@ use std::time::Duration;
 
 use anyhow::Result;
 use engine::prelude::*;
+use serde::{Deserialize, Serialize};
 
 use super::statistics::*;
 
diff --git a/rpg_components/src/components/crafting_materials.rs b/rpg_components/src/components/crafting_materials.rs
index b516c7d..b77f6e5 100644
--- a/rpg_components/src/components/crafting_materials.rs
+++ b/rpg_components/src/components/crafting_materials.rs
@@ -1,6 +1,7 @@
 use engine::prelude::*;
 
 use paste::paste;
+use serde::{Deserialize, Serialize};
 
 use crate::{config::save_game::SaveGame, items::Rarities};
 
diff --git a/rpg_components/src/components/statistic_types.rs b/rpg_components/src/components/statistic_types.rs
index 6225d70..05a93c1 100644
--- a/rpg_components/src/components/statistic_types.rs
+++ b/rpg_components/src/components/statistic_types.rs
@@ -1,5 +1,6 @@
 use anyhow::Result;
 use engine::prelude::*;
+use serde::{Deserialize, Serialize};
 
 use std::fmt;
 
@@ -540,7 +541,7 @@ impl std::str::FromStr for StatisticType {
                 return Err(anyhow::Error::msg(format!(
                     "Failed parsing StatisticTypes from {}",
                     s
-                )))
+                )));
             }
         }
     }
diff --git a/rpg_components/src/components/statistics.rs b/rpg_components/src/components/statistics.rs
index 1c53b69..2094626 100644
--- a/rpg_components/src/components/statistics.rs
+++ b/rpg_components/src/components/statistics.rs
@@ -1,4 +1,5 @@
 use engine::prelude::*;
+use serde::{Deserialize, Serialize};
 
 use crate::{
     config::{
diff --git a/rpg_components/src/config/abilities.rs b/rpg_components/src/config/abilities.rs
index 939412e..cb312df 100644
--- a/rpg_components/src/config/abilities.rs
+++ b/rpg_components/src/config/abilities.rs
@@ -1,5 +1,6 @@
 use assetpath::AssetPath;
 use engine::prelude::*;
+use serde::{Deserialize, Serialize};
 
 create_settings_section!(
     AbilityIcons,
diff --git a/rpg_components/src/config/experience.rs b/rpg_components/src/config/experience.rs
index 5720488..3a999ea 100644
--- a/rpg_components/src/config/experience.rs
+++ b/rpg_components/src/config/experience.rs
@@ -1,4 +1,5 @@
 use engine::prelude::*;
+use serde::{Deserialize, Serialize};
 
 use crate::components::npc_type::NPCType;
 
diff --git a/rpg_components/src/damage_type.rs b/rpg_components/src/damage_type.rs
index 78204db..5894fc5 100644
--- a/rpg_components/src/damage_type.rs
+++ b/rpg_components/src/damage_type.rs
@@ -1,5 +1,6 @@
 use anyhow::Result;
 use engine::prelude::*;
+use serde::{Deserialize, Serialize};
 
 use std::convert::TryFrom;
 
@@ -31,7 +32,7 @@ impl std::str::FromStr for DamageType {
                 return Err(anyhow::Error::msg(format!(
                     "Failed parsing DamageType from {}",
                     s
-                )))
+                )));
             }
         }
     }
diff --git a/rpg_components/src/items/ability_addon.rs b/rpg_components/src/items/ability_addon.rs
index ae48371..9c1814c 100644
--- a/rpg_components/src/items/ability_addon.rs
+++ b/rpg_components/src/items/ability_addon.rs
@@ -1,6 +1,7 @@
 use anyhow::Result;
 use assetpath::AssetPath;
 use engine::prelude::*;
+use serde::{Deserialize, Serialize};
 
 use std::{
     fmt,
diff --git a/rpg_components/src/items/ability_book.rs b/rpg_components/src/items/ability_book.rs
index 9d00a32..eaeac01 100644
--- a/rpg_components/src/items/ability_book.rs
+++ b/rpg_components/src/items/ability_book.rs
@@ -2,6 +2,7 @@ use anyhow::Result;
 use assetpath::AssetPath;
 use cgmath::{Vector2, Vector3};
 use engine::prelude::*;
+use serde::{Deserialize, Serialize};
 
 use std::{fmt::Debug, str::FromStr, sync::Arc, time::Duration};
 
diff --git a/rpg_components/src/items/item.rs b/rpg_components/src/items/item.rs
index bb09bb8..8b225f1 100644
--- a/rpg_components/src/items/item.rs
+++ b/rpg_components/src/items/item.rs
@@ -16,7 +16,7 @@ use crate::{
     config::items::ItemSettings,
 };
 
-use super::{ability_book::Ability, ItemSlots, ItemSystem, Jewel, Rarities, Tooltip};
+use super::{ItemSlots, ItemSystem, Jewel, Rarities, Tooltip, ability_book::Ability};
 
 const ITEM_SNIPPETS: [&'static str; 8] = [
     include_str!("../../resources/items/slots_0.xml"),
@@ -314,7 +314,7 @@ impl Item {
                 None => {
                     socket_icon.set_icon(
                         &Image::from_slice(include_bytes!("../../resources/circle.png"))?
-                            .attach_sampler(Sampler::pretty_sampler().build(gui_handler.device())?)
+                            .attach_pretty_sampler(gui_handler.device())?
                             .build(gui_handler.device(), gui_handler.queue())?,
                     )?;
 
diff --git a/rpg_components/src/items/item_slots.rs b/rpg_components/src/items/item_slots.rs
index f131877..258dea0 100644
--- a/rpg_components/src/items/item_slots.rs
+++ b/rpg_components/src/items/item_slots.rs
@@ -1,6 +1,7 @@
 use anyhow::Result;
 use assetpath::AssetPath;
 use engine::prelude::*;
+use serde::{Deserialize, Serialize};
 
 use std::{fmt, slice::Iter};
 
@@ -91,7 +92,7 @@ impl std::str::FromStr for ItemSlots {
                 return Err(anyhow::Error::msg(format!(
                     "Failed parsing ItemSlots from {}",
                     s
-                )))
+                )));
             }
         }
     }
diff --git a/rpg_components/src/items/rarities.rs b/rpg_components/src/items/rarities.rs
index d23972a..7587772 100644
--- a/rpg_components/src/items/rarities.rs
+++ b/rpg_components/src/items/rarities.rs
@@ -2,12 +2,13 @@ use anyhow::Result;
 use engine::prelude::*;
 
 use image::RgbaImage;
+use serde::{Deserialize, Serialize};
 
 use std::{fmt, slice::Iter};
 
 use crate::config::items::{ItemSettings, RarityColorSettings};
 
-use super::{ability_book::Ability, ItemSystem};
+use super::{ItemSystem, ability_book::Ability};
 
 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
 pub enum Rarities {
@@ -114,7 +115,7 @@ impl std::str::FromStr for Rarities {
                 return Err(anyhow::Error::msg(format!(
                     "Failed parsing Rarities from {}",
                     s
-                )))
+                )));
             }
         }
     }