diff --git a/src/test/java/org/eclipse/openk/contactbasedata/controller/CompanyControllerTest.java b/src/test/java/org/eclipse/openk/contactbasedata/controller/CompanyControllerTest.java
index 27963ea..1448b60 100644
--- a/src/test/java/org/eclipse/openk/contactbasedata/controller/CompanyControllerTest.java
+++ b/src/test/java/org/eclipse/openk/contactbasedata/controller/CompanyControllerTest.java
@@ -19,6 +19,7 @@
 import org.eclipse.openk.contactbasedata.service.CompanyService;
 import org.eclipse.openk.contactbasedata.support.MockDataHelper;
 import org.eclipse.openk.contactbasedata.viewmodel.CompanyDto;
+import org.eclipse.openk.contactbasedata.viewmodel.ContactPersonDto;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
@@ -30,6 +31,7 @@
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.web.servlet.MockMvc;
 
+import java.util.List;
 import java.util.UUID;
 
 import static org.hamcrest.Matchers.is;
@@ -53,7 +55,7 @@
 
 
     @Test
-    public void shouldReturnARequestedExtPerson() throws Exception {
+    public void shouldReturnARequestedCompany() throws Exception {
         CompanyDto ep = MockDataHelper.mockCompanyDto();
 
         when(companyService.findCompany(any(UUID.class))).thenReturn(ep);
@@ -66,7 +68,7 @@
 
 
     @Test
-    public void shouldReturnAllExtPerson() throws Exception {
+    public void shouldReturnAllCompany() throws Exception {
         Page<CompanyDto> epPage = MockDataHelper.mockCompanyDtoPage();
 
         when(companyService.findCompanies(any(Pageable.class))).thenReturn(epPage);
@@ -78,7 +80,7 @@
     }
 
     @Test
-    public void shouldUpdateExtPerson() throws Exception {
+    public void shouldUpdateCompany() throws Exception {
         CompanyDto ep = MockDataHelper.mockCompanyDto();
 
         when( companyService.updateCompany(any(CompanyDto.class))).thenReturn(ep);
@@ -90,7 +92,7 @@
     }
 
     @Test
-    public void shouldNotUpdateExtPersonDueToException() throws Exception {
+    public void shouldNotUpdateCompanyDueToException() throws Exception {
         CompanyDto ep = MockDataHelper.mockCompanyDto();
 
         when( companyService.updateCompany(any(CompanyDto.class))).thenReturn(ep);
@@ -103,7 +105,7 @@
     }
 
     @Test
-    public void shouldInsertExtPerson() throws Exception {
+    public void shouldInsertCompany() throws Exception {
         CompanyDto companyDto = MockDataHelper.mockCompanyDto();
 
         when( companyService.insertCompany(any(CompanyDto.class))).thenReturn(companyDto);
@@ -116,4 +118,15 @@
                 .andExpect(jsonPath("$.contactNote", is(companyDto.getContactNote())))
                 .andExpect(status().is2xxSuccessful());
     }
+
+    @Test
+    public void shouldReturnContactPerson() throws Exception {
+        List<ContactPersonDto> contactPersonDtos = MockDataHelper.mockContactPersonDtos();
+
+        when( companyService.findContactPersonsToCompany(any(UUID.class))).thenReturn(contactPersonDtos);
+
+        mockMvc.perform(get("/companies/"+UUID.randomUUID().toString()+"/contact-persons" ))
+                .andExpect(status().is2xxSuccessful())
+                .andExpect(content().contentType(MediaType.APPLICATION_JSON));
+    }
 }
\ No newline at end of file
diff --git a/src/test/java/org/eclipse/openk/contactbasedata/service/CompanyServiceTest.java b/src/test/java/org/eclipse/openk/contactbasedata/service/CompanyServiceTest.java
index ba0b175..9a89a99 100644
--- a/src/test/java/org/eclipse/openk/contactbasedata/service/CompanyServiceTest.java
+++ b/src/test/java/org/eclipse/openk/contactbasedata/service/CompanyServiceTest.java
@@ -24,6 +24,7 @@
 import org.eclipse.openk.contactbasedata.repository.SalutationRepository;
 import org.eclipse.openk.contactbasedata.support.MockDataHelper;
 import org.eclipse.openk.contactbasedata.viewmodel.CompanyDto;
+import org.eclipse.openk.contactbasedata.viewmodel.ContactPersonDto;
 import org.junit.jupiter.api.Test;
 import org.mockito.stubbing.Answer;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -32,6 +33,7 @@
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.test.context.ContextConfiguration;
 
+import java.util.List;
 import java.util.Optional;
 import java.util.UUID;
 
@@ -141,4 +143,21 @@
         assertEquals(epDto.getCompanyName(), savedDto.getCompanyName());
         assertEquals(epDto.getCompanyType(), savedDto.getCompanyType());
     }
+
+    @Test
+    public void findContactPersonsToCompanyWithSuccess() {
+        TblCompany company = MockDataHelper.mockCompany();
+        company.setContactPersons( MockDataHelper.mockTblContactPersons());
+        when(companyRepository.findByTblContactUuid(any(UUID.class))).thenReturn(Optional.of(company));
+        List<ContactPersonDto> cpDtos = companyService.findContactPersonsToCompany(UUID.randomUUID());
+        assertEquals(company.getContactPersons().size(), cpDtos.size());
+        assertEquals(company.getContactPersons().get(1).getContact().getUuid(), cpDtos.get(1).getContactUuid());
+    }
+
+
+    @Test
+    public void findContactPersonsToCompanyWithException() {
+        when(companyRepository.findByTblContactUuid(any(UUID.class))).thenReturn(Optional.empty());
+        assertThrows( NotFoundException.class, ()-> companyService.findContactPersonsToCompany(UUID.randomUUID()));
+    }
 }
\ No newline at end of file
diff --git a/src/test/java/org/eclipse/openk/contactbasedata/support/MockDataHelper.java b/src/test/java/org/eclipse/openk/contactbasedata/support/MockDataHelper.java
index 5850ad6..b422d3d 100644
--- a/src/test/java/org/eclipse/openk/contactbasedata/support/MockDataHelper.java
+++ b/src/test/java/org/eclipse/openk/contactbasedata/support/MockDataHelper.java
@@ -462,6 +462,47 @@
         return new PageImpl<>(list, Pageable.unpaged(), list.size());
     }
 
+    public static TblContactPerson mockTblContactPerson() {
+        TblContactPerson cp = new TblContactPerson();
+        cp.setCompany(mockCompany());
+        cp.setContact(mockTblContact());
+        cp.setFirstName("Prober");
+        cp.setLastName("Cottwick");
+        return cp;
+    }
+
+    public static List<TblContactPerson> mockTblContactPersons() {
+        return Arrays.asList(mockTblContactPerson(), mockTblContactPerson());
+    }
+
+    public static ContactPersonDto mockContactPersonDto() {
+        ContactPersonDto contactPersonDto = new ContactPersonDto();
+        contactPersonDto.setCompanyContactUuid(UUID.randomUUID());
+        contactPersonDto.setCompanyName("Filligri");
+        contactPersonDto.setCompanyType("GmbH");
+        contactPersonDto.setCompanyHrNumber("12345");
+        contactPersonDto.setFirstName("Prober");
+        contactPersonDto.setLastName("Cottwick");
+        contactPersonDto.setCompanyType(Constants.CONTACT_TYPE_CONTACT_PERSON);
+        contactPersonDto.setTitle("Prof. Dr.");
+        return contactPersonDto;
+    }
+
+    public static List<ContactPersonDto> mockContactPersonDtos(){
+
+        ContactPersonDto  cp1 = mockContactPersonDto();
+
+        ContactPersonDto cp2 = new ContactPersonDto();
+        cp2.setContactUuid(UUID.randomUUID());
+        cp2.setFirstName("Pruner");
+        cp2.setLastName("Goldwick");
+        cp2.setContactType(Constants.CONTACT_TYPE_CONTACT_PERSON);
+        cp2.setTitle("Dr.");
+        cp2.setContactNote("Gründer");
+
+        return Arrays.asList(cp1, cp2);
+    }
+
     public static TblContact mockTblContact(){
         TblContact tblContact = new TblContact();
         tblContact.setId(5L);
