diff --git a/Modules/syslogmodule.c b/Modules/syslogmodule.c
index 2ecf76d..db27101 100644
--- a/Modules/syslogmodule.c
+++ b/Modules/syslogmodule.c
@@ -44,52 +44,56 @@
 
 static PyObject * 
 syslog_openlog(self, args)
-     PyObject * self;
-     PyObject * args;
+	PyObject * self;
+	PyObject * args;
 {
-  long logopt = 0;
-  long facility = LOG_USER;
+	long logopt = 0;
+	long facility = LOG_USER;
 
-  static PyObject *ident_o = NULL;
+	static PyObject *ident_o = NULL;
 
-  Py_XDECREF(ident_o);
-  if (!PyArg_ParseTuple(args, "S|ll;ident string [, logoption [, facility]]",
-			&ident_o, &logopt, &facility)) {
-	return NULL;
-  }
-  Py_INCREF(ident_o); /* This is needed because openlog() does NOT make a copy
-		         and syslog() later uses it.. cannot trash it. */
+	Py_XDECREF(ident_o);
+	if (!PyArg_ParseTuple(args,
+			      "S|ll;ident string [, logoption [, facility]]",
+			      &ident_o, &logopt, &facility))
+		return NULL;
 
-  openlog(PyString_AsString(ident_o), logopt, facility);
+	/* This is needed because openlog() does NOT make a copy
+	 * and syslog() later uses it.. cannot trash it.
+	 */
+	Py_INCREF(ident_o);
 
-  Py_INCREF(Py_None);
-  return Py_None;
+	openlog(PyString_AsString(ident_o), logopt, facility);
+
+	Py_INCREF(Py_None);
+	return Py_None;
 }
 
+
 static PyObject * 
 syslog_syslog(self, args)
-     PyObject * self;
-     PyObject * args;
+	PyObject * self;
+	PyObject * args;
 {
-  char *message;
-  int   priority = LOG_INFO | LOG_USER;
+	char *message;
+	int   priority = LOG_INFO | LOG_USER;
 
-  if (!PyArg_ParseTuple(args, "is;[priority,] message string",
-			&priority, &message)) {
-    PyErr_Clear();
-    if (!PyArg_ParseTuple(args, "s;[priority,] message string", &message)) {
-      return NULL;
-    }
-  }
-  syslog(priority, "%s", message);
-  Py_INCREF(Py_None);
-  return Py_None;
+	if (!PyArg_ParseTuple(args, "is;[priority,] message string",
+			      &priority, &message)) {
+		PyErr_Clear();
+		if (!PyArg_ParseTuple(args, "s;[priority,] message string",
+				      &message))
+			return NULL;
+	}
+	syslog(priority, "%s", message);
+	Py_INCREF(Py_None);
+	return Py_None;
 }
 
 static PyObject * 
 syslog_closelog(self, args)
