diff --git a/miltermodule.c b/miltermodule.c
index 7ace95096e6f3bcad6b8ced588e5ae76873c475d..fea5ec29f54b6e0c5abce1cdf48158f1ef7b27ff 100644
--- a/miltermodule.c
+++ b/miltermodule.c
@@ -35,6 +35,9 @@ $ python setup.py help
      libraries=["milter","smutil","resolv"]
 
  * $Log$
+ * Revision 1.26  2009/07/28 21:08:20  customdesigned
+ * Increment del count.
+ *
  * Revision 1.25  2009/07/28 20:58:55  customdesigned
  * getdiag method
  *
@@ -1090,6 +1093,20 @@ milter_getdiag(PyObject *self, PyObject *args) {
   return Py_BuildValue("(kk)", diag.contextNew,diag.contextDel);
 }
 
+static char milter_getversion__doc__[] =
+"getversion() -> tuple\n\
+Return runtime libmilter version as a tuple of major,minor,patchlevel.";
+static PyObject *
+milter_getversion(PyObject *self, PyObject *args) {
+  unsigned int major, minor, patch;
+  if (!PyArg_ParseTuple(args, ":getversion")) return NULL;
+  if (smfi_version(&major,&minor,&patch) != MI_SUCCESS) {
+    PyErr_SetString(MilterError, "smfi_version failed");
+    return NULL;
+  }
+  return Py_BuildValue("(kkk)", major,minor,patch);
+}
+
 static char milter_getsymval__doc__[] =
 "getsymval(String) -> String\n\
 Returns a symbol's value.  Context-dependent, and unclear from the dox.";
@@ -1503,6 +1520,7 @@ static PyMethodDef milter_methods[] = {
    { "setconn",              milter_setconn,              METH_VARARGS, milter_setconn__doc__},
    { "stop",                 milter_stop,                 METH_VARARGS, milter_stop__doc__},
    { "getdiag",              milter_getdiag,              METH_VARARGS, milter_getdiag__doc__},
+   { "getversion",           milter_getversion,           METH_VARARGS, milter_getversion__doc__},
    { NULL, NULL }
 };