diff --git a/server/app/apis/auth.py b/server/app/apis/auth.py
index 2f525327acbed96e3bfb574df3c6991e80605fa4..4fa5624af098b74b11e321cb5b2dd1bc45e9c610 100644
--- a/server/app/apis/auth.py
+++ b/server/app/apis/auth.py
@@ -37,7 +37,7 @@ class AuthSignup(Resource):
         if User.query.filter(User.email == email).count() > 0:
             api.abort(codes.BAD_REQUEST, "User already exists")
 
-        item_user = dbc.add.default(User(email, password, role_id, city_id, name))
+        item_user = dbc.add.user(email, password, role_id, city_id, name)
         if not item_user:
             api.abort(codes.BAD_REQUEST, "User could not be created")
 
diff --git a/server/app/apis/competitions.py b/server/app/apis/competitions.py
index 90ae2f0c05b0c72f802ec7fbf88571dc38a50010..9f17a932c4c47c6e127128b944986458df670988 100644
--- a/server/app/apis/competitions.py
+++ b/server/app/apis/competitions.py
@@ -26,7 +26,7 @@ class CompetitionsList(Resource):
         year = args.get("year")
 
         # Add competition
-        item = dbc.add.default(Competition(name, year, city_id))
+        item = dbc.add.competition(name, year, city_id)
 
         # Add default slide
         dbc.add.slide(item)
diff --git a/server/app/apis/misc.py b/server/app/apis/misc.py
index 13055f211e480a2f16b42d74d9517514e04c67f7..f5b42fda6ab46fc76dd70a774fd3baf9ef467938 100644
--- a/server/app/apis/misc.py
+++ b/server/app/apis/misc.py
@@ -51,7 +51,7 @@ class CitiesList(Resource):
     @jwt_required
     def post(self):
         args = name_parser.parse_args(strict=True)
-        dbc.add.default(City(args["name"]))
+        dbc.add.city(args["name"])
         items = City.query.all()
         return list_response(city_schema.dump(items))
 
diff --git a/server/app/apis/teams.py b/server/app/apis/teams.py
index 3f183bf5ea0965c3282b9a0407c9f95476486b7d..bec6cb6a81005ebf782c212319b0641ca9f3a35a 100644
--- a/server/app/apis/teams.py
+++ b/server/app/apis/teams.py
@@ -29,8 +29,9 @@ class TeamsList(Resource):
         parser.add_argument("name", type=str, location="json")
         args = parser.parse_args(strict=True)
 
-        dbc.add.default(Team(args["name"], CID))
         item_comp = get_comp(CID)
+        dbc.add.team(args["name"], item_comp)
+        dbc.refresh(item_comp)
         return list_response(list_schema.dump(item_comp.teams))
 
 
diff --git a/server/app/core/controller/add.py b/server/app/core/controller/add.py
index 3e20d1dc7d6e32e094d6f87ff8a3386db5a7fe2f..2352ec0d7e8a7dbb462aeb8069027da6d0de47da 100644
--- a/server/app/core/controller/add.py
+++ b/server/app/core/controller/add.py
@@ -20,23 +20,23 @@ def blacklist(jti):
 
 @db_add
 def slide(item_competition):
-    order = Slide.query.filter(Slide.competition_id == item_competition.id).count()
+    order = Slide.query.filter(Slide.competition_id == item_competition.id).count()  # first element has index 0
     return Slide(order, item_competition.id)
 
 
 @db_add
-def user(email, plaintext_password, item_role, item_city, name=None):
-    return User(email, plaintext_password, item_role.id, item_city.id, name)
+def user(email, plaintext_password, role_id, city_id, name=None):
+    return User(email, plaintext_password, role_id, city_id, name)
 
 
 @db_add
-def question(name, order, item_type, item_slide):
-    return Question(name, order, item_type.id, item_slide.id)
+def question(name, order, type_id, item_slide):
+    return Question(name, order, type_id, item_slide.id)
 
 
 @db_add
-def competition(name, year, item_city):
-    return Competition(name, year, item_city.id)
+def competition(name, year, city_id):
+    return Competition(name, year, city_id)
 
 
 @db_add
@@ -45,20 +45,20 @@ def team(name, item_competition):
 
 
 @db_add
-def mediaType(team_name):
-    return MediaType(team_name)
+def mediaType(name):
+    return MediaType(name)
 
 
 @db_add
-def questionType(team_name):
-    return QuestionType(team_name)
+def questionType(name):
+    return QuestionType(name)
 
 
 @db_add
-def role(team_name):
-    return Role(team_name)
+def role(name):
+    return Role(name)
 
 
 @db_add
-def city(team_name):
-    return City(team_name)
+def city(name):
+    return City(name)
diff --git a/server/populate.py b/server/populate.py
index 45e00a85c433467e4a3fe62e964fc4ccbf757374..ba1648fa28e89399c4b0a57f2788a0b73244a91e 100644
--- a/server/populate.py
+++ b/server/populate.py
@@ -24,20 +24,20 @@ def _add_items():
     for team_name in cities:
         dbc.add.city(team_name)
 
-    item_admin = Role.query.filter(Role.name == "Admin").one()
-    item_editor = Role.query.filter(Role.name == "Editor").one()
+    admin_id = Role.query.filter(Role.name == "Admin").one().id
+    editor_id = Role.query.filter(Role.name == "Editor").one().id
 
-    item_city = City.query.filter(City.name == "Linköping").one()
+    city_id = City.query.filter(City.name == "Linköping").one().id
 
-    item_text = QuestionType.query.filter(QuestionType.name == "Text").one()
+    text_id = QuestionType.query.filter(QuestionType.name == "Text").one().id
 
     # Add users