-     PyObject * self;
-     PyObject * args;
+	PyObject * self;
+	PyObject * args;
 {
 	if (!PyArg_ParseTuple(args, ""))
 		return NULL;
@@ -100,41 +104,41 @@
 
 static PyObject * 
 syslog_setlogmask(self, args)
-     PyObject * self;
-     PyObject * args;
+	PyObject * self;
+	PyObject * args;
 {
-  long maskpri, omaskpri;
+	long maskpri, omaskpri;
 
-  if (!PyArg_ParseTuple(args,"l;mask for priority",&maskpri))
-    return NULL;
-  omaskpri = setlogmask(maskpri);
-  return PyInt_FromLong(omaskpri);
+	if (!PyArg_ParseTuple(args, "l;mask for priority", &maskpri))
+		return NULL;
+	omaskpri = setlogmask(maskpri);
+	return PyInt_FromLong(omaskpri);
 }
 
 static PyObject * 
 syslog_log_mask(self, args)
-     PyObject * self;
-     PyObject * args;
+	PyObject * self;
+	PyObject * args;
 {
-  long mask;
-  long pri;
-  if (!PyArg_ParseTuple(args,"l",&pri))
-    return NULL;
-  mask = LOG_MASK(pri);
-  return PyInt_FromLong(mask);
+	long mask;
+	long pri;
+	if (!PyArg_ParseTuple(args, "l", &pri))
+		return NULL;
+	mask = LOG_MASK(pri);
+	return PyInt_FromLong(mask);
 }
 
 static PyObject * 
 syslog_log_upto(self, args)
-     PyObject * self;
-     PyObject * args;
+	PyObject * self;
+	PyObject * args;
 {
-  long mask;
-  long pri;
-  if (!PyArg_ParseTuple(args,"l",&pri))
-    return NULL;
-  mask = LOG_UPTO(pri);
-  return PyInt_FromLong(mask);
+	long mask;
+	long pri;
+	if (!PyArg_ParseTuple(args, "l", &pri))
+		return NULL;
+	mask = LOG_UPTO(pri);
+	return PyInt_FromLong(mask);
 }
 
 /* List of functions defined in the module */
@@ -151,8 +155,16 @@
 
 /* Initialization function for the module */
 
-#define DICT_SET_INT(d, s, x) \
-	PyDict_SetItemString(d, s, PyInt_FromLong((long) (x)))
+void ins(d, s, x)
+	PyObject *d;
+	char *s;
+	long x;
+{
+	PyObject *xl = PyInt_FromLong(x);
+	PyDict_SetItemString(d, s, xl);
+	Py_XDECREF(xl);
+}
+
 
 void
 initsyslog()
@@ -166,54 +178,54 @@
 	d = PyModule_GetDict(m);
 
 	/* Priorities */
-	DICT_SET_INT(d, "LOG_EMERG",	LOG_EMERG);
-	DICT_SET_INT(d, "LOG_ALERT",	LOG_ALERT);
-	DICT_SET_INT(d, "LOG_CRIT",	LOG_CRIT);
-	DICT_SET_INT(d, "LOG_ERR",	LOG_ERR);
-	DICT_SET_INT(d, "LOG_WARNING",	LOG_WARNING);
-	DICT_SET_INT(d, "LOG_NOTICE",	LOG_NOTICE);
-	DICT_SET_INT(d, "LOG_INFO",	LOG_INFO);
-	DICT_SET_INT(d, "LOG_DEBUG",	LOG_DEBUG);
+	ins(d, "LOG_EMERG",	LOG_EMERG);
+	ins(d, "LOG_ALERT",	LOG_ALERT);
+	ins(d, "LOG_CRIT",	LOG_CRIT);
+	ins(d, "LOG_ERR",	LOG_ERR);
+	ins(d, "LOG_WARNING",	LOG_WARNING);
+	ins(d, "LOG_NOTICE",	LOG_NOTICE);
+	ins(d, "LOG_INFO",	LOG_INFO);
+	ins(d, "LOG_DEBUG",	LOG_DEBUG);
 
 	/* openlog() option flags */
-	DICT_SET_INT(d, "LOG_PID",	LOG_PID);
-	DICT_SET_INT(d, "LOG_CONS",	LOG_CONS);
-	DICT_SET_INT(d, "LOG_NDELAY",	LOG_NDELAY);
-	DICT_SET_INT(d, "LOG_NOWAIT",	LOG_NOWAIT);
+	ins(d, "LOG_PID",	LOG_PID);
+	ins(d, "LOG_CONS",	LOG_CONS);
+	ins(d, "LOG_NDELAY",	LOG_NDELAY);
+	ins(d, "LOG_NOWAIT",	LOG_NOWAIT);
 #ifdef LOG_PERROR
-	DICT_SET_INT(d, "LOG_PERROR",	LOG_PERROR);
+	ins(d, "LOG_PERROR",	LOG_PERROR);
 #endif
 
 	/* Facilities */
-	DICT_SET_INT(d, "LOG_KERN",	LOG_KERN);
-	DICT_SET_INT(d, "LOG_USER",	LOG_USER);
-	DICT_SET_INT(d, "LOG_MAIL",	LOG_MAIL);
-	DICT_SET_INT(d, "LOG_DAEMON",	LOG_DAEMON);
-	DICT_SET_INT(d, "LOG_AUTH",	LOG_AUTH);
-	DICT_SET_INT(d, "LOG_LPR",	LOG_LPR);
+	ins(d, "LOG_KERN",	LOG_KERN);
+	ins(d, "LOG_USER",	LOG_USER);
+	ins(d, "LOG_MAIL",	LOG_MAIL);
+	ins(d, "LOG_DAEMON",	LOG_DAEMON);
+	ins(d, "LOG_AUTH",	LOG_AUTH);
+	ins(d, "LOG_LPR",	LOG_LPR);
 #ifdef LOG_NEWS
-	DICT_SET_INT(d, "LOG_NEWS",	LOG_NEWS);
+	ins(d, "LOG_NEWS",	LOG_NEWS);
 #else
-	DICT_SET_INT(d, "LOG_NEWS",	LOG_MAIL);
+	ins(d, "LOG_NEWS",	LOG_MAIL);
 #endif
 #ifdef LOG_UUCP
-	DICT_SET_INT(d, "LOG_UUCP",	LOG_UUCP);
+	ins(d, "LOG_UUCP",	LOG_UUCP);
 #else
-	DICT_SET_INT(d, "LOG_UUCP",	LOG_MAIL);
+	ins(d, "LOG_UUCP",	LOG_MAIL);
 #endif
 #ifdef LOG_CRON
-	DICT_SET_INT(d, "LOG_CRON",	LOG_CRON);
+	ins(d, "LOG_CRON",	LOG_CRON);
 #else
-	DICT_SET_INT(d, "LOG_CRON",	LOG_DAEMON);
+	ins(d, "LOG_CRON",	LOG_DAEMON);
 #endif
-	DICT_SET_INT(d, "LOG_LOCAL0",	LOG_LOCAL0);
-	DICT_SET_INT(d, "LOG_LOCAL1",	LOG_LOCAL1);
-	DICT_SET_INT(d, "LOG_LOCAL2",	LOG_LOCAL2);
-	DICT_SET_INT(d, "LOG_LOCAL3",	LOG_LOCAL3);
-	DICT_SET_INT(d, "LOG_LOCAL4",	LOG_LOCAL4);
-	DICT_SET_INT(d, "LOG_LOCAL5",	LOG_LOCAL5);
-	DICT_SET_INT(d, "LOG_LOCAL6",	LOG_LOCAL6);
-	DICT_SET_INT(d, "LOG_LOCAL7",	LOG_LOCAL7);
+	ins(d, "LOG_LOCAL0",	LOG_LOCAL0);
+	ins(d, "LOG_LOCAL1",	LOG_LOCAL1);
+	ins(d, "LOG_LOCAL2",	LOG_LOCAL2);
+	ins(d, "LOG_LOCAL3",	LOG_LOCAL3);
+	ins(d, "LOG_LOCAL4",	LOG_LOCAL4);
+	ins(d, "LOG_LOCAL5",	LOG_LOCAL5);
+	ins(d, "LOG_LOCAL6",	LOG_LOCAL6);
+	ins(d, "LOG_LOCAL7",	LOG_LOCAL7);
 
 	/* Check for errors */
 	if (PyErr_Occurred())
