diff --git a/VERSION.txt b/VERSION.txt
index 46d9d4270eb3b8aeef571a85dd45b3f850c0c97b..8ce7a0b24905af13a0e7084bbd3e29fb675274a1 100644
--- a/VERSION.txt
+++ b/VERSION.txt
@@ -1,3 +1,7 @@
+2.2.5 Fix ATD update not setting createdAt.
+2.2.4 Fix ATD simulator not accepting passkey content field.
+2.2.3 Add allocation id to training run.
+2.2.2 Add createdAt to training definition. Modify TD import to drop 'uploaded' prefix.
 2.2.1 Added a fail-safe check for simulating tool incorrect input files.
 22.12-rc.1 Changed sandboxId type to string, added automatic check if logging works for training events and commands.
 2.1.3 Fix create, update and clone for training definitions
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/simulator/PhaseEvent.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/simulator/PhaseEvent.java
index 3d86a72f55789f49daa6c213e267e1ac02e54faa..bb85529f58704a2e93d6d1e4a98941815fbceaf7 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/simulator/PhaseEvent.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/simulator/PhaseEvent.java
@@ -39,6 +39,7 @@ public class PhaseEvent {
     @ApiModelProperty(value = "Timestamp of event.", required = true, example = "151651561")
     @NotNull(message = "{phaseEvent.timestamp.NotNull.message}")
     private Long timestamp;
+    private String passkeyContent;
     private String answerContent;
     private String answers;
     private Long endTime;
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingDefinition.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingDefinition.java
index 08ff20149684d074fda6d48e502c76c6b85c492b..5262bb8cd70a2ef988c0d09c0934775d2f27e1af 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingDefinition.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingDefinition.java
@@ -71,6 +71,8 @@ public class TrainingDefinition implements Serializable {
     private LocalDateTime lastEdited;
     @Column(name = "last_edited_by", nullable = false)
     private String lastEditedBy;
+    @Column(name = "created_at", nullable = false)
+    private LocalDateTime createdAt;
 
 
     /**
@@ -294,6 +296,22 @@ public class TrainingDefinition implements Serializable {
         this.lastEditedBy = lastEditedBy;
     }
 
+    /**
+     * Gets the time the Training Definition was created at
+     * @return the time of Training Definition creation
+     */
+    public LocalDateTime getCreatedAt() {
+        return createdAt;
+    }
+
+    /**
+     * Sets the creation time of the Training Definition
+     * @param createdAt time of Training Definition creation
+     */
+    public void setCreatedAt(LocalDateTime createdAt) {
+        this.createdAt = createdAt;
+    }
+
     @Override
     public int hashCode() {
         return Objects.hash(description, outcomes, prerequisites, state, title);
@@ -327,6 +345,7 @@ public class TrainingDefinition implements Serializable {
                 ", showStepperBar=" + this.isShowStepperBar() +
                 ", estimatedDuration=" + this.getEstimatedDuration() +
                 ", lastEdited=" + this.getLastEdited() +
+                ", createdAt=" + this.getCreatedAt() +
                 '}';
     }
 }
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingRun.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingRun.java
index ffd173e61afffceb876063ddf7be206ce90a285f..2ba5fa31f4220b64b9e92c0bca77acbdc2333376 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingRun.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingRun.java
@@ -130,6 +130,8 @@ public class TrainingRun implements Serializable {
     private TrainingInstance trainingInstance;
     @Column(name = "sandbox_instance_ref_id", length = 36)
     private String sandboxInstanceRefId;
+    @Column(name = "sandbox_instance_allocation_id")
+    private Integer sandboxInstanceAllocationId;
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "user_id", nullable = false)
     private User participantRef;
@@ -265,7 +267,7 @@ public class TrainingRun implements Serializable {
     /**
      * Gets id of sandbox instance associated with Training run
      *
-     * @return the sandbox instance ref id
+     * @return the sandbox instance reference id
      */
     public String getSandboxInstanceRefId() {
         return sandboxInstanceRefId;
@@ -274,12 +276,29 @@ public class TrainingRun implements Serializable {
     /**
      * Sets id of sandbox instance associated with Training run
      *
-     * @param sandboxInstanceRefId the sandbox instance ref id
+     * @param sandboxInstanceRefId the sandbox instance reference id
      */
     public void setSandboxInstanceRefId(String sandboxInstanceRefId) {
         this.sandboxInstanceRefId = sandboxInstanceRefId;
     }
 
+    /**
+     * Gets sandbox instance allocation id associated with Training run
+     *
+     * @return the sandbox instance allocation id
+     */
+    public Integer getSandboxInstanceAllocationId() {
+        return sandboxInstanceAllocationId;
+    }
+
+    /**
+     * Sets sandbox instance allocation id associated with Training run
+     * @param sandboxInstanceAllocationId the sandbox instance allocation id
+     */
+    public void setSandboxInstanceAllocationId(Integer sandboxInstanceAllocationId) {
+        this.sandboxInstanceAllocationId = sandboxInstanceAllocationId;
+    }
+
     /**
      * Gets number of failed attempts by trainee to submit correct answer on current phase
      *
@@ -392,6 +411,7 @@ public class TrainingRun implements Serializable {
                 ", incorrectAnswerCount=" + this.getIncorrectAnswerCount() +
                 ", solutionTaken=" + this.isSolutionTaken() +
                 ", sandboxInstanceRefId=" + this.getSandboxInstanceRefId() +
+                ", sandboxInstanceAllocationId=" + this.getSandboxInstanceAllocationId() +
                 ", phaseAnswered=" + this.isPhaseAnswered() +
                 '}';
     }
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/trainingdefinition/TrainingDefinitionByIdDTO.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/trainingdefinition/TrainingDefinitionByIdDTO.java
index 27999a3b1863276556f9019e86abcbfe68b0168a..7138d98404c7b4d1339c7942a6b9507b99491715 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/trainingdefinition/TrainingDefinitionByIdDTO.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/trainingdefinition/TrainingDefinitionByIdDTO.java
@@ -47,6 +47,9 @@ public class TrainingDefinitionByIdDTO {
     private LocalDateTime lastEdited;
     @ApiModelProperty(value = "Name of the user who has done the last edit in definition.", example = "John Doe")
     private String lastEditedBy;
+    @ApiModelProperty(value = "Time of creation of definition.", example = "2017-10-19 10:23:54+02")
+    @JsonSerialize(using = LocalDateTimeUTCSerializer.class)
+    private LocalDateTime createdAt;
 
     /**
      * Gets id.
@@ -264,6 +267,14 @@ public class TrainingDefinitionByIdDTO {
         this.lastEditedBy = lastEditedBy;
     }
 
+    public LocalDateTime getCreatedAt() {
+        return createdAt;
+    }
+
+    public void setCreatedAt(LocalDateTime createdAt) {
+        this.createdAt = createdAt;
+    }
+
     @Override
     public boolean equals(Object object) {
         if (!(object instanceof TrainingDefinitionByIdDTO)) return false;
@@ -293,6 +304,7 @@ public class TrainingDefinitionByIdDTO {
                 ", canBeArchived=" + canBeArchived +
                 ", estimatedDuration=" + estimatedDuration +
                 ", lastEdited=" + lastEdited +
+                ", createdAt=" + createdAt +
                 '}';
     }
 }
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/trainingdefinition/TrainingDefinitionDTO.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/trainingdefinition/TrainingDefinitionDTO.java
index a0486bbe0a5201a5bfd83f77d0e3e0c26150b724..865a5167595373d28dc54732614f00fd92b84816 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/trainingdefinition/TrainingDefinitionDTO.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/trainingdefinition/TrainingDefinitionDTO.java
@@ -42,6 +42,9 @@ public class TrainingDefinitionDTO {
     private LocalDateTime lastEdited;
     @ApiModelProperty(value = "Name of the user who has done the last edit in definition.", example = "John Doe")
     private String lastEditedBy;
+    @ApiModelProperty(value = "Time of creation of definition.", example = "2017-10-19 10:23:54+02")
+    @JsonSerialize(using = LocalDateTimeUTCSerializer.class)
+    private LocalDateTime createdAt;
 
     /**
      * Gets id.
@@ -241,6 +244,21 @@ public class TrainingDefinitionDTO {
         this.lastEditedBy = lastEditedBy;
     }
 
+    /**
+     * Gets the time the Training Definition was created at
+     * @return the time of Training Definition creation
+     */
+    public LocalDateTime getCreatedAt() {
+        return createdAt;
+    }
+
+    /**
+     * Sets the creation time of the Training Definition
+     * @param createdAt time of Training Definition creation
+     */
+    public void setCreatedAt(LocalDateTime createdAt) {
+        this.createdAt = createdAt;
+    }
     @Override
     public String toString() {
         return "TrainingDefinitionDTO{" +
@@ -254,6 +272,7 @@ public class TrainingDefinitionDTO {
                 ", canBeArchived=" + canBeArchived +
                 ", estimatedDuration=" + estimatedDuration +
                 ", lastEdited=" + lastEdited +
+                ", createdAt=" + createdAt +
                 '}';
     }
 
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/trainingrun/TrainingRunDTO.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/trainingrun/TrainingRunDTO.java
index 476e06ea469afa0ae71284a1b4af8c426983dbc5..66be6ef71e5f87d0aad63e31b9f4895cf8cbe176 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/trainingrun/TrainingRunDTO.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/trainingrun/TrainingRunDTO.java
@@ -31,6 +31,8 @@ public class TrainingRunDTO {
     private TRState state;
     @ApiModelProperty(value = "Reference to the received sandbox.")
     private String sandboxInstanceRefId;
+    @ApiModelProperty(value = "Allocation id to the received sandbox.")
+    private Integer sandboxInstanceAllocationId;
     @ApiModelProperty(value = "Reference to participant of training run.")
     private UserRefDTO participantRef;
     @ApiModelProperty(value = "Boolean to check whether event logging works.", example = "true")
@@ -128,6 +130,24 @@ public class TrainingRunDTO {
         this.sandboxInstanceRefId = sandboxInstanceRefId;
     }
 
+    /**
+     * Gets sandbox instance allocation id.
+     *
+     * @return the sandbox instance allocation id
+     */
+    public Integer getSandboxInstanceAllocationId() {
+        return sandboxInstanceAllocationId;
+    }
+
+    /**
+     * Sets sandbox instance allocation id.
+     *
+     * @param sandboxInstanceAllocationId the sandbox instance allocation id
+     */
+    public void setSandboxInstanceAllocationId(Integer sandboxInstanceAllocationId) {
+        this.sandboxInstanceAllocationId = sandboxInstanceAllocationId;
+    }
+
     /**
      * Gets participant ref.
      *
@@ -191,6 +211,7 @@ public class TrainingRunDTO {
                 ", endTime=" + endTime +
                 ", state=" + state +
                 ", sandboxInstanceRefId=" + sandboxInstanceRefId +
+                ", sandboxInstanceAllocationId" + sandboxInstanceAllocationId +
                 ", participantRef=" + participantRef +
                 ", eventLoggingState=" + eventLoggingState +
                 ", commandLoggingState=" + commandLoggingState +
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/facade/ExportImportFacade.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/facade/ExportImportFacade.java
index 0fd4f029abc476d1bfccd1ae12858e6a2aeb2cf2..dd025276c56cd35c5d5e1ef0ddb1c1d55a85f2b0 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/facade/ExportImportFacade.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/facade/ExportImportFacade.java
@@ -177,8 +177,8 @@ public class ExportImportFacade {
     @TransactionalWO
     public TrainingDefinitionByIdDTO dbImport(ImportTrainingDefinitionDTO importTrainingDefinitionDTO) {
         importTrainingDefinitionDTO.setState(TDState.UNRELEASED);
-        if (importTrainingDefinitionDTO.getTitle() != null && !importTrainingDefinitionDTO.getTitle().startsWith("Uploaded")) {
-            importTrainingDefinitionDTO.setTitle("Uploaded " + importTrainingDefinitionDTO.getTitle());
+        if (importTrainingDefinitionDTO.getTitle() != null) {
+            importTrainingDefinitionDTO.setTitle(importTrainingDefinitionDTO.getTitle());
         }
 
         TrainingDefinition newDefinition = exportImportMapper.mapToEntity(importTrainingDefinitionDTO);
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/facade/TrainingDefinitionFacade.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/facade/TrainingDefinitionFacade.java
index c8d71d57c5f72107c7a2b35fcbb1b35ad2bba6c8..9dff1a6bb0859642307b60a3c3d13d952e36d6ef 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/facade/TrainingDefinitionFacade.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/facade/TrainingDefinitionFacade.java
@@ -215,6 +215,7 @@ public class TrainingDefinitionFacade {
         TrainingDefinition mappedTrainingDefinition = trainingDefinitionMapper.mapUpdateToEntity(trainingDefinitionUpdateDTO);
         TrainingDefinition trainingDefinition = trainingDefinitionService.findById(trainingDefinitionUpdateDTO.getId());
         mappedTrainingDefinition.setAuthors(new HashSet<>(trainingDefinition.getAuthors()));
+        mappedTrainingDefinition.setCreatedAt(trainingDefinition.getCreatedAt());
         trainingDefinitionService.update(mappedTrainingDefinition);
     }
 
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/service/api/SandboxServiceApi.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/service/api/SandboxServiceApi.java
index c01432ea3f35ce500525db4dc4fc5865c0536913..68fa0c659d5ef431619b1316e27728e4a55a07d9 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/service/api/SandboxServiceApi.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/service/api/SandboxServiceApi.java
@@ -7,6 +7,7 @@ import cz.muni.ics.kypo.training.adaptive.dto.responses.SandboxInfo;
 import cz.muni.ics.kypo.training.adaptive.exceptions.CustomWebClientException;
 import cz.muni.ics.kypo.training.adaptive.exceptions.ForbiddenException;
 import cz.muni.ics.kypo.training.adaptive.exceptions.MicroserviceApiException;
+import org.apache.commons.lang3.tuple.Pair;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Qualifier;
@@ -36,7 +37,7 @@ public class SandboxServiceApi {
     }
 
 
-    public String getAndLockSandboxForTrainingRun(Long poolId) {
+    public Pair<Integer, String> getAndLockSandboxForTrainingRun(Long poolId) {
         try {
             SandboxInfo sandboxInfo = sandboxServiceWebClient
                     .get()
@@ -44,7 +45,7 @@ public class SandboxServiceApi {
                     .retrieve()
                     .bodyToMono(SandboxInfo.class)
                     .block();
-            return sandboxInfo.getId();
+            return Pair.of(sandboxInfo.getAllocationUnitId(), sandboxInfo.getId());
         } catch (CustomWebClientException ex) {
             if (ex.getStatusCode() == HttpStatus.CONFLICT) {
                 throw new ForbiddenException("There is no available sandbox, wait a minute and try again or ask organizer to allocate more sandboxes.");
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingDefinitionService.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingDefinitionService.java
index 2656e723e98db670a40c45fc40e23d1489ee8f61..2648a26c8c6e39d74ab45e1fdb3af3803271d1f3 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingDefinitionService.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingDefinitionService.java
@@ -160,6 +160,7 @@ public class TrainingDefinitionService {
      */
     public TrainingDefinition create(TrainingDefinition trainingDefinition) {
         addLoggedInUserToTrainingDefinitionAsAuthor(trainingDefinition);
+        trainingDefinition.setCreatedAt(getCurrentTimeInUTC());
         LOG.info("Training definition with id: {} created.", trainingDefinition.getId());
         return this.auditAndSave(trainingDefinition);
     }
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingRunService.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingRunService.java
index 7375dd9934b56d8bf6115c7fc5685b662ed97f1e..c47ae1efe42567f29e77d7bdc793db67a00bef6b 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingRunService.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingRunService.java
@@ -27,6 +27,7 @@ import cz.muni.ics.kypo.training.adaptive.service.api.SandboxServiceApi;
 import cz.muni.ics.kypo.training.adaptive.service.api.SmartAssistantServiceApi;
 import cz.muni.ics.kypo.training.adaptive.service.api.UserManagementServiceApi;
 import cz.muni.ics.kypo.training.adaptive.service.audit.AuditEventsService;
+import org.apache.commons.lang3.tuple.Pair;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -604,8 +605,9 @@ public class TrainingRunService {
      * @throws MicroserviceApiException error calling OpenStack Sandbox Service API
      */
     public TrainingRun assignSandbox(TrainingRun trainingRun, long poolId) {
-        String sandboxInstanceRef = this.sandboxServiceApi.getAndLockSandboxForTrainingRun(poolId);
-        trainingRun.setSandboxInstanceRefId(sandboxInstanceRef);
+        Pair<Integer, String> sandboxRefAndId = this.sandboxServiceApi.getAndLockSandboxForTrainingRun(poolId);
+        trainingRun.setSandboxInstanceRefId(sandboxRefAndId.getRight());
+        trainingRun.setSandboxInstanceAllocationId(sandboxRefAndId.getLeft());
         return trainingRunRepository.save(trainingRun);
     }
 
@@ -827,6 +829,7 @@ public class TrainingRunService {
         trainingRun.setState(TRState.ARCHIVED);
         trainingRun.setPreviousSandboxInstanceRefId(trainingRun.getSandboxInstanceRefId());
         trainingRun.setSandboxInstanceRefId(null);
+        trainingRun.setSandboxInstanceAllocationId(null);
         trAcquisitionLockRepository.deleteByParticipantRefIdAndTrainingInstanceId(trainingRun.getParticipantRef().getUserRefId(), trainingRun.getTrainingInstance().getId());
         trainingRunRepository.save(trainingRun);
     }
diff --git a/src/main/resources/db/migration/V11__db_training_definition_created_at.sql b/src/main/resources/db/migration/V11__db_training_definition_created_at.sql
new file mode 100644
index 0000000000000000000000000000000000000000..5ffce87a4128349bdb6690be49f166c6aeecdb50
--- /dev/null
+++ b/src/main/resources/db/migration/V11__db_training_definition_created_at.sql
@@ -0,0 +1 @@
+alter table training_definition add column created_at timestamp not null default current_timestamp;
diff --git a/src/main/resources/db/migration/V12__db_training_run_sandbox_allocation_id.sql b/src/main/resources/db/migration/V12__db_training_run_sandbox_allocation_id.sql
new file mode 100644
index 0000000000000000000000000000000000000000..9aa9b61269601dbe6de7afb8c981125b273f5cbb
--- /dev/null
+++ b/src/main/resources/db/migration/V12__db_training_run_sandbox_allocation_id.sql
@@ -0,0 +1 @@
+alter table training_run add column sandbox_instance_allocation_id int8;
diff --git a/src/test/java/cz/muni/ics/kypo/training/adaptive/util/TestDataFactory.java b/src/test/java/cz/muni/ics/kypo/training/adaptive/util/TestDataFactory.java
index 990aeffadc4fba8ffa6d4dc70e89175ca7e9eab3..eed6cc87eabaf1c8cb2023e76dd32512669bdc0a 100644
--- a/src/test/java/cz/muni/ics/kypo/training/adaptive/util/TestDataFactory.java
+++ b/src/test/java/cz/muni/ics/kypo/training/adaptive/util/TestDataFactory.java
@@ -133,13 +133,13 @@ public class TestDataFactory {
 
     private TrainingDefinition unreleasedDefinition = generateTrainingDefinition("Unreleased definition", "Unreleased description",
             new String[]{"p1", "p2"}, new String[]{"o1", "o2"}, TDState.UNRELEASED, true,
-            LocalDateTime.now(Clock.systemUTC()).minusHours(1), "John Doe");
+            LocalDateTime.now(Clock.systemUTC()).minusHours(1), "John Doe", LocalDateTime.now(Clock.systemUTC()).minusHours(1));
     private TrainingDefinition releasedDefinition = generateTrainingDefinition("Released definition", "Released description",
             new String[]{"p3", "p4"}, new String[]{"o3"}, TDState.RELEASED, true,
-            LocalDateTime.now(Clock.systemUTC()).minusHours(5), "John Doe");
+            LocalDateTime.now(Clock.systemUTC()).minusHours(5), "John Doe", LocalDateTime.now(Clock.systemUTC()).minusHours(5));
     private TrainingDefinition archivedDefinition = generateTrainingDefinition("Archived definition", "Archived description",
             new String[]{"p5"}, new String[]{"o4", "o5", "o6"}, TDState.ARCHIVED, false,
-            LocalDateTime.now(Clock.systemUTC()).minusHours(10), "Jane Doe");
+            LocalDateTime.now(Clock.systemUTC()).minusHours(10), "Jane Doe", LocalDateTime.now(Clock.systemUTC()).minusHours(10));
     private TrainingDefinitionDTO unreleasedDefinitionDTO = generateTrainingDefinitionDTO(unreleasedDefinition);
     private TrainingDefinitionDTO releasedDefinitionDTO = generateTrainingDefinitionDTO(releasedDefinition);
     private TrainingDefinitionDTO archivedDefinitionDTO = generateTrainingDefinitionDTO(archivedDefinition);
@@ -177,16 +177,16 @@ public class TestDataFactory {
             LocalDateTime.now(Clock.systemUTC()).minusHours(10), "Archived instance", "archived-6666");
 
     private TrainingRun runningRun = generateTrainingRun(LocalDateTime.now(Clock.systemUTC()).minusHours(2), LocalDateTime.now(Clock.systemUTC()).plusHours(2),
-            TRState.RUNNING, 2, true, "1L", true,
+            TRState.RUNNING, 2, true, "1L", 1, true,
             "20L");
     private TrainingRun finishedRun = generateTrainingRun(LocalDateTime.now(Clock.systemUTC()).minusHours(10), LocalDateTime.now(Clock.systemUTC()).minusHours(5),
-            TRState.FINISHED, 4, false, "3L", true, "30L");
+            TRState.FINISHED, 4, false, "3L", 3, true, "30L");
     private TrainingRun archivedRun = generateTrainingRun(LocalDateTime.now(Clock.systemUTC()).minusHours(20), LocalDateTime.now(Clock.systemUTC()).minusHours(10),
-            TRState.ARCHIVED, 0, false, "5L", false, "60L");
+            TRState.ARCHIVED, 0, false, "5L", 5, false, "60L");
     private TrainingRunByIdDTO trainingRunByIdDTO = generateTrainingRunByIdDTO(LocalDateTime.now(Clock.systemUTC()).minusHours(2), LocalDateTime.now(Clock.systemUTC()).plusHours(2),
              TRState.RUNNING, "5L");
     private TrainingRunDTO trainingRunDTO = generateTrainingRunDTO(LocalDateTime.now(Clock.systemUTC()).minusHours(9), LocalDateTime.now(Clock.systemUTC()).minusHours(5),
-             TRState.FINISHED, "7L");
+             TRState.FINISHED, "7L", 7);
 //    private AccessedTrainingRunDTO accessedTrainingRunDTO = generateAccessedTrainingRunDTO("Accessed run", LocalDateTime.now(Clock.systemUTC()).minusHours(8), LocalDateTime.now(Clock.systemUTC()).minusHours(4), 5,
 //            6, Actions.RESUME);
 
@@ -647,7 +647,8 @@ public class TestDataFactory {
 
     private TrainingDefinition generateTrainingDefinition(String title, String description, String[] prerequisites,
                                                           String[] outcomes, TDState state, boolean showStepperBar,
-                                                          LocalDateTime lastEdited, String lastEditedBy){
+                                                          LocalDateTime lastEdited, String lastEditedBy,
+                                                          LocalDateTime createdAt){
         TrainingDefinition newTrainingDefinition = new TrainingDefinition();
         newTrainingDefinition.setTitle(title);
         newTrainingDefinition.setDescription(description);
@@ -656,6 +657,7 @@ public class TestDataFactory {
         newTrainingDefinition.setShowStepperBar(showStepperBar);
         newTrainingDefinition.setLastEdited(lastEdited);
         newTrainingDefinition.setLastEditedBy(lastEditedBy);
+        newTrainingDefinition.setCreatedAt(createdAt);
         return newTrainingDefinition;
     }
 
@@ -667,6 +669,7 @@ public class TestDataFactory {
         trainingDefinitionDTO.setState(trainingDefinition.getState());
         trainingDefinitionDTO.setShowStepperBar(trainingDefinition.isShowStepperBar());
         trainingDefinitionDTO.setLastEdited(trainingDefinition.getLastEdited());
+        trainingDefinitionDTO.setCreatedAt(trainingDefinition.getCreatedAt());
         return trainingDefinitionDTO;
     }
 
@@ -691,7 +694,7 @@ public class TestDataFactory {
     }
 
     private TrainingRun generateTrainingRun(LocalDateTime startTime, LocalDateTime endTime, TRState state,
-                                            int incorrectAnswerCount, boolean solutionTaken, String SBIRefId, boolean phaseAnswered, String previousSBIRefId){
+                                            int incorrectAnswerCount, boolean solutionTaken, String SBIRefId, Integer SBIAllocId, boolean phaseAnswered, String previousSBIRefId){
         TrainingRun newTrainingRun = new TrainingRun();
         newTrainingRun.setStartTime(startTime);
         newTrainingRun.setEndTime(endTime);
@@ -699,6 +702,7 @@ public class TestDataFactory {
         newTrainingRun.setIncorrectAnswerCount(incorrectAnswerCount);
         newTrainingRun.setSolutionTaken(solutionTaken);
         newTrainingRun.setSandboxInstanceRefId(SBIRefId);
+        newTrainingRun.setSandboxInstanceAllocationId(SBIAllocId);
         newTrainingRun.setPhaseAnswered(phaseAnswered);
         newTrainingRun.setPreviousSandboxInstanceRefId(previousSBIRefId);
         return newTrainingRun;
@@ -801,12 +805,13 @@ public class TestDataFactory {
         return trainingRunByIdDTO;
     }
 
-    private TrainingRunDTO generateTrainingRunDTO(LocalDateTime start, LocalDateTime end, TRState state, String SBIId){
+    private TrainingRunDTO generateTrainingRunDTO(LocalDateTime start, LocalDateTime end, TRState state, String SBIRefId, Integer SBIAllocId){
         TrainingRunDTO trainingRunDTO = new TrainingRunDTO();
         trainingRunDTO.setStartTime(start);
         trainingRunDTO.setEndTime(end);
         trainingRunDTO.setState(state);
-        trainingRunDTO.setSandboxInstanceRefId(SBIId);
+        trainingRunDTO.setSandboxInstanceRefId(SBIRefId);
+        trainingRunDTO.setSandboxInstanceAllocationId(SBIAllocId);
         return trainingRunDTO;
     }