work in progress, need to improve Model