-    dbc.add.user("admin@test.se", "password", item_admin, item_city)
-    dbc.add.user("test@test.se", "password", item_editor, item_city)
+    dbc.add.user("admin@test.se", "password", admin_id, city_id)
+    dbc.add.user("test@test.se", "password", editor_id, city_id)
 
     # Add competitions to db
     for i in range(3):
-        dbc.add.competition(f"Test{i+1}", 1971, item_city)
+        dbc.add.competition(f"Test{i+1}", 1971, city_id)
 
     item_comps = Competition.query.all()
     # Add
@@ -47,7 +47,7 @@ def _add_items():
             item_slide = dbc.add.slide(item_comp)
 
             # Add question to competition
-            dbc.add.question(f"Q{i+1}", i + 1, item_text, item_slide)
+            dbc.add.question(f"Q{i+1}", i + 1, text_id, item_slide)
 
         # Add teams to competition
         for team_name in teams:
diff --git a/server/tests/test_db.py b/server/tests/test_db.py
index 46303211dca998a3a25097d42428e732539b10b8..49ca53ad18e972673e1b81658458e1af909ef8c9 100644
--- a/server/tests/test_db.py
+++ b/server/tests/test_db.py
@@ -1,3 +1,4 @@
+import app.core.controller as dbc
 from app.core.models import City, Competition, Media, MediaType, Question, QuestionType, Role, Slide, Team, User
 
 from tests import app, client, db
@@ -53,9 +54,8 @@ def test_question(client):
 
     # Add competition
     item_city = City.query.filter_by(name="Linköping").first()
-    db.session.add(Competition("teknik8", 2020, item_city.id))
-    db.session.add(Competition("teknik9", 2020, item_city.id))
-    db.session.commit()
+    dbc.add.competition("teknik8", 2020, item_city.id)
+    dbc.add.competition("teknik9", 2020, item_city.id)
     item_competition = Competition.query.filter_by(name="teknik8").first()
     item_competition_2 = Competition.query.filter_by(name="teknik9").first()
 
@@ -64,14 +64,12 @@ def test_question(client):
     assert item_competition.city.name == "Linköping"
 
     # Add teams
-    db.session.add(Team("Lag1", item_competition.id))
-    db.session.add(Team("Lag2", item_competition.id))
-    db.session.commit()
+    dbc.add.team("Lag1", item_competition)
+    dbc.add.team("Lag2", item_competition)
 
     assert_insert_fail(Team, "Lag1", item_competition.id)
 
-    db.session.add(Team("Lag1", item_competition_2.id))
-    db.session.commit()
+    dbc.add.team("Lag1", item_competition_2)
 
     assert Team.query.filter((Team.competition_id == item_competition.id) & (Team.name == "Lag1")).count() == 1
     assert Team.query.filter((Team.competition_id == item_competition.id) & (Team.name == "Lag2")).count() == 1
@@ -81,18 +79,17 @@ def test_question(client):
     assert Team.query.count() == 3
 
     # Add slides
-    db.session.add(Slide(1, item_competition.id))
-    db.session.add(Slide(2, item_competition.id))
-    db.session.add(Slide(3, item_competition.id))
-    db.session.commit()
+    dbc.add.slide(item_competition)
+    dbc.add.slide(item_competition)
+    dbc.add.slide(item_competition)
 
     # Try add slide with same order
     assert_insert_fail(Slide, 1, item_competition.id)
     assert_exists(Slide, 1, order=1)
 
-    item_slide1 = Slide.query.filter_by(order=1).first()
-    item_slide2 = Slide.query.filter_by(order=2).first()
-    item_slide3 = Slide.query.filter_by(order=3).first()
+    item_slide1 = Slide.query.filter_by(order=0).first()
+    item_slide2 = Slide.query.filter_by(order=1).first()
+    item_slide3 = Slide.query.filter_by(order=2).first()
 
     assert item_slide1 is not None
     assert item_slide2 is not None
@@ -102,9 +99,8 @@ def test_question(client):
     question_type_bool = QuestionType.query.filter_by(name="Boolean").first()
     question_type_multiple = QuestionType.query.filter_by(name="Multiple").first()
 
-    db.session.add(Question("Fråga1", 10, question_type_bool.id, item_slide2.id))
-    db.session.add(Question("Fråga2", 10, question_type_multiple.id, item_slide3.id))
-    db.session.commit()
+    dbc.add.question("Fråga1", 10, question_type_bool.id, item_slide2)
+    dbc.add.question("Fråga2", 10, question_type_multiple.id, item_slide3)
 
     assert question_type_bool is not None
     assert question_type_multiple is not None
diff --git a/server/tests/test_helpers.py b/server/tests/test_helpers.py
index a10254ab080570c926677a8d3347107346d26a4f..6ce0f54c49f19b04076df674910c5c383bf7efef 100644
--- a/server/tests/test_helpers.py
+++ b/server/tests/test_helpers.py
@@ -13,25 +13,23 @@ def add_default_values():
 
     # Add media types
     for item in media_types:
-        db.session.add(MediaType(item))
+        dbc.add.mediaType(item)
 
     # Add question types
     for item in question_types:
-        db.session.add(QuestionType(item))
+        dbc.add.questionType(item)
 
     # Add roles
     for item in roles:
-        db.session.add(Role(item))
-
+        dbc.add.role(item)
     # Add cities
     for item in cities:
-        db.session.add(City(item))
-
-    # Commit changes to db
-    db.session.commit()
+        dbc.add.city(item)
 
+    item_admin = Role.query.filter(Role.name == "Admin").one()
+    item_city = City.query.filter(City.name == "Linköping").one()
     # Add user with role and city
-    dbc.add.default(User("test@test.se", "password", 1, 1))
+    dbc.add.user("test@test.se", "password", item_admin.id, item_city.id)
 
 
 def get_body(response):