diff --git a/server/app/database/controller/__init__.py b/server/app/database/controller/__init__.py
index 2865b52300df3a80dce6554e9ad018faf5f06edc..a46a65f1e6c2fe4e0664c462288a5f00c1cdd46c 100644
--- a/server/app/database/controller/__init__.py
+++ b/server/app/database/controller/__init__.py
@@ -1,3 +1,3 @@
 # import add, get
 from app.core import db
-from app.database.controller import add, delete, edit, get, search, utils
+from app.database.controller import add, copy, delete, edit, get, search, utils
diff --git a/server/app/database/controller/copy.py b/server/app/database/controller/copy.py
index ef6f0ecff5304fcfd037e7e39045fd9dde4724a8..de4f8c1edcb7b8ddc9a40c7a8aad07e58ac01922 100644
--- a/server/app/database/controller/copy.py
+++ b/server/app/database/controller/copy.py
@@ -4,7 +4,6 @@ This file contains functionality to copy and duplicate data to the database.
 
 from app.database.controller import add, utils
 from app.database.models import Question, Slide
-from flask_sqlalchemy import utils
 
 
 def _question(item_question_old, slide_id):
@@ -53,9 +52,9 @@ def slide(item_slide_old):
     """
 
     order = Slide.query.filter(
-        Slide.competition_id == item_slide_old.item_competition.id
+        Slide.competition_id == item_slide_old.competition_id
     ).count()  # first element has index 0
-    item_slide_new = add.db_add(Slide(order, item_slide_old.item_competition.id))
+    item_slide_new = add.db_add(Slide(order, item_slide_old.competition_id))
 
     # Copy all fields
     item_slide_new.title = item_slide_old.title
@@ -66,7 +65,7 @@ def slide(item_slide_old):
     # TODO: Add background image
 
     for item_component in item_slide_old.components:
-        _component(item_slide_new, item_component)
+        _component(item_component, item_slide_new)
 
     for item_question in item_slide_old.questions:
         _question(item_question, item_slide_new.id)
diff --git a/server/tests/test_db.py b/server/tests/test_db.py
index 3bb998aec9674b9ab0cc865ec2e9c22a9640e73a..3d68bc3e807462574fba47db01ec812e8708334a 100644
--- a/server/tests/test_db.py
+++ b/server/tests/test_db.py
@@ -1,5 +1,5 @@
 import app.database.controller as dbc
-from app.database.models import City, Competition, Media, MediaType, Question, QuestionType, Role, Slide, Team, User
+from app.database.models import City, Media, MediaType, Role, User
 
 from tests import app, client, db
 from tests.test_helpers import add_default_values, assert_exists, assert_insert_fail
@@ -40,6 +40,73 @@ def test_media(client):
     assert item_media.upload_by.email == "test@test.se"
 
 
+def test_copy(client):
+    add_default_values()
+
+    # Fetches an empty competition
+    list_item_competitions, _ = dbc.search.competition(name="Tävling 1")
+    item_competition = list_item_competitions[0]
+
+    # Fetches the first slide in that competition
+    num_slides = 3
+    item_slides, total = dbc.search.slide(competition_id=item_competition.id)
+    assert total == 3
+    item_slide_original = item_slides[0]
+
+    # Copies the slide and double checks the results
+    item_slide_copy = dbc.copy.slide(item_slide_original)
+    num_slides += 1
+    assert item_slide_copy.order == num_slides - 1  # 0 indexing
+    assert item_slide_copy.title == item_slide_original.title
+    assert item_slide_copy.body == item_slide_original.body
+    assert item_slide_copy.timer == item_slide_original.timer
+    assert item_slide_copy.settings == item_slide_original.settings
+    assert item_slide_copy.competition_id == item_slide_original.competition_id
+
+    # Checks that all components were correctly copied
+    assert len(item_slide_copy.components) == len(item_slide_original.components)
+    for i, c1 in enumerate(item_slide_original.components):
+        c2 = item_slide_copy.components[i]
+        assert c1 != c2
+        assert c1.x == c2.x
+        assert c1.y == c2.y
+        assert c1.w == c2.w
+        assert c1.h == c2.h
+        assert c1.data == c2.data
+        assert c1.slide_id == item_slide_original.id
+        assert c2.slide_id == item_slide_copy.id
+        assert c1.type_id == c2.type_id
+
+    # Checks that all questions were correctly copied
+    assert len(item_slide_copy.questions) == len(item_slide_original.questions)
+    for i, q1 in enumerate(item_slide_original.questions):
+        q2 = item_slide_copy.questions[i]
+        assert q1 != q2
+        assert q1.name == q2.name
+        assert q1.total_score == q2.total_score
+        assert q1.type_id == q2.type_id
+        assert q1.slide_id == item_slide_original.id
+        assert q2.slide_id == item_slide_copy.id
+        # TODO: Assert alternatives
+
+    # Checks that the copy put the slide in the database
+    item_slides, total = dbc.search.slide(competition_id=item_competition.id)
+    assert total == num_slides
+    assert item_slide_copy == item_slides[num_slides - 1]
+
+    # Inserts several copies of the same slide
+    num_copies = 10
+    for i in range(num_copies):
+        # The order must be correct
+        item_slide_original = dbc.copy.slide(item_slide_original)
+        assert item_slide_original.order == i + num_slides
+
+    # Checks that the last slide is correct
+    item_slides, total = dbc.search.slide(competition_id=item_competition.id)
+    assert total == num_copies + num_slides
+    assert item_slide_original == item_slides[num_copies + num_slides - 1]
+
+
 """
 def test_question(client):
     add_default_values()
diff --git a/server/tests/test_helpers.py b/server/tests/test_helpers.py
index fbd77d9ef146676c0cb6af94581c984b730ac3db..7a68655b5a0212012736b40627050dab81f86595 100644
--- a/server/tests/test_helpers.py
+++ b/server/tests/test_helpers.py
@@ -47,17 +47,19 @@ def add_default_values():
         dbc.add.slide(item_comp)
 
         # Add slides
-        i = 1
-        for item_slide in item_comp.slides:
+        for i, item_slide in enumerate(item_comp.slides):
             # Populate slide with data
-            item_slide.title = f"Title {i}"
-            item_slide.body = f"Body {i}"
-            item_slide.timer = 100 + i
+            item_slide.title = f"Title {i+1}"
+            item_slide.body = f"Body {i+1}"
+            item_slide.timer = 100 + i + 1
             # item_slide.settings = "{}"
             dbc.utils.commit_and_refresh(item_slide)
+
             # Add question to competition
-            dbc.add.question(name=f"Q{i}", total_score=i, type_id=1, item_slide=item_slide)
-            i += 1
+            dbc.add.question(name=f"Q{i+1}", total_score=i + 1, type_id=1, item_slide=item_slide)
+
+            # Add text component
+            dbc.add.component(1, item_slide, {"text": "Text"}, i, 2 * i, 3 * i, 4 * i)
 
 
 def get_body(response):