diff --git a/fixtures/sample/linktype.json b/fixtures/sample/linktype.json
index 059627a6656c1677a55de54db6bd2532983e04d5..b78e54b912701712dab09d0e12613fff3fd9763b 100644
--- a/fixtures/sample/linktype.json
+++ b/fixtures/sample/linktype.json
@@ -3,104 +3,91 @@
     "model": "program.linktype",
     "pk": 1,
     "fields": {
-      "name": "Website",
-      "type": "website"
+      "name": "Website"
     }
   },
   {
     "model": "program.linktype",
     "pk": 2,
     "fields": {
-      "name": "CBA",
-      "type": "cba"
+      "name": "CBA"
     }
   },
   {
     "model": "program.linktype",
     "pk": 3,
     "fields": {
-      "name": "Freie Radios Online",
-      "type": "freie-radios-online"
+      "name": "Freie Radios Online"
     }
   },
   {
     "model": "program.linktype",
     "pk": 4,
     "fields": {
-      "name": "Funkwhale",
-      "type": "funkwhale"
+      "name": "Funkwhale"
     }
   },
   {
     "model": "program.linktype",
     "pk": 5,
     "fields": {
-      "name": "Mixcloud",
-      "type": "mixcloud"
+      "name": "Mixcloud"
     }
   },
   {
     "model": "program.linktype",
     "pk": 6,
     "fields": {
-      "name": "SoundCloud",
-      "type": "soundcloud"
+      "name": "SoundCloud"
     }
   },
   {
     "model": "program.linktype",
     "pk": 7,
     "fields": {
-      "name": "Internet Archive (archive.org)",
-      "type": "internet-archive"
+      "name": "Internet Archive (archive.org)"
     }
   },
   {
     "model": "program.linktype",
     "pk": 8,
     "fields": {
-      "name": "YouTube",
-      "type": "youTube"
+      "name": "YouTube"
     }
   },
   {
     "model": "program.linktype",
     "pk": 9,
     "fields": {
-      "name": "Spotify",
-      "type": "spotify"
+      "name": "Spotify"
     }
   },
   {
     "model": "program.linktype",
     "pk": 10,
     "fields": {
-      "name": "Instagram",
-      "type": "instagram"
+      "name": "Instagram"
     }
   },
   {
     "model": "program.linktype",
     "pk": 11,
     "fields": {
-      "name": "Facebook",
-      "type": "facebook"
+      "name": "Facebook"
     }
   },
   {
     "model": "program.linktype",
     "pk": 12,
     "fields": {
-      "name": "Twitter",
-      "type": "twitter"
+      "name": "Twitter"
     }
   },
   {
     "model": "program.linktype",
     "pk": 13,
     "fields": {
-      "name": "Mastodon",
-      "type": "mastodon"
+      "name": "Mastodon"
     }
   }
 ]
diff --git a/program/admin.py b/program/admin.py
index d936450b8adb936b7d0aaea4062f8a526eed03e4..4dc801a81b991a26105febe9a39c72236eb4170d 100644
--- a/program/admin.py
+++ b/program/admin.py
@@ -24,7 +24,7 @@ class AdminWithNameSlugIsActive(admin.ModelAdmin):
 
 @admin.register(LinkType)
 class LinkTypeAdmin(admin.ModelAdmin):
-    list_display = ("name", "type")
+    list_display = ("name",)
 
 
 @admin.register(License)
