diff --git a/gregui/api/serializers/guest.py b/gregui/api/serializers/guest.py
index 20a8759264756d36d231509342a3e864af683a46..b9081db704835ca41bd166b3828f3efab511ef11 100644
--- a/gregui/api/serializers/guest.py
+++ b/gregui/api/serializers/guest.py
@@ -1,13 +1,24 @@
 from rest_framework import serializers
 
 from greg.models import Identity, Person
+from greg.utils import is_valid_norwegian_national_id_number
+
+
+def _validateNorwegianNationalIdNumber(value):
+    # Not excepted that D-numbers will be entered through the form, so only
+    # accept national ID numbers
+    if not is_valid_norwegian_national_id_number(value, False):
+        raise serializers.ValidationError("Not a valid Norwegian national ID number")
 
 
 class GuestRegisterSerializer(serializers.ModelSerializer):
-    first_name = serializers.CharField(required=True)
-    last_name = serializers.CharField(required=True)
+    first_name = serializers.CharField(required=False)
+    last_name = serializers.CharField(required=False)
     email = serializers.CharField(required=True)
     mobile_phone = serializers.CharField(required=True)
+    fnr = serializers.CharField(
+        required=False, validators=[_validateNorwegianNationalIdNumber]
+    )
 
     def update(self, instance, validated_data):
         email = validated_data.pop("email")
@@ -20,8 +31,15 @@ class GuestRegisterSerializer(serializers.ModelSerializer):
                 value=email,
             )
         else:
-            instance.private_email.value = email
-            instance.private_email.save()
+            # Only expecting one private e-mail
+            private_email = Identity.objects.get(
+                person_id=instance.id, type=Identity.IdentityType.PRIVATE_EMAIL
+            )
+            private_email.value = email
+            private_email.save()
+            # TODO Figure out why the following did not work
+            # instance.private_email.value = email
+            # instance.private_email.save()
 
         if not instance.private_mobile:
             Identity.objects.create(
@@ -33,6 +51,18 @@ class GuestRegisterSerializer(serializers.ModelSerializer):
             instance.private_mobile.value = mobile_phone
             instance.private_mobile.save()
 
+        if "fnr" in validated_data:
+            fnr = validated_data.pop("fnr")
+            if not instance.fnr:
+                Identity.objects.create(
+                    person=instance,
+                    type=Identity.IdentityType.NORWEGIAN_NATIONAL_ID_NUMBER,
+                    value=fnr,
+                )
+            else:
+                instance.fnr.value = fnr
+                instance.fnr.value.save()
+
         # TODO: we only want to allow changing the name if we don't have one
         #       from a reliable source (Feide/KORR)
         instance.first_name = validated_data["first_name"]
@@ -42,5 +72,5 @@ class GuestRegisterSerializer(serializers.ModelSerializer):
 
     class Meta:
         model = Person
-        fields = ("id", "first_name", "last_name", "email", "mobile_phone")
+        fields = ("id", "first_name", "last_name", "email", "mobile_phone", "fnr")
         read_only_fields = ("id",)