diff --git a/api-reports/2_12.txt b/api-reports/2_12.txt
index 8a425162..f9a7ea10 100644
--- a/api-reports/2_12.txt
+++ b/api-reports/2_12.txt
@@ -17206,9 +17206,9 @@ PositionError[JO] val POSITION_UNAVAILABLE: Int
 PositionError[JO] val TIMEOUT: Int
 PositionError[JT] def code: Int
 PositionError[JT] def message: String
-PositionOptions[JC] var enableHighAccuracy: Boolean
-PositionOptions[JC] var maximumAge: Int
-PositionOptions[JC] var timeout: Int
+PositionOptions[JT] var enableHighAccuracy: js.UndefOr[Boolean]
+PositionOptions[JT] var maximumAge: js.UndefOr[Int]
+PositionOptions[JT] var timeout: js.UndefOr[Int]
 PresentationStyle[JT]
 PresentationStyle[SO] val attachment: PresentationStyle
 PresentationStyle[SO] val inline: PresentationStyle
diff --git a/api-reports/2_13.txt b/api-reports/2_13.txt
index 8a425162..f9a7ea10 100644
--- a/api-reports/2_13.txt
+++ b/api-reports/2_13.txt
@@ -17206,9 +17206,9 @@ PositionError[JO] val POSITION_UNAVAILABLE: Int
 PositionError[JO] val TIMEOUT: Int
 PositionError[JT] def code: Int
 PositionError[JT] def message: String
-PositionOptions[JC] var enableHighAccuracy: Boolean
-PositionOptions[JC] var maximumAge: Int
-PositionOptions[JC] var timeout: Int
+PositionOptions[JT] var enableHighAccuracy: js.UndefOr[Boolean]
+PositionOptions[JT] var maximumAge: js.UndefOr[Int]
+PositionOptions[JT] var timeout: js.UndefOr[Int]
 PresentationStyle[JT]
 PresentationStyle[SO] val attachment: PresentationStyle
 PresentationStyle[SO] val inline: PresentationStyle
diff --git a/dom/src/main/scala/org/scalajs/dom/PositionOptions.scala b/dom/src/main/scala/org/scalajs/dom/PositionOptions.scala
index f4bb8284..bd774b60 100644
--- a/dom/src/main/scala/org/scalajs/dom/PositionOptions.scala
+++ b/dom/src/main/scala/org/scalajs/dom/PositionOptions.scala
@@ -7,15 +7,12 @@
 package org.scalajs.dom
 
 import scala.scalajs.js
-import scala.scalajs.js.annotation._
 
 /** The PositionOptions interface describes the options to use when calling the geolocation backend. The user agent
   * itself doesn't create such an object itself: it is the calling script that create it and use it as a parameter of
   * Geolocation.getCurrentPosition() and Geolocation.watchPosition().
   */
-@js.native
-@JSGlobal
-class PositionOptions extends js.Object {
+trait PositionOptions extends js.Object {
 
   /** The PositionOptions.enableHighAccuracy property is a Boolean that indicates the application would like to receive
     * the best possible results. If true and if the device is able to provide a more accurate position, it will do so.
@@ -23,18 +20,18 @@ class PositionOptions extends js.Object {
     * device for example). On the other hand, if false (the default value), the device can take the liberty to save
     * resources by responding more quickly and/or using less power.
     */
-  var enableHighAccuracy: Boolean = js.native
+  var enableHighAccuracy: js.UndefOr[Boolean] = js.undefined
 
   /** The PositionOptions.timeout property is a positive long value representing the maximum length of time (in
     * milliseconds) the device is allowed to take in order to return a position. The default value is Infinity, meaning
     * that getCurrentPosition() won't return until the position is available.
     */
-  var timeout: Int = js.native
+  var timeout: js.UndefOr[Int] = js.undefined
 
   /** The PositionOptions.maximumAge property is a positive long value indicating the maximum age in milliseconds of a
     * possible cached position that is acceptable to return. If set to 0, it means that the device cannot use a cached
     * position and must attempt to retrieve the real current position. If set to Infinity the device must return a
     * cached position regardless of its age.
     */
-  var maximumAge: Int = js.native
+  var maximumAge: js.UndefOr[Int] = js.undefined
 }