diff --git a/ChangeLog b/ChangeLog
index 31b7919921..95a70a86d7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-12-09  Edward Hervey  <edward@fluendo.com>
+
+	* gst/arg-types.py:
+	This covers for the codegenerator not being able to handle
+	(unsigned) int64 as parameters and return values.
+
 2005-12-09  Edward Hervey  <edward@fluendo.com>
 
 	* gst/arg-types.py:
diff --git a/gst/arg-types.py b/gst/arg-types.py
index ca689104fb..bb6d42e6c8 100644
--- a/gst/arg-types.py
+++ b/gst/arg-types.py
@@ -167,6 +167,57 @@ class GstMiniObjectReturn(ReturnType):
 
 matcher.register_reverse_ret('GstMiniObject*', GstMiniObjectReturn)
 
+class Int64Param(Parameter):
+
+    def get_c_type(self):
+        return self.props.get('c_type', 'gint64')
+
+    def convert_c2py(self):
+        self.wrapper.add_declaration("PyObject *py_%s;" % self.name)
+        self.wrapper.write_code(code=("py_%s = PyLong_FromLongLong(%s);" %
+                                      (self.name, self.name)),
+                                cleanup=("Py_DECREF(py_%s);" % self.name))
+        self.wrapper.add_pyargv_item("py_%s" % self.name)
+
+class Int64Return(ReturnType):
+    def get_c_type(self):
+        return self.props.get('c_type', 'gint64')
+    def write_decl(self):
+        self.wrapper.add_declaration("%s retval;" % self.get_c_type())
+    def write_error_return(self):
+        self.wrapper.write_code("return -G_MAXINT;")
+    def write_conversion(self):
+        self.wrapper.write_code(
+            code=None,
+            failure_expression="!PyLong_Check(py_retval)",
+            failure_cleanup='PyErr_SetString(PyExc_TypeError, "retval should be an long");')
+        self.wrapper.write_code("retval = PyLong_AsLongLong(py_retval);")
+			
+class UInt64Param(Parameter):
+
+    def get_c_type(self):
+        return self.props.get('c_type', 'guint64')
+
+    def convert_c2py(self):
+        self.wrapper.add_declaration("PyObject *py_%s;" % self.name)
+        self.wrapper.write_code(code=("py_%s = PyLong_FromUnsignedLongLong(%s);" %
+                                      (self.name, self.name)),
+                                cleanup=("Py_DECREF(py_%s);" % self.name))
+        self.wrapper.add_pyargv_item("py_%s" % self.name)
+
+class UInt64Return(ReturnType):
+    def get_c_type(self):
+        return self.props.get('c_type', 'guint64')
+    def write_decl(self):
+        self.wrapper.add_declaration("%s retval;" % self.get_c_type())
+    def write_error_return(self):
+        self.wrapper.write_code("return -G_MAXINT;")
+    def write_conversion(self):
+        self.wrapper.write_code(
+            code=None,
+            failure_expression="!PyLong_Check(py_retval)",
+            failure_cleanup='PyErr_SetString(PyExc_TypeError, "retval should be an long");')
+        self.wrapper.write_code("retval = PyLong_AsUnsignedLongLongMask(py_retval);")
 			
 matcher.register('GstClockTime', UInt64Arg())
 matcher.register('GstClockTimeDiff', Int64Arg())
@@ -187,4 +238,12 @@ for typename in ["GstBuffer*", "GstEvent*", "GstMessage*", "GstQuery*"]:
 	matcher.register_reverse(typename, GstMiniObjectParam)
 	matcher.register_reverse_ret(typename, GstMiniObjectReturn)
 
+for typename in ["gint64", "GstClockTimeDiff"]:
+	matcher.register_reverse(typename, Int64Param)
+	matcher.register_reverse_ret(typename, Int64Return)
+
+for typename in ["guint64", "GstClockTime"]:
+	matcher.register_reverse(typename, UInt64Param)
+	matcher.register_reverse_ret(typename, UInt64Return)
+
 del arg