diff --git a/contracts/admin.py b/contracts/admin.py
index 5f218830333aefd679dd8305740aef508b367d46..eaa45096116f3e0a5a89faf083b2a6347420e360 100644
--- a/contracts/admin.py
+++ b/contracts/admin.py
@@ -155,6 +155,12 @@ class ContractAdmin(MarkdownxGuardedModelAdmin, FieldsetsInlineMixin, NestedMode
         ),
     ]
 
+    def get_form(self, request, *args, **kwargs) -> ContractAdminForm:
+        form = super().get_form(request, *args, **kwargs)
+        form.current_user = request.user
+
+        return form
+
     def get_fieldsets(self, request, obj=None):
         fieldsets_with_inlines = copy.deepcopy(self.fieldsets_with_inlines)
 
diff --git a/contracts/forms.py b/contracts/forms.py
index 78ae1647a66d6ae5af05645d30e6ccfddb693efa..9453e761d5ee1afb7eb34004eb66bb6f718132ee 100644
--- a/contracts/forms.py
+++ b/contracts/forms.py
@@ -6,6 +6,25 @@ from .models import Contract, ContracteeSignature, SigneeSignature
 
 
 class ContractAdminForm(forms.ModelForm):
+    def clean(self):
+        clean_data = super().clean()
+
+        if (
+            not self.current_user.is_superuser
+            and self.instance.is_approved
+            is not clean_data.get("is_approved", self.instance.is_approved)
+            and self.current_user == self.instance.created_by
+        ):
+            raise ValidationError(
+                {
+                    "is_approved": (
+                        "Smlouva nemůže být schválena uživatelem, " "který ji nahrál."
+                    )
+                }
+            )
+
+        return clean_data
+
     class Media:
         js = (
             "shared/runtime.js",
diff --git a/contracts/migrations/0014_alter_contracteesignaturerepresentative_options_and_more.py b/contracts/migrations/0014_alter_contracteesignaturerepresentative_options_and_more.py
new file mode 100644
index 0000000000000000000000000000000000000000..bedf1c508e3372a2011b766839d8c93c57c3545a
--- /dev/null
+++ b/contracts/migrations/0014_alter_contracteesignaturerepresentative_options_and_more.py
@@ -0,0 +1,37 @@
+# Generated by Django 4.1.4 on 2023-03-24 15:34
+
+import django.db.models.deletion
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ("contracts", "0013_alter_contractee_address_country_and_more"),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name="contracteesignaturerepresentative",
+            options={
+                "verbose_name": "Zástupce naší smluvní strany",
+                "verbose_name_plural": "Zástupci naší smluvní strany",
+            },
+        ),
+        migrations.AlterModelOptions(
+            name="signeesignaturerepresentative",
+            options={
+                "verbose_name": "Zástupce jiné smluvní strany",
+                "verbose_name_plural": "Zástupci jiné smluvní strany",
+            },
+        ),
+        migrations.AlterField(
+            model_name="signeesignaturerepresentative",
+            name="signee_signature",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="representatives",
+                to="contracts.signeesignature",
+                verbose_name="Podpis jiné smluvní strany",
+            ),
+        ),
+    ]
diff --git a/contracts/models.py b/contracts/models.py
index e2589a9522fbf0bef8fc414d33457e30057237c9..33d8c9fb46d1c53b9bbe95db94c8f0d38ccdc358 100644
--- a/contracts/models.py
+++ b/contracts/models.py
@@ -663,8 +663,8 @@ class ContracteeSignatureRepresentative(RepresentativeMixin, models.Model):
     class Meta:
         app_label = "contracts"
 
-        verbose_name = "Zástupce"
-        verbose_name_plural = "Zástupci"
+        verbose_name = "Zástupce naší smluvní strany"
+        verbose_name_plural = "Zástupci naší smluvní strany"
 
 
 class SigneeSignatureRepresentative(RepresentativeMixin, models.Model):
@@ -672,7 +672,7 @@ class SigneeSignatureRepresentative(RepresentativeMixin, models.Model):
         SigneeSignature,
         on_delete=models.CASCADE,
         related_name="representatives",
-        verbose_name="Podpis druhé smluvní strany",
+        verbose_name="Podpis jiné smluvní strany",
     )
 
     name = models.CharField(
@@ -690,8 +690,8 @@ class SigneeSignatureRepresentative(RepresentativeMixin, models.Model):
     class Meta:
         app_label = "contracts"
 
-        verbose_name = "Zástupce"
-        verbose_name_plural = "Zástupci"
+        verbose_name = "Zástupce jiné smluvní strany"
+        verbose_name_plural = "Zástupci jiné smluvní strany"
 
 
 @receiver(post_save, sender=ContracteeSignature)