diff --git a/gui/public/i18n/en/translation.ftl b/gui/public/i18n/en/translation.ftl
index d431ec41b1..a0096f37ef 100644
--- a/gui/public/i18n/en/translation.ftl
+++ b/gui/public/i18n/en/translation.ftl
@@ -612,8 +612,8 @@ onboarding-assignment_tutorial = How to prepare a Slime Tracker before putting i
onboarding-assignment_tutorial-first_step = 1. Place a body part sticker (if you have one) on the tracker according to your choosing
# This text has a character limit of around 11 characters, so please keep it short
onboarding-assignment_tutorial-sticker = Sticker
-onboarding-assignment_tutorial-second_step = 2. Attach the strap to your tracker, keeping the hook and loop side of the strap face in the following orientation:
-onboarding-assignment_tutorial-second_step-continuation = The hook and loop side for the extension should be in this orientation:
+onboarding-assignment_tutorial-second_step-v2 = 2. Attach the strap to your tracker, keeping the velcro side of the strap facing the same direction as the slime face of your tracker:
+onboarding-assignment_tutorial-second_step-continuation-v2 = The velcro side for the extension should be facing up like the following image:
onboarding-assignment_tutorial-done = I put stickers and straps!
## Tracker assignment setup
diff --git a/gui/src-tauri/src/main.rs b/gui/src-tauri/src/main.rs
index ce80095f20..a16d5d2c34 100644
--- a/gui/src-tauri/src/main.rs
+++ b/gui/src-tauri/src/main.rs
@@ -239,7 +239,7 @@ fn main() -> Result<()> {
};
app_handle
.emit_all("server-status", emit_me)
- .expect("Failed to emit");
+ .expect("Check server log files. \nFailed to emit");
}
log::error!("Java server receiver died");
app_handle
diff --git a/gui/src/components/ClearMountingButton.tsx b/gui/src/components/ClearMountingButton.tsx
index 4ce177b4c9..2cc56938ce 100644
--- a/gui/src/components/ClearMountingButton.tsx
+++ b/gui/src/components/ClearMountingButton.tsx
@@ -3,10 +3,30 @@ import { ClearMountingResetRequestT, RpcMessage } from 'solarxr-protocol';
import { useWebsocketAPI } from '../hooks/websocket-api';
import { BigButton } from './commons/BigButton';
import { TrashIcon } from './commons/icon/TrashIcon';
+import { useTrackers } from '../hooks/tracker';
+import { Quaternion } from 'three';
+import { QuaternionFromQuatT, similarQuaternions } from '../maths/quaternion';
+import { useMemo } from 'react';
+
+const _q = new Quaternion();
export function ClearMountingButton() {
const { l10n } = useLocalization();
const { sendRPCPacket } = useWebsocketAPI();
+ const { useAssignedTrackers } = useTrackers();
+ const assignedTrackers = useAssignedTrackers();
+
+ const trackerWithMounting = useMemo(
+ () =>
+ assignedTrackers.some(
+ (d) =>
+ !similarQuaternions(
+ QuaternionFromQuatT(d?.tracker.info?.mountingResetOrientation),
+ _q
+ )
+ ),
+ [assignedTrackers]
+ );
const clearMounting = () => {
const record = new ClearMountingResetRequestT();
@@ -18,8 +38,7 @@ export function ClearMountingButton() {
text={l10n.getString('widget-clear_mounting')}
icon={