diff --git a/Source/StudyFrameworkPlugin/Private/GazeTracking/SFGazeTracker.cpp b/Source/StudyFrameworkPlugin/Private/GazeTracking/SFGazeTracker.cpp
index 2f12fff78360300096ec0539400deb5c5c12a669..3001ae07ed838fa7a63e844ec0a9eb61fb4eff48 100644
--- a/Source/StudyFrameworkPlugin/Private/GazeTracking/SFGazeTracker.cpp
+++ b/Source/StudyFrameworkPlugin/Private/GazeTracking/SFGazeTracker.cpp
@@ -22,17 +22,26 @@ bool USFGazeTracker::Tick(float DeltaTime)
 
 	TimeSinceLastEyeDataGather = 0.0f;
 
-	if(bEyeTrackingStarted)
+	if(bEyeTrackingStarted && !bIsAsyncEyeTrackingTaskRunning)
 	{
 #ifdef WITH_SRANIPAL
-		ViveSR::anipal::Eye::GetEyeData_v2(&SranipalEyeData);
-		bDataLogged = false;
+		bIsAsyncEyeTrackingTaskRunning = true;
+		ViveSR::anipal::Eye::EyeData_v2 TempEyeData;
+		AsyncTask(ENamedThreads::AnyThread, [TempEyeDataAddr = MoveTemp(&TempEyeData), OnEyeTrackingDataReceived]()
+			{				
+				ViveSR::anipal::Eye::GetEyeData_v2(TempEyeDataAddr);
+
+				AsyncTask(ENamedThreads::GameThread, [TempEyeDataAddr = MoveTemp(TempEyeDataAddr), OnEyeTrackingDataReceived]() mutable
+					{
+						OnEyeTrackingDataReceived.ExecuteIfBound(*TempEyeDataAddr);
+					});
+	
+			});		
 #endif
 	}
 	return true;
 }
 
-
 void USFGazeTracker::Init(EGazeTrackerMode Mode, bool IgnoreNonGazeTargetActors, float DataGatheringsPerSecond)
 {
 	bIgnoreNonGazeTargetActors = IgnoreNonGazeTargetActors;
@@ -238,6 +247,13 @@ float USFGazeTracker::GetPupilDiameter()
 	return 0.0f;
 }
 
+void USFGazeTracker::OnEyeTrackingDataReceived(ViveSR::anipal::Eye::EyeData_v2 EyeData)
+{
+	bIsAsyncEyeTrackingTaskRunning = false;
+	SranipalEyeData = EyeData;
+	bDataLogged = false;
+}
+
 FGazeRay USFGazeTracker::GetSranipalGazeRayFromData()
 {
 	FGazeRay GazeRay;
diff --git a/Source/StudyFrameworkPlugin/Public/GazeTracking/SFGazeTracker.h b/Source/StudyFrameworkPlugin/Public/GazeTracking/SFGazeTracker.h
index ff0044f7e4085d69a6fe3d03ce261ce21dd9c031..25782c8e8604887d40a8f76d15a05b3a705b2bcd 100644
--- a/Source/StudyFrameworkPlugin/Public/GazeTracking/SFGazeTracker.h
+++ b/Source/StudyFrameworkPlugin/Public/GazeTracking/SFGazeTracker.h
@@ -1,7 +1,7 @@
 #pragma once
 
 #include "CoreMinimal.h"
-
+#include "Async/Async.h"
 
 #ifdef WITH_SRANIPAL
 #include "Eye/SRanipal_API_Eye.h"
@@ -9,6 +9,11 @@
 
 #include "SFGazeTracker.generated.h"
 
+#ifdef WITH_SRANIPAL
+//Use this to broadcast the data from async thread to game thread for logging
+DECLARE_DYNAMIC_DELEGATE_OneParam(FOnEyeTrackingDataReceived, const ViveSR::anipal::Eye::EyeData_v2, EyeData);
+#endif
+
 UENUM()
 enum class EGazeTrackerMode : uint8
 {
@@ -76,13 +81,17 @@ public:
 	bool bDebugRenderRayTraces = false;
 
 
-
+#ifdef WITH_SRANIPAL
+	FOnEyeTrackingDataReceived& OnEyeTrackingDataReceived;
+	void OnEyeTrackingDataReceived(ViveSR::anipal::Eye::EyeData_v2 EyeData);
+#endif
 private:
 
 	FGazeRay GetSranipalGazeRayFromData();
 
 	bool bEyeTrackingStarted = false;
 
+	bool bIsAsyncEyeTrackingTaskRunning = false;
 	bool bIgnoreNonGazeTargetActors = false;
 	UPROPERTY()
 	TArray<AActor*> ActorsToIgnore;