diff --git a/css/gui/tooltips/hasTooltip.css b/css/gui/tooltips/hasTooltip.css
index 1eaca7af0ac5c88d57e07a07314f5ac8ab93b4eb..d5eafa88bc64b3e50a015fe8ece4b33f5f52a8d5 100644
--- a/css/gui/tooltips/hasTooltip.css
+++ b/css/gui/tooltips/hasTooltip.css
@@ -1,8 +1,3 @@
-/* TODO unify tooltip systems */
-.hasTooltip {
-    text-decoration: underline;
-}
-
 /* interactable tooltip-like container - created/destroyed dynamically */
 .details-overlay {
     display: inline-block;
diff --git a/src/npc/surgery/organFarm.js b/src/npc/surgery/organFarm.js
index 02d5d02b20d82013add13144b3acf204a32c9bf6..eb8a281c955e7193020474390e8ac0af21977e6d 100644
--- a/src/npc/surgery/organFarm.js
+++ b/src/npc/surgery/organFarm.js
@@ -148,10 +148,9 @@ App.Medicine.OrganFarm.implantActions = function(slave) {
 					[],
 					"Surgery Degradation"
 				);
-				const tooltip = action.tooltip === "" ? "" : `${capFirstChar(action.tooltip)}.`;
-				if (tooltip !== "") {
-					link.title = tooltip;
-					link.classList.add("hasTooltip");
+				if (action.tooltip !== "") {
+					link.classList.add("has-tooltip");
+					tippy(link, {content: `${capFirstChar(action.tooltip)}.`});
 				}
 				links.push(link);
 				if (!F.Organs.get(organ.type).displayMultipleActions) {
@@ -162,8 +161,8 @@ App.Medicine.OrganFarm.implantActions = function(slave) {
 				if (error !== "") {
 					const disabledLink = document.createElement("span");
 					disabledLink.append(action.name);
-					disabledLink.title = (error);
-					disabledLink.classList.add("hasTooltip");
+					disabledLink.classList.add("has-tooltip");
+					tippy(disabledLink, {content: error});
 					links.push(disabledLink);
 				}
 			}