diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c
index 6f79aa0..092f658 100644
--- a/Modules/_cursesmodule.c
+++ b/Modules/_cursesmodule.c
@@ -8,7 +8,8 @@
  *   Version 1.5b1, heavily extended for ncurses by Oliver Andrich:
  *   Copyright 1996,1997 by Oliver Andrich, Koblenz, Germany.
  *
- *   Tidied for Python 1.6, and currently maintained by AMK (amk1@bigfoot.com)
+ *   Tidied for Python 1.6, and currently maintained by
+ *   <akuchlin@mems-exchange.org>.
  *
  *   Permission is hereby granted, free of charge, to any person obtaining
  *   a copy of this source file to use, copy, modify, merge, or publish it
@@ -95,7 +96,7 @@
 
 /* Release Number */
 
-char *PyCursesVersion = "2.1";
+char *PyCursesVersion = "2.2";
 
 /* Includes */
 
@@ -388,7 +389,7 @@
     use_xy = TRUE;
     break;
   default:
-    PyErr_SetString(PyExc_TypeError, "addch requires 1 or 4 arguments");
+    PyErr_SetString(PyExc_TypeError, "addch requires 1 to 4 arguments");
     return NULL;
   }
 
@@ -560,12 +561,32 @@
 static PyObject *
 PyCursesWindow_Border(PyCursesWindowObject *self, PyObject *args)
 {
-  chtype ls, rs, ts, bs, tl, tr, bl, br;
-  ls = rs = ts = bs = tl = tr = bl = br = 0;
-  if (!PyArg_Parse(args,"|llllllll;ls,rs,ts,bs,tl,tr,bl,br",
-                        &ls, &rs, &ts, &bs, &tl, &tr, &bl, &br))
+  PyObject *temp[8];
+  chtype ch[8];
+  int i;
+
+  /* Clear the array of parameters */
+  for(i=0; i<8; i++) {
+       temp[i] = NULL;
+       ch[i] = 0;
+  }    
+  
+  if (!PyArg_ParseTuple(args,"|OOOOOOOO;ls,rs,ts,bs,tl,tr,bl,br",
+                        &temp[0], &temp[1], &temp[2], &temp[3],
+                        &temp[4], &temp[5], &temp[6], &temp[7]))
     return NULL;
-  wborder(self->win, ls, rs, ts, bs, tl, tr, bl, br);
+
+  for(i=0; i<8; i++) {
+      if (temp[i] != NULL && !PyCurses_ConvertToChtype(temp[i], &ch[i])) {
+          PyErr_Format(PyExc_TypeError,
+                       "argument %i must be a ch or an int", i+1);
+          return NULL;
+      }
+  }
+  
+  wborder(self->win,
+          ch[0], ch[1], ch[2], ch[3],
+          ch[4], ch[5], ch[6], ch[7]);
   Py_INCREF(Py_None);
   return Py_None;
 }
@@ -834,8 +855,9 @@
 		     &y, &x, &temp, &n, &attr))
       return NULL;
     code = wmove(self->win, y, x);
+    break;
   default:
-    PyErr_SetString(PyExc_TypeError, "hline requires 2 or 5 arguments");
+    PyErr_SetString(PyExc_TypeError, "hline requires 2 to 5 arguments");
     return NULL;
   }
 
@@ -1360,8 +1382,9 @@
 		     &y, &x, &temp, &n, &attr))
       return NULL;
     code = wmove(self->win, y, x);
+    break;
   default:
-    PyErr_SetString(PyExc_TypeError, "vline requires 2 or 5 arguments");
+    PyErr_SetString(PyExc_TypeError, "vline requires 2 to 5 arguments");
     return NULL;
   }
 
@@ -1431,8 +1454,9 @@
 	{"noutrefresh",     (PyCFunction)PyCursesWindow_NoOutRefresh},
         /* Backward compatibility alias -- remove in Python 2.1 */
 	{"nooutrefresh",    (PyCFunction)PyCursesWindow_NoOutRefresh},
-	{"overlay",       (PyCFunction)PyCursesWindow_Overlay, METH_VARARGS},
-	{"overwrite",     (PyCFunction)PyCursesWindow_Overwrite, METH_VARARGS},
+	{"overlay",         (PyCFunction)PyCursesWindow_Overlay, METH_VARARGS},
+	{"overwrite",       (PyCFunction)PyCursesWindow_Overwrite,
+         METH_VARARGS},
 	{"putwin",          (PyCFunction)PyCursesWindow_PutWin},
 	{"redrawln",        (PyCFunction)PyCursesWindow_RedrawLine},
 	{"redrawwin",       (PyCFunction)PyCursesWindow_redrawwin},
@@ -1455,7 +1479,7 @@
 	{"touchwin",        (PyCFunction)PyCursesWindow_touchwin},
 	{"untouchwin",      (PyCFunction)PyCursesWindow_untouchwin},
 	{"vline",           (PyCFunction)PyCursesWindow_Vline},
-	{NULL,		        NULL}   /* sentinel */
+	{NULL,		    NULL}   /* sentinel */
 };
 
 static PyObject *
@@ -2444,7 +2468,8 @@
   {"resetty",             (PyCFunction)PyCurses_resetty},
   {"savetty",             (PyCFunction)PyCurses_savetty},
   {"setsyx",              (PyCFunction)PyCurses_setsyx},
-  {"setupterm",           (PyCFunction)PyCurses_setupterm, METH_VARARGS|METH_KEYWORDS},
+  {"setupterm",           (PyCFunction)PyCurses_setupterm,
+   METH_VARARGS|METH_KEYWORDS},
   {"start_color",         (PyCFunction)PyCurses_Start_Color},
   {"termattrs",           (PyCFunction)PyCurses_termattrs},
   {"termname",            (PyCFunction)PyCurses_termname},
@@ -2456,7 +2481,7 @@
   {"unctrl",              (PyCFunction)PyCurses_UnCtrl},
   {"ungetch",             (PyCFunction)PyCurses_UngetCh},
   {"use_env",             (PyCFunction)PyCurses_Use_Env},
-  {NULL,		NULL}		/* sentinel */
+  {NULL,		  NULL}		/* sentinel */
 };
 
 /* Initialization function for the module */
