diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c
index 89649d2..ac1265f 100644
--- a/Modules/_cursesmodule.c
+++ b/Modules/_cursesmodule.c
@@ -1705,8 +1705,8 @@
 {
   short color,r,g,b;
 
-  PyCursesInitialised
-  PyCursesInitialisedColor
+  PyCursesInitialised;
+  PyCursesInitialisedColor;
 
   if (!PyArg_ParseTuple(args, "h:color_content", &color)) return NULL;
 
@@ -1724,8 +1724,8 @@
 {
   int n;
 
-  PyCursesInitialised
-  PyCursesInitialisedColor
+  PyCursesInitialised;
+  PyCursesInitialisedColor;
 
   if (!PyArg_ParseTuple(args, "i:color_pair", &n)) return NULL;
   return PyInt_FromLong((long) (n << 8));
@@ -1736,7 +1736,7 @@
 {
   int vis,erg;
 
-  PyCursesInitialised
+  PyCursesInitialised;
 
   if (!PyArg_ParseTuple(args, "i:curs_set", &vis)) return NULL;
 
@@ -1751,7 +1751,7 @@
 {
   int ms;
 
-  PyCursesInitialised
+  PyCursesInitialised;
 
   if (!PyArg_ParseTuple(args, "i:delay_output", &ms)) return NULL;
 
@@ -1763,7 +1763,7 @@
 {
   char ch;
 
-  PyCursesInitialised
+  PyCursesInitialised;
 
   ch = erasechar();
 
@@ -1776,7 +1776,7 @@
   int x = 0;
   int y = 0;
 
-  PyCursesInitialised
+  PyCursesInitialised;
 
   getsyx(y, x);
 
@@ -1790,7 +1790,7 @@
 	int rtn;
 	MEVENT event;
 
-	PyCursesInitialised
+	PyCursesInitialised;
 
 	rtn = getmouse( &event );
 	if (rtn == ERR) {
@@ -1808,7 +1808,7 @@
 {
 	MEVENT event;
 
-	PyCursesInitialised
+	PyCursesInitialised;
 	if (!PyArg_ParseTuple(args, "hiiil",
 			     &event.id, 
 			     &event.x, &event.y, &event.z,
@@ -1824,7 +1824,7 @@
 {
   WINDOW *win;
 
-  PyCursesInitialised
+  PyCursesInitialised;
 
   if (!PyFile_Check(temp)) {
     PyErr_SetString(PyExc_TypeError, "argument must be a file object");
@@ -1846,7 +1846,7 @@
 {
   unsigned char tenths;
 
-  PyCursesInitialised
+  PyCursesInitialised;
 
   if (!PyArg_ParseTuple(args, "b:halfdelay", &tenths)) return NULL;
 
@@ -1859,7 +1859,7 @@
 {
   int ch;
 
-  PyCursesInitialised
+  PyCursesInitialised;
 
   if (!PyArg_ParseTuple(args,"i",&ch)) return NULL;
 
@@ -1877,8 +1877,8 @@
 {
   short color, r, g, b;
 
-  PyCursesInitialised
-  PyCursesInitialisedColor
+  PyCursesInitialised;
+  PyCursesInitialisedColor;
 
   switch(PyTuple_Size(args)) {
   case 4:
@@ -1897,8 +1897,8 @@
 {
   short pair, f, b;
 
-  PyCursesInitialised
-  PyCursesInitialisedColor
+  PyCursesInitialised;
+  PyCursesInitialisedColor;
 
   if (PyTuple_Size(args) != 3) {
     PyErr_SetString(PyExc_TypeError, "init_pair requires 3 arguments");
@@ -2071,7 +2071,7 @@
 {
   int ch;
 
-  PyCursesInitialised
+  PyCursesInitialised;
 
   switch(PyTuple_Size(args)) {
   case 1:
@@ -2093,7 +2093,7 @@
   int columns;
   int result;
 
-  PyCursesInitialised
+  PyCursesInitialised;
 
   if (!PyArg_ParseTuple(args,"ii:is_term_resized", &lines, &columns))
     return NULL;
@@ -2115,7 +2115,7 @@
   const char *knp;
   int ch;
 
-  PyCursesInitialised
+  PyCursesInitialised;
 
   if (!PyArg_ParseTuple(args,"i",&ch)) return NULL;
 
@@ -2144,7 +2144,7 @@
 {
   int ch;
 
-  PyCursesInitialised
+  PyCursesInitialised;
 
   switch(PyTuple_Size(args)) {
   case 1:
@@ -2163,7 +2163,7 @@
 PyCurses_MouseInterval(PyObject *self, PyObject *args)
 {
 	int interval;
-	PyCursesInitialised 
+	PyCursesInitialised;
 
 	if (!PyArg_ParseTuple(args,"i;interval",&interval)) 
 		return NULL;
@@ -2176,7 +2176,7 @@
 	int newmask;
 	mmask_t oldmask, availmask;
 
-	PyCursesInitialised 
+	PyCursesInitialised;
 	if (!PyArg_ParseTuple(args,"i;mousemask",&newmask)) 
 		return NULL;
 	availmask = mousemask(newmask, &oldmask);
@@ -2189,7 +2189,7 @@
 {
     int ms;
 
-    PyCursesInitialised
+    PyCursesInitialised;
     if (!PyArg_ParseTuple(args, "i;ms", &ms)) return NULL;
 
     return Py_BuildValue("i", napms(ms));
@@ -2202,7 +2202,7 @@
   WINDOW *win;
   int nlines, ncols;
 
-  PyCursesInitialised 
+  PyCursesInitialised;
 
   if (!PyArg_ParseTuple(args,"ii;nlines,ncols",&nlines,&ncols)) return NULL;
 
@@ -2222,7 +2222,7 @@
   WINDOW *win;
   int nlines, ncols, begin_y=0, begin_x=0;
 
-  PyCursesInitialised
+  PyCursesInitialised;
 
   switch (PyTuple_Size(args)) {
   case 2:
@@ -2253,8 +2253,8 @@
 {
   short pair,f,b;
 
-  PyCursesInitialised
-  PyCursesInitialisedColor
+  PyCursesInitialised;
+  PyCursesInitialisedColor;
 
   switch(PyTuple_Size(args)) {
   case 1:
@@ -2279,8 +2279,8 @@
 {
   int n;
 
-  PyCursesInitialised
-  PyCursesInitialisedColor
+  PyCursesInitialised;
+  PyCursesInitialisedColor;
 
   switch(PyTuple_Size(args)) {
   case 1:
@@ -2309,7 +2309,7 @@
 {
   int flag = 0;
 
-  PyCursesInitialised
+  PyCursesInitialised;
 
   switch(PyTuple_Size(args)) {
   case 0:
@@ -2385,7 +2385,7 @@
   int columns;
   PyObject *result;
 
-  PyCursesInitialised
+  PyCursesInitialised;
 
   if (!PyArg_ParseTuple(args,"ii:resizeterm", &lines, &columns))
     return NULL;
@@ -2409,7 +2409,7 @@
 
   PyObject *result;
 
-  PyCursesInitialised
+  PyCursesInitialised;
 
   if (!PyArg_ParseTuple(args,"ii:resize_term", &lines, &columns))
     return NULL;
@@ -2428,7 +2428,7 @@
 {
   int y,x;
 
-  PyCursesInitialised
+  PyCursesInitialised;
 
   if (PyTuple_Size(args)!=2) {
     PyErr_SetString(PyExc_TypeError, "setsyx requires 2 arguments");
@@ -2449,7 +2449,7 @@
   int code;
   PyObject *c, *cp;
 
-  PyCursesInitialised
+  PyCursesInitialised;
 
   code = start_color();
   if (code != ERR) {
@@ -2541,7 +2541,7 @@
 {
   int fd;
 
-  PyCursesInitialised
+  PyCursesInitialised;
 
   if (!PyArg_ParseTuple(args,"i;fd",&fd)) return NULL;
 
@@ -2554,7 +2554,7 @@
   PyObject *temp;
   chtype ch;
 
-  PyCursesInitialised
+  PyCursesInitialised;
 
   if (!PyArg_ParseTuple(args,"O;ch or int",&temp)) return NULL;
 
@@ -2576,7 +2576,7 @@
   PyObject *temp;
   int ch;
 
-  PyCursesInitialised
+  PyCursesInitialised;
 
   if (!PyArg_ParseTuple(args,"O;ch or int",&temp)) return NULL;
 
@@ -2617,8 +2617,8 @@
 {
   int code;
 
-  PyCursesInitialised
-  PyCursesInitialisedColor
+  PyCursesInitialised;
+  PyCursesInitialisedColor;
 
   code = use_default_colors();
   if (code != ERR) {
