diff --git a/contracts/admin.py b/contracts/admin.py
index 638dc454bd2458dd4c96fb097c51ae757b22ceb2..9ba5ea2718babbdeccbef649052413b62301fee1 100644
--- a/contracts/admin.py
+++ b/contracts/admin.py
@@ -1,6 +1,7 @@
 from dal_admin_filters import AutocompleteFilter
 from django.contrib import admin
 from django.utils.html import format_html
+from fieldsets_with_inlines import FieldsetsInlineMixin
 from import_export import resources
 from rangefilter.filters import DateRangeFilter
 
@@ -84,20 +85,11 @@ class ContractSigneeRepresentativeInline(admin.TabularInline):
     extra = 0
 
 
-class ContractAdmin(MarkdownxGuardedModelAdmin):
+class ContractAdmin(FieldsetsInlineMixin, MarkdownxGuardedModelAdmin):
     form = ContractAdminForm
 
     readonly_fields = ("created_by",)
 
-    inlines = (
-        ContracteeSignatureInline,
-        SigneeSignatureInline,
-        ContractFileInline,
-        ContractIntentInline,
-        ContractContracteeRepresentativeInline,
-        ContractSigneeRepresentativeInline,
-    )
-
     #def __init__(self, *args, **kwargs):
         #from .models import Contract
         
@@ -110,73 +102,83 @@ class ContractAdmin(MarkdownxGuardedModelAdmin):
                 #.filter(contract=self.instance)
             #)
 
-    def get_fieldsets(self, request, obj=None):
-        fieldsets = [
-            (
-                "Základní informace",
-                {
-                    "fields": [
-                        "name",
-                        "id_number",
-                        "types",
-                        "summary",
-                        "public_state",
-                        "publishing_rejection_comment",
-                        "legal_state",
-                        "primary_contract",
-                    ]
-                }
-            ),
-            (
-                "Data",
-                {
-                    "fields": [
-                        "valid_start_date",
-                        "valid_end_date",
-                    ]
-                }
-            ),
-            (
-                "Fyzický dokument",
-                {
-                    "fields": [
-                        "paper_form_state",
-                        "filing_area",
-                    ]
-                }
-            ),
-            (
-                "Odkazy",
-                {
-                    "fields": [
-                        "tender_url",
-                        "agreement_url",
-                    ]
-                }
-            ),
-            (
-                "Náklady",
-                {
-                    "fields": [
-                        "cost_amount",
-                        "cost_unit",
-                    ]
-                }
-            ),
-            (
-                "Doplňující informace",
-                {
-                    "fields": [
-                        "issues",
-                        "notes",
-                    ]
-                }
-            )
-        ]
+    fieldsets_with_inlines = [
+        (
+            "Základní informace",
+            {
+                "fields": [
+                    "name",
+                    "id_number",
+                    "types",
+                    "summary",
+                    "public_state",
+                    "publishing_rejection_comment",
+                    "legal_state",
+                    "primary_contract",
+                ]
+            }
+        ),
+        (
+            "Data",
+            {
+                "fields": [
+                    "valid_start_date",
+                    "valid_end_date",
+                ]
+            }
+        ),
+        (
+            "Náklady",
+            {
+                "fields": [
+                    "cost_amount",
+                    "cost_unit",
+                ]
+            }
+        ),
+        
+        ContractFileInline,
+        ContracteeSignatureInline,
+        ContractContracteeRepresentativeInline,
+        SigneeSignatureInline,
+        ContractSigneeRepresentativeInline,
+        
+        (
+            "Odkazy",
+            {
+                "fields": [
+                    "tender_url",
+                    "agreement_url",
+                ]
+            }
+        ),
+        
+        ContractIntentInline,
+        
+        (
+            "Fyzický dokument",
+            {
+                "fields": [
+                    "paper_form_state",
+                    "filing_area",
+                ]
+            }
+        ),
+        (
+            "Doplňující informace",
+            {
+                "fields": [
+                    "issues",
+                    "notes",
+                ]
+            }
+        )
+    ]
 
+    def get_fieldsets(self, request, obj=None):
         if request.user.is_superuser or request.user.has_perm("approve", self):
