implemented supports funtion