diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,5 @@
 # Revision history for changeset
 
-## 0.1.0.0 -- YYYY-mm-dd
+## 0.1.1
 
-* First version. Released on an unsuspecting world.
+* Add `RestrictKeys` and `WithoutKeys` changes
diff --git a/changeset-containers.cabal b/changeset-containers.cabal
--- a/changeset-containers.cabal
+++ b/changeset-containers.cabal
@@ -1,6 +1,6 @@
 cabal-version: 2.4
 name: changeset-containers
-version: 0.1.0.3
+version: 0.1.1
 synopsis: Stateful monad transformer based on monoidal actions
 description:
   A general state monad transformer with separate types for the state and the possible changes.
@@ -37,6 +37,8 @@
   default-extensions:
     BangPatterns
     DeriveFunctor
+    DeriveGeneric
+    DerivingStrategies
     FlexibleInstances
     FunctionalDependencies
     GADTs
@@ -45,6 +47,7 @@
     NamedFieldPuns
     RankNTypes
     ScopedTypeVariables
+    StrictData
     TupleSections
     TypeOperators
 
@@ -59,9 +62,9 @@
 
   build-depends:
     base >=4.12 && <4.22,
-    changeset ==0.1.0.3,
+    changeset ==0.1.1,
     containers >=0.6 && <0.8,
-    monoid-extras ^>=0.6,
+    monoid-extras ^>=0.7,
 
   hs-source-dirs: src
   default-language: Haskell2010
diff --git a/src/Data/Monoid/RightAction/IntMap.hs b/src/Data/Monoid/RightAction/IntMap.hs
--- a/src/Data/Monoid/RightAction/IntMap.hs
+++ b/src/Data/Monoid/RightAction/IntMap.hs
@@ -1,5 +1,8 @@
 module Data.Monoid.RightAction.IntMap where
 
+-- base
+import GHC.Generics (Generic)
+
 -- containers
 import Data.IntMap
 
@@ -9,11 +12,15 @@
 {- | Insert or delete an element in an 'IntMap'.
 
 To change an element in an 'IntMap', see the indexed changes in [@changeset-lens@](hackage.haskell.org/package/changeset-lens).
+
+The general purpose changes t'Control.Monad.Trans.Changeset.FilterableChange',
+t'Control.Monad.Trans.Changeset.FilterableChanges', t'Control.Monad.Trans.Changeset.FilterableWithIndexChanges',
+and t'Control.Monad.Trans.Changeset.AlignChanges' also apply to 'IntMap's.
 -}
 data IntMapChange a
   = Insert Int a
   | Delete Int
-  deriving (Show, Read, Eq, Ord, Functor)
+  deriving stock (Show, Read, Eq, Ord, Functor, Generic)
 
 instance RightAction (IntMapChange a) (IntMap a) where
   actRight m (Insert k a) = insert k a m
diff --git a/src/Data/Monoid/RightAction/IntSet.hs b/src/Data/Monoid/RightAction/IntSet.hs
--- a/src/Data/Monoid/RightAction/IntSet.hs
+++ b/src/Data/Monoid/RightAction/IntSet.hs
@@ -1,5 +1,8 @@
 module Data.Monoid.RightAction.IntSet where
 
+-- base
+import GHC.Generics (Generic)
+
 -- containers
 import Data.IntSet
 
@@ -10,7 +13,7 @@
 data IntSetChange
   = Insert Int
   | Delete Int
-  deriving (Show, Read, Eq, Ord)
+  deriving stock (Show, Read, Eq, Ord, Generic)
 
 instance RightAction IntSetChange IntSet where
   actRight s (Insert k) = insert k s
diff --git a/src/Data/Monoid/RightAction/Map.hs b/src/Data/Monoid/RightAction/Map.hs
--- a/src/Data/Monoid/RightAction/Map.hs
+++ b/src/Data/Monoid/RightAction/Map.hs
@@ -1,20 +1,34 @@
 module Data.Monoid.RightAction.Map where
 
+-- base
+import GHC.Generics (Generic)
+
 -- containers
 import Data.Map
+import Data.Set (Set)
 
 -- changeset
 import Data.Monoid.RightAction (RightAction (..))
 
