diff -r 8a8642e45433 src/org/python/core/PyObjectDerived.java --- a/src/org/python/core/PyObjectDerived.java Sun Sep 04 16:39:47 2011 -0700 +++ b/src/org/python/core/PyObjectDerived.java Wed Sep 07 09:54:03 2011 -0400 @@ -1082,8 +1082,11 @@ // Otherwise, we call the derived __tojava__, if it exists: PyType self_type=getType(); PyObject impl=self_type.lookup("__tojava__"); - if (impl!=null) - return impl.__get__(this,self_type).__call__(Py.java2py(c)).__tojava__(Object.class); + if (impl!=null) { + PyObject delegate = impl.__get__(this,self_type).__call__(Py.java2py(c)); + if (delegate != this) + return delegate.__tojava__(Object.class); + } return super.__tojava__(c); }