added implementation functions