diff --git a/scipost_django/profiles/forms.py b/scipost_django/profiles/forms.py
index f5dfd4367fc7f960753bb8022442651a78a95e18..17025507a9e8f4dc4db1db214389f29a24963ff2 100644
--- a/scipost_django/profiles/forms.py
+++ b/scipost_django/profiles/forms.py
@@ -16,6 +16,8 @@ from django.urls import reverse
 
 from common.forms import ModelChoiceFieldwithid
 from invitations.models import RegistrationInvitation
+from ontology.models.specialty import Specialty
+from ontology.models.topic import Topic
 from organizations.models import Organization
 from scipost.models import Contributor
 from submissions.models import RefereeInvitation
@@ -47,12 +49,52 @@ class ProfileForm(forms.ModelForm):
             "instance_from_type",
             "instance_pk",
         ]
+        widgets = {
+            "specialties": autocomplete.ModelSelect2Multiple(
+                url="/ontology/specialty-autocomplete",
+                attrs={"data-html": True},
+            ),
+            "topics": autocomplete.ModelSelect2Multiple(
+                url="/ontology/topic-autocomplete",
+                attrs={"data-html": True},
+                forward=["specialties"],
+            ),
+        }
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         self.fields["instance_from_type"].widget = forms.HiddenInput()
         self.fields["instance_pk"].widget = forms.HiddenInput()
 
+        self.helper = FormHelper()
+        self.helper.layout = Layout(
+            Div(
+                Div(Field("title"), css_class="col-12 col-md-3"),
+                Div(Field("first_name"), css_class="col-12 col-md"),
+                Div(Field("last_name"), css_class="col-12 col-md"),
+                css_class="row mb-0",
+            ),
+            Div(
+                Div(Field("acad_field"), css_class="col-12 col-md-3 order-3 order-md-1"),
+                Div(Field("first_name_original"), css_class="col-12 order-1 col-md order-md-2"),
+                Div(Field("last_name_original"), css_class="col-12 order-2 col-md order-md-3"),
+                css_class="row mb-0",
+            ),
+            Div(
+                Div(Field("specialties"), css_class="col-12 col-md"),
+                Div(Field("topics"), css_class="col-12 col-md"),
+                css_class="row mb-0",
+            ),
+            Div(
+                Div(Field("orcid_id"), css_class="col-12 col-md"),
+                Div(Field("webpage"), css_class="col-12 col-md"),
+                css_class="row mb-0",
+            ),
+            Div(
+                Submit("submit", "Save", css_class="btn btn-primary"),
+            )
+        )
+
     def clean_email(self):
         """Check that the email isn't yet associated to an existing Profile."""
         cleaned_email = self.cleaned_data["email"]
diff --git a/scipost_django/profiles/templates/profiles/profile_form.html b/scipost_django/profiles/templates/profiles/profile_form.html
index 1511c824b851fb994a9069d75a4e5c5d199ba549..8cd86ffc1093a80909092d4c07bf653367763ace 100644
--- a/scipost_django/profiles/templates/profiles/profile_form.html
+++ b/scipost_django/profiles/templates/profiles/profile_form.html
@@ -1,17 +1,32 @@
 {% extends 'profiles/base.html' %}
 
-{% load bootstrap %}
+{% load scipost_extras %}
+{% load crispy_forms_tags %}
 
 {% block breadcrumb_items %}
   {{ block.super }}
-  <span class="breadcrumb-item">{% if form.instance.id %}Update {{ form.instance }}{% else %}Add new Profile {% if from_type %}(from {{ from_type }}){% endif %}{% endif %}</span>
+  {% if form.instance.id %}
+    <span class="breadcrumb-item"><a href="{{ form.instance.get_absolute_url }}">{{ form.instance }}</a></span>
+    <span class="breadcrumb-item"><a href="#" class="active">Update</a></span>
+  {% else %}
+    <span class="breadcrumb-item"><a href="#" class="active">Create {% if from_type %}(from {{ from_type }}){% endif %}</a></span>
+  {% endif %}
 {% endblock %}
 
 {% block pagetitle %}: Profiles{% endblock pagetitle %}
 
+
 {% block content %}
-  <div class="row">
-    <div class="col-12">
+<div class="row">
+  <div class="col-12">
+      <hgroup class="highlight p-3 mb-3">
+        <h1>{% if form.instance.id %}Update{% else %}Create {{ form.instance|object_name }}{% endif %} Form</h1>
+        {% if form.instance.id %}
+          <p class="m-0 fs-4"><a href="{{ form.instance.get_absolute_url }}">{{ form.instance }}</a></p>
+        {% endif %}
+      </hgroup>
+
+      
       {% if matching_profiles %}
 	<h4>Matching profiles found for this {{ from_type }}</h4>
 	<ul>
@@ -23,10 +38,9 @@
       {% endif %}
 
 
-      <form action="" method="post">
-	{% csrf_token %}
-	{{ form|bootstrap }}
-	<input type="submit" value="Submit" class="btn btn-primary">
+      <form class="mt-4" id="profile_edit_form" method="post" enctype="multipart/form-data">
+        {% csrf_token %}
+        {% crispy form %}
       </form>
     </div>
   </div>
diff --git a/scipost_django/profiles/views.py b/scipost_django/profiles/views.py
index 1f1222e99488d7411a354ca9ffdc5802beac0c93..a4b8cc250131420431e47147f2400cfafb8e9439 100644
--- a/scipost_django/profiles/views.py
+++ b/scipost_django/profiles/views.py
@@ -244,7 +244,6 @@ class ProfileUpdateView(PermissionsMixin, UpdateView):
     model = Profile
     form_class = ProfileForm
     template_name = "profiles/profile_form.html"
-    success_url = reverse_lazy("profiles:profiles")
 
 
 class ProfileDeleteView(PermissionsMixin, DeleteView):