better cleanup in error case
eliminate infinite interface recursion