diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Revision history for language-Modula2
 
+## 0.1.5 -- 2025-11-09
+
+* Adjusted for major changes in `deep-transformations` version 0.4
+
 ## 0.1.4.2 -- 2025-01-01
 
 * Removed the template-haskell dependency
diff --git a/app/Parse.hs b/app/Parse.hs
--- a/app/Parse.hs
+++ b/app/Parse.hs
@@ -21,6 +21,7 @@
 import qualified Transformation.Rank2 as Rank2
 import qualified Transformation.Deep as Deep
 import qualified Transformation.Full as Full
+import Transformation.AG (Knit)
 import Transformation.AG.Generics (Auto)
 
 import Prettyprinter (Pretty(pretty))
@@ -100,7 +101,7 @@
       SomeVersion ISO -> process ISO
   where
      process :: (Abstract.Modula2 l, Abstract.Nameable l,
-                 Full.Functor (Auto ConstantFold) (Abstract.Expression l l)) => Version l -> IO ()
+                 Full.Functor (Knit (Auto ConstantFold)) (Abstract.Expression l l)) => Version l -> IO ()
      process version =
          case optsFile of
              Just file -> (if file == "-" then getContents else readFile file)
diff --git a/language-Modula2.cabal b/language-Modula2.cabal
--- a/language-Modula2.cabal
+++ b/language-Modula2.cabal
@@ -1,7 +1,7 @@
 cabal-version:       2.4
 
 name:                language-Modula2
-version:             0.1.4.2
+version:             0.1.5
 synopsis:            Parser, pretty-printer, and more for the Modula-2 programming language
 description:
    The library and the executable supports two versions of the Modula-2 programming language: as described by the
@@ -27,7 +27,7 @@
   build-depends:       base >= 4.16 && < 5, text < 3, containers >= 0.5 && < 1.0, filepath < 1.6, directory < 1.4,
                        parsers >= 0.12.7 && < 0.13, input-parsers >= 0.2.2 && < 0.4, prettyprinter >= 1.2.1 && < 1.8,
                        rank2classes >= 1.3 && < 1.6, grammatical-parsers >= 0.7 && < 0.8,
-                       deep-transformations >= 0.2 && < 0.4,
+                       deep-transformations >= 0.4 && < 0.5,
                        language-oberon >= 0.3 && < 0.4
   hs-source-dirs:      src
   default-language:    Haskell2010
