diff --git a/README.md b/README.md
index 29d51505f11dd28f818c9cb5e806213343c253c0..362b5f152a49cc8916748d09d2c9f7701cae9314 100644
--- a/README.md
+++ b/README.md
@@ -19,6 +19,8 @@ The HMD Simulator uses the keyboard and mouse to grab the input that is needed t
 Do a [VR Preview launch](Resources/VRLaunch.png) and you will see something similar to this: ![](Resources/StandardView.png)
 Currently, the HMD Simulator emulated the two controllers and the position of the HMD.
 
+If SteamVR is running and a real HMD is detected it is used instead. If you want to explicitly use the HMDSimulator, switch off your HMD or unplug it and close SteamVR. Then restart Unreal und do a [VR Preview launch](Resources/VRLaunch.png).
+
 ### Camera Movement
 You can move around with the Mouse + WASD
 
@@ -33,3 +35,6 @@ You can select a controller to control with either LeftShift (Left Controller) o
 The emulated controllers also offer 3 virtual buttons at the moment. The Trigger, Grab and Menu Button. These can be controlled with T, G or M respectively. If you select a controller (or more) and press one of these keys the controller sends a respective button press to Unreal, that you can use in your Blueprints (ideally via ActionMappings, see Configuration). If setup correctly you can e.g. Grab objects in the world and move them:
 
 ![](Resources/GrabRight.mp4)
+
+### Packaging
+The HMD Simulator can be packed together with your game and only turns on, if you launch your game in VR mode (commandline parameter `-vr`) and additionally provide the `-hmd-simulator` parameter.
diff --git a/Source/HMDSimulator/Public/HMDSimulationManager.h b/Source/HMDSimulator/Public/HMDSimulationManager.h
index 6b13b3a1d248f997ae9a896d170ae36012d687fa..3442d0cf842f30e727982e971196efd31a559049 100644
--- a/Source/HMDSimulator/Public/HMDSimulationManager.h
+++ b/Source/HMDSimulator/Public/HMDSimulationManager.h
@@ -48,6 +48,8 @@ public:
     virtual void OnBeginPlay(FWorldContext& InWorldContext, bool EnableInThisPlay); //Called by simulated HMD
     virtual void OnEndPlay(FWorldContext& InWorldContext); //Called by simulated HMD
 
+	bool IsCurrentlyEnabled(){return CurrentlyEnabled;}
+
 private:
 	void BindInputEvents();
 	void UnbindInputEvents();
diff --git a/Source/HMDSimulatorHMD/Private/SimulatedHMD.cpp b/Source/HMDSimulatorHMD/Private/SimulatedHMD.cpp
index 2877c559979abf263024242777cffa8f874aebcb..be34eb1694c9a5dca96666e4aa3321a985352982 100644
--- a/Source/HMDSimulatorHMD/Private/SimulatedHMD.cpp
+++ b/Source/HMDSimulatorHMD/Private/SimulatedHMD.cpp
@@ -44,12 +44,12 @@ bool FSimulatedHMD::IsHMDConnected() /* Always connected */
 	return true;
 }
 
-bool FSimulatedHMD::IsHMDEnabled() const /* Always enabled */
+bool FSimulatedHMD::IsHMDEnabled() const
 {
-	return true;
+	return HMDSimulationManager && HMDSimulationManager->IsCurrentlyEnabled();
 }
 