-{- | Insert or delete an element in a 'Map'.
+{- | Insert or delete an element in a 'Map',
+or restrict or delete the keys.
 
-To change an element in an 'Map', see the indexed changes in [@changeset-lens@](hackage.haskell.org/package/changeset-lens).
+To change an element in an 'Map', see the indexed changes in [@changeset-lens@](hackage.haskell.org/package/changeset-lens),
+or t'Control.Monad.Trans.Changeset.ImapChange'.
+
+The general purpose changes t'Control.Monad.Trans.Changeset.FilterableChange',
+t'Control.Monad.Trans.Changeset.FilterableChanges', t'Control.Monad.Trans.Changeset.FilterableWithIndexChanges',
+and t'Control.Monad.Trans.Changeset.AlignChanges' also apply to 'Map's.
 -}
 data MapChange k a
   = Insert k a
   | Delete k
-  deriving (Show, Read, Eq, Ord, Functor)
+  | RestrictKeys (Set k)
+  | WithoutKeys (Set k)
+  deriving stock (Show, Read, Eq, Ord, Functor, Generic)
 
 instance (Ord k) => RightAction (MapChange k a) (Map k a) where
   actRight m (Insert k a) = insert k a m
   actRight m (Delete k) = delete k m
+  actRight m (RestrictKeys ks) = restrictKeys m ks
+  actRight m (WithoutKeys ks) = withoutKeys m ks
diff --git a/src/Data/Monoid/RightAction/Sequence.hs b/src/Data/Monoid/RightAction/Sequence.hs
--- a/src/Data/Monoid/RightAction/Sequence.hs
+++ b/src/Data/Monoid/RightAction/Sequence.hs
@@ -1,11 +1,21 @@
 module Data.Monoid.RightAction.Sequence where
 
-import Data.Monoid.RightAction (RightAction (..))
+-- base
+import GHC.Generics (Generic)
+
+-- containers
 import Data.Sequence
 
+-- changeset
+import Data.Monoid.RightAction (RightAction (..))
+
 {- | Insert or delete an element at either end of a 'Seq'.
 
 To change an element in a 'Seq', see the indexed changes in [@changeset-lens@](hackage.haskell.org/package/changeset-lens).
+
+The general purpose changes t'Control.Monad.Trans.Changeset.FilterableChange',
+t'Control.Monad.Trans.Changeset.FilterableChanges', t'Control.Monad.Trans.Changeset.FilterableWithIndexChanges',
+and t'Control.Monad.Trans.Changeset.AlignChanges' also apply to 'Seq'uences.
 -}
 data SeqChange a
   = -- | Prepend an element
@@ -16,7 +26,7 @@
     Uncons
   | -- | Drop an element from the right
     Unsnoc
-  deriving (Show, Read, Eq, Ord, Functor)
+  deriving stock (Show, Read, Eq, Ord, Functor, Generic)
 
 instance RightAction (SeqChange a) (Seq a) where
   actRight s (Cons a) = a <| s
diff --git a/src/Data/Monoid/RightAction/Set.hs b/src/Data/Monoid/RightAction/Set.hs
--- a/src/Data/Monoid/RightAction/Set.hs
+++ b/src/Data/Monoid/RightAction/Set.hs
@@ -1,17 +1,26 @@
 module Data.Monoid.RightAction.Set where
 
+-- base
+import GHC.Generics (Generic)
+
 -- containers
 import Data.Set
 
 -- changeset
 import Data.Monoid.RightAction (RightAction (..))
 
--- | Insert or delete an element in a 'Set'.
+-- | Insert or delete an element in a 'Set', or calculate the intersection, union, or difference with another set.
 data SetChange k
   = Insert k
   | Delete k
-  deriving (Show, Read, Eq, Ord)
+  | Intersection (Set k)
+  | Union (Set k)
+  | Difference (Set k)
+  deriving stock (Show, Read, Eq, Ord, Generic)
 
 instance (Ord k) => RightAction (SetChange k) (Set k) where
   actRight s (Insert k) = insert k s
   actRight s (Delete k) = delete k s
+  actRight s1 (Intersection s2) = intersection s1 s2
+  actRight s1 (Union s2) = s1 `union` s2
+  actRight s1 (Difference s2) = difference s1 s2