diff --git a/src/Language/Modula2.hs b/src/Language/Modula2.hs
--- a/src/Language/Modula2.hs
+++ b/src/Language/Modula2.hs
@@ -1,5 +1,5 @@
-{-# Language FlexibleContexts, GADTs, OverloadedStrings,
-             ScopedTypeVariables, StandaloneDeriving, TypeFamilies, TypeOperators #-}
+{-# Language FlexibleInstances, FlexibleContexts, GADTs, MultiParamTypeClasses, OverloadedStrings,
+             ScopedTypeVariables, StandaloneDeriving, TypeFamilies, TypeOperators, UndecidableInstances #-}
 
 -- | The programming language Modula-2
 
@@ -19,8 +19,8 @@
 
 import qualified Language.Oberon.Reserializer as Reserializer
 
-import qualified Rank2 as Rank2 (snd)
-import Transformation.AG (Atts, Inherited, Synthesized)
+import qualified Rank2 as Rank2 (Functor, snd)
+import Transformation.AG (Atts, Inherited, Synthesized, Knit)
 import Transformation.AG.Generics (Auto)
 import qualified Transformation.Rank2 as Rank2
 import qualified Transformation.Full as Full
@@ -29,6 +29,7 @@
 import Control.Arrow (first)
 import Control.Monad (when)
 import Data.Functor.Compose (Compose(Compose, getCompose))
+import Data.Functor.Identity (Identity)
 import qualified Data.Map.Lazy as Map
 import Data.Map.Lazy (Map)
 import Data.Monoid ((<>))
@@ -44,6 +45,14 @@
 -- | Every node in a parsed and resolved AST is wrapped with this functor
 type Placed = (,) (Int, Grammar.ParsedLexemes, Int)
 
+instance (Rank2.Functor (g Grammar.NodeWrap), Deep.Functor (Rank2.Map Grammar.NodeWrap Placed) g) =>
+         Full.Functor (Rank2.Map Grammar.NodeWrap Placed) g where
+  (<$>) = Full.mapUpDefault
+
+instance (Rank2.Functor (g Placed), Deep.Functor (Rank2.Map Placed Identity) g) =>
+         Full.Functor (Rank2.Map Placed Identity) g where
+  (<$>) = Full.mapUpDefault
+
 -- | The modes of operation
 data Options = Options{
    -- | whether to fold the constants in the parsed module
@@ -77,7 +86,7 @@
 
 -- | Parse the given text of a single module and fold constants inside it.
 parseAndSimplifyModule :: (Abstract.Modula2 l, Abstract.Nameable l,
-                           Full.Functor (Auto ConstantFold) (Abstract.Expression l l))
+                           Full.Functor (Knit (Auto ConstantFold)) (Abstract.Expression l l))
                     => Version l -> Text -> ParseResults Text [Placed (Abstract.Module l l Placed Placed)]
 parseAndSimplifyModule Report source =
    (Reserializer.adjustPositions . (ConstantFolder.foldConstants (predefined Report) <$>) <$>)
diff --git a/src/Language/Modula2/ConstantFolder.hs b/src/Language/Modula2/ConstantFolder.hs
--- a/src/Language/Modula2/ConstantFolder.hs
+++ b/src/Language/Modula2/ConstantFolder.hs
@@ -8,7 +8,7 @@
 -- or attribute grammars.
 
 module Language.Modula2.ConstantFolder (foldConstants,
-                                        ConstantFold, Sem, Environment, InhCF,
+                                        ConstantFold, Environment, InhCF,
                                         SynCF(..), SynCFDesignator(..), SynCFExp(..), SynCFMod(..), SynCFMod') where
 
 import Control.Applicative (liftA2, ZipList(ZipList, getZipList))
@@ -45,7 +45,7 @@
 import qualified Language.Oberon.Abstract as Oberon.Abstract
 import qualified Language.Oberon.AST as Oberon.AST
 import qualified Language.Oberon.ConstantFolder as Oberon
-import Language.Oberon.ConstantFolder (ConstantFold(ConstantFold), Sem, Environment,
+import Language.Oberon.ConstantFolder (ConstantFold(ConstantFold), Environment,
                                        InhCF(..), InhCFRoot(..), SynCF(..), SynCF',
                                        SynCFRoot(..), SynCFMod(..), SynCFDesignator(..), SynCFMod', SynCFExp(..),
                                        anyWhitespace, folded', foldedExp, foldedExp')
@@ -57,27 +57,27 @@
 -- Note that the Modula-2 'AST.Language' satisfies all constraints in the function's type signature.
 foldConstants :: forall l. (Abstract.Modula2 l, Abstract.Nameable l,
                             Ord (Abstract.QualIdent l), Show (Abstract.QualIdent l),
-                            Atts (Inherited (Auto ConstantFold)) (Abstract.Block l l Sem Sem) ~ InhCF l,
-                            Atts (Inherited (Auto ConstantFold)) (Abstract.Definition l l Sem Sem) ~ InhCF l,
-                            Atts (Inherited (Auto ConstantFold)) (Abstract.Expression l l Sem Sem) ~ InhCF l,
-                            Atts (Synthesized (Auto ConstantFold)) (Abstract.Block l l Sem Sem)
+                            Atts (Inherited (Auto ConstantFold)) (Abstract.Block l l) ~ InhCF l,
+                            Atts (Inherited (Auto ConstantFold)) (Abstract.Definition l l) ~ InhCF l,
+                            Atts (Inherited (Auto ConstantFold)) (Abstract.Expression l l) ~ InhCF l,
+                            Atts (Synthesized (Auto ConstantFold)) (Abstract.Block l l)
                             ~ SynCFMod' l (Abstract.Block l l),
-                            Atts (Synthesized (Auto ConstantFold)) (Abstract.Block l l Placed Placed)
+                            Atts (Synthesized (Auto ConstantFold)) (Abstract.Block l l)
                             ~ SynCFMod' l (Abstract.Block l l),
-                            Atts (Synthesized (Auto ConstantFold)) (Abstract.Definition l l Sem Sem)
+                            Atts (Synthesized (Auto ConstantFold)) (Abstract.Definition l l)
                             ~ SynCFMod' l (Abstract.Definition l l),
-                            Atts (Synthesized (Auto ConstantFold)) (Abstract.Definition l l Placed Placed)
+                            Atts (Synthesized (Auto ConstantFold)) (Abstract.Definition l l)
                             ~ SynCFMod' l (Abstract.Definition l l),
-                            Atts (Synthesized (Auto ConstantFold)) (Abstract.Expression l l Sem Sem) ~ SynCFExp l l,
-                            Atts (Synthesized (Auto ConstantFold)) (Abstract.Expression l l Placed Placed)
+                            Atts (Synthesized (Auto ConstantFold)) (Abstract.Expression l l) ~ SynCFExp l l,
+                            Atts (Synthesized (Auto ConstantFold)) (Abstract.Expression l l)
                             ~ SynCFExp l l,
-                            Full.Functor (Auto ConstantFold) (Abstract.Block l l),
-                            Full.Functor (Auto ConstantFold) (Abstract.Definition l l),
-                            Full.Functor (Auto ConstantFold) (Abstract.Expression l l))
+                            Full.Functor (AG.Knit (Auto ConstantFold)) (Abstract.Block l l),
+                            Full.Functor (AG.Knit (Auto ConstantFold)) (Abstract.Definition l l),
+                            Full.Functor (AG.Knit (Auto ConstantFold)) (Abstract.Expression l l))
               => Environment l -> AST.Module l l Placed Placed -> AST.Module l l Placed Placed
 foldConstants predef aModule =
    snd $ getMapped
-   $ (syn (Transformation.apply (Auto ConstantFold) ((0, Trailing [], 0), Auto ConstantFold Deep.<$> aModule)
+   $ (syn ((AG.Knit (Auto ConstantFold) Full.<$> ((0, Trailing [], 0), aModule))
            `Rank2.apply`
            Inherited (InhCF predef undefined))).folded
 
@@ -97,33 +97,33 @@
    ~(Modules fs) <*> ~(Modules ms) = Modules (Map.intersectionWith Rank2.apply fs ms)
 
 -- * Boring attribute types
-type instance Atts (Synthesized ConstantFold) (Modules l _ _) = SynCFRoot (Modules l Placed Identity)
-type instance Atts (Synthesized ConstantFold) (AST.Module λ l _ _) = SynCFMod' l (AST.Module λ l)
-type instance Atts (Synthesized ConstantFold) (AST.Declaration full λ l _ _) = SynCFMod' l (AST.Declaration full λ l)
-type instance Atts (Synthesized ConstantFold) (AST.ProcedureHeading λ l _ _) = SynCF' (AST.ProcedureHeading λ l)
-type instance Atts (Synthesized ConstantFold) (AST.Type λ l _ _) = SynCF' (AST.Type λ l)
-type instance Atts (Synthesized ConstantFold) (AST.FieldList λ l _ _) = SynCF' (AST.FieldList λ l)
-type instance Atts (Synthesized ConstantFold) (AST.Expression λ l _ _) = SynCFExp λ l
-type instance Atts (Synthesized ConstantFold) (AST.Designator λ l _ _) = SynCFDesignator l
-type instance Atts (Synthesized ConstantFold) (AST.Statement λ l _ _) = SynCF' (AST.Statement λ l)
-type instance Atts (Synthesized ConstantFold) (AST.Variant λ l _ _) = SynCF' (AST.Variant λ l)
+type instance Atts (Synthesized ConstantFold) (Modules l) = SynCFRoot (Modules l Placed Identity)
+type instance Atts (Synthesized ConstantFold) (AST.Module λ l) = SynCFMod' l (AST.Module λ l)
+type instance Atts (Synthesized ConstantFold) (AST.Declaration full λ l) = SynCFMod' l (AST.Declaration full λ l)
+type instance Atts (Synthesized ConstantFold) (AST.ProcedureHeading λ l) = SynCF' (AST.ProcedureHeading λ l)
+type instance Atts (Synthesized ConstantFold) (AST.Type λ l) = SynCF' (AST.Type λ l)
+type instance Atts (Synthesized ConstantFold) (AST.FieldList λ l) = SynCF' (AST.FieldList λ l)
+type instance Atts (Synthesized ConstantFold) (AST.Expression λ l) = SynCFExp λ l
+type instance Atts (Synthesized ConstantFold) (AST.Designator λ l) = SynCFDesignator l
+type instance Atts (Synthesized ConstantFold) (AST.Statement λ l) = SynCF' (AST.Statement λ l)
+type instance Atts (Synthesized ConstantFold) (AST.Variant λ l) = SynCF' (AST.Variant λ l)
 
-type instance Atts (Inherited ConstantFold) (Modules l _ _) = InhCFRoot l
-type instance Atts (Inherited ConstantFold) (AST.Module λ l _ _) = InhCF l
-type instance Atts (Inherited ConstantFold) (AST.Declaration full λ l _ _) = InhCF l
-type instance Atts (Inherited ConstantFold) (AST.ProcedureHeading λ l _ _) = InhCF l
-type instance Atts (Inherited ConstantFold) (AST.Type λ l _ _) = InhCF l
-type instance Atts (Inherited ConstantFold) (AST.FieldList λ l _ _) = InhCF l
-type instance Atts (Inherited ConstantFold) (AST.Expression λ l _ _) = InhCF l
-type instance Atts (Inherited ConstantFold) (AST.Designator λ l _ _) = InhCF l
-type instance Atts (Inherited ConstantFold) (AST.Statement λ l _ _) = InhCF l
-type instance Atts (Inherited ConstantFold) (AST.Variant λ l _ _) = InhCF l
+type instance Atts (Inherited ConstantFold) (Modules l) = InhCFRoot l
+type instance Atts (Inherited ConstantFold) (AST.Module λ l) = InhCF l
+type instance Atts (Inherited ConstantFold) (AST.Declaration full λ l) = InhCF l
+type instance Atts (Inherited ConstantFold) (AST.ProcedureHeading λ l) = InhCF l
+type instance Atts (Inherited ConstantFold) (AST.Type λ l) = InhCF l
+type instance Atts (Inherited ConstantFold) (AST.FieldList λ l) = InhCF l
+type instance Atts (Inherited ConstantFold) (AST.Expression λ l) = InhCF l
+type instance Atts (Inherited ConstantFold) (AST.Designator λ l) = InhCF l
+type instance Atts (Inherited ConstantFold) (AST.Statement λ l) = InhCF l
+type instance Atts (Inherited ConstantFold) (AST.Variant λ l) = InhCF l
 
 type Placed = (,) (Int, ParsedLexemes, Int)
 
 -- * Rules
 
-instance Ord (Abstract.QualIdent l) => Attribution (Auto ConstantFold) (Modules l) Sem Placed where
+instance Ord (Abstract.QualIdent l) => AG.At (Auto ConstantFold) (Modules l) where
    attribution _ (_, Modules self) (Inherited inheritance, Modules ms) =
      (Synthesized SynCFRoot{modulesFolded= Modules (pure . snd . getMapped . (.folded) . syn <$> ms)},
       Modules (Map.mapWithKey moduleInheritance self))
@@ -132,13 +132,13 @@
 
 instance (Abstract.Modula2 l, Abstract.Nameable l, k ~ Abstract.QualIdent l, Ord k, Show k,
           v ~ Abstract.Value l l Placed Placed,
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.Block l l Sem Sem) ~ SynCFMod' l (Abstract.Block l l),
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.Definition l l Sem Sem)
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.Block l l) ~ SynCFMod' l (Abstract.Block l l),
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.Definition l l)
           ~ SynCFMod' l (Abstract.Definition l l),
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.Definition l l Placed Placed)
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.Definition l l)
           ~ SynCFMod' l (Abstract.Definition l l),
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.Expression l l Sem Sem) ~ SynCFExp l l) =>
-         SynthesizedField "moduleEnv" (Map k (Maybe v)) (Auto ConstantFold) (AST.Module l l) Sem Placed where
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.Expression l l) ~ SynCFExp l l) =>
+         SynthesizedField "moduleEnv" (Map k (Maybe v)) (Auto ConstantFold) (AST.Module l l) where
    synthesizedField _ _ (_, mod) inheritance mod' =
       case (mod, mod') of
         (AST.DefinitionModule{}, AST.DefinitionModule _ _ _ definitions) -> foldMap (moduleEnv . syn) definitions
@@ -146,16 +146,16 @@
 
 instance (Abstract.Modula2 l, Abstract.Nameable l, k ~ Abstract.QualIdent l, Ord k, v ~ Abstract.Value l l Placed Placed,
           Abstract.Export l ~ AST.Export l, Abstract.Value l ~ AST.Value l,
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.Declaration l l Sem Sem)
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.Declaration l l)
           ~ SynCFMod' l (Abstract.Declaration l l),
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.Type l l Sem Sem) ~ SynCF' (Abstract.Type l l),
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.ProcedureHeading l l Sem Sem)
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.Type l l) ~ SynCF' (Abstract.Type l l),
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.ProcedureHeading l l)
           ~ SynCF' (Abstract.ProcedureHeading l l),
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.FormalParameters l l Sem Sem)
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.FormalParameters l l)
           ~ SynCF' (Abstract.FormalParameters l l),
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.Block l l Sem Sem) ~ SynCFMod' l (Abstract.Block l l),
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.ConstExpression l l Sem Sem) ~ SynCFExp l l) =>
-         SynthesizedField "moduleEnv" (Map k (Maybe v)) (Auto ConstantFold) (AST.Declaration full l l) Sem Placed where
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.Block l l) ~ SynCFMod' l (Abstract.Block l l),
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.ConstExpression l l) ~ SynCFExp l l) =>
+         SynthesizedField "moduleEnv" (Map k (Maybe v)) (Auto ConstantFold) (AST.Declaration full l l) where
    synthesizedField _ _ (_, AST.ConstantDeclaration namedef _) _ (AST.ConstantDeclaration _ expression) =
       Map.singleton (Abstract.nonQualIdent $ Abstract.getIdentDefName namedef)
                     ((snd <$>) . foldedValue $ syn expression)
