reimplemented functionality so far plus examples