diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,8 @@
+2022-03-07
+        * Version bump (3.8). (#298)
+        * Hide internal modules deprecated in Copilot 3.5. (#289)
+        * Mark package as uncurated to avoid modification. (#288)
+
 2022-01-07
         * Version bump (3.7). (#287)
         * Guard against empty specs. (#274)
diff --git a/copilot-c99.cabal b/copilot-c99.cabal
--- a/copilot-c99.cabal
+++ b/copilot-c99.cabal
@@ -1,6 +1,6 @@
 cabal-version             : >= 1.10
 name                      : copilot-c99
-version                   : 3.7
+version                   : 3.8
 synopsis                  : A compiler for Copilot targeting C99.
 description               :
   This package is a back-end from Copilot to C.
@@ -27,6 +27,8 @@
                           , Alwyn Goodloe
                           , Ivan Perez
 
+x-curation: uncurated
+
 source-repository head
     type:       git
     location:   git://github.com/Copilot-Language/copilot.git
@@ -48,18 +50,16 @@
                           , mtl                 >= 2.2 && < 2.3
                           , pretty              >= 1.1 && < 1.2
 
-                          , copilot-core        >= 3.7   && < 3.8
+                          , copilot-core        >= 3.8   && < 3.9
                           , language-c99        >= 0.1.1 && < 0.2
                           , language-c99-util   >= 0.1.1 && < 0.2
                           , language-c99-simple >= 0.1.1 && < 0.2
 
   exposed-modules         : Copilot.Compile.C99
-                          , Copilot.Compile.C99.Translate
-                          , Copilot.Compile.C99.Util
-                          , Copilot.Compile.C99.CodeGen
-                          , Copilot.Compile.C99.External
-                          , Copilot.Compile.C99.Compile
-                          , Copilot.Compile.C99.Settings
 
-  other-modules          : Copilot.Compile.C99.Compile.Internal
-                         , Copilot.Compile.C99.Settings.Internal
+  other-modules          : Copilot.Compile.C99.Translate
+                         , Copilot.Compile.C99.Util
+                         , Copilot.Compile.C99.CodeGen
+                         , Copilot.Compile.C99.External
+                         , Copilot.Compile.C99.Compile
+                         , Copilot.Compile.C99.Settings
diff --git a/src/Copilot/Compile/C99.hs b/src/Copilot/Compile/C99.hs
--- a/src/Copilot/Compile/C99.hs
+++ b/src/Copilot/Compile/C99.hs
@@ -6,5 +6,5 @@
   , mkDefaultCSettings
   ) where
 
-import Copilot.Compile.C99.Compile.Internal
-import Copilot.Compile.C99.Settings.Internal
+import Copilot.Compile.C99.Compile
+import Copilot.Compile.C99.Settings
diff --git a/src/Copilot/Compile/C99/CodeGen.hs b/src/Copilot/Compile/C99/CodeGen.hs
--- a/src/Copilot/Compile/C99/CodeGen.hs
+++ b/src/Copilot/Compile/C99/CodeGen.hs
@@ -2,9 +2,7 @@
 {-# LANGUAGE ScopedTypeVariables #-}
 
 -- | High-level translation of Copilot Core into C99.
-module Copilot.Compile.C99.CodeGen
-  {-# DEPRECATED "This module will be hidden in future versions." #-}
-  where
+module Copilot.Compile.C99.CodeGen where
 
 import Control.Monad.State  (runState)
 import Data.List            (union, unzip4)
diff --git a/src/Copilot/Compile/C99/Compile.hs b/src/Copilot/Compile/C99/Compile.hs
--- a/src/Copilot/Compile/C99/Compile.hs
+++ b/src/Copilot/Compile/C99/Compile.hs
@@ -1,11 +1,159 @@
 -- | Compile Copilot specifications to C99 code.
 module Copilot.Compile.C99.Compile
-  {-# DEPRECATED "This module will be hidden in future versions." #-}
   ( compile
   , compileWith
-  , CSettings(..)
-  , mkDefaultCSettings
   ) where
 
-import Copilot.Compile.C99.Compile.Internal
-import Copilot.Compile.C99.Settings.Internal
+import Text.PrettyPrint     (render)
+import Data.List            (nub)
+import Data.Maybe           (catMaybes)
+import System.Directory     (createDirectoryIfMissing)
+import System.Exit          (exitFailure)
+import System.FilePath      ((</>))
+import System.IO            (hPutStrLn, stderr)
+
+import Language.C99.Pretty  (pretty)
+import qualified Language.C99.Simple as C
+
+import Copilot.Core
+import Copilot.Compile.C99.Util
+import Copilot.Compile.C99.External
+import Copilot.Compile.C99.Settings
+import Copilot.Compile.C99.Translate
+import Copilot.Compile.C99.CodeGen
+
+-- | Compile a specification to a .h and a .c file.
+--
+-- The first argument is the settings for the C code generated.
+--
+-- The second argument is used as prefix for the .h and .c files generated.
+compileWith :: CSettings -> String -> Spec -> IO ()
+compileWith cSettings prefix spec
+  | null (specTriggers spec)
+  = do hPutStrLn stderr $
+         "Copilot error: attempt at compiling empty specification.\n"
+         ++ "You must define at least one trigger to generate C monitors."
+       exitFailure
+
+  | otherwise
+  = do let cfile = render $ pretty $ C.translate $ compilec cSettings spec
+           hfile = render $ pretty $ C.translate $ compileh cSettings spec
+
+           -- TODO: find a nicer solution using annotated AST's
+           -- Should figure out exactly which headers are needed, based on what
+           -- is used.
+           cmacros = unlines [ "#include <stdint.h>"
+                             , "#include <stdbool.h>"
+                             , "#include <string.h>"
+                             , "#include <stdlib.h>"
+                             , "#include <math.h>"
+                             , ""
+                             , "#include \"" ++ prefix ++ ".h\""
+                             , ""
+                             ]
+
+       let dir = cSettingsOutputDirectory cSettings
+       createDirectoryIfMissing True dir
+       writeFile (dir </> prefix ++ ".c") $ cmacros ++ cfile
+       writeFile (dir </> prefix ++ ".h") hfile
+
+-- | Compile a specification to a .h and a .c file.
+--
+-- The first argument is used as prefix for the .h and .c files generated.
+compile :: String -> Spec -> IO ()
+compile = compileWith mkDefaultCSettings
+
+-- | Generate the .c file from a 'Spec'.
+--
+-- The generated C file has the following structure:
+--
+-- * Include .h file.
+-- * Declarations of global buffers and indices.
+-- * Generator functions for streams, guards and trigger arguments.
+-- * Declaration of the @step()@ function.
+compilec :: CSettings -> Spec -> C.TransUnit
+compilec cSettings spec = C.TransUnit declns funs where
+  streams  = specStreams spec
+  triggers = specTriggers spec
+  exts     = gatherexts streams triggers
+  exprs    = gatherexprs streams triggers
+
+  declns = mkstructdeclns exprs ++ mkexts exts ++ mkglobals streams
+  funs   = genfuns streams triggers ++ [mkstep cSettings streams triggers exts]
+
+  -- Write struct datatypes
+  mkstructdeclns :: [UExpr] -> [C.Decln]
+  mkstructdeclns es = catMaybes $ map mkdecln utypes where
+    mkdecln (UType ty) = case ty of
+      Struct x -> Just $ mkstructdecln ty
+      _        -> Nothing
+
+    utypes = nub $ concatMap (\(UExpr _ e) -> exprtypes e) es
+
+  -- Make declarations for copies of external variables.
+  mkexts :: [External] -> [C.Decln]
+  mkexts exts = map mkextcpydecln exts
+
+  -- Make buffer and index declarations for streams.
+  mkglobals :: [Stream] -> [C.Decln]
+  mkglobals streams = map buffdecln streams ++ map indexdecln streams where
+    buffdecln  (Stream sid buff _ ty) = mkbuffdecln  sid ty buff
+    indexdecln (Stream sid _    _ _ ) = mkindexdecln sid
+
+  -- Make generator functions, including trigger arguments.
+  genfuns :: [Stream] -> [Trigger] -> [C.FunDef]
+  genfuns streams triggers =  map accessdecln streams
+                           ++ map streamgen streams
+                           ++ concatMap triggergen triggers where
+
+    accessdecln :: Stream -> C.FunDef
+    accessdecln (Stream sid buff _ ty) = mkaccessdecln sid ty buff
+
+    streamgen :: Stream -> C.FunDef
+    streamgen (Stream sid _ expr ty) = genfun (generatorname sid) expr ty
+
+    triggergen :: Trigger -> [C.FunDef]
+    triggergen (Trigger name guard args) = guarddef : argdefs where
+      guarddef = genfun (guardname name) guard Bool
+      argdefs  = map arggen (zip (argnames name) args)
+
+      arggen :: (String, UExpr) -> C.FunDef
+      arggen (argname, UExpr ty expr) = genfun argname expr ty
+
+-- | Generate the .h file from a 'Spec'.
+compileh :: CSettings -> Spec -> C.TransUnit
+compileh cSettings spec = C.TransUnit declns [] where
+  streams  = specStreams spec
+  triggers = specTriggers spec
+  exts     = gatherexts streams triggers
+  exprs    = gatherexprs streams triggers
+
+  declns =  mkstructforwdeclns exprs
+         ++ mkexts exts
+         ++ extfundeclns triggers
+         ++ [stepdecln]
+
+  mkstructforwdeclns :: [UExpr] -> [C.Decln]
+  mkstructforwdeclns es = catMaybes $ map mkdecln utypes where
+    mkdecln (UType ty) = case ty of
+      Struct x -> Just $ mkstructforwdecln ty
+      _        -> Nothing
+
+    utypes = nub $ concatMap (\(UExpr _ e) -> exprtypes e) es
+
+  -- Make declarations for external variables.
+  mkexts :: [External] -> [C.Decln]
+  mkexts = map mkextdecln
+
+  extfundeclns :: [Trigger] -> [C.Decln]
+  extfundeclns triggers = map extfundecln triggers where
+    extfundecln :: Trigger -> C.Decln
+    extfundecln (Trigger name _ args) = C.FunDecln Nothing cty name params where
+        cty    = C.TypeSpec C.Void
+        params = map mkparam $ zip (argnames name) args
+        mkparam (name, UExpr ty _) = C.Param (transtype ty) name
+
+  -- Declaration for the step function.
+  stepdecln :: C.Decln
+  stepdecln = C.FunDecln Nothing (C.TypeSpec C.Void)
+                  (cSettingsStepFunctionName cSettings) []
diff --git a/src/Copilot/Compile/C99/Compile/Internal.hs b/src/Copilot/Compile/C99/Compile/Internal.hs
deleted file mode 100644
--- a/src/Copilot/Compile/C99/Compile/Internal.hs
+++ /dev/null
@@ -1,159 +0,0 @@
--- | Compile Copilot specifications to C99 code.
-module Copilot.Compile.C99.Compile.Internal
-  ( compile
-  , compileWith
-  ) where
-
-import Text.PrettyPrint     (render)
-import Data.List            (nub)
-import Data.Maybe           (catMaybes)
-import System.Directory     (createDirectoryIfMissing)
-import System.Exit          (exitFailure)
-import System.FilePath      ((</>))
-import System.IO            (hPutStrLn, stderr)
-
-import Language.C99.Pretty  (pretty)
-import qualified Language.C99.Simple as C
-
-import Copilot.Core
-import Copilot.Compile.C99.Util
-import Copilot.Compile.C99.External
-import Copilot.Compile.C99.Settings.Internal
-import Copilot.Compile.C99.Translate
-import Copilot.Compile.C99.CodeGen
-
--- | Compile a specification to a .h and a .c file.
---
--- The first argument is the settings for the C code generated.
---
--- The second argument is used as prefix for the .h and .c files generated.
-compileWith :: CSettings -> String -> Spec -> IO ()
-compileWith cSettings prefix spec
-  | null (specTriggers spec)
-  = do hPutStrLn stderr $
-         "Copilot error: attempt at compiling empty specification.\n"
-         ++ "You must define at least one trigger to generate C monitors."
-       exitFailure
-
-  | otherwise
-  = do let cfile = render $ pretty $ C.translate $ compilec cSettings spec
-           hfile = render $ pretty $ C.translate $ compileh cSettings spec
-
-           -- TODO: find a nicer solution using annotated AST's
-           -- Should figure out exactly which headers are needed, based on what
-           -- is used.
-           cmacros = unlines [ "#include <stdint.h>"
-                             , "#include <stdbool.h>"
-                             , "#include <string.h>"
-                             , "#include <stdlib.h>"
-                             , "#include <math.h>"
-                             , ""
-                             , "#include \"" ++ prefix ++ ".h\""
-                             , ""
-                             ]
-
-       let dir = cSettingsOutputDirectory cSettings
-       createDirectoryIfMissing True dir
-       writeFile (dir </> prefix ++ ".c") $ cmacros ++ cfile
-       writeFile (dir </> prefix ++ ".h") hfile
-
--- | Compile a specification to a .h and a .c file.
---
--- The first argument is used as prefix for the .h and .c files generated.
-compile :: String -> Spec -> IO ()
-compile = compileWith mkDefaultCSettings
-
--- | Generate the .c file from a 'Spec'.
---
--- The generated C file has the following structure:
---
--- * Include .h file.
--- * Declarations of global buffers and indices.
--- * Generator functions for streams, guards and trigger arguments.
--- * Declaration of the @step()@ function.
-compilec :: CSettings -> Spec -> C.TransUnit
-compilec cSettings spec = C.TransUnit declns funs where
-  streams  = specStreams spec
-  triggers = specTriggers spec
-  exts     = gatherexts streams triggers
-  exprs    = gatherexprs streams triggers
-
-  declns = mkstructdeclns exprs ++ mkexts exts ++ mkglobals streams
-  funs   = genfuns streams triggers ++ [mkstep cSettings streams triggers exts]
-
-  -- Write struct datatypes
-  mkstructdeclns :: [UExpr] -> [C.Decln]
-  mkstructdeclns es = catMaybes $ map mkdecln utypes where
-    mkdecln (UType ty) = case ty of
-      Struct x -> Just $ mkstructdecln ty
-      _        -> Nothing
-
-    utypes = nub $ concatMap (\(UExpr _ e) -> exprtypes e) es
-
-  -- Make declarations for copies of external variables.
-  mkexts :: [External] -> [C.Decln]
-  mkexts exts = map mkextcpydecln exts
-
-  -- Make buffer and index declarations for streams.
-  mkglobals :: [Stream] -> [C.Decln]
-  mkglobals streams = map buffdecln streams ++ map indexdecln streams where
-    buffdecln  (Stream sid buff _ ty) = mkbuffdecln  sid ty buff
-    indexdecln (Stream sid _    _ _ ) = mkindexdecln sid
-
-  -- Make generator functions, including trigger arguments.
-  genfuns :: [Stream] -> [Trigger] -> [C.FunDef]
-  genfuns streams triggers =  map accessdecln streams
-                           ++ map streamgen streams
-                           ++ concatMap triggergen triggers where
-
-    accessdecln :: Stream -> C.FunDef
-    accessdecln (Stream sid buff _ ty) = mkaccessdecln sid ty buff
-
-    streamgen :: Stream -> C.FunDef
-    streamgen (Stream sid _ expr ty) = genfun (generatorname sid) expr ty
-
-    triggergen :: Trigger -> [C.FunDef]
-    triggergen (Trigger name guard args) = guarddef : argdefs where
-      guarddef = genfun (guardname name) guard Bool
-      argdefs  = map arggen (zip (argnames name) args)
-
-      arggen :: (String, UExpr) -> C.FunDef
-      arggen (argname, UExpr ty expr) = genfun argname expr ty
-
--- | Generate the .h file from a 'Spec'.
-compileh :: CSettings -> Spec -> C.TransUnit
-compileh cSettings spec = C.TransUnit declns [] where
-  streams  = specStreams spec
-  triggers = specTriggers spec
-  exts     = gatherexts streams triggers
-  exprs    = gatherexprs streams triggers
-
-  declns =  mkstructforwdeclns exprs
-         ++ mkexts exts
-         ++ extfundeclns triggers
-         ++ [stepdecln]
-
-  mkstructforwdeclns :: [UExpr] -> [C.Decln]
-  mkstructforwdeclns es = catMaybes $ map mkdecln utypes where
-    mkdecln (UType ty) = case ty of
-      Struct x -> Just $ mkstructforwdecln ty
-      _        -> Nothing
-
-    utypes = nub $ concatMap (\(UExpr _ e) -> exprtypes e) es
-
-  -- Make declarations for external variables.
-  mkexts :: [External] -> [C.Decln]
-  mkexts = map mkextdecln
-
-  extfundeclns :: [Trigger] -> [C.Decln]
-  extfundeclns triggers = map extfundecln triggers where
-    extfundecln :: Trigger -> C.Decln
-    extfundecln (Trigger name _ args) = C.FunDecln Nothing cty name params where
-        cty    = C.TypeSpec C.Void
-        params = map mkparam $ zip (argnames name) args
-        mkparam (name, UExpr ty _) = C.Param (transtype ty) name
-
-  -- Declaration for the step function.
-  stepdecln :: C.Decln
-  stepdecln = C.FunDecln Nothing (C.TypeSpec C.Void)
-                  (cSettingsStepFunctionName cSettings) []
diff --git a/src/Copilot/Compile/C99/External.hs b/src/Copilot/Compile/C99/External.hs
--- a/src/Copilot/Compile/C99/External.hs
+++ b/src/Copilot/Compile/C99/External.hs
@@ -2,9 +2,7 @@
 
 -- | Represent information about externs needed in the generation of C99 code
 -- for stream declarations and triggers.
-module Copilot.Compile.C99.External
-  {-# DEPRECATED "This module will be hidden in future versions." #-}
-  where
+module Copilot.Compile.C99.External where
 
 import Data.List  (unionBy)
 
diff --git a/src/Copilot/Compile/C99/Settings.hs b/src/Copilot/Compile/C99/Settings.hs
--- a/src/Copilot/Compile/C99/Settings.hs
+++ b/src/Copilot/Compile/C99/Settings.hs
@@ -1,8 +1,12 @@
 -- | Settings used by the code generator to customize the code.
-module Copilot.Compile.C99.Settings
-  {-# DEPRECATED "This module will be hidden in future versions." #-}
-  (module Copilot.Compile.C99.Settings.Internal)
- where
+module Copilot.Compile.C99.Settings where
 
-import Copilot.Compile.C99.Settings.Internal
+-- | Settings used to customize the code generated.
+data CSettings = CSettings
+  { cSettingsStepFunctionName :: String
+  , cSettingsOutputDirectory  :: FilePath
+  }
 
+-- | Default settings with a step function called @step@.
+mkDefaultCSettings :: CSettings
+mkDefaultCSettings = CSettings "step" "."
diff --git a/src/Copilot/Compile/C99/Settings/Internal.hs b/src/Copilot/Compile/C99/Settings/Internal.hs
deleted file mode 100644
--- a/src/Copilot/Compile/C99/Settings/Internal.hs
+++ /dev/null
@@ -1,12 +0,0 @@
--- | Settings used by the code generator to customize the code.
-module Copilot.Compile.C99.Settings.Internal where
-
--- | Settings used to customize the code generated.
-data CSettings = CSettings
-  { cSettingsStepFunctionName :: String
-  , cSettingsOutputDirectory  :: FilePath
-  }
-
--- | Default settings with a step function called @step@.
-mkDefaultCSettings :: CSettings
-mkDefaultCSettings = CSettings "step" "."
diff --git a/src/Copilot/Compile/C99/Translate.hs b/src/Copilot/Compile/C99/Translate.hs
--- a/src/Copilot/Compile/C99/Translate.hs
+++ b/src/Copilot/Compile/C99/Translate.hs
@@ -1,9 +1,7 @@
 {-# LANGUAGE GADTs #-}
 
 -- | Translate Copilot Core expressions and operators to C99.
-module Copilot.Compile.C99.Translate
-  {-# DEPRECATED "This module will be hidden in future versions." #-}
-  where
+module Copilot.Compile.C99.Translate where
 
 import Control.Monad.State
 
diff --git a/src/Copilot/Compile/C99/Util.hs b/src/Copilot/Compile/C99/Util.hs
--- a/src/Copilot/Compile/C99/Util.hs
+++ b/src/Copilot/Compile/C99/Util.hs
@@ -1,7 +1,5 @@
 -- | Auxiliary helper functions to generate C99 code.
-module Copilot.Compile.C99.Util
-  {-# DEPRECATED "This module will be hidden in future versions." #-}
-  where
+module Copilot.Compile.C99.Util where
 
 import Control.Monad.State
 