@@ -178,10 +178,10 @@
           Abstract.Value l l ~ AST.Value l l,
           λ ~ AST.Language,
           Pretty (AST.Value l l Identity Identity),
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.Expression l l Sem Sem) ~ SynCFExp l l,
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.Element l l Sem Sem) ~ SynCF' (AST.Element l l),
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.Designator l l Sem Sem) ~ SynCFDesignator l) =>
-         Synthesizer (Auto ConstantFold) (AST.Expression λ l) Sem Placed where
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.Expression l l) ~ SynCFExp l l,
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.Element l l) ~ SynCF' (AST.Element l l),
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.Designator l l) ~ SynCFDesignator l) =>
+         Synthesizer (Auto ConstantFold) (AST.Expression λ l) where
    synthesis _ (pos, AST.Set t _elements) _ (AST.Set _t elements) =
       SynCFExp{folded= Mapped (pos, Abstract.set t (getMapped . folded' . syn <$> getZipList elements)),
                foldedValue= Nothing}
@@ -231,10 +231,10 @@
 minSet = 0
 
 instance (Abstract.Modula2 l, Ord (Abstract.QualIdent l), v ~ Abstract.Value l l Placed Placed,
-          Atts (Inherited (Auto ConstantFold)) (Abstract.Expression l l Sem Sem) ~ InhCF l,
-          Atts (Inherited (Auto ConstantFold)) (Abstract.Designator l l Sem Sem) ~ InhCF l,
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.Expression l l Sem Sem) ~ SynCFExp λ l,
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.Designator l l Sem Sem) ~ SynCFDesignator l) =>
-         SynthesizedField "designatorValue" (Maybe (Placed v)) (Auto ConstantFold) (AST.Designator l l) Sem Placed where
+          Atts (Inherited (Auto ConstantFold)) (Abstract.Expression l l) ~ InhCF l,
+          Atts (Inherited (Auto ConstantFold)) (Abstract.Designator l l) ~ InhCF l,
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.Expression l l) ~ SynCFExp λ l,
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.Designator l l) ~ SynCFDesignator l) =>
+         SynthesizedField "designatorValue" (Maybe (Placed v)) (Auto ConstantFold) (AST.Designator l l) where
    synthesizedField _ _ (pos, AST.Variable q) inheritance _ = (,) pos <$> join (Map.lookup q $ env inheritance)
    synthesizedField _ _ _ _ _ = Nothing
