implemented custom classes