diff --git a/aleksis/apps/csv_import/frontend/index.js b/aleksis/apps/csv_import/frontend/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..4ce39967f46ae64a8ef67bc74f80f6956d2a3273
--- /dev/null
+++ b/aleksis/apps/csv_import/frontend/index.js
@@ -0,0 +1,49 @@
+export default {
+    name: "csv",
+    path: "#",
+    component: () => import("aleksis.core/components/Parent.vue"),
+    meta: {
+        inMenu: true,
+        titleKey: "csv.menu_title",
+        icon: "mdi-swap-vertical",
+        permission: "csv_import.view_csv_menu_rule",
+    },
+    children: [
+        {
+            path: "import/",
+            component: () => import("aleksis.core/components/LegacyBaseTemplate.vue"),
+            name: "csv.csvImport",
+            meta: {
+                inMenu: true,
+                titleKey: "csv.import.menu_title",
+                icon: "mdi-table-arrow-left",
+                permission: "csv_import.import_data_rule",
+            },
+            props: {
+                byTheGreatnessOfTheAlmightyAleksolotlISwearIAmWorthyOfUsingTheLegacyBaseTemplate: true,
+            },
+        },
+        {
+            path: "templates/",
+            component: () => import("aleksis.core/components/LegacyBaseTemplate.vue"),
+            name: "csv.importTemplates",
+            meta: {
+                inMenu: true,
+                titleKey: "csv.import_template.menu_title",
+                icon: "mdi-table-cog",
+                permission: "csv_import.view_importtemplate_rule"
+            },
+            props: {
+                byTheGreatnessOfTheAlmightyAleksolotlISwearIAmWorthyOfUsingTheLegacyBaseTemplate: true,
+            },
+        },
+        {
+            path: "templates/upload/",
+            component: () => import("aleksis.core/components/LegacyBaseTemplate.vue"),
+            name: "csv.uploadImportTemplate",
+            props: {
+                byTheGreatnessOfTheAlmightyAleksolotlISwearIAmWorthyOfUsingTheLegacyBaseTemplate: true,
+            },
+        },
+    ]
+}
diff --git a/aleksis/apps/csv_import/frontend/messages/de.json b/aleksis/apps/csv_import/frontend/messages/de.json
new file mode 100644
index 0000000000000000000000000000000000000000..47dcaa606a989d50db1f3c278f1ad802078899d6
--- /dev/null
+++ b/aleksis/apps/csv_import/frontend/messages/de.json
@@ -0,0 +1,11 @@
+{
+    "csv": {
+        "menu_title": "CSV-Import",
+        "import": {
+            "menu_title": "CSV-Datei importieren"
+        },
+        "import_template": {
+            "menu_title": "Import-Vorlagen"
+        }
+    }
+}
diff --git a/aleksis/apps/csv_import/frontend/messages/en.json b/aleksis/apps/csv_import/frontend/messages/en.json
new file mode 100644
index 0000000000000000000000000000000000000000..f02d651cc4828195584696c6c024297d81888f0b
--- /dev/null
+++ b/aleksis/apps/csv_import/frontend/messages/en.json
@@ -0,0 +1,11 @@
+{
+    "csv": {
+        "menu_title": "CSV Import",
+        "import": {
+            "menu_title": "Import CSV File"
+        },
+        "import_template": {
+            "menu_title": "Import Templates"
+        }
+    }
+}
diff --git a/aleksis/apps/csv_import/rules.py b/aleksis/apps/csv_import/rules.py
index c1a2a19b2f80672b346f3e35c40704aedb57b371..a30f37ac5967f6ab6a0929759f5ab8f48bd25c3e 100644
--- a/aleksis/apps/csv_import/rules.py
+++ b/aleksis/apps/csv_import/rules.py
@@ -13,3 +13,6 @@ upload_importtemplate_predicate = has_person & (
     | has_global_perm("csv_import.change_importtemplate")
 )
 add_perm("csv_import.upload_importtemplate_rule", upload_importtemplate_predicate)
+
+view_csv_menu_predicate = import_data_predicate | view_importtemplate_predicate | upload_importtemplate_predicate
+add_perm("csv_import.view_csv_menu_rule", view_csv_menu_predicate)
diff --git a/aleksis/apps/csv_import/urls.py b/aleksis/apps/csv_import/urls.py
index 943cc6836fd7bcbef6251e408c1879bd1b56458a..5c87e4648a74567e1c91da21b4ba5c4bea0d6f0c 100644
--- a/aleksis/apps/csv_import/urls.py
+++ b/aleksis/apps/csv_import/urls.py
@@ -3,7 +3,7 @@ from django.urls import path
 from . import views
 
 urlpatterns = [
-    path("import", views.csv_import, name="csv_import"),
+    path("import/", views.csv_import, name="csv_import"),
     path("templates/", views.ImportTemplateListView.as_view(), name="import_templates"),
     path(
         "templates/upload/", views.ImportTemplateUploadView.as_view(), name="upload_import_template"
diff --git a/pyproject.toml b/pyproject.toml
index bbc3330383bb480488d494a55b0ed1d4236b4669..cd1cd628f0c2947e708517c316532f4ed0aa0572 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -37,7 +37,7 @@ python = "^3.9"
 pandas = "^1.0.0"
 phonenumbers = "^8.10"
 dateparser = "^1.0.0"
-aleksis-core = "^2.7.3"
+aleksis-core = "^3.0.dev3"
 "ruamel.yaml" = "^0.17.19"
 tqdm = "^4.62.3"
 chardet = "^5.0.0"