diff --git a/src/Language/Modula2/ISO/ConstantFolder.hs b/src/Language/Modula2/ISO/ConstantFolder.hs
--- a/src/Language/Modula2/ISO/ConstantFolder.hs
+++ b/src/Language/Modula2/ISO/ConstantFolder.hs
@@ -48,7 +48,7 @@
 import qualified Language.Oberon.Abstract as Oberon.Abstract
 import qualified Language.Oberon.AST as Oberon.AST
 import qualified Language.Oberon.ConstantFolder as Oberon.ConstantFolder
-import Language.Oberon.ConstantFolder (ConstantFold(ConstantFold), Placed, Sem, Environment,
+import Language.Oberon.ConstantFolder (ConstantFold(ConstantFold), Placed, Environment,
                                        InhCF(..), InhCFRoot(..), SynCF(..), SynCF',
                                        SynCFRoot(..), SynCFMod(..), SynCFMod', SynCFExp(..), SynCFDesignator(..),
                                        anyWhitespace, folded', foldedExp, foldedExp')
@@ -61,27 +61,27 @@
 -- Note that the ISO Modula-2 'AST.Language' satisfies all constraints in the function's type signature.
 foldConstants :: forall l. (Abstract.Modula2 l, Abstract.Nameable l,
                             Ord (Abstract.QualIdent l), Show (Abstract.QualIdent l),
-                            Atts (Inherited (Auto ConstantFold)) (Abstract.Block l l Sem Sem) ~ InhCF l,
-                            Atts (Inherited (Auto ConstantFold)) (Abstract.Definition l l Sem Sem) ~ InhCF l,
-                            Atts (Inherited (Auto ConstantFold)) (Abstract.Expression l l Sem Sem) ~ InhCF l,
-                            Atts (Synthesized (Auto ConstantFold)) (Abstract.Block l l Sem Sem)
+                            Atts (Inherited (Auto ConstantFold)) (Abstract.Block l l) ~ InhCF l,
+                            Atts (Inherited (Auto ConstantFold)) (Abstract.Definition l l) ~ InhCF l,
+                            Atts (Inherited (Auto ConstantFold)) (Abstract.Expression l l) ~ InhCF l,
+                            Atts (Synthesized (Auto ConstantFold)) (Abstract.Block l l)
                             ~ SynCFMod' l (Abstract.Block l l),
-                            Atts (Synthesized (Auto ConstantFold)) (Abstract.Block l l Placed Placed)
+                            Atts (Synthesized (Auto ConstantFold)) (Abstract.Block l l)
                             ~ SynCFMod' l (Abstract.Block l l),
-                            Atts (Synthesized (Auto ConstantFold)) (Abstract.Definition l l Sem Sem)
+                            Atts (Synthesized (Auto ConstantFold)) (Abstract.Definition l l)
                             ~ SynCFMod' l (Abstract.Definition l l),
-                            Atts (Synthesized (Auto ConstantFold)) (Abstract.Definition l l Placed Placed)
+                            Atts (Synthesized (Auto ConstantFold)) (Abstract.Definition l l)
                             ~ SynCFMod' l (Abstract.Definition l l),
-                            Atts (Synthesized (Auto ConstantFold)) (Abstract.Expression l l Sem Sem) ~ SynCFExp l l,
-                            Atts (Synthesized (Auto ConstantFold)) (Abstract.Expression l l Placed Placed)
+                            Atts (Synthesized (Auto ConstantFold)) (Abstract.Expression l l) ~ SynCFExp l l,
+                            Atts (Synthesized (Auto ConstantFold)) (Abstract.Expression l l)
                             ~ SynCFExp l l,
-                            Full.Functor (Auto ConstantFold) (Abstract.Block l l),
-                            Full.Functor (Auto ConstantFold) (Abstract.Definition l l),
-                            Full.Functor (Auto ConstantFold) (Abstract.Expression l l))
+                            Full.Functor (AG.Knit (Auto ConstantFold)) (Abstract.Block l l),
+                            Full.Functor (AG.Knit (Auto ConstantFold)) (Abstract.Definition l l),
+                            Full.Functor (AG.Knit (Auto ConstantFold)) (Abstract.Expression l l))
               => Environment l -> AST.Module l l Placed Placed -> AST.Module l l Placed Placed
 foldConstants predef aModule =
    snd $ getMapped
