diff --git a/Source/WidgetInteraction/Private/RwthComponent.cpp b/Source/WidgetInteraction/Private/RwthComponent.cpp
index d74511ce66129eb8bfe775f57fc0a20c978d15e2..2685e08e4b8d766cadea1404b1057f71ff6308dc 100644
--- a/Source/WidgetInteraction/Private/RwthComponent.cpp
+++ b/Source/WidgetInteraction/Private/RwthComponent.cpp
@@ -12,7 +12,7 @@ URwthComponent::URwthComponent()
 
 void URwthComponent::Init()
 {
-	bShowDebug = true;
+        SetVisibility(true);
 	InteractionDistance = 1000000.0f;
 
 	auto input_cmp = dynamic_cast<UInputComponent*>(GetOwner()->GetComponentByClass(UInputComponent::StaticClass()));
@@ -23,6 +23,10 @@ void URwthComponent::Init()
 	RegisterComponent();
 }
 
+void URwthComponent::SetVisibility(bool visible) {
+  bShowDebug = visible;
+}
+
 void URwthComponent::OnFire(bool val)
 {
 	if (val == true)
diff --git a/Source/WidgetInteraction/Private/WidgetInteraction.cpp b/Source/WidgetInteraction/Private/WidgetInteraction.cpp
index 68fd513ee0d0f5f75eb6c45a64710e9e52dc5972..f414d1d36a5e20cf120c0af09964b85bffd57fe5 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();
 
@@ -63,15 +71,26 @@ void FWidgetInteractionModule::OnWorldTickStart(ELevelTick level_tick, float val
     else {
       //if this is a cluster setup we attach it to the flystick
       name = TEXT("flystick");
-      component_class = UMotionControllerComponent::StaticClass();
+      component_class = UDisplayClusterSceneComponent::StaticClass();
     }
 
     auto parent_vec = vr_pawn->GetComponentsByClass(component_class);
-    for (auto parent : parent_vec)
-      if (parent->GetName() == FString(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\", cannot attach widget interaction component"), *name);
   }
+}
 
+URwthComponent* FWidgetInteractionModule::GetWidgetInteractionComponent() {
+  return widget_interaction_cmp_;
 }
 
 void FWidgetInteractionModule::CreateWidgetInteraction(USceneComponent * parent, AVirtualRealityPawn* outer)
diff --git a/Source/WidgetInteraction/Public/RwthComponent.h b/Source/WidgetInteraction/Public/RwthComponent.h
index fb7657858ced622c10fe552e135f056e8f1545d2..d5fda411e5ad92d4c1b3d9ed6f4a6e9fa4c9f0ed 100644
--- a/Source/WidgetInteraction/Public/RwthComponent.h
+++ b/Source/WidgetInteraction/Public/RwthComponent.h
@@ -18,6 +18,8 @@ public:
 
 	void Init();
 
+        void SetVisibility(bool visible);
+
 protected:
 	void OnFire(bool val);
 
diff --git a/Source/WidgetInteraction/Public/WidgetInteraction.h b/Source/WidgetInteraction/Public/WidgetInteraction.h
index 596d28a989a4467309e488c636c844a1b336c0cf..d1b7bb79aa5179f5b8a93e08283233ad0516feb7 100644
--- a/Source/WidgetInteraction/Public/WidgetInteraction.h
+++ b/Source/WidgetInteraction/Public/WidgetInteraction.h
@@ -7,7 +7,7 @@
 #include "RwthComponent.h"
 #include "Modules/ModuleManager.h"
 
-class FWidgetInteractionModule : public IModuleInterface
+class WIDGETINTERACTION_API FWidgetInteractionModule : public IModuleInterface
 {
 public:
 
@@ -18,6 +18,7 @@ public:
 	UFUNCTION()
 		void OnWorldTickStart(ELevelTick, float);
 
+        URwthComponent* GetWidgetInteractionComponent();
 
 private:
 	void CreateWidgetInteraction(USceneComponent * parent, AVirtualRealityPawn* outer);
@@ -26,4 +27,5 @@ private:
 	TBaseDelegate<void, ELevelTick, float> on_world_tick_start_delegate_;
 
 	URwthComponent * widget_interaction_cmp_;
+        UWorld* last_world;
 };