omg dat diagram tho (not finished, needs revision)