-            fieldsets.insert(
-                0,
+            self.fieldsets_with_inlines.insert(
+                8,
                 (
                     "Schválení",
                     {
@@ -184,8 +186,8 @@ class ContractAdmin(MarkdownxGuardedModelAdmin):
                     }
                 ),
             )
-
-        return fieldsets
+        
+        return super().get_fieldsets(request, obj)
 
     def save_model(self, request, obj, form, change) -> None:
         if obj.created_by is None:
@@ -269,7 +271,6 @@ for model in (
     ContracteeSignature,
     ContractSigneeRepresentative,
     ContractContracteeRepresentative,
-    ContractType,
     ContractIntent,
 ):
     admin.site.register(model, IndexHiddenModelAdmin)
@@ -278,8 +279,9 @@ admin.site.register(ContractFile, ContractFileAdmin)
 
 for model in (
     Contractee,
-    ContractIssue,
     ContractFilingArea,
+    ContractIssue,
+    ContractType,
 ):
     admin.site.register(model, MarkdownxGuardedModelAdmin)
 
diff --git a/contracts/models.py b/contracts/models.py
index ea19f34a26596daa32d7ccc38c8375823ead7dff..d1831d70d278aab094ba3d2aae7ff5b433bbaddf 100644
--- a/contracts/models.py
+++ b/contracts/models.py
@@ -196,7 +196,7 @@ class ContractType(NameStrMixin, models.Model):
         app_label = "contracts"
 
         verbose_name = "Typ smlouvy"
-        verbose_name_plural = "Typy smlouvy"
+        verbose_name_plural = "Typy smluv"
 
 
 class ContractIssue(NameStrMixin, models.Model):
@@ -504,8 +504,8 @@ class ContractSigneeRepresentative(RepresentativeMixin, models.Model):
     class Meta:
         app_label = "contracts"
 
-        verbose_name = "Zástupce druhé smluvní strany"
-        verbose_name_plural = "Zástupci druhé smluvní strany"
+        verbose_name = "Zástupce jiné smluvní strany"
+        verbose_name_plural = "Zástupci jiných smluvních stran"
 
 
 class ContractFile(NameStrMixin, models.Model):
@@ -565,7 +565,7 @@ class ContracteeSignature(models.Model):
         verbose_name_plural = "Podpisy našich smluvních stran"
 
     def __str__(self) -> str:
-        return f"{self.contractee.name} - {self.date}"
+        return f"{str(self.contractee)} - {self.date}"
 
 
 class SigneeSignature(models.Model):
@@ -591,10 +591,10 @@ class SigneeSignature(models.Model):
         app_label = "contracts"
 
         verbose_name = "Podpis jiné smluvní strany"
-        verbose_name_plural = "Podpisy ostatních smluvních stran"
+        verbose_name_plural = "Podpisy jiných smluvních stran"
 
     def __str__(self) -> str:
-        return f"{self.signee.name} - {self.date}"
+        return f"{str(self.signee)} - {self.date}"
 
 
 class ContractIntent(NameStrMixin, models.Model):
diff --git a/registry/admin.py b/registry/admin.py
new file mode 100644
index 0000000000000000000000000000000000000000..0168742eec79a3afb0b9ddba14c95172a3388d1a
--- /dev/null
+++ b/registry/admin.py
@@ -0,0 +1,40 @@
+from django_admin_index.models import AppGroup, AppGroupQuerySet
+
+from django.conf import settings
+from django.contrib import admin
+
+
+def get_app_list(self, request):
+    app_dict = self._build_app_dict(request)
+
+    for app_name, object_list in app_dict.items():
+        if app_name in settings.ADMIN_ORDERING:
+            app = app_dict[app_name]
+            app["models"].sort(
+                key=lambda model: settings.ADMIN_ORDERING[app_name].index(model["object_name"])
+            )
+            app_dict[app_name]
+
+            yield app
+        else:
+            yield app_dict[app_name] 
+
+
+admin.AdminSite.get_app_list = get_app_list
+
+
+class CustomOrderAppGroupQuerySet(AppGroupQuerySet):
+    def as_list(self, request, include_remaining=True):
+        result = super().as_list(request, include_remaining=include_remaining)
+
+        for item in result:
+            if app_label not in settings.ADMIN_ORDERING:
+                continue
+
+            item["models"].sort(
+                key=lambda model: settings.ADMIN_ORDERING[app_name].index(model["name"])
+            )
+
+        return result
+
+AppGroup.objects = AppGroupQuerySet.as_manager()
diff --git a/registry/settings/base.py b/registry/settings/base.py
index ea0da079f9f8de06ca53decdf31d5bba5704bb3a..4804234164d63173462798e1fdd7c95bd5c34c92 100644
--- a/registry/settings/base.py
+++ b/registry/settings/base.py
@@ -206,6 +206,19 @@ ADMIN_INDEX_AUTO_CREATE_APP_GROUP = True
 ADMIN_INDEX_SHOW_REMAINING_APPS = True
 
 
+
+ADMIN_ORDERING = {
+    "contracts": [
+        "Contract",
+        "Signee",
+        "Contractee",
+        "ContractType",
+        "ContractIssue",
+        "ContractFilingArea",
+    ],
+}
+
+
 ## App-specific
 
 DEFAULT_CONTRACTEE_NAME = env.str("DEFAULT_CONTRACTEE_NAME")
diff --git a/registry/templates/admin/base_site.html b/registry/templates/admin/base_site.html
index 4099da6ca95e09ce3247cb83b7a607328aaa53c2..629047619affd6ed95e13c3ad41660b71cc833b5 100644
--- a/registry/templates/admin/base_site.html
+++ b/registry/templates/admin/base_site.html
@@ -70,5 +70,10 @@
         border-radius: var(--admin-interface-module-border-radius) !important;
         text-decoration: none !important;
     }
+    
+    
+    .module caption, .inline-group h2 {
+        text-transform: none;
+    }
 </style>
 {% endblock %} 
diff --git a/registry/urls.py b/registry/urls.py
index fbd47f4f0586ae05794842d95ab96b929a8cf413..3424b6f1343082dd9accc4fca87c71b463e976db 100644
--- a/registry/urls.py
+++ b/registry/urls.py
@@ -20,6 +20,8 @@ from django.urls import include, path, re_path
 from django.views.static import serve
 from pirates.urls import urlpatterns as pirates_urlpatterns
 
+import registry.admin
+
 urlpatterns = [
     path("", include("contracts.urls")),
     path("", include("users.urls")),