reimplemented form