diff --git a/src/items.rs b/src/items.rs
index 66638b3..d30dabc 100644
--- a/src/items.rs
+++ b/src/items.rs
@@ -54,7 +54,7 @@ impl ItemBase for StunGun {
     }
 
     fn get_description(&self) -> String {
-        return "Stun your enemies! Just don't point it at yourself.".to_string();
+        return "Stun your enemies!\nJust don't point it at yourself.".to_string();
     }
 
     fn get_texture(&self) -> &Texture2D {
@@ -106,7 +106,7 @@ impl ItemBase for AirBag {
     }
 
     fn get_description(&self) -> String {
-        return "Its.. a bag. Filled with air. Duh".to_string();
+        return "Its.. a bag.\nFilled with air. Duh".to_string();
     }
 
     fn get_texture(&self) -> &Texture2D {
@@ -210,7 +210,7 @@ impl ItemBase for Flippers {
     }
 
     fn get_description(&self) -> String {
-        return "Swim faster, and look stupid at the same time!".to_string();
+        return "Swim faster, and look stupid\nat the same time!".to_string();
     }
 
     fn get_texture(&self) -> &Texture2D {
diff --git a/src/logic/shop/item.rs b/src/logic/shop/item.rs
index 1bddfd2..2c94f3b 100644
--- a/src/logic/shop/item.rs
+++ b/src/logic/shop/item.rs
@@ -62,6 +62,10 @@ impl<T: ItemBase + Clone> ShopItemWrapper<T> {
         return self.ui.buy_button_hovered && draw_handle.is_mouse_button_pressed(MouseButton::MOUSE_LEFT_BUTTON);
     }
 
+    pub fn user_hovering_row(&self, draw_handle: &mut RaylibDrawHandle) -> bool {
+        return self.bounds.check_collision_point_rec(draw_handle.get_mouse_position());
+    }
+
     pub fn render(&mut self, draw_handle: &mut RaylibDrawHandle, player: &Player) {
         self.ui.render(draw_handle, self.bounds, self.can_player_afford(player));
     }
diff --git a/src/logic/shop/mainui.rs b/src/logic/shop/mainui.rs
index 03d0b46..759da23 100644
--- a/src/logic/shop/mainui.rs
+++ b/src/logic/shop/mainui.rs
@@ -1,6 +1,10 @@
 use raylib::prelude::*;
 
-use crate::{gamecore::{GameCore, GameState}, items::{AirBag, Flashlight, Flippers, ItemBase, StunGun}, lib::{utils::button::OnScreenButton, wrappers::audio::player::AudioPlayer}};
+use crate::{
+    gamecore::{GameCore, GameState},
+    items::{AirBag, Flashlight, Flippers, ItemBase, StunGun},
+    lib::{utils::button::OnScreenButton, wrappers::audio::player::AudioPlayer},
+};
 
 use super::{item::ShopItemWrapper, itemui::ShopItemUi};
 
@@ -89,23 +93,83 @@ pub fn render_shop(
     flippers_buy_ui.render(draw_handle, &game_core.player);
 
     // Handle buying items
-    if stun_gun_buy_ui.can_player_afford(&game_core.player) && stun_gun_buy_ui.user_clicked_buy(draw_handle) {
+    if stun_gun_buy_ui.can_player_afford(&game_core.player)
+        && stun_gun_buy_ui.user_clicked_buy(draw_handle)
+    {
         let item = stun_gun_buy_ui.purchase(&mut game_core.player);
         game_core.player.inventory.stun_gun = Some(item);
     }
-    if air_bag_buy_ui.can_player_afford(&game_core.player) && air_bag_buy_ui.user_clicked_buy(draw_handle) {
+    if air_bag_buy_ui.can_player_afford(&game_core.player)
+        && air_bag_buy_ui.user_clicked_buy(draw_handle)
+    {
         let item = air_bag_buy_ui.purchase(&mut game_core.player);
         game_core.player.inventory.air_bag = Some(item);
     }
-    if flashlight_buy_ui.can_player_afford(&game_core.player) && flashlight_buy_ui.user_clicked_buy(draw_handle) {
+    if flashlight_buy_ui.can_player_afford(&game_core.player)
+        && flashlight_buy_ui.user_clicked_buy(draw_handle)
+    {
         let item = flashlight_buy_ui.purchase(&mut game_core.player);
         game_core.player.inventory.flashlight = Some(item);
     }
-    if flippers_buy_ui.can_player_afford(&game_core.player) && flippers_buy_ui.user_clicked_buy(draw_handle) {
+    if flippers_buy_ui.can_player_afford(&game_core.player)
+        && flippers_buy_ui.user_clicked_buy(draw_handle)
+    {
         let item = flippers_buy_ui.purchase(&mut game_core.player);
         game_core.player.inventory.flippers = Some(item);
     }
 
+    // Render the tooltip box
+    let hovering_stun_gun = stun_gun_buy_ui.user_hovering_row(draw_handle);
+    let hovering_air_bag = air_bag_buy_ui.user_hovering_row(draw_handle);
+    let hovering_flashlight = flashlight_buy_ui.user_hovering_row(draw_handle);
+    let hovering_flippers = flippers_buy_ui.user_hovering_row(draw_handle);
+    let should_show_tooltip =
+        hovering_stun_gun || hovering_air_bag || hovering_flashlight || hovering_flippers;
+
+    if should_show_tooltip {
+        // Create bounds
+        let box_bounds = Rectangle {
+            x: bounds.x + 5.0,
+            y: bounds.y + 350.0,
+            width: bounds.width - 10.0,
+            height: 250.0,
+        };
+
+        // Get the hovered item
+        let hovered_item: &dyn ItemBase;
+        if hovering_stun_gun {
+            hovered_item = stun_gun_buy_ui.get_item();
+        } else if hovering_air_bag {
+            hovered_item = air_bag_buy_ui.get_item();
+        } else if hovering_flashlight {
+            hovered_item = flashlight_buy_ui.get_item();
+        } else {
+            hovered_item = flippers_buy_ui.get_item();
+        }
+
+        // Draw background box
+        draw_handle.draw_rectangle_rec(box_bounds, Color::WHITE);
+        draw_handle.draw_rectangle_lines_ex(box_bounds, 3, Color::BLACK);
+
+        // TODO: draw item sprite
+        draw_handle.draw_rectangle_v(
+            Vector2 {
+                x: box_bounds.x + (box_bounds.width / 2.0) - 40.0,
+                y: box_bounds.y + 10.0,
+            },
+            Vector2 { x: 80.0, y: 80.0 },
+            Color::BLACK,
+        );
+
+        // Render item description
+        draw_handle.draw_text(
+            &hovered_item.get_description(),
+            box_bounds.x as i32 + 10,
+            box_bounds.y as i32 + 100,
+            30,
+            Color::BLACK,
+        );
+    }
 
     // Handle exit buttons
     let bottom_left_button_dimensions = Rectangle {
@@ -115,7 +179,7 @@ pub fn render_shop(
         height: 40.0,
     };
     let bottom_right_button_dimensions = Rectangle {
-        x: (bounds.x + bottom_left_button_dimensions.width ) + 15.0,
+        x: (bounds.x + bottom_left_button_dimensions.width) + 15.0,
         y: bottom_left_button_dimensions.y,
         width: bottom_left_button_dimensions.width,
         height: bottom_left_button_dimensions.height,
@@ -146,10 +210,11 @@ pub fn render_shop(
 
     // Handle click actions on the buttons
     if draw_handle.is_mouse_button_pressed(MouseButton::MOUSE_LEFT_BUTTON) {
-
         // Handle saving core state
-        if menu_button.is_hovered(draw_handle)  || play_button.is_hovered(draw_handle) {
-            let new_progress = game_core.player.create_statistics(game_core, draw_handle.get_time());
+        if menu_button.is_hovered(draw_handle) || play_button.is_hovered(draw_handle) {
+            let new_progress = game_core
+                .player
+                .create_statistics(game_core, draw_handle.get_time());
             game_core.progress.update(&new_progress);
         }
 
diff --git a/src/logic/shop/mod.rs b/src/logic/shop/mod.rs
index 0013b5a..9885e04 100644
--- a/src/logic/shop/mod.rs
+++ b/src/logic/shop/mod.rs
@@ -1,6 +1,6 @@
-mod mainui;
-mod itemui;
 mod item;
+mod itemui;
+mod mainui;
 
 use raylib::prelude::*;
 
@@ -26,42 +26,6 @@ impl ShopScreen {
             ..Default::default()
         }
     }
-
-    // // Creates all the items
-    // pub fn create_items(&mut self, screen_dimension: Vector2) {
-    //     // gets every item.. hacky
-    //     let items = ShopItems::get_inital_items();
-
-    //     // sets sizes any random number is just a number I think looks good
-    //     let screen_width = screen_dimension.x as f32;
-    //     let screen_height = screen_dimension.y as f32;
-
-    //     let box_height = screen_height * 0.15;
-    //     let box_width = screen_width * 0.1;
-
-    //     let start_width = screen_width - (box_width * 4.0) - 40.0;
-    //     let draw_height = screen_height - 20.0 - box_height;
-
-    //     let mut item_vec = Vec::new();
-
-    //     for box_num in 0..4 {
-    //         let x_pose = start_width + box_width * box_num as f32;
-
-    //         // adds an item struct to the item list
-    //         item_vec.push(Item {
-    //             x_pose: ((x_pose + (5 * box_num) as f32) as i32),
-    //             y_pose: (draw_height as i32),
-    //             width: (box_width as i32),
-    //             height: (box_height as i32),
-    //             // Crazy hacky but this gets the data from the enum
-    //             cost: (ShopItems::get_cost(&items.get(box_num).unwrap())),
-    //             level: (ShopItems::get_level(&items.get(box_num).unwrap())),
-    //             name: (ShopItems::get_name(&items.get(box_num).unwrap())),
-    //         });
-    //     }
-
-    //     self.shop_items = item_vec;
-    // }
 }
 
 impl Screen for ShopScreen {
@@ -73,8 +37,7 @@ impl Screen for ShopScreen {
         game_core: &mut GameCore,
     ) -> Option<GameState> {
         let mouse_position = draw_handle.get_mouse_position();
-        
-        
+
         // Render the background
         draw_handle.draw_texture(&game_core.resources.shop_background, 0, 0, Color::WHITE);
 
@@ -97,8 +60,7 @@ impl Screen for ShopScreen {
         };
 
         // Render the shop UI
-        let next_state =
-            render_shop(draw_handle, thread, audio_system, game_core, shop_ui_bounds);
+        let next_state = render_shop(draw_handle, thread, audio_system, game_core, shop_ui_bounds);
 
         // Render the stats UI
         render_stats(draw_handle, game_core, stats_ui_bounds);
@@ -106,134 +68,3 @@ impl Screen for ShopScreen {
         return next_state;
     }
 }
-// pub fn render_shop(
-//     draw_handle: &mut RaylibDrawHandle,
-//     game_core: &mut GameCore,
-//     inGameScreen: &mut InGameScreen,
-// ) {
-//     // Pressing F exits from buying
-//     if draw_handle.is_key_pressed(KeyboardKey::KEY_F) {
-//         inGameScreen.current_state = InGameState::SWIMMING;
-//     }
-
-//     let mouse_position = draw_handle.get_mouse_position();
-
-//     draw_handle.draw_text(
-//         &format!("Coins: {}", game_core.player.coins),
-//         15,
-//         15,
-//         30,
-//         Color::WHITE,
-//     );
-
-//     // Draws shop boxes
-//     for mut item in inGameScreen.shop.shop_items.iter_mut() {
-//         // If hovering on square draw full
-//         if mouse_position.x >= item.x_pose as f32
-//             && mouse_position.x <= item.x_pose as f32 + item.width as f32
-//             && mouse_position.y >= item.y_pose as f32
-//             && mouse_position.y <= item.y_pose as f32 + item.width as f32
-//         {
-//             // Draw rect
-//             draw_handle.draw_rectangle(
-//                 item.x_pose,
-//                 item.y_pose,
-//                 item.width,
-//                 item.height,
-//                 Color::BLACK,
-//             );
-
-//             // Preform purchasing functions
-//             if draw_handle.is_mouse_button_pressed(MouseButton::MOUSE_LEFT_BUTTON)
-//                 && game_core.player.coins >= item.cost as u32
-//             {
-//                 // Remove currency
-//                 game_core.world.spend_coins(item.cost.into());
-//                 game_core.player.coins -= item.cost as u32;
-
-//                 // Upgrade item in inventory
-//                 match &(item.name)[..] {
-//                     "Stun Gun" => {
-//                         match item.level {
-//                             0 => game_core.player.inventory.stun_gun = Some(items::StunGun::lvl1()),
-//                             1 => game_core.player.inventory.stun_gun = Some(items::StunGun::lvl2()),
-//                             2 => game_core.player.inventory.stun_gun = Some(items::StunGun::lvl3()),
-//                             _ => (return),
-//                         };
-//                         item.cost += 5;
-//                         item.level += 1;
-//                     }
-//                     "Air Bag" => {
-//                         match item.level {
-//                             0 => {
-//                                 game_core.player.inventory.air_bag = Some(items::AirBag::lvl1());
-//                             }
-//                             1 => {
-//                                 game_core.player.inventory.air_bag = Some(items::AirBag::lvl2());
-//                             }
-//                             2 => {
-//                                 game_core.player.inventory.air_bag = Some(items::AirBag::lvl3());
-//                             }
-//                             _ => (return),
-//                         };
-//                         item.cost += 5;
-//                         item.level += 1;
-//                     }
-//                     "Flash Light" => {
-//                         match item.level {
-//                             0 => {
-//                                 game_core.player.inventory.flashlight =
-//                                     Some(items::Flashlight::lvl1());
-//                             }
-//                             1 => {
-//                                 game_core.player.inventory.flashlight =
-//                                     Some(items::Flashlight::lvl2());
-//                             }
-//                             2 => {
-//                                 game_core.player.inventory.flashlight =
-//                                     Some(items::Flashlight::lvl3());
-//                             }
-//                             _ => (return),
-//                         };
-//                         item.cost += 5;
-//                         item.level += 1;
-//                     }
-//                     "Flippers" => {
-//                         match item.level {
-//                             0 => {
-//                                 game_core.player.inventory.flippers = Some(items::Flippers::lvl1());
-//                             }
-//                             1 => {
-//                                 game_core.player.inventory.flippers = Some(items::Flippers::lvl2());
-//                             }
-//                             2 => {
-//                                 game_core.player.inventory.flippers = Some(items::Flippers::lvl3());
-//                             }
-//                             _ => (return),
-//                         };
-//                         item.cost += 5;
-//                         item.level += 1;
-//                     }
-//                     _ => (return),
-//                 };
-//             }
-//         } else {
-//             // outlines if not hovered
-//             draw_handle.draw_rectangle_lines(
-//                 item.x_pose,
-//                 item.y_pose,
-//                 item.width,
-//                 item.height,
-//                 Color::BLACK,
-//             );
-//         }
-//         // Draw text about object
-//         draw_handle.draw_text(
-//             &format!("{}: ${}", item.name, item.cost),
-//             item.x_pose + 5,
-//             item.y_pose + 5,
-//             12,
-//             Color::BLACK,
-//         );
-//     }
-// }