diff --git a/src/widget_state.rs b/src/widget_state.rs
index 8d3660d5b63d56e803af3dbe6a4096dcc38002a6..7942a98e16a94b3dfa4432c15a0d45bba6d32386 100644
--- a/src/widget_state.rs
+++ b/src/widget_state.rs
@@ -1,17 +1,14 @@
-use std::sync::{Arc, RwLock};
-
-use bevy::{
-    prelude::{BuildChildren, Commands, Component, Entity, Resource},
-    utils::HashMap,
-};
+use bevy::prelude::{BuildChildren, Commands, Component, Entity, Resource};
+use dashmap::DashMap;
+use std::sync::Arc;
 
 /// Stores mappings between widget entities and their corresponding state entities.
 #[derive(Resource, Default, Debug, Clone)]
 pub struct WidgetState {
     // Widget entity to state entity
-    mapping: Arc<RwLock<HashMap<Entity, Entity>>>,
+    mapping: Arc<DashMap<Entity, Entity>>,
     // State entity to widget entity
-    reverse_mapping: Arc<RwLock<HashMap<Entity, Entity>>>,
+    reverse_mapping: Arc<DashMap<Entity, Entity>>,
 }
 
 impl WidgetState {
@@ -22,55 +19,38 @@ impl WidgetState {
         widget_entity: Entity,
         initial_state: State,
     ) -> Entity {
-        if let (Ok(mut mapping), Ok(mut reverse_mapping)) =
-            (self.mapping.try_write(), self.reverse_mapping.try_write())
-        {
-            if mapping.contains_key(&widget_entity) {
-                *mapping.get(&widget_entity).unwrap()
-            } else {
-                let mut state_entity = None;
-                commands
-                    .entity(widget_entity)
-                    .with_children(|child_builder| {
-                        state_entity = Some(child_builder.spawn(initial_state).id());
-                        mapping.insert(widget_entity, state_entity.unwrap());
-                        reverse_mapping.insert(state_entity.unwrap(), widget_entity);
-                    });
-                state_entity.expect("State entity did not spawn!")
-            }
+        if self.mapping.contains_key(&widget_entity) {
+            *self.mapping.get(&widget_entity).unwrap()
         } else {
-            panic!("Couldn't get mapping lock!");
+            let mut state_entity = None;
+            commands
+                .entity(widget_entity)
+                .with_children(|child_builder| {
+                    state_entity = Some(child_builder.spawn(initial_state).id());
+                    self.mapping.insert(widget_entity, state_entity.unwrap());
+                    self.reverse_mapping
+                        .insert(state_entity.unwrap(), widget_entity);
+                });
+            state_entity.expect("State entity did not spawn!")
         }
     }
 
     /// Attempts to get a state entity
     pub fn get(&self, widget_entity: Entity) -> Option<Entity> {
-        if let Ok(mapping) = self.mapping.try_read() {
-            return mapping.get(&widget_entity).copied();
-        }
-
-        None
+        self.mapping.get(&widget_entity).map(|entry| *entry.value())
     }
 
     pub fn get_widget_entity(&self, state_entity: Entity) -> Option<Entity> {
-        if let Ok(reverse_mapping) = self.reverse_mapping.try_read() {
-            return reverse_mapping.get(&state_entity).copied();
-        }
-
-        None
+        self.reverse_mapping
+            .get(&state_entity)
+            .map(|entry| *entry.value())
     }
 
     pub fn remove(&self, widget_entity: Entity) -> Option<Entity> {
-        if let (Ok(mut mapping), Ok(mut reverse_mapping)) =
-            (self.mapping.try_write(), self.reverse_mapping.try_write())
-        {
-            let state_entity = mapping.remove(&widget_entity);
-            if let Some(state_entity) = state_entity {
-                reverse_mapping.remove(&state_entity);
-            }
-            return state_entity;
+        let state_entity = self.mapping.remove(&widget_entity).map(|(_, v)| v);
+        if let Some(state_entity) = state_entity {
+            self.reverse_mapping.remove(&state_entity);
         }
-
-        None
+        state_entity
     }
 }