diff --git a/Source/WidgetInteraction/Private/WidgetInteraction.cpp b/Source/WidgetInteraction/Private/WidgetInteraction.cpp
index 7d9f0a8cec205d8a6bfb5a29e6e6f2ba38710913..e32861755bd47259851e0ac05fd23382b4716c7c 100644
--- a/Source/WidgetInteraction/Private/WidgetInteraction.cpp
+++ b/Source/WidgetInteraction/Private/WidgetInteraction.cpp
@@ -21,20 +21,26 @@ void FWidgetInteractionModule::ShutdownModule()
 
 void FWidgetInteractionModule::OnWorldTickStart(ELevelTick level_tick, float val)
 {
+  //called every Tick()
+
   auto worlds = GEngine->GetWorldContexts();
 
-  if (widget_interaction_cmp_ != nullptr) {
-    if (widget_interaction_cmp_->IsValidLowLevel() == true) {
-      return;
-    }
-    else {
-      widget_interaction_cmp_ = nullptr;
-    }
-  }
+  for (auto world_context : worlds) {
 
-  for (auto & world_context : worlds)
-  {
     auto world = world_context.World();
+
+    if (last_world == world  && widget_interaction_cmp_ != nullptr) {
+      if (widget_interaction_cmp_->IsValidLowLevel() == true) {
+        continue;
+      }
+      else {
+        widget_interaction_cmp_ = nullptr;
+      }
+    }
+
+    if (world == nullptr)
+      continue;
+
     auto player_controller = world->GetFirstPlayerController();
     if (player_controller == nullptr)
       continue;
@@ -43,6 +49,8 @@ void FWidgetInteractionModule::OnWorldTickStart(ELevelTick level_tick, float val
     if (vr_pawn == nullptr)
       continue;
 
+    UE_LOG(LogTemp, Warning, TEXT("OnWorldTickStart called and interaction component will be updated"));
+
     FString name = "";
     UClass* component_class = UMotionControllerComponent::StaticClass();
 
@@ -67,17 +75,18 @@ void FWidgetInteractionModule::OnWorldTickStart(ELevelTick level_tick, float val
     }
 
     auto parent_vec = vr_pawn->GetComponentsByClass(component_class);
-	bool success;
-    for (auto parent : parent_vec)
-      if (parent->GetName() == FString(name))
-      {
-		CreateWidgetInteraction(dynamic_cast<USceneComponent*>(parent), vr_pawn);
-		success = true;
-	  }
-	if(!success)
-		UE_LOG(LogTemp, Error, TEXT("Failed to load widget asset \"%s"), *name);
-  }
+    bool success;
+    for (auto parent : parent_vec) {
+      if (parent->GetName() == FString(name)) {
+        CreateWidgetInteraction(dynamic_cast<USceneComponent*>(parent), vr_pawn);
+        success = true;
+        last_world = world;
+      }
+    }
 
+    if (!success)
+      UE_LOG(LogTemp, Error, TEXT("Failed to load widget asset \"%s"), *name);
+  }
 }
 
 void FWidgetInteractionModule::CreateWidgetInteraction(USceneComponent * parent, AVirtualRealityPawn* outer)
diff --git a/Source/WidgetInteraction/Public/WidgetInteraction.h b/Source/WidgetInteraction/Public/WidgetInteraction.h
index 6a604d6c478de69a52eac7537237356cc2bd3ca4..747a3bdc6f3a7f13ef4471bdbf077864b0d2001d 100644
--- a/Source/WidgetInteraction/Public/WidgetInteraction.h
+++ b/Source/WidgetInteraction/Public/WidgetInteraction.h
@@ -25,4 +25,5 @@ private:
 	TBaseDelegate<void, ELevelTick, float> on_world_tick_start_delegate_;
 
 	URwthComponent * widget_interaction_cmp_;
+        UWorld* last_world;
 };