implement missing functions