generalized an interface