implemented, but low performance
add test