diff --git a/ghcjs-dom.cabal b/ghcjs-dom.cabal
--- a/ghcjs-dom.cabal
+++ b/ghcjs-dom.cabal
@@ -1,6 +1,6 @@
+cabal-version: 3.6
 name: ghcjs-dom
-version: 0.9.5.0
-cabal-version: >=1.24
+version: 0.9.9.0
 build-type: Simple
 license: MIT
 license-file: LICENSE
@@ -34,9 +34,9 @@
 
 library
     build-depends: base <5,
-                   containers >=0.5.7.1 && <0.7,
-                   transformers >=0.2 && <0.6,
-                   text >= 0.11.0.6 && < 1.3
+                   containers >=0.5.7.1 && <0.8,
+                   transformers >=0.2 && <0.7,
+                   text >= 0.11.0.6 && < 2.2
 
     default-language: Haskell2010
 
@@ -50,12 +50,16 @@
     if flag(debug)
         cpp-options: -DGHCJS_DOM_DEBUG
 
-    if (impl(ghcjs -any) && flag(jsffi))
+    if flag(jsffi) && (impl(ghcjs <9) || (impl(ghc >=9.6.4) && arch(javascript)))
+      if impl(ghcjs <9)
         build-depends:
-            ghcjs-dom-jsffi ==0.9.5.0
+            ghcjs-dom-jsffi ==0.9.9.0
+      else
+        build-depends:
+            ghcjs-dom-javascript ==0.9.9.0
     else
         build-depends:
-            ghcjs-dom-jsaddle ==0.9.5.0
+            ghcjs-dom-jsaddle ==0.9.9.0
 
     reexported-modules: GHCJS.DOM,
                         GHCJS.DOM.Types,
diff --git a/src/GHCJS/DOM/Document.hs b/src/GHCJS/DOM/Document.hs
--- a/src/GHCJS/DOM/Document.hs
+++ b/src/GHCJS/DOM/Document.hs
@@ -23,13 +23,23 @@
 import GHCJS.DOM.Types (Element(..), MonadDOM, ToJSString, JSString)
 import GHCJS.DOM.Debug.Internal (cacheStack)
 import GHCJS.DOM.Element (setAttribute, getAttribute)
-#ifdef MIN_VERSION_ghcjs_dom_jsffi
+#ifdef  MIN_VERSION_ghcjs_dom_javascript
+import qualified "ghcjs-dom-javascript" GHCJS.DOM.Document as Raw (createElement, createElement_, createElementNS, createElementNS_)
+import "ghcjs-dom-javascript" GHCJS.DOM.Document as Export hiding (createElement, createElement_, createElementNS, createElementNS_)
+#else
+#ifdef  MIN_VERSION_ghcjs_dom_jsffi
 import qualified "ghcjs-dom-jsffi" GHCJS.DOM.Document as Raw (createElement, createElement_, createElementNS, createElementNS_)
 import "ghcjs-dom-jsffi" GHCJS.DOM.Document as Export hiding (createElement, createElement_, createElementNS, createElementNS_)
 #else
+#if __GLASGOW_HASKELL__ >= 900
+import qualified "ghcjs-dom-jsaddle" GHCJS.DOM.Document as Raw (createElement, createElement_, createElementNS, createElementNS_)
+import "ghcjs-dom-jsaddle" GHCJS.DOM.Document as Export hiding (createElement, createElement_, createElementNS, createElementNS_)
+#else
 import qualified "jsaddle-dom" GHCJS.DOM.Document as Raw (createElement, createElement_, createElementNS, createElementNS_)
 import "jsaddle-dom" GHCJS.DOM.Document as Export hiding (createElement, createElement_, createElementNS, createElementNS_)
 #endif
+#endif
+#endif
 
 
 createElement
@@ -71,12 +81,22 @@
 
 #else
 
+#ifdef MIN_VERSION_ghcjs_dom_javascript
+import "ghcjs-dom-javascript" GHCJS.DOM.Document (createElement, createElement_, createElementNS, createElementNS_)
+import "ghcjs-dom-javascript" GHCJS.DOM.Document as Export hiding (createElement, createElement_, createElementNS, createElementNS_)
+#else
 #ifdef MIN_VERSION_ghcjs_dom_jsffi
 import "ghcjs-dom-jsffi" GHCJS.DOM.Document (createElement, createElement_, createElementNS, createElementNS_)
 import "ghcjs-dom-jsffi" GHCJS.DOM.Document as Export hiding (createElement, createElement_, createElementNS, createElementNS_)
 #else
+#if __GLASGOW_HASKELL__ >= 900
+import "ghcjs-dom-jsaddle" GHCJS.DOM.Document (createElement, createElement_, createElementNS, createElementNS_)
+import "ghcjs-dom-jsaddle" GHCJS.DOM.Document as Export hiding (createElement, createElement_, createElementNS, createElementNS_)
+#else
 import "jsaddle-dom" GHCJS.DOM.Document (createElement, createElement_, createElementNS, createElementNS_)
 import "jsaddle-dom" GHCJS.DOM.Document as Export hiding (createElement, createElement_, createElementNS, createElementNS_)
+#endif
+#endif
 #endif
 
 #endif
