diff --git a/src/main/java/org/etsi/osl/tmf/so641/api/ServiceOrderApiController.java b/src/main/java/org/etsi/osl/tmf/so641/api/ServiceOrderApiController.java
index 746597822ff7c915da2337bf58d52cd52a92e340..60b5182926540c7de0c3101d617ce2f6c23e3a33 100644
--- a/src/main/java/org/etsi/osl/tmf/so641/api/ServiceOrderApiController.java
+++ b/src/main/java/org/etsi/osl/tmf/so641/api/ServiceOrderApiController.java
@@ -143,6 +143,9 @@ public class ServiceOrderApiController implements ServiceOrderApi {
 				return new ResponseEntity<ServiceOrder>(c, HttpStatus.OK);				
 			
 
+		} catch (NotFoundException e) {
+			log.error("Couldn't create Service Order. ", e);
+			return new ResponseEntity<ServiceOrder>(HttpStatus.BAD_REQUEST);
 		} catch (Exception e) {
 			log.error("Couldn't serialize response for content type application/json", e);
 			return new ResponseEntity<ServiceOrder>(HttpStatus.INTERNAL_SERVER_ERROR);
diff --git a/src/main/java/org/etsi/osl/tmf/so641/reposervices/ServiceOrderRepoService.java b/src/main/java/org/etsi/osl/tmf/so641/reposervices/ServiceOrderRepoService.java
index d7214c4134e38adee1fbce93d8b92e3100e1f5d8..808b1ab69070889f7ca4269584ef18b63d2b8f9b 100644
--- a/src/main/java/org/etsi/osl/tmf/so641/reposervices/ServiceOrderRepoService.java
+++ b/src/main/java/org/etsi/osl/tmf/so641/reposervices/ServiceOrderRepoService.java
@@ -25,14 +25,7 @@ import java.nio.charset.StandardCharsets;
 import java.time.OffsetDateTime;
 import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
@@ -45,30 +38,16 @@ import org.apache.commons.logging.LogFactory;
 import org.etsi.osl.tmf.common.model.Any;
 import org.etsi.osl.tmf.common.model.EValueType;
 import org.etsi.osl.tmf.common.model.UserPartRoleType;
-import org.etsi.osl.tmf.common.model.service.Characteristic;
-import org.etsi.osl.tmf.common.model.service.Note;
-import org.etsi.osl.tmf.common.model.service.ResourceRef;
-import org.etsi.osl.tmf.common.model.service.ServiceRef;
+import org.etsi.osl.tmf.common.model.service.*;
 import org.etsi.osl.tmf.prm669.model.RelatedParty;
 import org.etsi.osl.tmf.scm633.model.ServiceSpecCharacteristic;
 import org.etsi.osl.tmf.scm633.model.ServiceSpecCharacteristicValue;
 import org.etsi.osl.tmf.scm633.model.ServiceSpecification;
 import org.etsi.osl.tmf.scm633.reposervices.ServiceSpecificationRepoService;
 import org.etsi.osl.tmf.sim638.service.ServiceRepoService;
+import org.etsi.osl.tmf.so641.api.NotFoundException;
 import org.etsi.osl.tmf.so641.api.ServiceOrderApiRouteBuilderEvents;
-import org.etsi.osl.tmf.so641.model.ServiceOrder;
-import org.etsi.osl.tmf.so641.model.ServiceOrderActionType;
-import org.etsi.osl.tmf.so641.model.ServiceOrderAttributeValueChangeEvent;
-import org.etsi.osl.tmf.so641.model.ServiceOrderAttributeValueChangeNotification;
-import org.etsi.osl.tmf.so641.model.ServiceOrderCreate;
-import org.etsi.osl.tmf.so641.model.ServiceOrderCreateEvent;
-import org.etsi.osl.tmf.so641.model.ServiceOrderCreateNotification;
-import org.etsi.osl.tmf.so641.model.ServiceOrderItem;
-import org.etsi.osl.tmf.so641.model.ServiceOrderRelationship;
-import org.etsi.osl.tmf.so641.model.ServiceOrderStateChangeEvent;
-import org.etsi.osl.tmf.so641.model.ServiceOrderStateChangeNotification;
-import org.etsi.osl.tmf.so641.model.ServiceOrderStateType;
-import org.etsi.osl.tmf.so641.model.ServiceOrderUpdate;
+import org.etsi.osl.tmf.so641.model.*;
 import org.etsi.osl.tmf.so641.repo.ServiceOrderRepository;
 import org.etsi.osl.tmf.util.KrokiClient;
 import org.hibernate.Hibernate;
@@ -319,7 +298,20 @@ public class ServiceOrderRepoService {
 	}
 
     @Transactional
-	public ServiceOrder addServiceOrder(@Valid ServiceOrderCreate serviceOrderCreate) {
+	public ServiceOrder addServiceOrder(@Valid ServiceOrderCreate serviceOrderCreate) throws NotFoundException {
+		// Ensure that all Services Specifications exist
+		List <ServiceOrderItem> serviceOrderItemList = serviceOrderCreate.getOrderItem();
+		for (ServiceOrderItem serviceOrderItem: serviceOrderItemList) {
+			ServiceRestriction serviceRestriction = serviceOrderItem.getService();
+			ServiceSpecificationRef serviceSpecificationRef = serviceRestriction.getServiceSpecification();
+			String serviceSpecificationId = serviceSpecificationRef.getId();
+
+			ServiceSpecification serviceSpecification = serviceSpecRepoService.findByUuid(serviceSpecificationId);
+
+			if (serviceSpecification == null)
+				throw new NotFoundException(400, "There is no Service Specification with Id: " + serviceSpecificationId);
+		}
+
 		ServiceOrder so = new ServiceOrder();
 		so.setOrderDate(OffsetDateTime.now(ZoneOffset.UTC));
 		so.setCategory(serviceOrderCreate.getCategory());
@@ -827,12 +819,15 @@ public class ServiceOrderRepoService {
 	}
 	
 	public String addServiceOrderReturnEager(@Valid ServiceOrderCreate serviceOrderCreate) {
-		ServiceOrder so = this.addServiceOrder(serviceOrderCreate);
 		try {
+			ServiceOrder so = this.addServiceOrder(serviceOrderCreate);
 			return this.getServiceOrderEagerAsString( so.getUuid());
 		} catch (JsonProcessingException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
+		} catch (NotFoundException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
 		}
 		return null;
 	}
diff --git a/src/test/java/org/etsi/osl/services/api/so641/ServiceOrderApiControllerTest.java b/src/test/java/org/etsi/osl/services/api/so641/ServiceOrderApiControllerTest.java
index 3af3d05b4e6b3c43bd2581ad06ea9c66931a3f67..305d454c0c3391b3f454e05b56e7a0d72d6e45b0 100644
--- a/src/test/java/org/etsi/osl/services/api/so641/ServiceOrderApiControllerTest.java
+++ b/src/test/java/org/etsi/osl/services/api/so641/ServiceOrderApiControllerTest.java
@@ -89,6 +89,15 @@ public class ServiceOrderApiControllerTest {
     }
 
 
+    @WithMockUser(username="osadmin", roles = {"ADMIN","USER"})
+    @Test
+    public void testCreateServiceOrderWithNonExistingServiceSpecification() throws Exception {
+
+        createServiceOrderWithNonExistingServiceSpecification();
+        assertThat( serviceOrderRepoService.findAll().size() ).isEqualTo( FIXED_BOOTSTRAPS_SPECS );
+    }
+
+
     @WithMockUser(username="osadmin", roles = {"ADMIN","USER"})
     @Test
     public void testDeleteServiceOrder() throws Exception {
@@ -278,4 +287,35 @@ public class ServiceOrderApiControllerTest {
 
         return responsesSpec;
     }
-}
+
+
+    private void createServiceOrderWithNonExistingServiceSpecification() throws Exception {
+
+        assertThat( serviceOrderRepoService.findAll().size() ).isEqualTo( FIXED_BOOTSTRAPS_SPECS);
+
+        ServiceOrderCreate serviceOrder = new ServiceOrderCreate();
+        serviceOrder.setCategory("Test Category");
+        serviceOrder.setDescription("A Test Service Order");
+        serviceOrder.setRequestedStartDate(OffsetDateTime.now(ZoneOffset.UTC).toString());
+        serviceOrder.setRequestedCompletionDate(OffsetDateTime.now(ZoneOffset.UTC).toString());
+
+        ServiceOrderItem soi = new ServiceOrderItem();
+        serviceOrder.getOrderItem().add(soi);
+        soi.setState(ServiceOrderStateType.ACKNOWLEDGED);
+
+        ServiceRestriction serviceRestriction = new ServiceRestriction();
+        ServiceSpecificationRef aServiceSpecificationRef = new ServiceSpecificationRef();
+        aServiceSpecificationRef.setId("A random non-existing Id");
+        aServiceSpecificationRef.setName("A random non-existing name");
+
+        serviceRestriction.setServiceSpecification(aServiceSpecificationRef);
+        serviceRestriction.setName("aServiceRestriction");
+        soi.setService(serviceRestriction);
+
+        mvc
+            .perform(MockMvcRequestBuilders.post("/serviceOrdering/v4/serviceOrder")
+                .with( SecurityMockMvcRequestPostProcessors.csrf())
+                .contentType(MediaType.APPLICATION_JSON).content(JsonUtils.toJson(serviceOrder)))
+        .andExpect(status().isBadRequest()).andReturn().getResponse().getContentAsString();
+    }
+}
\ No newline at end of file