diff --git a/src/context.rs b/src/context.rs
index 19f5831c01f462fb332a917d3ac34ca4b32d42d5..c51cadc472adae47e24f23dad6bb3cb6514d54a4 100644
--- a/src/context.rs
+++ b/src/context.rs
@@ -93,16 +93,16 @@ pub struct KayakRootContext {
     pub(crate) context_entities: ContextEntities,
     pub(crate) current_cursor: CursorIcon,
     pub(crate) clone_systems: Arc<RwLock<EntityCloneSystems>>,
-    pub(crate) cloned_widget_entities: DashMap<Entity, Entity>,
+    pub(crate) cloned_widget_entities: Arc<DashMap<Entity, Entity>>,
     pub(crate) widget_state: WidgetState,
     pub(crate) order_tree: Arc<RwLock<Tree>>,
-    pub(crate) index: DashMap<Entity, usize>,
+    pub(crate) index: Arc<DashMap<Entity, usize>>,
     /// Unique id's store entity id's related to a key rather than the child tree.
     /// This lets users get a unique entity. The first Entity is the parent widget.
     /// The 2nd hashmap is a list of keys and their entities.
-    pub(crate) unique_ids: DashMap<Entity, DashMap<String, Entity>>,
+    pub(crate) unique_ids: Arc<DashMap<Entity, DashMap<String, Entity>>>,
     /// Maps keyed entities to spawn parents. We can't use the tree in this case.
-    pub(crate) unique_ids_parents: DashMap<Entity, Entity>,
+    pub(crate) unique_ids_parents: Arc<DashMap<Entity, Entity>>,
     pub(crate) uninitilized_systems: HashSet<String>,
     pub camera_entity: Entity,
 }
@@ -692,13 +692,13 @@ fn update_widgets(
     context_entities: &ContextEntities,
     focus_tree: &FocusTree,
     clone_systems: &Arc<RwLock<EntityCloneSystems>>,
-    cloned_widget_entities: &DashMap<Entity, Entity>,
+    cloned_widget_entities: &Arc<DashMap<Entity, Entity>>,
     widget_state: &WidgetState,
     new_ticks: &mut HashMap<String, u32>,
     order_tree: &Arc<RwLock<Tree>>,
-    index: &DashMap<Entity, usize>,
-    unique_ids: &DashMap<Entity, DashMap<String, Entity>>,
-    unique_ids_parents: &DashMap<Entity, Entity>,
+    index: &Arc<DashMap<Entity, usize>>,
+    unique_ids: &Arc<DashMap<Entity, DashMap<String, Entity>>>,
+    unique_ids_parents: &Arc<DashMap<Entity, Entity>>,
 ) {
     for entity in widgets.iter() {
         // if let (Some(entity_ref), Some(_)) = (
@@ -736,9 +736,6 @@ fn update_widgets(
                     cloned_widget_entities,
                     widget_state,
                     new_ticks,
-                    order_tree,
-                    unique_ids,
-                    unique_ids_parents,
                 );
 
                 if should_update_children {
@@ -1118,9 +1115,6 @@ fn update_widget(
     cloned_widget_entities: &DashMap<Entity, Entity>,
     widget_state: &WidgetState,
     new_ticks: &mut HashMap<String, u32>,
-    _order_tree: &Arc<RwLock<Tree>>,
-    _unique_ids: &DashMap<Entity, DashMap<String, Entity>>,
-    _unique_ids_parents: &DashMap<Entity, Entity>,
 ) -> (Tree, bool) {
     // Check if we should update this widget
     let should_rerender = {
diff --git a/src/widget_context.rs b/src/widget_context.rs
index 99a67f72b6310019178b9593acf62facbded7021..f3135cdfca0c44d94f35ac7a7f8e7442613c8eb9 100644
--- a/src/widget_context.rs
+++ b/src/widget_context.rs
@@ -21,15 +21,15 @@ pub struct KayakWidgetContext {
     new_tree: Arc<RwLock<Tree>>,
     context_entities: ContextEntities,
     layout_cache: Arc<RwLock<LayoutCache>>,
-    pub(crate) index: DashMap<Entity, usize>,
+    pub(crate) index: Arc<DashMap<Entity, usize>>,
     widget_state: WidgetState,
     pub(crate) order_tree: Arc<RwLock<Tree>>,
     pub camera_entity: Option<Entity>,
     // Unique id's store entity id's related to a key rather than the child tree.
     // This lets users get a unique entity. The first Entity is the parent widget.
     // The 2nd hashmap is a list of keys and their entities.
-    unique_ids: DashMap<Entity, DashMap<String, Entity>>,
-    unique_ids_parents: DashMap<Entity, Entity>,
+    unique_ids: Arc<DashMap<Entity, DashMap<String, Entity>>>,
+    unique_ids_parents: Arc<DashMap<Entity, Entity>>,
 }
 
 impl KayakWidgetContext {
@@ -39,10 +39,10 @@ impl KayakWidgetContext {
         layout_cache: Arc<RwLock<LayoutCache>>,
         widget_state: WidgetState,
         order_tree: Arc<RwLock<Tree>>,
-        index: DashMap<Entity, usize>,
+        index: Arc<DashMap<Entity, usize>>,
         camera_entity: Option<Entity>,
-        unique_ids: DashMap<Entity, DashMap<String, Entity>>,
-        unique_ids_parents: DashMap<Entity, Entity>,
+        unique_ids: Arc<DashMap<Entity, DashMap<String, Entity>>>,
+        unique_ids_parents: Arc<DashMap<Entity, Entity>>,
     ) -> Self {
         Self {
             old_tree,