-   $ (syn (Transformation.apply (Auto ConstantFold) ((0, Trailing [], 0), Auto ConstantFold Deep.<$> aModule)
+   $ (syn ((AG.Knit (Auto ConstantFold) Full.<$> ((0, Trailing [], 0), aModule))
            `Rank2.apply`
            Inherited (InhCF predef undefined))).folded
 
@@ -101,32 +101,32 @@
    ~(Modules fs) <*> ~(Modules ms) = Modules (Map.intersectionWith Rank2.apply fs ms)
 
 -- * Boring attribute types
-type instance Atts (Synthesized ConstantFold) (Modules l _ _) = SynCFRoot (Modules l Placed Identity)
-type instance Atts (Synthesized ConstantFold) (AST.Block λ l _ _) = SynCFMod' l (AST.Block l l)
-type instance Atts (Synthesized ConstantFold) (AST.Declaration full λ l _ _) = SynCFMod' l (AST.Declaration full l l)
-type instance Atts (Synthesized ConstantFold) (AST.AddressedIdent λ l _ _) = SynCF' (AST.AddressedIdent l l)
-type instance Atts (Synthesized ConstantFold) (AST.Type λ l _ _) = SynCF' (AST.Type l l)
-type instance Atts (Synthesized ConstantFold) (AST.Expression λ l _ _) = SynCFExp λ l
-type instance Atts (Synthesized ConstantFold) (AST.Item λ l _ _) = SynCF' (AST.Item l l)
-type instance Atts (Synthesized ConstantFold) (AST.Statement λ l _ _) = SynCF' (AST.Statement l l)
-type instance Atts (Synthesized ConstantFold) (AST.Variant λ l _ _) = SynCF' (AST.Variant l l)
+type instance Atts (Synthesized ConstantFold) (Modules l) = SynCFRoot (Modules l Placed Identity)
+type instance Atts (Synthesized ConstantFold) (AST.Block λ l) = SynCFMod' l (AST.Block l l)
+type instance Atts (Synthesized ConstantFold) (AST.Declaration full λ l) = SynCFMod' l (AST.Declaration full l l)
+type instance Atts (Synthesized ConstantFold) (AST.AddressedIdent λ l) = SynCF' (AST.AddressedIdent l l)
+type instance Atts (Synthesized ConstantFold) (AST.Type λ l) = SynCF' (AST.Type l l)
+type instance Atts (Synthesized ConstantFold) (AST.Expression λ l) = SynCFExp λ l
+type instance Atts (Synthesized ConstantFold) (AST.Item λ l) = SynCF' (AST.Item l l)
+type instance Atts (Synthesized ConstantFold) (AST.Statement λ l) = SynCF' (AST.Statement l l)
+type instance Atts (Synthesized ConstantFold) (AST.Variant λ l) = SynCF' (AST.Variant l l)
 
-type instance Atts (Inherited ConstantFold) (Modules l _ _) = InhCFRoot l
-type instance Atts (Inherited ConstantFold) (AST.Block λ l _ _) = InhCF l
-type instance Atts (Inherited ConstantFold) (AST.Declaration full λ l _ _) = InhCF l
-type instance Atts (Inherited ConstantFold) (AST.AddressedIdent λ l _ _) = InhCF l
-type instance Atts (Inherited ConstantFold) (AST.Type λ l _ _) = InhCF l
-type instance Atts (Inherited ConstantFold) (AST.Item λ l _ _) = InhCF l
-type instance Atts (Inherited ConstantFold) (AST.Expression λ l _ _) = InhCF l
-type instance Atts (Inherited ConstantFold) (AST.Statement λ l _ _) = InhCF l
-type instance Atts (Inherited ConstantFold) (AST.Variant λ l _ _) = InhCF l
+type instance Atts (Inherited ConstantFold) (Modules l) = InhCFRoot l
+type instance Atts (Inherited ConstantFold) (AST.Block λ l) = InhCF l
+type instance Atts (Inherited ConstantFold) (AST.Declaration full λ l) = InhCF l
+type instance Atts (Inherited ConstantFold) (AST.AddressedIdent λ l) = InhCF l
+type instance Atts (Inherited ConstantFold) (AST.Type λ l) = InhCF l
+type instance Atts (Inherited ConstantFold) (AST.Item λ l) = InhCF l
+type instance Atts (Inherited ConstantFold) (AST.Expression λ l) = InhCF l
+type instance Atts (Inherited ConstantFold) (AST.Statement λ l) = InhCF l
+type instance Atts (Inherited ConstantFold) (AST.Variant λ l) = InhCF l
 
 wrap :: a -> Mapped Placed a
 wrap = Mapped . (,) (0, Trailing [], 0)
 
 -- * Rules
 
-instance Ord (Abstract.QualIdent l) => Attribution (Auto ConstantFold) (Modules l) Sem Placed where
+instance Ord (Abstract.QualIdent l) => AG.At (Auto ConstantFold) (Modules l) where
    attribution _ (_, Modules self) (Inherited inheritance, Modules ms) =
      (Synthesized SynCFRoot{modulesFolded= Modules (pure . snd . getMapped . (.folded) . syn <$> ms)},
       Modules (Map.mapWithKey moduleInheritance self))
@@ -134,10 +134,10 @@
                                                         currentModule= name}
 
 instance (Abstract.Nameable l, Ord (Abstract.QualIdent l),
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.Declaration l l Sem Sem) ~ SynCFMod' l (Abstract.Declaration l l),
-          Atts (Inherited (Auto ConstantFold)) (Abstract.StatementSequence l l Sem Sem) ~ InhCF l,
-          Atts (Inherited (Auto ConstantFold)) (Abstract.Declaration l l Sem Sem) ~ InhCF l) =>
-         Bequether (Auto ConstantFold) (AST.Block l l) Sem Placed where
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.Declaration l l) ~ SynCFMod' l (Abstract.Declaration l l),
+          Atts (Inherited (Auto ConstantFold)) (Abstract.StatementSequence l l) ~ InhCF l,
+          Atts (Inherited (Auto ConstantFold)) (Abstract.Declaration l l) ~ InhCF l) =>
+         Bequether (Auto ConstantFold) (AST.Block l l) where
    bequest _ (pos, AST.Block _decls _stats) inheritance (AST.Block decls stats) =
       AST.Block (pure $ Inherited localEnv) (pure $ Inherited localEnv)
       where newEnv = Map.unions (moduleEnv . syn <$> decls)
