diff --git a/Cargo.toml b/Cargo.toml
index 8dfe121acc8037fd3afba01b1aa0e8ed321c3eb0..099a75dc666705a4da8e482f59ba26237465d9be 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "micro_musicbox"
-version = "0.8.0"
+version = "0.9.0"
 edition = "2021"
 license = "Apache-2.0"
 authors = ["Louis Capitanchik <louis@microhacks.co.uk>"]
@@ -35,10 +35,10 @@ ogg = ["bevy_kira_audio/ogg"]
 settings = ["bevy_kira_audio/settings_loader"]
 
 [dependencies]
-bevy = { version = "0.12", default-features = false }
-bevy_kira_audio = { version = "0.18.0", default-features = false }
+bevy = { version = "0.13", default-features = false }
+bevy_kira_audio = { version = "0.19.0", default-features = false }
 serde = { version = "1", optional = true }
 
 [dev_dependencies]
-bevy = "0.12"
+bevy = "0.13"
 log = "0.4"
diff --git a/README.md b/README.md
index 6304318f657192151025e910a381937c8d8cb780..41984127273f5da13ff53debe22f895efb8d9253 100644
--- a/README.md
+++ b/README.md
@@ -140,6 +140,7 @@ The examples in this repository use assets available under the following license
 
 | musicbox version | bevy version | bka version |
 |------------------|--------------|-------------|
+| 0.9              | 0.13         | 0.19        |
 | 0.8              | 0.12         | 0.18        |
 | 0.7              | 0.11         | 0.16        |
 | 0.6              | 0.10         | 0.15        |
diff --git a/examples/kitchen_sink.rs b/examples/kitchen_sink.rs
index 3f0ca50cef3b09db2b62a3a0fb931d05bd316454..e6e765e08434fdee134ae12d72b9720bb02c05bc 100644
--- a/examples/kitchen_sink.rs
+++ b/examples/kitchen_sink.rs
@@ -33,7 +33,7 @@ pub fn main() {
 			OnEnter(AppState::Running),
 			set_instructions
 		)
-		.add_systems(Update, cross_fade_tracks.run_if(resource_exists::<MusicState>()))
+		.add_systems(Update, cross_fade_tracks.run_if(resource_exists::<MusicState>))
 		.run();
 }
 
