major changes to models.py