@@ -148,25 +148,25 @@
             localEnv = InhCF (newEnv `Map.union` env inheritance) (currentModule inheritance)
 
 instance (Abstract.Nameable l, k ~ Abstract.QualIdent l, v ~ Abstract.Value l l Placed Placed, Ord k,
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.Declaration l l Sem Sem)
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.Declaration l l)
           ~ SynCFMod' l (Abstract.Declaration l l)) =>
-         SynthesizedField "moduleEnv" (Map k (Maybe v)) (Auto ConstantFold) (AST.Block l l) Sem Placed where
+         SynthesizedField "moduleEnv" (Map k (Maybe v)) (Auto ConstantFold) (AST.Block l l) where
    synthesizedField _ _ (pos, AST.Block{}) _ (AST.Block decls _stats) = Map.unions (moduleEnv . syn <$> decls)
    synthesizedField _ _ (pos, AST.ExceptionHandlingBlock{}) _ (AST.ExceptionHandlingBlock decls _stats _catch _always) =
       Map.unions (moduleEnv . syn <$> decls)
 
 instance (Abstract.Modula2 l, Abstract.Nameable l, k ~ Abstract.QualIdent l, Ord k, v ~ Abstract.Value l l Placed Placed,
           Abstract.Export l ~ AST.Export l, Abstract.Value l ~ AST.Value l,
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.Declaration l l Sem Sem)
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.Declaration l l)
           ~ SynCFMod' l (Abstract.Declaration l l),
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.Type l l Sem Sem) ~ SynCF' (Abstract.Type l l),
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.ProcedureHeading l l Sem Sem)
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.Type l l) ~ SynCF' (Abstract.Type l l),
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.ProcedureHeading l l)
           ~ SynCF' (Abstract.ProcedureHeading l l),
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.FormalParameters l l Sem Sem)
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.FormalParameters l l)
           ~ SynCF' (Abstract.FormalParameters l l),
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.Block l l Sem Sem) ~ SynCFMod' l (Abstract.Block l l),
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.ConstExpression l l Sem Sem) ~ SynCFExp l l) =>
-         SynthesizedField "moduleEnv" (Map k (Maybe v)) (Auto ConstantFold) (AST.Declaration full l l) Sem Placed where
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.Block l l) ~ SynCFMod' l (Abstract.Block l l),
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.ConstExpression l l) ~ SynCFExp l l) =>
+         SynthesizedField "moduleEnv" (Map k (Maybe v)) (Auto ConstantFold) (AST.Declaration full l l) where
    synthesizedField _ _ (pos, AST.ConstantDeclaration namedef _) _ (AST.ConstantDeclaration _ expression) =
       Map.singleton (Abstract.nonQualIdent $ Abstract.getIdentDefName namedef)
                     ((snd <$>) . foldedValue $ syn expression)