@@ -64,7 +64,7 @@ pub fn setup_audio(mut commands: Commands, mut musicbox: MusicBox<AssetServer>)
 }
 
 pub fn cross_fade_tracks(
-	input: Res<Input<KeyCode>>,
+	input: Res<ButtonInput<KeyCode>>,
 	mut music_box: MusicBox<AssetServer>,
 	mut music_state: ResMut<MusicState>,
 ) {
@@ -90,7 +90,7 @@ pub fn cross_fade_tracks(
 		music_box.set_music_volume(value as f32 / 10.0);
 	}
 
-	if input.just_released(KeyCode::Return) {
+	if input.just_released(KeyCode::Enter) {
 		//
 		// You can also get a mutable ref for the settings, in case you
 		// need to do any maths with them. If you don't need `MusicBox`
@@ -106,24 +106,24 @@ pub fn cross_fade_tracks(
 	}
 }
 
-fn map_key_values(input: &Res<Input<KeyCode>>) -> Option<usize> {
-	if input.just_released(KeyCode::Key1) {
+fn map_key_values(input: &Res<ButtonInput<KeyCode>>) -> Option<usize> {
+	if input.just_released(KeyCode::Digit1) {
 		Some(1)
-	} else if input.just_released(KeyCode::Key2) {
+	} else if input.just_released(KeyCode::Digit2) {
 		Some(2)
-	} else if input.just_released(KeyCode::Key3) {
+	} else if input.just_released(KeyCode::Digit3) {
 		Some(3)
-	} else if input.just_released(KeyCode::Key4) {
+	} else if input.just_released(KeyCode::Digit4) {
 		Some(4)
-	} else if input.just_released(KeyCode::Key5) {
+	} else if input.just_released(KeyCode::Digit5) {
 		Some(5)
-	} else if input.just_released(KeyCode::Key6) {
+	} else if input.just_released(KeyCode::Digit6) {
 		Some(6)
-	} else if input.just_released(KeyCode::Key7) {
+	} else if input.just_released(KeyCode::Digit7) {
 		Some(7)
-	} else if input.just_released(KeyCode::Key8) {
+	} else if input.just_released(KeyCode::Digit8) {
 		Some(8)
-	} else if input.just_released(KeyCode::Key9) {
+	} else if input.just_released(KeyCode::Digit9) {
 		Some(9)
 	} else {
 		None
diff --git a/examples/utilities/mod.rs b/examples/utilities/mod.rs
index 25a143827798edb6ef7beafaf0fbd20f368fa933..d2fd7136ef876ce5d6396cce5d2b4852f1789f45 100644
--- a/examples/utilities/mod.rs
+++ b/examples/utilities/mod.rs
@@ -103,12 +103,12 @@ pub fn create_ui(mut commands: Commands, assets: Res<AssetServer>) {
 pub struct SetupPlugin;
 impl Plugin for SetupPlugin {
 	fn build(&self, app: &mut App) {
-		app.add_state::<AppState>()
+		app.init_state::<AppState>()
 			.add_systems(Startup, (load_resources, create_ui))
 			.add_systems(
 				Update,
 				check_load_state
-					.run_if(resource_exists::<AudioResources>())
+					.run_if(resource_exists::<AudioResources>)
 					.run_if(in_state(AppState::Loading)),
 			);
 	}
diff --git a/src/lib.rs b/src/lib.rs
index e20b0091c0b2cbbf29eb6381dc887ac3f027e626..e8d871ea7b172af0a3644b0a0dbbac2caf4d17d6 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -16,6 +16,7 @@
 //! # use micro_musicbox::CombinedAudioPlugins;
 //! fn main() {
 //!     App::new()
+//!         .add_plugins(AssetPlugin::default())
 //!         .add_plugins(CombinedAudioPlugins::<AssetServer>::new())
 //!         .add_systems(Startup, |mut music_box: MusicBox<AssetServer>| {
 //!             music_box.play_music("music/bing_bong.mp3");
diff --git a/src/music_box.rs b/src/music_box.rs
index 6e5214e9a2e441582dee1c454a69d47b573fa2cc..a7912de3b8d9bbe1f22536f63f9390fd7cc927e1 100644
--- a/src/music_box.rs
+++ b/src/music_box.rs
@@ -1,5 +1,3 @@
-use std::marker::PhantomData;
-
 use bevy::ecs::system::SystemParam;
 use bevy::prelude::{Assets, DetectChanges, Handle, Res, ResMut, Resource};
 use bevy_kira_audio::{AudioChannel, AudioControl, AudioInstance, AudioSource, AudioTween};
diff --git a/src/utilities.rs b/src/utilities.rs
index be41dfe9f6503f795e68cfa756bedd9af385f71a..2814e9d3ce1ee05876090622e998fd40a7ce9c2d 100644
--- a/src/utilities.rs
+++ b/src/utilities.rs
@@ -13,16 +13,23 @@ use crate::music_box::MusicBox;
 /// as a `SuppliesAudio` extension:
 ///
 /// ```rust
-/// # use micro_musicbox::utilities::{TrackType, SuppliesAudio};
+/// # use bevy::ecs::system::SystemParam;
+/// use micro_musicbox::prelude::AudioSource;
+/// use micro_musicbox::utilities::{TrackType, SuppliesAudio};
 /// # use bevy::prelude::*;
+/// use bevy::utils::HashMap;
 ///
-/// impl SuppliesAudio for AssetServer {
-///     fn resolve_track_name<T: ToString>(&self, name: T) -> TrackType<String> { ///
+/// #[derive(Resource)]
+/// struct MyAudioMap(pub HashMap<String, Handle<AudioSource>>);
+///
+/// impl SuppliesAudio for MyAudioMap {
+///     fn resolve_track_name<T: ToString>(&self, name: T) -> TrackType<String> {
 ///         TrackType::Single(name.to_string())
 ///     }
 ///
 ///     fn get_audio_track<T: ToString>(&self, name: T) -> Option<Handle<AudioSource>> {
-///         Some(self.load(&name.to_string()))
+///         let key = name.to_string();
+///         self.0.get(&key).map(|h| h.clone_weak())
 ///     }
 /// }
 /// ```