-void FSimulatedHMD::EnableHMD(bool){} /* Always enabled */
+void FSimulatedHMD::EnableHMD(bool){} /* Enabled/Disabled automatically (see CheckActivation) */
 
 bool FSimulatedHMD::GetHMDMonitorInfo(MonitorInfo& MonitorDesc)
 {
@@ -93,7 +93,7 @@ void FSimulatedHMD::OnBeginPlay(FWorldContext& InWorldContext)
 {
 	const bool Activation = CheckActivation();
 
-	UE_LOG(LogTemp, Warning, TEXT("HMDSimulator Activated: %d"), Activation);
+	UE_LOG(LogHMDSimulatiorHMD, Log, TEXT("HMDSimulator Activated: %d"), Activation);
 	HMDSimulationManager->OnBeginPlay(InWorldContext, Activation);
 }
 
@@ -104,7 +104,8 @@ void FSimulatedHMD::OnEndPlay(FWorldContext& InWorldContext)
 
 bool FSimulatedHMD::EnumerateTrackedDevices(TArray<int32>& OutDevices, EXRTrackedDeviceType Type)
 {
-	if (Type == EXRTrackedDeviceType::Any || Type == EXRTrackedDeviceType::HeadMountedDisplay)
+	if (HMDSimulationManager && HMDSimulationManager->IsCurrentlyEnabled() &&
+		(Type == EXRTrackedDeviceType::Any || Type == EXRTrackedDeviceType::HeadMountedDisplay))
 	{
 		OutDevices.Add(HMDDeviceId);
 		return true;
@@ -122,6 +123,8 @@ float FSimulatedHMD::GetInterpupillaryDistance() const
 
 bool FSimulatedHMD::GetCurrentPose(int32 DeviceId, FQuat& CurrentOrientation, FVector& CurrentPosition)
 {
+	if(!HMDSimulationManager || !HMDSimulationManager->IsCurrentlyEnabled()) return false;
+
 	if(DeviceId == HMDDeviceId)
 	{
 		HMDSimulationManager->GetHeadPose(CurrentOrientation, CurrentPosition);
@@ -410,7 +413,7 @@ void FSimulatedHMD::PreRenderViewFamily_RenderThread(FRHICommandListImmediate&,
 
 bool FSimulatedHMD::IsActiveThisFrame(class FViewport* InViewport) const
 {
-	return GEngine && GEngine->IsStereoscopic3D(InViewport);
+	return GEngine && GEngine->IsStereoscopic3D(InViewport) && HMDSimulationManager && HMDSimulationManager->IsCurrentlyEnabled();
 }
 
 FSimulatedHMD::FSimulatedHMD(const FAutoRegister& AutoRegister)
diff --git a/Source/HMDSimulatorInput/Private/SimulatedMotionController.cpp b/Source/HMDSimulatorInput/Private/SimulatedMotionController.cpp
index 12f94a367db3b52a64bcb241192a202d5a45867f..d11236c23737fa4e0bcf6b6849d0302632062e92 100644
--- a/Source/HMDSimulatorInput/Private/SimulatedMotionController.cpp
+++ b/Source/HMDSimulatorInput/Private/SimulatedMotionController.cpp
@@ -57,6 +57,8 @@ void FSimulatedMotionController::SetChannelValues(int32, const FForceFeedbackVal
 
 void FSimulatedMotionController::EnumerateSources(TArray<FMotionControllerSource>& SourcesOut) const
 {
+	if(!HMDSimulationManager || !HMDSimulationManager->IsCurrentlyEnabled()) return;
+
 	SourcesOut.Add(FMotionControllerSource(LeftHandSourceId));
 	SourcesOut.Add(FMotionControllerSource(RightHandSourceId));
 }
@@ -69,6 +71,8 @@ FName FSimulatedMotionController::GetMotionControllerDeviceTypeName() const
 
 bool FSimulatedMotionController::GetControllerOrientationAndPosition(const int32, const EControllerHand DeviceHand, FRotator& OutOrientation, FVector& OutPosition, float) const
 {
+	if(!HMDSimulationManager || !HMDSimulationManager->IsCurrentlyEnabled()) return false;
+
 	switch(DeviceHand)
 	{
 	case EControllerHand::Left:
@@ -83,6 +87,7 @@ bool FSimulatedMotionController::GetControllerOrientationAndPosition(const int32
 
 ETrackingStatus FSimulatedMotionController::GetControllerTrackingStatus(const int32, const EControllerHand) const
 {
+	if(!HMDSimulationManager || !HMDSimulationManager->IsCurrentlyEnabled()) return ETrackingStatus::NotTracked;
 	return ETrackingStatus::Tracked;
 }