@@ -186,11 +186,11 @@
           Abstract.Expression λ ~ AST.Expression AST.Language, Abstract.QualIdent λ ~ AST.QualIdent AST.Language,
           InhCF l ~ InhCF λ,
           Pretty (AST.Value l l Identity Identity),
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.Expression l l Sem Sem) ~ SynCFExp l l,
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.Element l l Sem Sem) ~ SynCF' (Abstract.Element l l),
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.Item l l Sem Sem) ~ SynCF' (Abstract.Item l l),
-          Atts (Synthesized (Auto ConstantFold)) (Abstract.Designator l l Sem Sem) ~ SynCFDesignator l) =>
-         Synthesizer (Auto ConstantFold) (AST.Expression λ l) Sem Placed where
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.Expression l l) ~ SynCFExp l l,
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.Element l l) ~ SynCF' (Abstract.Element l l),
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.Item l l) ~ SynCF' (Abstract.Item l l),
+          Atts (Synthesized (Auto ConstantFold)) (Abstract.Designator l l) ~ SynCFDesignator l) =>
+         Synthesizer (Auto ConstantFold) (AST.Expression λ l) where
    synthesis _ (pos, _) _ (AST.Remainder left right) = 
       foldBinaryInteger pos Abstract.remainder div (syn left) (syn right)
    synthesis _ (pos, _) _ (AST.Array itemType dimensions) =
