diff --git a/src/InSillyCloWeb/assemblies/migrations/0010_simulatorjob_owner_simulatorjob_owning_session_and_more.py b/src/InSillyCloWeb/assemblies/migrations/0010_simulatorjob_owner_simulatorjob_owning_session_and_more.py
new file mode 100644
index 0000000000000000000000000000000000000000..d6d96f99e194bfb29b0fb8af0a6382e8854d787e
--- /dev/null
+++ b/src/InSillyCloWeb/assemblies/migrations/0010_simulatorjob_owner_simulatorjob_owning_session_and_more.py
@@ -0,0 +1,50 @@
+# Generated by Django 5.1.4 on 2025-04-24 08:47
+
+import assemblies.models
+import django.db.models.deletion
+from django.conf import settings
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('assemblies', '0009_simulatorjob_primers_file'),
+        ('sessions', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='simulatorjob',
+            name='owner',
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name='jobs',
+                to=settings.AUTH_USER_MODEL,
+            ),
+        ),
+        migrations.AddField(
+            model_name='simulatorjob',
+            name='owning_session',
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name='jobs',
+                to='sessions.session',
+            ),
+        ),
+        migrations.AlterField(
+            model_name='simulatorjob',
+            name='primers_file',
+            field=models.FileField(
+                blank=True,
+                help_text='A CSV file where the header is "primerId;sequence".\nNote that the separator is ";".',
+                null=True,
+                upload_to=assemblies.models.job_dependant_primers_file_upload_to,
+                verbose_name='Primers file',
+            ),
+        ),
+    ]
diff --git a/src/InSillyCloWeb/assemblies/models.py b/src/InSillyCloWeb/assemblies/models.py
index b9d424c36d4ed9139fc65d5853a88f3b2e883a68..b9a800390cac2ed56de138b31a5a8e5b1d664091 100644
--- a/src/InSillyCloWeb/assemblies/models.py
+++ b/src/InSillyCloWeb/assemblies/models.py
@@ -321,6 +321,20 @@ class SimulatorJob(models.Model):
         verbose_name="Restriction enzyme",
         help_text="Enzyme used to produce digestion gel",
     )
+    owner = models.ForeignKey(
+        User,
+        on_delete=models.CASCADE,
+        related_name='jobs',
+        null=True,
+        blank=True,
+    )
+    owning_session = models.ForeignKey(
+        Session,
+        on_delete=models.CASCADE,
+        related_name='jobs',
+        null=True,
+        blank=True,
+    )
 
     #########################################################################
     # Function and methods
diff --git a/src/InSillyCloWeb/assemblies/wizard_views.py b/src/InSillyCloWeb/assemblies/wizard_views.py
index e84ff12199f09e72d044637036d800d2ad8189d7..c0c3012681026c1c53ab7573b13b70867e90286b 100644
--- a/src/InSillyCloWeb/assemblies/wizard_views.py
+++ b/src/InSillyCloWeb/assemblies/wizard_views.py
@@ -101,6 +101,9 @@ class AssemblySimulatorNotProtected(wizard_views.NamedUrlSessionWizardView):
     def done(self, form_list, form_dict=None, **kwargs):
 
         sjob = SimulatorJob.objects.create()
+        if self.request.user.is_authenticated:
+            sjob.owner = self.request.user
+        sjob.owning_session = Session.objects.get(session_key=self.request.session.session_key)
         sjob.save()
 
         sjob.add_design_to_dir(