diff --git a/backends/GenerateC.hs b/backends/GenerateC.hs
index d32fa5d..063d1f9 100644
--- a/backends/GenerateC.hs
+++ b/backends/GenerateC.hs
@@ -1488,7 +1488,6 @@ cgenProcess ops p = case p of
   A.Wait m wm e -> call genWait ops wm e
   A.Skip m -> tell ["/* skip */\n"]
   A.Stop m -> call genStop ops m "STOP process"
-  A.Main m -> tell ["/* main */\n"]
   A.Seq _ s -> call genSeq ops s
   A.If m s -> call genIf ops m s
   A.Case m e s -> call genCase ops m e s
diff --git a/common/AST.hs b/common/AST.hs
index 4440884..5e7fd0c 100644
--- a/common/AST.hs
+++ b/common/AST.hs
@@ -478,13 +478,6 @@ data Process =
   | Wait Meta WaitMode Expression
   | Skip Meta
   | Stop Meta
-  -- | The main process.
-  -- This is an artefact of how occam is structured. An occam program consists
-  -- of a series of scoped definitions; the last @PROC@ defined is run.
-  -- However, this means that a program as parsed must consist of a series of
-  -- 'Spec's with a magic value at the end to indicate where the program starts
-  -- -- and that's what this is for.
-  | Main Meta
   | Seq Meta Structured
   | If Meta Structured
   | Case Meta Expression Structured
diff --git a/transformations/PassTest.hs b/transformations/PassTest.hs
index be95604..56ef953 100644
--- a/transformations/PassTest.hs
+++ b/transformations/PassTest.hs
@@ -433,7 +433,7 @@ testInputCase = TestList
   where
     -- Various distinct simple processes:
     p0 = A.Skip emptyMeta
-    p1 = A.Main emptyMeta
+    p1 = A.Seq emptyMeta (A.Several emptyMeta [])
     p2 = A.Stop emptyMeta
     c = variable "c"
     x = variable "x"