diff --git a/src/main/java/no/nibio/vips/logic/service/ObservationService.java b/src/main/java/no/nibio/vips/logic/service/ObservationService.java
index 45c47717e9973c92c9eeadc333a9c27db9822672..ba9704572df2336831fff1d303ca1c5ae9e3d015 100755
--- a/src/main/java/no/nibio/vips/logic/service/ObservationService.java
+++ b/src/main/java/no/nibio/vips/logic/service/ObservationService.java
@@ -919,128 +919,131 @@ public class ObservationService {
                 });
                 LOGGER.info("Syncing for user {} with roles {}. mapFromApp.get(\"userId\")={}", user.getUserId(), user.getVipsLogicRoles(), mapFromApp.get("userId"));
 
-            // Check if it is marked as deleted or not
-            if (mapFromApp.get("deleted") != null && ((Boolean) mapFromApp.get("deleted").equals(true))) {
-                if (observationBean.getObservation((Integer) mapFromApp.get("observationId")) != null) {
-                    observationBean.deleteObservation((Integer) mapFromApp.get("observationId"));
-                    return Response.ok().build();
+                // Check if it is marked as deleted or not
+                if (mapFromApp.get("deleted") != null && ((Boolean) mapFromApp.get("deleted").equals(true))) {
+                    if (observationBean.getObservation((Integer) mapFromApp.get("observationId")) != null) {
+                        observationBean.deleteObservation((Integer) mapFromApp.get("observationId"));
+                        return Response.ok().build();
+                    } else {
+                        return Response.status(Status.NOT_FOUND).build();
+                    }
                 } else {
-                    return Response.status(Status.NOT_FOUND).build();
-                }
-            } else {
-                Integer observationId = (Integer) mapFromApp.get("observationId");
-                Date now = new Date(); // For setting timestamps
+                    Integer observationId = (Integer) mapFromApp.get("observationId");
+                    Date now = new Date(); // For setting timestamps
 
-                Observation mergeObs;
-                if (observationId > 0) { // Observation already in database
-                    mergeObs = observationBean.getObservation(observationId);
-                    if (mergeObs == null) {
-                        LOGGER.warn("Observation with id {} not found", observationId);
-                        return Response.status(Status.NOT_FOUND).build();
+                    Observation mergeObs;
+                    if (observationId > 0) { // Observation already in database
+                        mergeObs = observationBean.getObservation(observationId);
+                        if (mergeObs == null) {
+                            LOGGER.warn("Observation with id {} not found", observationId);
+                            return Response.status(Status.NOT_FOUND).build();
+                        }
+                    } else { // New observation!
+                        mergeObs = new Observation("APP");
                     }
-                } else { // New observation!
-                    mergeObs = new Observation("APP");
-                }
 
-                // Observation time series
-                if (mapFromApp.get("observationTimeSeriesId") != null) {
-                    Integer observationTimeSeriesId = (Integer) mapFromApp.get("observationTimeSeriesId");
-                    mergeObs.setObservationTimeSeries(observationTimeSeriesBean.getObservationTimeSeries(observationTimeSeriesId));
-                }
-                // Pest organism
-                mergeObs.setOrganism(organismBean.getOrganism((Integer) mapFromApp.get("organismId")));
-                // Crop organism
-                mergeObs.setCropOrganism(organismBean.getOrganism((Integer) mapFromApp.get("cropOrganismId")));
-                // Other properties
+                    // Observation time series
+                    if (mapFromApp.get("observationTimeSeriesId") != null) {
+                        Integer observationTimeSeriesId = (Integer) mapFromApp.get("observationTimeSeriesId");
+                        mergeObs.setObservationTimeSeries(observationTimeSeriesBean.getObservationTimeSeries(observationTimeSeriesId));
+                    }
+                    // Pest organism
+                    mergeObs.setOrganism(organismBean.getOrganism((Integer) mapFromApp.get("organismId")));
+                    // Crop organism
+                    mergeObs.setCropOrganism(organismBean.getOrganism((Integer) mapFromApp.get("cropOrganismId")));
+                    // Other properties
                     mergeObs.setTimeOfObservation(oM.convertValue(mapFromApp.get("timeOfObservation"), new TypeReference<Date>() {
                     }));
-                mergeObs.setIsPositive(mapFromApp.get("isPositive") != null ? (Boolean) mapFromApp.get("isPositive") : false);
-                mergeObs.setUserId(mapFromApp.get("userId") != null ? (Integer) mapFromApp.get("userId") : user.getUserId());
-                mergeObs.setGeoinfo((String) mapFromApp.get("geoinfo"));
-                mergeObs.setLocationPointOfInterestId(mapFromApp.get("locationPointOfInterestId") != null ? (Integer) mapFromApp.get("locationPointOfInterestId") : null);
-                mergeObs.setObservationHeading(mapFromApp.get("observationHeading") != null ? (String) mapFromApp.get("observationHeading") : null);
-                mergeObs.setObservationText(mapFromApp.get("observationText") != null ? (String) mapFromApp.get("observationText") : null);
-                mergeObs.setBroadcastMessage(mapFromApp.get("broadcastMessage") != null ? (Boolean) mapFromApp.get("broadcastMessage") : false);
+                    mergeObs.setIsPositive(mapFromApp.get("isPositive") != null ? (Boolean) mapFromApp.get("isPositive") : false);
+                    mergeObs.setUserId(mapFromApp.get("userId") != null ? (Integer) mapFromApp.get("userId") : user.getUserId());
+                    mergeObs.setGeoinfo((String) mapFromApp.get("geoinfo"));
+                    mergeObs.setLocationPointOfInterestId(mapFromApp.get("locationPointOfInterestId") != null ? (Integer) mapFromApp.get("locationPointOfInterestId") : null);
 
-                mergeObs.setIsQuantified(mapFromApp.get("isQuantified") != null ? (Boolean) mapFromApp.get("isQuantified") : false);
-                mergeObs.setLocationIsPrivate(mapFromApp.get("locationIsPrivate") != null ? (Boolean) mapFromApp.get("locationIsPrivate") : false);
-                Object polygonServiceValue = mapFromApp.get("polygonService");
-                if (polygonServiceValue != null && !polygonServiceValue.toString().isBlank()) {
-                    PolygonService polygonService = oM.convertValue(mapFromApp.get("polygonService"), PolygonService.class);
-                    mergeObs.setPolygonService(polygonService);
-                }
+                    mergeObs.setObservationHeading(getStringPropertyOrNull(mapFromApp, "observationHeading"));
+                    mergeObs.setObservationText(getStringPropertyOrNull(mapFromApp, "observationText"));
+                    mergeObs.setBroadcastMessage(mapFromApp.get("broadcastMessage") != null ? (Boolean) mapFromApp.get("broadcastMessage") : false);
+
+                    mergeObs.setIsQuantified(mapFromApp.get("isQuantified") != null ? (Boolean) mapFromApp.get("isQuantified") : false);
+                    mergeObs.setLocationIsPrivate(mapFromApp.get("locationIsPrivate") != null ? (Boolean) mapFromApp.get("locationIsPrivate") : false);
+                    Object polygonServiceValue = mapFromApp.get("polygonService");
+                    if (polygonServiceValue != null && !polygonServiceValue.toString().isBlank()) {
+                        PolygonService polygonService = oM.convertValue(mapFromApp.get("polygonService"), PolygonService.class);
+                        mergeObs.setPolygonService(polygonService);
+                    }
 
-                mergeObs.setObservationDataSchema(observationBean.getObservationDataSchema(user.getOrganization_id(), mergeObs.getOrganismId()));
-                mergeObs.setObservationData(mapFromApp.get("observationData") != null ? mapFromApp.get("observationData").toString() : null);
-                mergeObs.setLastEditedBy(user.getUserId());
-                mergeObs.setLastEditedTime(now);
+                    mergeObs.setObservationDataSchema(observationBean.getObservationDataSchema(user.getOrganization_id(), mergeObs.getOrganismId()));
 
-                boolean sendNotification = false; // Notification should be sent if status is set to approved
-                boolean newRegistration = mergeObs.getObservationId() == null || mergeObs.getObservationId() <= 0;
-                boolean automaticApproval = userBean.authorizeUser(user, VipsLogicRole.OBSERVATION_AUTHORITY, VipsLogicRole.ORGANIZATION_ADMINISTRATOR, VipsLogicRole.SUPERUSER);
-                if (newRegistration) {
-                    if (automaticApproval) {
-                        LOGGER.info("Set status to approved for new observation registered by user {}", user.getUserId());
-                        mergeObs.setStatusChangedByUserId(user.getUserId());
-                        mergeObs.setStatusChangedTime(now);
-                        mergeObs.setStatusTypeId(ObservationStatusType.STATUS_APPROVED);
-                        sendNotification = mergeObs.getBroadcastMessage(); // Only send for approved observations
+                    mergeObs.setObservationData(getStringPropertyOrNull(mapFromApp, "observationData"));
+                    mergeObs.setLastEditedBy(user.getUserId());
+                    mergeObs.setLastEditedTime(now);
+
+                    boolean sendNotification = false; // Notification should be sent if status is set to approved
+                    boolean newRegistration = mergeObs.getObservationId() == null || mergeObs.getObservationId() <= 0;
+                    boolean automaticApproval = userBean.authorizeUser(user, VipsLogicRole.OBSERVATION_AUTHORITY, VipsLogicRole.ORGANIZATION_ADMINISTRATOR, VipsLogicRole.SUPERUSER);
+                    if (newRegistration) {
+                        if (automaticApproval) {
+                            LOGGER.info("Set status to approved for new observation registered by user {}", user.getUserId());
+                            mergeObs.setStatusChangedByUserId(user.getUserId());
+                            mergeObs.setStatusChangedTime(now);
+                            mergeObs.setStatusTypeId(ObservationStatusType.STATUS_APPROVED);
+                            sendNotification = mergeObs.getBroadcastMessage(); // Only send for approved observations
+                        } else {
+                            LOGGER.info("Set status to pending for new observation registered by user {}", user.getUserId());
+                            mergeObs.setStatusTypeId(Observation.STATUS_TYPE_ID_PENDING);
+                        }
                     } else {
-                        LOGGER.info("Set status to pending for new observation registered by user {}", user.getUserId());
-                        mergeObs.setStatusTypeId(Observation.STATUS_TYPE_ID_PENDING);
-                    }
-                } else {
-                    // Existing observation
-                    Integer newStatusTypeId = (Integer) mapFromApp.get("statusTypeId");
-                    Integer originalStatusTypeId = mergeObs.getStatusTypeId();
-                    if (automaticApproval && ObservationStatusType.STATUS_PENDING.equals(newStatusTypeId) && ObservationStatusType.STATUS_PENDING.equals(originalStatusTypeId)) {
-                        LOGGER.info("Set status to approved for existing observation {} and user {}", mergeObs.getObservationId(), user.getUserId());
-                        mergeObs.setStatusChangedByUserId(user.getUserId());
-                        mergeObs.setStatusChangedTime(now);
-                        mergeObs.setStatusTypeId(ObservationStatusType.STATUS_APPROVED);
-                        sendNotification = mergeObs.getBroadcastMessage(); // Only send for approved observations
+                        // Existing observation
+                        Integer newStatusTypeId = (Integer) mapFromApp.get("statusTypeId");
+                        Integer originalStatusTypeId = mergeObs.getStatusTypeId();
+                        if (automaticApproval && ObservationStatusType.STATUS_PENDING.equals(newStatusTypeId) && ObservationStatusType.STATUS_PENDING.equals(originalStatusTypeId)) {
+                            LOGGER.info("Set status to approved for existing observation {} and user {}", mergeObs.getObservationId(), user.getUserId());
+                            mergeObs.setStatusChangedByUserId(user.getUserId());
+                            mergeObs.setStatusChangedTime(now);
+                            mergeObs.setStatusTypeId(ObservationStatusType.STATUS_APPROVED);
+                            sendNotification = mergeObs.getBroadcastMessage(); // Only send for approved observations
+                        }
+                        // No option for changing the status in registration form in app
                     }
-                    // No option for changing the status in registration form in app
-                }
 
-                // Input check before storing, location must be set
-                if ((mergeObs.getGeoinfo() == null || mergeObs.getGeoinfo().trim().isEmpty()) && mergeObs.getLocationPointOfInterestId() == null) {
-                    LOGGER.error("The observation is missing location data, return bad request.");
-                    return Response.status(Status.BAD_REQUEST).entity("{\"error\": \"The observation is missing location data.\"}").type(MediaType.APPLICATION_JSON).build();
-                }
+                    // Input check before storing, location must be set
+                    if ((mergeObs.getGeoinfo() == null || mergeObs.getGeoinfo().trim().isEmpty()) && mergeObs.getLocationPointOfInterestId() == null) {
+                        LOGGER.error("The observation is missing location data, return bad request.");
+                        return Response.status(Status.BAD_REQUEST).entity("{\"error\": \"The observation is missing location data.\"}").type(MediaType.APPLICATION_JSON).build();
+                    }
 
-                // We need to get an observation Id before storing the illustrations!
-                mergeObs = observationBean.storeObservation(mergeObs);
+                    // We need to get an observation Id before storing the illustrations!
+                    mergeObs = observationBean.storeObservation(mergeObs);
 
-                // ObservationIllustrationSet
-                // Including data that may need to be stored
-                if (mapFromApp.get("observationIllustrationSet") != null) {
-                    List<Map<Object, Object>> illusMaps = (List<Map<Object, Object>>) mapFromApp.get("observationIllustrationSet");
-                    for (Map<Object, Object> illusMap : illusMaps) {
-                        ObservationIllustrationPK pk = oM.convertValue(illusMap.get("observationIllustrationPK"), new TypeReference<ObservationIllustrationPK>() {
-                        });
+                    // ObservationIllustrationSet
+                    // Including data that may need to be stored
+                    if (mapFromApp.get("observationIllustrationSet") != null) {
+                        List<Map<Object, Object>> illusMaps = (List<Map<Object, Object>>) mapFromApp.get("observationIllustrationSet");
+                        for (Map<Object, Object> illusMap : illusMaps) {
+                            ObservationIllustrationPK pk = oM.convertValue(illusMap.get("observationIllustrationPK"), new TypeReference<ObservationIllustrationPK>() {
+                            });
 
-                        if (illusMap.get("deleted") != null && ((Boolean) illusMap.get("deleted")) == true) {
-                            observationBean.deleteObservationIllustration(mergeObs, new String[]{pk.getFileName()});
-                        } else if (illusMap.get("uploaded") != null && ((Boolean) illusMap.get("uploaded")) == false && illusMap.get("imageTextData") != null) {
-                            mergeObs = observationBean.storeObservationIllustration(mergeObs, pk.getFileName(), (String) illusMap.get("imageTextData"));
+                            if (illusMap.get("deleted") != null && ((Boolean) illusMap.get("deleted")) == true) {
+                                observationBean.deleteObservationIllustration(mergeObs, new String[]{pk.getFileName()});
+                            } else if (illusMap.get("uploaded") != null && ((Boolean) illusMap.get("uploaded")) == false && illusMap.get("imageTextData") != null) {
+                                mergeObs = observationBean.storeObservationIllustration(mergeObs, pk.getFileName(), (String) illusMap.get("imageTextData"));
+                            }
                         }
                     }
-                }
-                boolean messagingSystemDisabled = System.getProperty("DISABLE_MESSAGING_SYSTEM") != null && System.getProperty("DISABLE_MESSAGING_SYSTEM").equals("true");
-                LOGGER.info("Notification should be sent? " + sendNotification);
-                LOGGER.info("System property DISABLE_MESSAGING_SYSTEM = " + System.getProperty("DISABLE_MESSAGING_SYSTEM"));
-                LOGGER.info("Messaging system is disabled? " + messagingSystemDisabled);
+                    String disableMessagingSystemProperty = System.getProperty("no.nibio.vips.logic.DISABLE_MESSAGING_SYSTEM");
+                    boolean messagingSystemDisabled = disableMessagingSystemProperty != null && disableMessagingSystemProperty.equals("true");
 
-                // All transactions finished, we can send notifications
-                // if conditions are met
-                if (sendNotification && !messagingSystemDisabled) {
-                    LOGGER.info("Sending the message!");
-                    messagingBean.sendUniversalMessage(mergeObs);
-                }
+                    LOGGER.info("Send notification? " + sendNotification);
+                    LOGGER.info("Messaging system enabled? " + !messagingSystemDisabled);
 
-                return Response.ok().entity(mergeObs).build();
-            }
+                    // All transactions finished, we can send notifications
+                    // if conditions are met
+                    if (sendNotification && !messagingSystemDisabled) {
+                        LOGGER.info("Send message");
+                        messagingBean.sendUniversalMessage(mergeObs);
+                    }
+
+                    return Response.ok().entity(mergeObs).build();
+                }
             } catch (IOException e) {
                 return Response.serverError().entity(e).build();
             }
@@ -1069,4 +1072,20 @@ public class ObservationService {
                 .collect(Collectors.toList());
     }
 
+    /**
+     * Utility method for getting the string value of a given property in a given map.
+     *
+     * @param map          The map from which to retrieve the value
+     * @param propertyName The name of the property
+     * @return The value of the given property, null if not existing or empty
+     */
+    private String getStringPropertyOrNull(Map<Object, Object> map, String propertyName) {
+        Object mapValue = map.get(propertyName);
+        if (mapValue == null) {
+            return null;
+        }
+        String strMapValue = (String) mapValue;
+        return !strMapValue.isBlank() ? strMapValue : null;
+    }
+
 }