diff --git a/program/migrations/0078_remove_linktype_type_linktype_is_active_and_more.py b/program/migrations/0078_remove_linktype_type_linktype_is_active_and_more.py
new file mode 100644
index 0000000000000000000000000000000000000000..124e927ec30a45f74886e24400d58e27e7232825
--- /dev/null
+++ b/program/migrations/0078_remove_linktype_type_linktype_is_active_and_more.py
@@ -0,0 +1,55 @@
+# Generated by Django 4.2.6 on 2024-01-31 19:53
+
+import django.db.models.deletion
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ("program", "0077_alter_host_options_alter_note_options_and_more"),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name="linktype",
+            name="type",
+        ),
+        migrations.AddField(
+            model_name="linktype",
+            name="is_active",
+            field=models.BooleanField(default=True),
+        ),
+        migrations.RemoveField(
+            model_name="hostlink",
+            name="type",
+        ),
+        migrations.AddField(
+            model_name="hostlink",
+            name="type",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE, to="program.linktype"
+            ),
+        ),
+        migrations.RemoveField(
+            model_name="notelink",
+            name="type",
+        ),
+        migrations.AddField(
+            model_name="notelink",
+            name="type",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE, to="program.linktype"
+            ),
+        ),
+        migrations.RemoveField(
+            model_name="showlink",
+            name="type",
+        ),
+        migrations.AddField(
+            model_name="showlink",
+            name="type",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE, to="program.linktype"
+            ),
+        ),
+    ]
diff --git a/program/models.py b/program/models.py
index 0dc71029728ef5255107e0088f72288c8b8d010b..541a434f9a44092766c65641b634db74242e4b0f 100644
--- a/program/models.py
+++ b/program/models.py
@@ -183,18 +183,18 @@ class Host(models.Model):
 
 
 class LinkType(models.Model):
+    is_active = models.BooleanField(default=True)
     name = models.CharField(max_length=32, help_text="Name of the link type")
-    type = models.CharField(max_length=32, help_text="Type of the link")
 
     class Meta:
         ordering = ("name",)
 
     def __str__(self):
-        return self.type
+        return self.name
 
 
 class Link(models.Model):
-    type = models.CharField(max_length=64)
+    type = models.ForeignKey(LinkType, default=1, on_delete=models.CASCADE)
     url = models.URLField()
 
     class Meta:
diff --git a/program/serializers.py b/program/serializers.py
index c349eb2284341a5b642d6fb4258fccb8735f91d6..d5107d0c0ebc2537d87aca0b5a163fff39b0256f 100644
--- a/program/serializers.py
+++ b/program/serializers.py
@@ -194,7 +194,7 @@ class CategorySerializer(serializers.ModelSerializer):
 class LinkTypeSerializer(serializers.ModelSerializer):
     class Meta:
         model = LinkType
-        fields = ("id", "name", "type")
+        fields = ("id", "is_active", "name")
 
 
 class LicenseSerializer(serializers.ModelSerializer):
@@ -211,9 +211,11 @@ class LicenseSerializer(serializers.ModelSerializer):
 
 
 class HostLinkSerializer(serializers.ModelSerializer):
+    type_id = serializers.PrimaryKeyRelatedField(queryset=LinkType.objects.all(), source="type")
+
     class Meta:
+        fields = ("type_id", "url")
         model = HostLink
-        fields = ("type", "url")
 
 
 class PPOIField(serializers.CharField):
@@ -450,9 +452,11 @@ class FundingCategorySerializer(serializers.ModelSerializer):
 
 
 class ShowLinkSerializer(serializers.ModelSerializer):
+    type_id = serializers.PrimaryKeyRelatedField(queryset=LinkType.objects.all(), source="type")
+
     class Meta:
         model = ShowLink
-        fields = ("type", "url")
+        fields = ("type_id", "url")
 
 
 class ShowSerializer(serializers.HyperlinkedModelSerializer):
@@ -884,9 +888,11 @@ class TimeSlotSerializer(serializers.ModelSerializer):
 
 
 class NoteLinkSerializer(serializers.ModelSerializer):
+    type_id = serializers.PrimaryKeyRelatedField(queryset=LinkType.objects.all(), source="type")
+
     class Meta:
         model = NoteLink
-        fields = ("type", "url")
+        fields = ("type_id", "url")
 
 
 tags_json_schema = {"type": "array", "items": {"type": "string"}}