lots of modifications. somewhat presentable