Maybe this should just be an interface?