diff --git a/front_end/ui/PopoverHelper.js b/front_end/ui/PopoverHelper.js
index 5f8fd76..181d9ca 100644
--- a/front_end/ui/PopoverHelper.js
+++ b/front_end/ui/PopoverHelper.js
@@ -28,7 +28,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-export default class PopoverHelper {
+import {GlassPane, MarginBehavior, SizeBehavior} from './GlassPane.js';
+
+export class PopoverHelper {
   /**
    * @param {!Element} container
    * @param {function(!MouseEvent):?UI.PopoverRequest} getRequest
@@ -130,7 +132,7 @@
   }
 
   /**
-   * @param {!UI.GlassPane} popover
+   * @param {!GlassPane} popover
    * @param {!Event} event
    */
   _popoverMouseOut(popover, event) {
@@ -219,10 +221,10 @@
    * @param {!Document} document
    */
   _showPopover(document) {
-    const popover = new UI.GlassPane();
+    const popover = new GlassPane();
     popover.registerRequiredCSS('ui/popover.css');
-    popover.setSizeBehavior(UI.GlassPane.SizeBehavior.MeasureContent);
-    popover.setMarginBehavior(UI.GlassPane.MarginBehavior.Arrow);
+    popover.setSizeBehavior(SizeBehavior.MeasureContent);
+    popover.setMarginBehavior(MarginBehavior.Arrow);
     const request = this._scheduledRequest;
     request.show.call(null, popover).then(success => {
       if (!success) {
@@ -277,15 +279,3 @@
     this._container.removeEventListener('mouseout', this._boundMouseOut, false);
   }
 }
-
-/** @typedef {{box: !AnchorBox, show:(function(!UI.GlassPane):!Promise<boolean>), hide:(function()|undefined)}} */
-UI.PopoverRequest;
-
-/* Legacy exported object*/
-self.UI = self.UI || {};
-
-/* Legacy exported object*/
-UI = UI || {};
-
-/** @constructor */
-UI.PopoverHelper = PopoverHelper;
