diff --git a/waltz-data/src/main/java/org/finos/waltz/data/logical_flow/LogicalFlowDao.java b/waltz-data/src/main/java/org/finos/waltz/data/logical_flow/LogicalFlowDao.java
index b57aacf6eb..530b296d58 100644
--- a/waltz-data/src/main/java/org/finos/waltz/data/logical_flow/LogicalFlowDao.java
+++ b/waltz-data/src/main/java/org/finos/waltz/data/logical_flow/LogicalFlowDao.java
@@ -109,7 +109,7 @@ public class LogicalFlowDao {
 
         return ImmutableLogicalFlow.builder()
                 .id(record.getId())
-                .externalId(Optional.ofNullable(record.getExternalId()))
+                .externalId(record.getExternalId())
                 .source(ImmutableEntityReference.builder()
                         .kind(EntityKind.valueOf(record.getSourceEntityKind()))
                         .id(record.getSourceEntityId())
@@ -151,6 +151,7 @@ public class LogicalFlowDao {
         record.setCreatedBy(flow.created().map(UserTimestamp::by).orElse(flow.lastUpdatedBy()));
         record.setIsReadonly(flow.isReadOnly());
         record.setIsRemoved(flow.isRemoved());
+        flow.externalId().ifPresent(record::setExternalId);
         return record;
     };
 
diff --git a/waltz-data/src/main/java/org/finos/waltz/data/physical_flow/PhysicalFlowDao.java b/waltz-data/src/main/java/org/finos/waltz/data/physical_flow/PhysicalFlowDao.java
index 8fdabf7a1e..7c2be5093b 100644
--- a/waltz-data/src/main/java/org/finos/waltz/data/physical_flow/PhysicalFlowDao.java
+++ b/waltz-data/src/main/java/org/finos/waltz/data/physical_flow/PhysicalFlowDao.java
@@ -95,7 +95,7 @@ public class PhysicalFlowDao {
                 .lastAttestedBy(Optional.ofNullable(record.getLastAttestedBy()))
                 .lastAttestedAt(Optional.ofNullable(record.getLastAttestedAt()).map(Timestamp::toLocalDateTime))
                 .isRemoved(record.getIsRemoved())
-                .externalId(Optional.ofNullable(record.getExternalId()))
+                .externalId(record.getExternalId())
                 .entityLifecycleStatus(EntityLifecycleStatus.valueOf(record.getEntityLifecycleStatus()))
                 .created(UserTimestamp.mkForUser(record.getCreatedBy(), record.getCreatedAt()))
                 .isReadOnly(record.getIsReadonly())
@@ -322,7 +322,8 @@ public long create(PhysicalFlow flow) {
         record.setLastAttestedAt(flow.lastAttestedAt().map(Timestamp::valueOf).orElse(null));
         record.setIsRemoved(flow.isRemoved());
         record.setProvenance("waltz");
-        record.setExternalId(flow.externalId().orElse(null));
+
+        flow.externalId().ifPresent(record::setExternalId);
 
         record.setCreatedAt(flow.created().map(UserTimestamp::atTimestamp).orElse(Timestamp.valueOf(flow.lastUpdatedAt())));
         record.setCreatedBy(flow.created().map(UserTimestamp::by).orElse(flow.lastUpdatedBy()));
diff --git a/waltz-data/src/main/java/org/finos/waltz/data/physical_specification/PhysicalSpecificationDao.java b/waltz-data/src/main/java/org/finos/waltz/data/physical_specification/PhysicalSpecificationDao.java
index ca7a73c87b..712a0717d7 100644
--- a/waltz-data/src/main/java/org/finos/waltz/data/physical_specification/PhysicalSpecificationDao.java
+++ b/waltz-data/src/main/java/org/finos/waltz/data/physical_specification/PhysicalSpecificationDao.java
@@ -220,7 +220,6 @@ public Long create(PhysicalSpecification specification) {
         record.setOwningEntityId(specification.owningEntity().id());
 
         record.setName(specification.name());
-        record.setExternalId(specification.externalId().orElse(""));
         record.setDescription(specification.description());
         record.setFormat(specification.format().value());
         record.setLastUpdatedAt(Timestamp.valueOf(specification.lastUpdatedAt()));
@@ -232,6 +231,8 @@ public Long create(PhysicalSpecification specification) {
         record.setCreatedBy(specification.created().get().by());
         record.setIsReadonly(specification.isReadOnly());
 
+        specification.externalId().ifPresent(record::setExternalId);
+
         record.store();
         return record.getId();
     }
diff --git a/waltz-ng/client/physical-flows/svelte/PhysicalFlowRegistrationView.svelte b/waltz-ng/client/physical-flows/svelte/PhysicalFlowRegistrationView.svelte
index c718e9a7b1..5b4a266a5e 100644
--- a/waltz-ng/client/physical-flows/svelte/PhysicalFlowRegistrationView.svelte
+++ b/waltz-ng/client/physical-flows/svelte/PhysicalFlowRegistrationView.svelte
@@ -62,7 +62,7 @@
             description: $physicalSpecification.description,
             format: $physicalSpecification.format,
             lastUpdatedBy: "waltz",
-            externalId: $physicalSpecification.externalId,
+            externalId: !_.isEmpty($physicalSpecification.externalId) ? $physicalSpecification.externalId : null,
             id: $physicalSpecification.id ? $physicalSpecification.id : null
         }
 
@@ -73,7 +73,7 @@
             basisOffset: $physicalFlow.basisOffset,
             criticality: $physicalFlow.criticality,
             description: $physicalFlow.description,
-            externalId: $physicalFlow.externalId
+            externalId: !_.isEmpty($physicalFlow.externalId) ? $physicalFlow.externalId : null
         }
 
         const command = {
diff --git a/waltz-ng/client/physical-flows/svelte/PhysicalSpecificationStep.svelte b/waltz-ng/client/physical-flows/svelte/PhysicalSpecificationStep.svelte
index 6cd67f473e..5aabcf9123 100644
--- a/waltz-ng/client/physical-flows/svelte/PhysicalSpecificationStep.svelte
+++ b/waltz-ng/client/physical-flows/svelte/PhysicalSpecificationStep.svelte
@@ -34,7 +34,7 @@
             workingCopy = Object.assign({}, $physicalSpecification);
         } else {
             workingCopy = {
-                externalId: "",
+                externalId: null,
                 description: "",
                 format: null,
                 name: ""