separate proxy generation via interface