diff --git a/package.json b/package.json
index ed67f0548c913f44844d2fb7e79cd68607432e18..fe6019aaf61e2a34f8780253c94a85368b7db82b 100644
--- a/package.json
+++ b/package.json
@@ -95,6 +95,12 @@
 				"scopeName": "source.classicalb",
 				"path": "./syntaxes/classicalb.tmLanguage.json"
 			}
+		],
+		"snippets": [
+			{
+				"language": "classicalb",
+				"path": "./snippets/classicalb_snippets.json"
+			}
 		]
 	},
 	"scripts": {
diff --git a/snippets/classicalb_snippets.json b/snippets/classicalb_snippets.json
new file mode 100644
index 0000000000000000000000000000000000000000..d1ae517cbd97a0d322755132f4f88f3d4c07efcc
--- /dev/null
+++ b/snippets/classicalb_snippets.json
@@ -0,0 +1,132 @@
+{
+	".source.classicalb": {
+	  "MACHINE": {
+		"prefix": "MACHINE ...",
+		"body": "MACHINE ${1:MyMachine}\nCONSTANTS ${2:c}\nPROPERTIES ${3:c : 1..10 }\nVARIABLES ${4:x}\nINVARIANT ${5:x : 1..c}\nINITIALISATION ${6:x := 1}\nOPERATIONS \n  Inc = SELECT x < c THEN x := x + 1 END\nEND//MACHINE"
+	  },
+	  "package pragma": {
+		"prefix": "package",
+		"body": "/*@package ${1:foo.bar} */"
+	  },
+	  "import-package pragma": {
+		"prefix": "import-package",
+		"body": "/*@import-package ${1:foo.bazz} */"
+	  },
+	  "OPERATIONS Keyword": {
+		"prefix": "OPERATIONS",
+		"body": "OPERATIONS"
+	  },
+	  "DEFINITIONS Keyword": {
+		"prefix": "DEFINITIONS",
+		"body": "DEFINITIONS"
+	  },
+	  "VARIABLES": {
+		"prefix": "VARIABLES",
+		"body": "VARIABLES\n\t${1:x}\nINVARIANT\n\t${2:P}\nINITIALISATION\n\t${4:I}"
+	  },
+	  "CONSTANTS": {
+		"prefix": "CONSTANTS",
+		"body": "CONSTANTS\n\t${1:c}\nPROPERTIES\n\t${2:P}"
+	  },
+	  "ASSERTIONS": {
+		"prefix": "ASSERTIONS",
+		"body": "ASSERTIONS\n\t${1:a}"
+	  },
+	  "WHILE": {
+		"prefix": "while",
+		"body": "WHILE ${1:p}\nDO\n\t${2:G}\nINVARIANT ${3:Q}\nVARIANT ${4:E}\nEND"
+	  },
+	  "PRE Template": {
+		"prefix": "PRE",
+		"body": "PRE ${1:p}\nTHEN\n\t${2:G}\nEND"
+	  },
+	  "VAR": {
+		"prefix": "var",
+		"body": "VAR ${1:z}\nIN\n\t${2:G}\nEND"
+	  },
+	  "ANY": {
+		"prefix": "any",
+		"body": "ANY ${1:z}\nWHERE\n\t${2:P}\nTHEN\n\t${3:G}\nEND"
+	  },
+	  "LET": {
+		"prefix": "let",
+		"body": "LET ${1:x}\nBE ${2:E}\nIN\n\t${3:G}\nEND"
+	  },
+	  "IF": {
+		"prefix": "if",
+		"body": "IF ${1:p}\nTHEN\n\t${2:G}\nEND"
+	  },
+	  "IF ... ELSE": {
+		"prefix": "ifelse",
+		"body": "IF ${1:p}\nTHEN\n\t${2:G}\nELSE\n\t${2:H}\nEND"
+	  },
+	  "CHOICE": {
+		"prefix": "choice",
+		"body": "CHOICE\n\t${1:G}\nOR\n\t${2:H}\nEND"
+	  },
+	  "SELECT": {
+		"prefix": "select",
+		"body": "SELECT\n\t${1:p}\nTHEN\n\t${2:G}\nEND"
+	  },
+	  "SELECT ... ELSE": {
+		"prefix": "selectelse",
+		"body": "SELECT ${1:p}\nTHEN\n\t${2:G}\nWHEN ${3:q}\nTHEN\n\t${4:H}\nELSE\n\t${5:E}\nEND"
+	  },
+	  "CASE": {
+		"prefix": "choice",
+		"body": "CHOICE\n\t${1:G}\nOR\n\t${2:H}\nEND"
+	  },
+	  "Set Pref MININT": {
+		"prefix": "set minint",
+		"body": "SET_PREF_MININT == ${1:n};"
+	  },
+	  "Set Pref MAXINT": {
+		"prefix": "set minint",
+		"body": "SET_PREF_MININT == ${1:n};"
+	  },
+	  "B:INT": {
+		"prefix": "INT",
+		"body": "INT;"
+	  },
+	  "B:INTEGER": {
+		"prefix": "INTEGER",
+		"body": "INTEGER"
+	  },
+	  "B:NAT": {
+		"prefix": "NAT",
+		"body": "NAT"
+	  },
+	  "B:NATURAL": {
+		"prefix": "NATURAL",
+		"body": "NATURAL"
+	  },
+	  "B: -->": {
+		"prefix": "funcTotal",
+		"body": "-->"
+	  },
+	  "B: >->": {
+		"prefix": "funcTotalInjection",
+		"body": ">->"
+	  },
+	  "B: -->>": {
+		"prefix": "funcTotalSurjection",
+		"body": ">->"
+	  },
+	  "B: >->>": {
+		"prefix": "funcTotalBijection",
+		"body": ">->>"
+	  },
+	  "B: +->": {
+		"prefix": "funcPartial",
+		"body": "+->"
+	  },
+	  "B: >+>": {
+		"prefix": "funcPartialInjection",
+		"body": "+->>"
+	  },
+	  "B: >+>>": {
+		"prefix": "funcBijection",
+		"body": ">+>>"
+	  }
+	}
+  }
\ No newline at end of file