diff --git a/src/main/java/org/etsi/osl/tmf/gsm674/api/Generated.java b/src/main/java/org/etsi/osl/tmf/gsm674/api/Generated.java
new file mode 100644
index 0000000000000000000000000000000000000000..92fbaec5167449362f97923c72969d6c4f3f655f
--- /dev/null
+++ b/src/main/java/org/etsi/osl/tmf/gsm674/api/Generated.java
@@ -0,0 +1,16 @@
+package org.etsi.osl.tmf.gsm674.api;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@Documented
+@Retention(RUNTIME)
+@Target({TYPE, METHOD, CONSTRUCTOR})
+public @interface Generated {
+}
diff --git a/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApi.java b/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApi.java
index 86fc9774055ad973438fb6aaead2a3c51a91f8cd..f87c25b01690438344766460d8f091642d0fe862 100644
--- a/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApi.java
+++ b/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApi.java
@@ -25,6 +25,7 @@ import java.security.Principal;
 import java.util.List;
 import java.util.Optional;
 
+@Generated
 public interface GeographicSiteManagementApi {
     Logger log = LoggerFactory.getLogger(GeographicSiteManagementApi.class);
 
diff --git a/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java b/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java
index 1237d8e036210fdd5ba1741744a7881ebd9df26b..479a58f72e9365f73b2658b04e95553b55db4462 100644
--- a/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java
+++ b/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java
@@ -80,8 +80,13 @@ public class GeographicSiteManagementApiController implements GeographicSiteMana
     public ResponseEntity<GeographicSite> patchGeographicalSite(
             @Parameter(description = "Identifier of the ServiceOrder", required = true) @PathVariable("id") String id,
             @Parameter(description = "The ServiceOrder to be updated", required = true) @Valid @RequestBody GeographicSite geographicSite) {
+        try{
         GeographicSite c = geographicSiteManagementService.updateGeographicSite(id, geographicSite);
 
         return new ResponseEntity<>(c, HttpStatus.OK);
+        }catch (Exception e){
+            log.error(COULD_NOT_SERIALIZE, e);
+            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+        }
     }
 }
diff --git a/src/main/java/org/etsi/osl/tmf/gsm674/repo/GeographicSiteManagementRepository.java b/src/main/java/org/etsi/osl/tmf/gsm674/repo/GeographicSiteManagementRepository.java
index a48f344112392bc311931eff97a4d359f8d7cc47..c65f209878f0d4524667bea677006f0b61eba100 100644
--- a/src/main/java/org/etsi/osl/tmf/gsm674/repo/GeographicSiteManagementRepository.java
+++ b/src/main/java/org/etsi/osl/tmf/gsm674/repo/GeographicSiteManagementRepository.java
@@ -5,7 +5,6 @@ import org.springframework.data.repository.CrudRepository;
 import org.springframework.data.repository.PagingAndSortingRepository;
 import org.springframework.stereotype.Repository;
 
-import java.util.List;
 import java.util.Optional;
 
 @Repository
diff --git a/src/main/java/org/etsi/osl/tmf/gsm674/reposervices/GeographicSiteManagementService.java b/src/main/java/org/etsi/osl/tmf/gsm674/reposervices/GeographicSiteManagementService.java
index 3a396681944772502b29a74e87871faeb6788fa8..68a3ead03b1db59bca74ed1687b4eb9c94f07227 100644
--- a/src/main/java/org/etsi/osl/tmf/gsm674/reposervices/GeographicSiteManagementService.java
+++ b/src/main/java/org/etsi/osl/tmf/gsm674/reposervices/GeographicSiteManagementService.java
@@ -1,7 +1,11 @@
 package org.etsi.osl.tmf.gsm674.reposervices;
 
+import org.etsi.osl.tmf.gsm674.model.CalendarPeriod;
 import org.etsi.osl.tmf.gsm674.model.GeographicSite;
+import org.etsi.osl.tmf.gsm674.model.GeographicSiteRelationship;
+import org.etsi.osl.tmf.gsm674.model.PlaceRefOrValue;
 import org.etsi.osl.tmf.gsm674.repo.GeographicSiteManagementRepository;
