reimplemented with .h