diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+# effectful-2.2.2.0 (2023-01-11)
+* Add `withSeqEffToIO` and `withConcEffToIO` to `Effectful`.
+* Use strict `IORef` and `MVar` variants where appropriate.
+* Make `inject` work with effect stacks sharing a polymorphic suffix.
+
 # effectful-2.2.1.0 (2022-11-09)
 * Add `localSeqLift` and `localLift` to `Effectful.Dispatch.Dynamic`.
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -156,14 +156,22 @@
   features of the [`unliftio`](https://hackage.haskell.org/package/unliftio)
   package divided into appropriate effects.
 
-## Example
+## Examples
 
 For the examples see the *Introduction* sections of
 [`Effectful.Dispatch.Dynamic`](https://hackage.haskell.org/package/effectful-core/docs/Effectful-Dispatch-Dynamic.html)
 and
 [`Effectful.Dispatch.Static`](https://hackage.haskell.org/package/effectful-core/docs/Effectful-Dispatch-Static.html).
 
-## Resources
+## Acknowledgements
+
+To all contributors of existing effect libraries - thank you for putting the
+time and effort to explore the space. In particular, conversations in issue
+trackers of `cleff`, `eff`, `freer-simple`, `fused-effects` and `polysemy`
+repositories were invaluable in helping me discover and understand challenges in
+the space.
+
+### Resources
 
 Resources that inspired the rise of this library and had a lot of impact on its
 design.
diff --git a/bench/FileSizes.hs b/bench/FileSizes.hs
--- a/bench/FileSizes.hs
+++ b/bench/FileSizes.hs
@@ -54,7 +54,6 @@
 import qualified Polysemy as P
 import qualified Polysemy.Reader as P
 import qualified Polysemy.State as P
-import qualified Polysemy.Internal as P
 #endif
 
 tryGetFileSize :: FilePath -> IO (Maybe Int)
diff --git a/effectful.cabal b/effectful.cabal
--- a/effectful.cabal
+++ b/effectful.cabal
@@ -1,7 +1,7 @@
 cabal-version:      2.4
 build-type:         Simple
 name:               effectful
-version:            2.2.1.0
+version:            2.2.2.0
 license:            BSD-3-Clause
 license-file:       LICENSE
 category:           Control
@@ -22,7 +22,7 @@
   CHANGELOG.md
   README.md
 
-tested-with: GHC ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.4 || ==9.4.2
+tested-with: GHC ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.5 || ==9.4.4
 
 bug-reports:   https://github.com/haskell-effectful/effectful/issues
 source-repository head
@@ -67,7 +67,7 @@
                     , async               >= 2.2.2
                     , bytestring          >= 0.10
                     , directory           >= 1.3.2
-                    , effectful-core      >= 2.2.1.0   && < 2.2.2.0
+                    , effectful-core      >= 2.2.2.0   && < 2.2.3.0
                     , process             >= 1.6.9
 
                     , time                >= 1.9.2
@@ -164,7 +164,7 @@
           build-depends: fused-effects >= 1.1.2.0
 
        if impl(ghc < 9.5)
-          build-depends: polysemy >= 1.7.1.0
+          build-depends: polysemy >= 1.9.0.0
 
     build-depends:    base
                     , async
diff --git a/tests/EnvTests.hs b/tests/EnvTests.hs
--- a/tests/EnvTests.hs
+++ b/tests/EnvTests.hs
@@ -42,21 +42,52 @@
   U.assertEqual "exepcted result" 3 s
 
 test_injectEnv :: Assertion
-test_injectEnv = runEff $ runReader () $ do
+test_injectEnv = runEff . runReader () $ do
+  assertEnvSize "runEff" 2
   s <- execState @Int 0 $ inject action
-  U.assertEqual "expected result" 15 s
+  U.assertEqual "expected result" 63 s
   where
     action :: Eff [State Int, IOE, Reader (), State Int] ()
     action = do
-      modify @Int (+1)
-      raise $ do
-        modify @Int (+2)
-        inject innerAction
+      assertEnvSize "action" 4
+      injectId $ do
+        assertEnvSize "injectId" 4
+        modify @Int (+1)
+        raise $ do
+          assertEnvSize "action.raise" 3
+          modify @Int (+2)
+          inject innerAction
+        injectPure $
+          assertEnvSize "injectPure" 0
 
-    innerAction :: Eff [State Int, State Int, IOE] ()
+    innerAction :: Eff [State Int, Reader (), State Int] ()
     innerAction = do
+      assertEnvSize "innerAction" 3
       modify @Int (+4)
-      raise $ modify @Int (+8)
+      raise $ do
+        assertEnvSize "innerAction.raise" 2
+        modify @Int (+8)
+      hideReader $ do
+        assertEnvSize "hideReader" 2
+        modify @Int (+16)
+        onlyState $ do
+          assertEnvSize "onlyState" 1
+          modify @Int (+32)
+
+    hideReader :: Eff (State s : es) r -> Eff (State s : Reader r : es) r
+    hideReader = inject
+
+    onlyState :: Eff '[State s] a -> Eff (State s : es) a
+    onlyState = inject
+
+    injectId :: Eff es a -> Eff es a
+    injectId = inject
+
+    injectPure :: Eff '[] a -> Eff es a
+    injectPure = inject
+
+    assertEnvSize label n = unsafeEff $ \es -> do
+      assertEqual ("expected Env size (" ++ label ++ ")") n =<< sizeEnv es
 
 ----------------------------------------
 