+import org.etsi.osl.tmf.prm669.model.RelatedParty;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,7 +20,6 @@ import java.util.Optional;
 public class GeographicSiteManagementService {
     private static final Logger log = LoggerFactory.getLogger(GeographicSiteManagementService.class);
 
-
     private final GeographicSiteManagementRepository geographicSiteManagementRepository;
 
     @Autowired
@@ -39,11 +42,13 @@ public class GeographicSiteManagementService {
    }
 
    public GeographicSite updateGeographicSite(String id,GeographicSite geographicSite){
+        log.info("Update geographic site with id: {}",id);
         Optional<GeographicSite> gs=geographicSiteManagementRepository.findByUuid(id);
        return gs.map(site -> updateFields(geographicSite, site)).orElse(null);
    }
 
    public Void deleteGeographicSiteById(String id){
+       log.info("Delete geographic site with id: {}",id);
         GeographicSite gs=geographicSiteManagementRepository.findByUuid(id).orElseThrow();
         geographicSiteManagementRepository.delete(gs);
        return null;
@@ -51,6 +56,42 @@ public class GeographicSiteManagementService {
 
    private GeographicSite updateFields(GeographicSite newSite, GeographicSite existingSite){
 
+        if(newSite.getName()!=null) existingSite.setCalendar(newSite.getCalendar());
+        if(newSite.getDescription()!=null) existingSite.setDescription(newSite.getDescription());
+        if(newSite.getCode()!=null) existingSite.setCode(newSite.getCode());
+        if (newSite.getStatus()!=null) existingSite.setStatus(newSite.getStatus());
+
+        if(newSite.getGeographicSiteRelationship()!=null){
+            for(GeographicSiteRelationship n : newSite.getGeographicSiteRelationship()){
+                 if(n.getUuid()==null){
+                    existingSite.addGeographicSiteRelationship(n);
+                }
+            }
+        }
+
+        if(newSite.getCalendar()!=null){
+           for(CalendarPeriod c: newSite.getCalendar()){
+               if(c.getUuid()==null){
+                   existingSite.addCalendarPeriod(c);
+               }
+           }
+        }
+
+        if(newSite.getPlaceRefOrValue()!=null){
+            for(PlaceRefOrValue p: newSite.getPlaceRefOrValue()){
+                if (p.getUuid()==null){
+                    existingSite.addPlaceRefOrValue(p);
+                }
+            }
+        }
+
+        if(newSite.getRelatedParties()!=null){
+            for(RelatedParty party: newSite.getRelatedParties()){
+                if(party.getUuid()==null){
+                    existingSite.addRelatedParty(party);
+                }
+            }
+        }
 
        geographicSiteManagementRepository.save(existingSite);
        return existingSite;
diff --git a/src/test/java/org/etsi/osl/services/api/gsm674/GeographicSiteManagementApiControllerTest.java b/src/test/java/org/etsi/osl/services/api/gsm674/GeographicSiteManagementApiControllerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..fe22f9b558f30e832a1b296e49e708703b6f14e1
--- /dev/null
+++ b/src/test/java/org/etsi/osl/services/api/gsm674/GeographicSiteManagementApiControllerTest.java
@@ -0,0 +1,127 @@
+package org.etsi.osl.services.api.gsm674;
+
+import org.etsi.osl.tmf.gsm674.api.GeographicSiteManagementApiController;
+import org.etsi.osl.tmf.gsm674.model.GeographicSite;
+import org.etsi.osl.tmf.gsm674.reposervices.GeographicSiteManagementService;
+import org.junit.jupiter.api.BeforeEach;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.test.context.ActiveProfiles;
+
+import org.junit.jupiter.api.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.when;
+
+@AutoConfigureMockMvc
+@ActiveProfiles("testing")
+class GeographicSiteManagementApiControllerTest {
+
+    @InjectMocks
+    private GeographicSiteManagementApiController controller;
+
+    @Mock
+    private GeographicSiteManagementService service;
+
+    @BeforeEach
+    void setUp() {
+        MockitoAnnotations.openMocks(this);
+    }
+
+    @Test
+    void testRetrieveGeographicSite() {
+        List<GeographicSite> sites = new ArrayList<>();
+        // Add test data to sites list
+        when(service.findAllGeographicSites()).thenReturn(sites);
+
+        ResponseEntity<List<GeographicSite>> response = controller.retrieveGeographicSite();
+
+        assertEquals(HttpStatus.OK, response.getStatusCode());
+        assertEquals(sites, response.getBody());
+    }
+
+    @Test
+    void throwExceptionTestWhenRetrieveGeographicSites(){
+        when(service.findAllGeographicSites()).thenThrow(RuntimeException.class);
+        ResponseEntity<List<GeographicSite>> response = controller.retrieveGeographicSite();
+        assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
+
+    }
+    @Test
+    void testCreateGeographicSite() {
+        GeographicSite site = new GeographicSite();
+
+        when(service.createGeographicSite(any())).thenReturn(site);
+
+        ResponseEntity<GeographicSite> response = controller.createGeographicSite(site);
+
+        assertEquals(HttpStatus.OK, response.getStatusCode());
+        assertEquals(site, response.getBody());
+    }
+
+    @Test
+    void testExceptionWhenCreateGeographicSite(){
+        GeographicSite site = new GeographicSite();
+
+        when(service.createGeographicSite(any())).thenThrow(RuntimeException.class);
+
+        ResponseEntity<GeographicSite> response = controller.createGeographicSite(site);
+
+        assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
+    }
+
+    @Test
+    void testDeleteGeographicSite() {
+
+        doNothing().when(service).deleteGeographicSiteById(anyString());
+        ResponseEntity<Void> response = controller.deleteGeographicSite("siteId");
+
+        assertEquals(HttpStatus.OK, response.getStatusCode());
+    }
+
+    @Test
+    void testDeleteGeographicSiteException() {
+
+        doThrow(RuntimeException.class).when(service).deleteGeographicSiteById(anyString());
+        ResponseEntity<Void> response = controller.deleteGeographicSite("siteId");
+
+        assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
+    }
+
+    @Test
+    void testPatchGeographicalSite() {
+        String siteId = "siteId";
+        GeographicSite updatedSite = new GeographicSite();
+        // Set up mock service behavior
+        when(service.updateGeographicSite(anyString(), any())).thenReturn(updatedSite);
+
+        ResponseEntity<GeographicSite> response = controller.patchGeographicalSite(siteId, updatedSite);
+
+        assertEquals(HttpStatus.OK, response.getStatusCode());
+        assertEquals(updatedSite, response.getBody());
+    }
+
+    @Test
+    void testPatchGeographicalSiteException() {
+        String siteId = "siteId";
+        GeographicSite updatedSite = new GeographicSite();
+        // Set up mock service behavior
+        when(service.updateGeographicSite(anyString(), any())).thenThrow(RuntimeException.class);
+
+        ResponseEntity<GeographicSite> response = controller.patchGeographicalSite(siteId, updatedSite);
+
+        assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
+    }
+
+}
diff --git a/src/test/java/org/etsi/osl/services/api/gsm674/GeographicSiteManagementServiceTest.java b/src/test/java/org/etsi/osl/services/api/gsm674/GeographicSiteManagementServiceTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..7c7952d2cf525f935c106911d9e1c44345a44b98
--- /dev/null
+++ b/src/test/java/org/etsi/osl/services/api/gsm674/GeographicSiteManagementServiceTest.java
@@ -0,0 +1,97 @@
+package org.etsi.osl.services.api.gsm674;
+import org.etsi.osl.tmf.gsm674.model.GeographicSite;
+import org.etsi.osl.tmf.gsm674.repo.GeographicSiteManagementRepository;
+import org.etsi.osl.tmf.gsm674.reposervices.GeographicSiteManagementService;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.test.context.ActiveProfiles;
+
+import java.util.List;
+import java.util.Optional;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
+
+@AutoConfigureMockMvc
+@ActiveProfiles("testing")
+class GeographicSiteManagementServiceTest {
+    @InjectMocks
+    private GeographicSiteManagementService service;
+
+    @Mock
+    private GeographicSiteManagementRepository repository;
+
+    @BeforeEach
+    void setUp() {
+        MockitoAnnotations.initMocks(this);
+    }
+
+    @Test
+    void testFindAllGeographicSites() {
+        // Mock data
+        List<GeographicSite> sites = List.of(new GeographicSite(), new GeographicSite());
+        when(repository.findAll()).thenReturn(sites);
+
+        List<GeographicSite> result = service.findAllGeographicSites();
+
+        assertEquals(sites, result);
+    }
+
+    @Test
+    void testFindGeographicSiteByUUID() {
+        // Mock data
+        String uuid = "123";
+        GeographicSite site = new GeographicSite();
+        when(repository.findByUuid(uuid)).thenReturn(Optional.of(site));
+
+        Optional<GeographicSite> result = service.findGeographicSiteByUUID(uuid);
+
+        assertTrue(result.isPresent());
+        assertEquals(site, result.get());
+    }
+
+    @Test
+    void testCreateGeographicSite() {
+        // Mock data
+        GeographicSite site = new GeographicSite();
+        when(repository.save(any())).thenReturn(site);
+
+        GeographicSite result = service.createGeographicSite(site);
+
+        assertEquals(site, result);
+    }
+
+    @Test
+    void testUpdateGeographicSite() {
+        // Mock data
+        String id = "123";
+        GeographicSite existingSite = new GeographicSite();
+        GeographicSite newSite = new GeographicSite();
+        when(repository.findByUuid(id)).thenReturn(Optional.of(existingSite));
+        when(repository.save(any())).thenReturn(existingSite);
+
+        GeographicSite result = service.updateGeographicSite(id, newSite);
+
+        assertNotNull(result);
+        assertEquals(existingSite, result);
+        // Add additional assertions for updated fields if needed
+    }
+
+    @Test
+    void testDeleteGeographicSiteById() {
+        // Mock data
+        String id = "123";
+        GeographicSite existingSite = new GeographicSite();
+        when(repository.findByUuid(id)).thenReturn(Optional.of(existingSite));
+
+        Void result = service.deleteGeographicSiteById(id);
+
+        assertNull(result);
+        verify(repository, times(1)).delete(existingSite);
+    }
+}