ooops, this implementation should be better :)