diff --git a/tracker/agb-tracker/src/lib.rs b/tracker/agb-tracker/src/lib.rs
index a8af2f20..d1158780 100644
--- a/tracker/agb-tracker/src/lib.rs
+++ b/tracker/agb-tracker/src/lib.rs
@@ -95,8 +95,8 @@ pub mod __private {
 pub use agb_tracker_interop::Track;
 
 /// Stores the required state in order to play tracker music.
-pub struct TrackerInner<TChannelId> {
-    track: &'static Track,
+pub struct TrackerInner<'track, TChannelId> {
+    track: &'track Track,
     channels: Vec<TrackerChannel<TChannelId>>,
     envelopes: Vec<Option<EnvelopeState>>,
 
@@ -132,9 +132,9 @@ struct GlobalSettings {
     volume: Num<i32, 8>,
 }
 
-impl<TChannelId> TrackerInner<TChannelId> {
+impl<'track, TChannelId> TrackerInner<'track, TChannelId> {
     /// Create a new tracker playing a specified track. See the [example](crate#example) for how to use the tracker.
-    pub fn new(track: &'static Track) -> Self {
+    pub fn new(track: &'track Track) -> Self {
         let mut channels = Vec::new();
         channels.resize_with(track.num_channels, Default::default);
 
@@ -586,4 +586,4 @@ impl<'gba> Mixer for agb::sound::mixer::Mixer<'gba> {
 
 #[cfg(feature = "agb")]
 /// The type to use if you're using agb-tracker with agb
-pub type Tracker = TrackerInner<agb::sound::mixer::ChannelId>;
+pub type Tracker = TrackerInner<'static, agb::sound::mixer::ChannelId>;
diff --git a/tracker/desktop-player/src/main.rs b/tracker/desktop-player/src/main.rs
index b138e935..18d108a0 100644
--- a/tracker/desktop-player/src/main.rs
+++ b/tracker/desktop-player/src/main.rs
@@ -15,10 +15,10 @@ fn main() -> Result<(), Box<dyn Error>> {
     let file_path = &args[1];
     let module = load_module_from_file(Path::new(file_path))?;
 
-    let track = Box::leak::<'static>(Box::new(agb_xm_core::parse_module(&module)));
+    let track = agb_xm_core::parse_module(&module);
 
     let mut mixer = Mixer::new();
-    let mut tracker = agb_tracker::TrackerInner::new(track);
+    let mut tracker = agb_tracker::TrackerInner::new(&track);
 
     let host = cpal::default_host();
     let device = host