diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Revision history for reflex-dom-core
 
+## 0.7.0.2
+
+* Require reflex >= 0.8.2.1 and switch to `commutative-semigroups`
+
 ## 0.7.0.1
 
 * Add a variant of `postForms` that allows the `XhrRequestConfig` to be specified.
diff --git a/reflex-dom-core.cabal b/reflex-dom-core.cabal
--- a/reflex-dom-core.cabal
+++ b/reflex-dom-core.cabal
@@ -1,6 +1,6 @@
 cabal-version: 1.24
 Name: reflex-dom-core
-Version: 0.7.0.1
+Version: 0.7.0.2
 Synopsis: Functional Reactive Web Apps with Reflex
 Description:
   Web applications without callbacks or side-effects.
@@ -67,13 +67,14 @@
 library
   hs-source-dirs: src
   build-depends:
-    aeson >= 0.8 && < 1.6,
+    aeson >= 0.8 && < 2.1,
     base >= 4.7 && < 4.15,
     bifunctors >= 4.2 && < 6,
     bimap >= 0.3 && < 0.5,
     blaze-builder >= 0.4.1 && < 0.5,
     bytestring == 0.10.*,
     case-insensitive < 1.3,
+    commutative-semigroups >=0.1 && <0.2,
     containers >= 0.6 && < 0.7,
     constraints >= 0.9 && < 0.13,
     contravariant >= 1.4 && < 1.6,
@@ -87,13 +88,13 @@
     jsaddle >= 0.9.0.0 && < 0.10,
     -- keycode-0.2 has a bug on firefox
     keycode >= 0.2.1 && < 0.3,
-    lens >= 4.7 && < 5,
+    lens >= 4.7 && < 5.1,
     monad-control >= 1.0.1 && < 1.1,
     mtl >= 2.1 && < 2.3,
     primitive >= 0.5 && < 0.8,
-    random >= 1.1 && < 1.2,
+    random >= 1.1 && < 1.3,
     ref-tf == 0.4.*,
-    reflex >= 0.8 && < 0.9,
+    reflex >= 0.8.2.1 && < 0.9,
     semigroups >= 0.16 && < 0.20,
     stm >= 2.4 && < 2.6,
     text == 1.2.*,
@@ -113,8 +114,8 @@
 
   if flag(split-these)
     build-depends:
-      semialign >= 1 && < 1.2,
-      these >= 1 && < 1.2
+      semialign >= 1 && < 1.3,
+      these >= 1 && < 1.3
   else
     build-depends:
       these >= 0.4 && < 0.9
diff --git a/src/Reflex/Dom/Builder/Class.hs b/src/Reflex/Dom/Builder/Class.hs
--- a/src/Reflex/Dom/Builder/Class.hs
+++ b/src/Reflex/Dom/Builder/Class.hs
@@ -58,6 +58,7 @@
 import Data.Maybe
 import Data.Proxy
 import Data.Semigroup
+import Data.Semigroup.Commutative
 import Data.String
 import Data.Text (Text)
 import Data.Type.Coercion
@@ -618,7 +619,7 @@
   placeRawElement = lift . placeRawElement
   wrapRawElement e = lift . wrapRawElement e
 
-instance (DomBuilder t m, MonadFix m, MonadHold t m, Group q, Query q, Additive q, Eq q) => DomBuilder t (QueryT t q m) where
+instance (DomBuilder t m, MonadFix m, MonadHold t m, Group q, Query q, Commutative q, Eq q) => DomBuilder t (QueryT t q m) where
   type DomBuilderSpace (QueryT t q m) = DomBuilderSpace m
   textNode = liftTextNode
   commentNode = liftCommentNode
diff --git a/src/Reflex/Dom/Prerender.hs b/src/Reflex/Dom/Prerender.hs
--- a/src/Reflex/Dom/Prerender.hs
+++ b/src/Reflex/Dom/Prerender.hs
@@ -27,6 +27,7 @@
 import Control.Monad.Ref (MonadRef(..), MonadAtomicRef(..))
 import Data.IORef (IORef, newIORef)
 import Data.Semigroup (Semigroup)
+import Data.Semigroup.Commutative
 import Data.Text (Text)
 import Data.Void
 import Foreign.JavaScript.TH
@@ -246,7 +247,7 @@
     responses <- fmap (fmapCheap unMultiEntry) $ requesting' $ fmapCheap multiEntry $ switchPromptlyDyn requestsDyn
     return result
 
-instance (Prerender t m, Monad m, Reflex t, MonadFix m, Group q, Additive q, Query q, Eq q) => Prerender t (QueryT t q m) where
+instance (Prerender t m, Monad m, Reflex t, MonadFix m, Group q, Commutative q, Query q, Eq q) => Prerender t (QueryT t q m) where
   type Client (QueryT t q m) = QueryT t q (Client m)
   prerender server client = mdo
     result <- queryDyn query
diff --git a/src/Reflex/Dom/WebSocket/Query.hs b/src/Reflex/Dom/WebSocket/Query.hs
--- a/src/Reflex/Dom/WebSocket/Query.hs
+++ b/src/Reflex/Dom/WebSocket/Query.hs
@@ -4,6 +4,7 @@
 
 import Data.Default
 import Control.Monad.Fix
+import Data.Semigroup.Commutative
 import Data.Text (Text)
 import Data.Aeson
 import Reflex
@@ -11,7 +12,7 @@
 import Data.Maybe
 import Language.Javascript.JSaddle.Types (MonadJSM)
 
-runWebSocketQuery :: (MonadJSM m, MonadJSM (Performable m), PostBuild t m, TriggerEvent t m, PerformEvent t m, MonadHold t m, Reflex t, ToJSON q, MonadFix m, Query q, FromJSON (QueryResult q), Additive q, Group q, Eq q)
+runWebSocketQuery :: (MonadJSM m, MonadJSM (Performable m), PostBuild t m, TriggerEvent t m, PerformEvent t m, MonadHold t m, Reflex t, ToJSON q, MonadFix m, Query q, FromJSON (QueryResult q), Commutative q, Group q, Eq q)
                   => QueryT t q m a
                   -> Text -- ^ WebSocket url
                   -> m a
@@ -22,7 +23,7 @@
       let updatedRequest = leftmost [updated request, tag (current request) postBuild]
   return a
 
-cropQueryT :: (Reflex t, MonadHold t m, MonadFix m, Query q, Additive q, Group q, Eq q)
+cropQueryT :: (Reflex t, MonadHold t m, MonadFix m, Query q, Commutative q, Group q, Eq q)
            => QueryT t q m a
            -> Event t (QueryResult q)
            -> m (a, Dynamic t q)
diff --git a/test/hlint.hs b/test/hlint.hs
--- a/test/hlint.hs
+++ b/test/hlint.hs
@@ -21,6 +21,7 @@
     , "--ignore=Use <$>"
     , "--ignore=Reduce duplication" --TODO: Re-enable this test
     , "--ignore=Use list comprehension"
+    , "--ignore=Evaluate"
     , "--cpp-define=USE_TEMPLATE_HASKELL"
     ]
   if null ideas then exitSuccess else exitFailure
