diff --git a/src/audits/FocusableElementNotVisibleAndNotAriaHidden.js b/src/audits/FocusableElementNotVisibleAndNotAriaHidden.js
index <HASH>..<HASH> 100644
--- a/src/audits/FocusableElementNotVisibleAndNotAriaHidden.js
+++ b/src/audits/FocusableElementNotVisibleAndNotAriaHidden.js
@@ -25,19 +25,7 @@ axs.AuditRules.addRule({
     test: function(element) {
         if (axs.utils.isElementOrAncestorHidden(element))
             return false;
-        var overlapping = axs.utils.overlappingElement(element);
-        if (overlapping) {
-            var style = window.getComputedStyle(overlapping, null);
-            var overlappingElementBg = axs.utils.getBgColor(style, overlapping);
-            if (overlappingElementBg && overlappingElementBg.alpha > 0)
-                return true;
-        }
-        if (axs.utils.elementHasZeroArea(element))
-            return true;
-        var style = window.getComputedStyle(element, null);
-        if (style.opacity == 0)
-            return true;
-        return false;
+        return !axs.utils.elementIsVisible(element)
     },
     code: 'AX_FOCUS_01'
 });
Make 'FocusableElementNotVisibleAndNotAriaHidden' audit re-use axs.utils.elementIsVisible() logic rather than reimplementing it, and have axs.utils.elementIsOutsideScrollArea() check for elements which are outside but flush with the borders of the scroll area.