diff --git a/cps-rest/docs/api/swagger/openapi.yml b/cps-rest/docs/api/swagger/openapi.yml
index ff7cdf8..587a376 100755
--- a/cps-rest/docs/api/swagger/openapi.yml
+++ b/cps-rest/docs/api/swagger/openapi.yml
@@ -84,14 +84,18 @@
           required: true
           schema:
             type: string
-      requestBody:
-        content:
-          application/json:
-            schema:
-              title: Anchor
-              description: anchor
-              $ref: '#/components/schemas/Anchor'
-        required: true
+        - name: schema-set-name
+          in: query
+          description: schema-set-name
+          required: true
+          schema:
+            type: string
+        - name: anchor-name
+          in: query
+          description: anchor-name
+          required: true
+          schema:
+            type: string
       responses:
         201:
           description: Created
@@ -298,17 +302,3 @@
           type: string
         details:
           type: string
-    Anchor:
-      type: object
-      title: Anchor
-      required:
-        - anchorName
-        - namespace
-        - revision
-      properties:
-        anchorName:
-          type: string
-        namespace:
-          type: string
-        revision:
-          type: string
diff --git a/cps-rest/src/main/java/org/onap/cps/rest/controller/AdminRestController.java b/cps-rest/src/main/java/org/onap/cps/rest/controller/AdminRestController.java
index e2ce367..336762c 100644
--- a/cps-rest/src/main/java/org/onap/cps/rest/controller/AdminRestController.java
+++ b/cps-rest/src/main/java/org/onap/cps/rest/controller/AdminRestController.java
@@ -43,16 +43,15 @@
     /**
      * Create a new anchor.
      *
-     * @param anchor        the anchor details object.
-     * @param dataspaceName the dataspace name.
+     * @param dataspaceName dataspace name
+     * @param schemaSetName schema set name
+     * @param anchorName    anchorName
      * @return a ResponseEntity with the anchor name.
      */
     @Override
-    public ResponseEntity<String> createAnchor(final org.onap.cps.rest.model.@Valid Anchor anchor,
-        final String dataspaceName) {
-        final Anchor anchorDetails = modelMapper.map(anchor, Anchor.class);
-        anchorDetails.setDataspaceName(dataspaceName);
-        final String anchorName = cpsAdminService.createAnchor(anchorDetails);
+    public ResponseEntity<String> createAnchor(final String dataspaceName, final String schemaSetName,
+                                               final String anchorName) {
+        cpsAdminService.createAnchor(dataspaceName, schemaSetName, anchorName);
         return new ResponseEntity<>(anchorName, HttpStatus.CREATED);
     }
 
@@ -72,7 +71,6 @@
     }
 
     @Override
-
     public ResponseEntity<Object> getAnchors(final String dataspaceName) {
         final Collection<Anchor> anchorDetails = cpsAdminService.getAnchors(dataspaceName);
         return new ResponseEntity<>(anchorDetails, HttpStatus.OK);
diff --git a/cps-rest/src/main/java/org/onap/cps/rest/exceptions/CpsRestExceptionHandler.java b/cps-rest/src/main/java/org/onap/cps/rest/exceptions/CpsRestExceptionHandler.java
index 9d7f38a..d4faebc 100644
--- a/cps-rest/src/main/java/org/onap/cps/rest/exceptions/CpsRestExceptionHandler.java
+++ b/cps-rest/src/main/java/org/onap/cps/rest/exceptions/CpsRestExceptionHandler.java
@@ -23,13 +23,11 @@
 import org.onap.cps.rest.controller.AdminRestController;
 import org.onap.cps.rest.controller.DataRestController;
 import org.onap.cps.rest.model.ErrorMessage;
-import org.onap.cps.spi.exceptions.AnchorAlreadyDefinedException;
 import org.onap.cps.spi.exceptions.CpsAdminException;
 import org.onap.cps.spi.exceptions.CpsException;
 import org.onap.cps.spi.exceptions.DataValidationException;
 import org.onap.cps.spi.exceptions.ModelValidationException;
 import org.onap.cps.spi.exceptions.NotFoundInDataspaceException;
-import org.onap.cps.spi.exceptions.SchemaSetAlreadyDefinedException;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.ExceptionHandler;
@@ -52,8 +50,7 @@
         return buildErrorResponse(HttpStatus.INTERNAL_SERVER_ERROR, exception);
     }
 
-    @ExceptionHandler({ModelValidationException.class, DataValidationException.class,
-        SchemaSetAlreadyDefinedException.class, AnchorAlreadyDefinedException.class, CpsAdminException.class})
+    @ExceptionHandler({ModelValidationException.class, DataValidationException.class, CpsAdminException.class})
     public static ResponseEntity<Object> handleBadRequestExceptions(final CpsException exception) {
         return buildErrorResponse(HttpStatus.BAD_REQUEST, exception.getMessage(), extractDetails(exception));
     }
diff --git a/cps-ri/src/main/java/org/onap/cps/spi/entities/Fragment.java b/cps-ri/src/main/java/org/onap/cps/spi/entities/Fragment.java
index 7afdb3e..2dbd6e9 100755
--- a/cps-ri/src/main/java/org/onap/cps/spi/entities/Fragment.java
+++ b/cps-ri/src/main/java/org/onap/cps/spi/entities/Fragment.java
@@ -84,6 +84,6 @@
     private Fragment parentFragment;
 
     @OneToOne(fetch = FetchType.LAZY)
-    @JoinColumn(name = "module_id")
-    private Module module;
+    @JoinColumn(name = "schema_set_id")
+    private SchemaSet schemaSet;
 }
diff --git a/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceImpl.java b/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceImpl.java
index 48e7303..5093ba5 100644
--- a/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceImpl.java
+++ b/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceImpl.java
@@ -21,19 +21,17 @@
 
 package org.onap.cps.spi.impl;
 
-import java.lang.reflect.Type;
 import java.util.Collection;
-import org.modelmapper.ModelMapper;
-import org.modelmapper.TypeToken;
+import java.util.stream.Collectors;
 import org.onap.cps.spi.CpsAdminPersistenceService;
 import org.onap.cps.spi.entities.Dataspace;
 import org.onap.cps.spi.entities.Fragment;
-import org.onap.cps.spi.entities.Module;
+import org.onap.cps.spi.entities.SchemaSet;
 import org.onap.cps.spi.exceptions.AnchorAlreadyDefinedException;
 import org.onap.cps.spi.model.Anchor;
 import org.onap.cps.spi.repository.DataspaceRepository;
 import org.onap.cps.spi.repository.FragmentRepository;
-import org.onap.cps.spi.repository.ModuleRepository;
+import org.onap.cps.spi.repository.SchemaSetRepository;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.dao.DataIntegrityViolationException;
 import org.springframework.stereotype.Component;
@@ -48,22 +46,22 @@
     private FragmentRepository fragmentRepository;
 
     @Autowired
-    private ModuleRepository moduleRepository;
+    private SchemaSetRepository schemaSetRepository;
 
     @Override
-    public String createAnchor(final Anchor anchor) {
-        final String anchorName = anchor.getAnchorName();
+    public void createAnchor(final String dataspaceName, final String schemaSetName, final String anchorName) {
+        final Dataspace dataspace = dataspaceRepository.getByName(dataspaceName);
+        final SchemaSet schemaSet = schemaSetRepository.getByDataspaceAndName(dataspace, schemaSetName);
+        final Fragment anchor = Fragment.builder()
+            .xpath(anchorName)
+            .anchorName(anchorName)
+            .dataspace(dataspace)
+            .schemaSet(schemaSet)
+            .build();
         try {
-            final Dataspace dataspace = dataspaceRepository.getByName(anchor.getDataspaceName());
-            final Module module = moduleRepository
-                .getByDataspaceAndNamespaceAndRevision(dataspace, anchor.getNamespace(), anchor.getRevision());
-            final Fragment fragment =
-                Fragment.builder().xpath(anchorName).anchorName(anchorName).dataspace(dataspace).module(module).build();
-
-            fragmentRepository.save(fragment);
-            return anchorName;
-        } catch (final DataIntegrityViolationException ex) {
-            throw new AnchorAlreadyDefinedException(anchor.getDataspaceName(), anchorName, ex);
+            fragmentRepository.save(anchor);
+        } catch (final DataIntegrityViolationException e) {
+            throw new AnchorAlreadyDefinedException(dataspaceName, anchorName, e);
         }
     }
 
@@ -71,7 +69,12 @@
     public Collection<Anchor> getAnchors(final String dataspaceName) {
         final Dataspace dataspace = dataspaceRepository.getByName(dataspaceName);
         final Collection<Fragment> fragments = fragmentRepository.findFragmentsThatAreAnchorsByDataspace(dataspace);
-        final Type anchorListType = new TypeToken<Collection<Anchor>>() {}.getType();
-        return new ModelMapper().map(fragments, anchorListType);
+        return fragments.stream().map(
+            entity -> Anchor.builder()
+                .name(entity.getAnchorName())
+                .dataspaceName(dataspaceName)
+                .schemaSetName(entity.getSchemaSet().getName())
+                .build()
+        ).collect(Collectors.toList());
     }
 }
diff --git a/cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentRepository.java b/cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentRepository.java
index b1a8992..2ee76cc 100755
--- a/cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentRepository.java
+++ b/cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentRepository.java
@@ -22,6 +22,8 @@
 package org.onap.cps.spi.repository;
 
 import java.util.Collection;
+import java.util.Optional;
+import javax.validation.constraints.NotNull;
 import org.onap.cps.spi.entities.Dataspace;
 import org.onap.cps.spi.entities.Fragment;
 import org.springframework.data.jpa.repository.JpaRepository;
@@ -30,6 +32,8 @@
 @Repository
 public interface FragmentRepository extends JpaRepository<Fragment, Integer> {
 
+    Optional<Fragment> findByDataspaceAndAnchorName(@NotNull Dataspace dataspace, @NotNull String anchorName);
+
     default Collection<Fragment> findFragmentsThatAreAnchorsByDataspace(Dataspace dataspace) {
         return findFragmentsByDataspaceAndParentFragmentIsNull(dataspace);
     }
diff --git a/cps-ri/src/main/java/org/onap/cps/spi/repository/SchemaSetRepository.java b/cps-ri/src/main/java/org/onap/cps/spi/repository/SchemaSetRepository.java
index 035c831..9b9d706 100644
--- a/cps-ri/src/main/java/org/onap/cps/spi/repository/SchemaSetRepository.java
+++ b/cps-ri/src/main/java/org/onap/cps/spi/repository/SchemaSetRepository.java
@@ -36,14 +36,15 @@
     Optional<SchemaSet> findByDataspaceAndName(@NotNull Dataspace dataspace, @NotNull String schemaSetName);
 
     /**
-     * This method gets a SchemaSet by dataspace, namespace and schemaSetName.
+     * Gets a schema set by dataspace and schema set name.
      *
-     * @param dataspace     the dataspace
-     * @param schemaSetName the schemaSet Name
-     * @return schemaSet
+     * @param dataspace     dataspace entity
+     * @param schemaSetName schema set name
+     * @return schema set entity
+     * @throws SchemaSetNotFoundException if SchemaSet not found
      */
-    default SchemaSet getByDataspaceAndName(@NotNull Dataspace dataspace, @NotNull String schemaSetName) {
+    default SchemaSet getByDataspaceAndName(@NotNull final Dataspace dataspace, @NotNull final String schemaSetName) {
         return findByDataspaceAndName(dataspace, schemaSetName)
-                       .orElseThrow(() -> new SchemaSetNotFoundException(dataspace.getName(), schemaSetName));
+            .orElseThrow(() -> new SchemaSetNotFoundException(dataspace.getName(), schemaSetName));
     }
 }
diff --git a/cps-ri/src/main/resources/schema.sql b/cps-ri/src/main/resources/schema.sql
index 2dce470..58b3c63 100755
--- a/cps-ri/src/main/resources/schema.sql
+++ b/cps-ri/src/main/resources/schema.sql
@@ -61,7 +61,7 @@
     ANCHOR_NAME TEXT,
     ANCHOR_ID BIGINT REFERENCES FRAGMENT(ID),
     PARENT_ID BIGINT REFERENCES FRAGMENT(ID),
-    MODULE_ID INTEGER REFERENCES MODULE(ID),
+    SCHEMA_SET_ID INTEGER REFERENCES SCHEMA_SET(ID),
     DATASPACE_ID INTEGER NOT NULL REFERENCES DATASPACE(ID),
     SCHEMA_NODE_ID INTEGER REFERENCES SCHEMA_NODE(ID),
     UNIQUE (DATASPACE_ID, ANCHOR_NAME, XPATH)
@@ -78,7 +78,7 @@
 );
 
 CREATE INDEX  IF NOT EXISTS "FKI_FRAGMENT_DATASPACE_ID_FK"     ON FRAGMENT USING BTREE(DATASPACE_ID) ;
-CREATE INDEX  IF NOT EXISTS "FKI_FRAGMENT_MODULE_ID_FK"        ON FRAGMENT USING BTREE(MODULE_ID) ;
+CREATE INDEX  IF NOT EXISTS "FKI_FRAGMENT_SCHEMA_SET_ID_FK"    ON FRAGMENT USING BTREE(SCHEMA_SET_ID) ;
 CREATE INDEX  IF NOT EXISTS "FKI_FRAGMENT_PARENT_ID_FK"        ON FRAGMENT USING BTREE(PARENT_ID) ;
 CREATE INDEX  IF NOT EXISTS "FKI_FRAGMENT_ANCHOR_ID_FK"        ON FRAGMENT USING BTREE(ANCHOR_ID) ;
 CREATE INDEX  IF NOT EXISTS "PERF_SCHEMA_NODE_SCHEMA_NODE_ID"  ON SCHEMA_NODE USING BTREE(SCHEMA_NODE_IDENTIFIER) ;
diff --git a/cps-ri/src/test/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceTest.java b/cps-ri/src/test/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceTest.java
new file mode 100644
index 0000000..455369d
--- /dev/null
+++ b/cps-ri/src/test/java/org/onap/cps/spi/impl/CpsAdminPersistenceServiceTest.java
@@ -0,0 +1,143 @@
+/*
+ *  ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 Pantheon.tech
+ *  ================================================================================
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ *  SPDX-License-Identifier: Apache-2.0
+ *  ============LICENSE_END=========================================================
+ */
+
+package org.onap.cps.spi.impl;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Collection;
+import org.junit.ClassRule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.onap.cps.DatabaseTestContainer;
+import org.onap.cps.spi.CpsAdminPersistenceService;
+import org.onap.cps.spi.entities.Dataspace;
+import org.onap.cps.spi.entities.Fragment;
+import org.onap.cps.spi.exceptions.AnchorAlreadyDefinedException;
+import org.onap.cps.spi.exceptions.DataspaceNotFoundException;
+import org.onap.cps.spi.exceptions.SchemaSetNotFoundException;
+import org.onap.cps.spi.model.Anchor;
+import org.onap.cps.spi.repository.DataspaceRepository;
+import org.onap.cps.spi.repository.FragmentRepository;
+import org.onap.cps.spi.repository.SchemaSetRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.jdbc.Sql;
+import org.springframework.test.context.jdbc.SqlGroup;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class CpsAdminPersistenceServiceTest {
+
+    private static final String CLEAR_DATA = "/data/clear-all.sql";
+    private static final String SET_DATA = "/data/anchor.sql";
+
+    private static final String DATASPACE_NAME = "DATASPACE-001";
+    private static final String EMPTY_DATASPACE_NAME = "DATASPACE-002";
+    private static final String NON_EXISTING_DATASPACE_NAME = "NON EXISTING DATASPACE";
+    private static final String NON_EXISTING_SCHEMA_SET_NAME = "NON EXISTING SCHEMA SET";
+    private static final String SCHEMA_SET_NAME1 = "SCHEMA-SET-001";
+    private static final String SCHEMA_SET_NAME2 = "SCHEMA-SET-002";
+    private static final String ANCHOR_NAME1 = "ANCHOR-001";
+    private static final String ANCHOR_NAME2 = "ANCHOR-002";
+    private static final String ANCHOR_NAME_NEW = "ANCHOR-NEW";
+
+    @ClassRule
+    public static DatabaseTestContainer databaseTestContainer = DatabaseTestContainer.getInstance();
+
+    @Autowired
+    private CpsAdminPersistenceService cpsAdminPersistenceService;
+
+    @Autowired
+    private FragmentRepository fragmentRepository;
+
+    @Autowired
+    private DataspaceRepository dataspaceRepository;
+
+    @Autowired
+    private SchemaSetRepository schemaSetRepository;
+
+    @Test
+    @SqlGroup({@Sql(CLEAR_DATA), @Sql(SET_DATA)})
+    public void testCreateAnchor() {
+        cpsAdminPersistenceService.createAnchor(DATASPACE_NAME, SCHEMA_SET_NAME2, ANCHOR_NAME_NEW);
+
+        // validate anchor persisted
+        final Dataspace dataspace = dataspaceRepository.findByName(DATASPACE_NAME).orElseThrow();
+        final Fragment anchor =
+            fragmentRepository.findByDataspaceAndAnchorName(dataspace, ANCHOR_NAME_NEW).orElseThrow();
+
+        assertNotNull(anchor.getId());
+        assertEquals(ANCHOR_NAME_NEW, anchor.getAnchorName());
+        assertEquals(DATASPACE_NAME, anchor.getDataspace().getName());
+        assertEquals(SCHEMA_SET_NAME2, anchor.getSchemaSet().getName());
+    }
+
+    @Test(expected = DataspaceNotFoundException.class)
+    @SqlGroup({@Sql(CLEAR_DATA), @Sql(SET_DATA)})
+    public void testCreateAnchorAtNonExistingDataspace() {
+        cpsAdminPersistenceService.createAnchor(NON_EXISTING_DATASPACE_NAME, SCHEMA_SET_NAME2, ANCHOR_NAME_NEW);
+    }
+
+    @Test(expected = SchemaSetNotFoundException.class)
+    @SqlGroup({@Sql(CLEAR_DATA), @Sql(SET_DATA)})
+    public void testCreateAnchorWithNonExistingSchemaSet() {
+        cpsAdminPersistenceService.createAnchor(DATASPACE_NAME, NON_EXISTING_SCHEMA_SET_NAME, ANCHOR_NAME_NEW);
+    }
+
+    @Test(expected = AnchorAlreadyDefinedException.class)
+    @SqlGroup({@Sql(CLEAR_DATA), @Sql(SET_DATA)})
+    public void testCreateAnchorWithNameAlreadyDefined() {
+        cpsAdminPersistenceService.createAnchor(DATASPACE_NAME, SCHEMA_SET_NAME2, ANCHOR_NAME1);
+    }
+
+    @Test
+    @SqlGroup({@Sql(CLEAR_DATA), @Sql(SET_DATA)})
+    public void testGetAnchorsByDataspace() {
+        final Collection<Anchor> anchors = cpsAdminPersistenceService.getAnchors(DATASPACE_NAME);
+
+        assertNotNull(anchors);
+        assertEquals(2, anchors.size());
+        assertTrue(anchors.contains(
+            Anchor.builder().name(ANCHOR_NAME1).schemaSetName(SCHEMA_SET_NAME1).dataspaceName(DATASPACE_NAME).build()
+        ));
+        assertTrue(anchors.contains(
+            Anchor.builder().name(ANCHOR_NAME2).schemaSetName(SCHEMA_SET_NAME2).dataspaceName(DATASPACE_NAME).build()
+        ));
+    }
+
+    @Test(expected = DataspaceNotFoundException.class)
+    @SqlGroup({@Sql(CLEAR_DATA), @Sql(SET_DATA)})
+    public void testGetAnchorsByNonExistingDataspace() {
+        cpsAdminPersistenceService.getAnchors(NON_EXISTING_DATASPACE_NAME);
+    }
+
+    @Test
+    @SqlGroup({@Sql(CLEAR_DATA), @Sql(SET_DATA)})
+    public void testGetAnchorsFromEmptyDataspace() {
+        final Collection<Anchor> anchors = cpsAdminPersistenceService.getAnchors(EMPTY_DATASPACE_NAME);
+
+        assertNotNull(anchors);
+        assertTrue(anchors.isEmpty());
+    }
+
+}
diff --git a/cps-ri/src/test/resources/data/anchor.sql b/cps-ri/src/test/resources/data/anchor.sql
new file mode 100644
index 0000000..5507559
--- /dev/null
+++ b/cps-ri/src/test/resources/data/anchor.sql
@@ -0,0 +1,9 @@
+INSERT INTO DATASPACE (ID, NAME) VALUES
+    (1001, 'DATASPACE-001'), (1002, 'DATASPACE-002');
+
+INSERT INTO SCHEMA_SET (ID, NAME, DATASPACE_ID) VALUES
+    (2001, 'SCHEMA-SET-001', 1001), (2002, 'SCHEMA-SET-002', 1001);
+
+INSERT INTO FRAGMENT (ID, XPATH, ANCHOR_NAME, DATASPACE_ID, SCHEMA_SET_ID) VALUES
+    (3001, 'ANCHOR-001', 'ANCHOR-001', 1001, 2001),
+    (3002, 'ANCHOR-002', 'ANCHOR-002', 1001, 2002);
\ No newline at end of file
diff --git a/cps-ri/src/test/resources/data/clear-all.sql b/cps-ri/src/test/resources/data/clear-all.sql
index 3d93825..522f9e6 100644
--- a/cps-ri/src/test/resources/data/clear-all.sql
+++ b/cps-ri/src/test/resources/data/clear-all.sql
@@ -1,3 +1,4 @@
+DELETE FROM FRAGMENT;
 -- clear all via dataspace table cleanup
 -- all other data will be removed by cascade
 DELETE FROM DATASPACE;
diff --git a/cps-service/src/main/java/org/onap/cps/api/CpsAdminService.java b/cps-service/src/main/java/org/onap/cps/api/CpsAdminService.java
index a2c05bf..5090e3a 100644
--- a/cps-service/src/main/java/org/onap/cps/api/CpsAdminService.java
+++ b/cps-service/src/main/java/org/onap/cps/api/CpsAdminService.java
@@ -21,6 +21,7 @@
 package org.onap.cps.api;
 
 import java.util.Collection;
+import org.checkerframework.checker.nullness.qual.NonNull;
 import org.onap.cps.spi.exceptions.CpsException;
 import org.onap.cps.spi.model.Anchor;
 
@@ -30,13 +31,14 @@
 public interface CpsAdminService {
 
     /**
-     * Create an anchor using provided anchorDetails object.
+     * Create an Anchor.
      *
-     * @param anchor the anchor details object.
-     * @return the anchor name.
+     * @param dataspaceName dataspace name
+     * @param schemaSetName schema set name
+     * @param anchorName    anchor name
      * @throws CpsException if input data is invalid.
      */
-    String createAnchor(Anchor anchor);
+    void createAnchor(@NonNull String dataspaceName, @NonNull String schemaSetName, @NonNull String anchorName);
 
     /**
      * Read all anchors in the given a dataspace.
@@ -44,5 +46,6 @@
      * @param dataspaceName dataspace name
      * @return a collection of anchors
      */
-    Collection<Anchor> getAnchors(String dataspaceName);
+    @NonNull
+    Collection<Anchor> getAnchors(@NonNull String dataspaceName);
 }
diff --git a/cps-service/src/main/java/org/onap/cps/api/impl/CpsAdminServiceImpl.java b/cps-service/src/main/java/org/onap/cps/api/impl/CpsAdminServiceImpl.java
index 5d9bc01..f93a827 100644
--- a/cps-service/src/main/java/org/onap/cps/api/impl/CpsAdminServiceImpl.java
+++ b/cps-service/src/main/java/org/onap/cps/api/impl/CpsAdminServiceImpl.java
@@ -34,8 +34,8 @@
     private CpsAdminPersistenceService cpsAdminPersistenceService;
 
     @Override
-    public String createAnchor(final Anchor anchor) {
-        return cpsAdminPersistenceService.createAnchor(anchor);
+    public void createAnchor(final String dataspaceName, final String schemaSetName, final String anchorName) {
+        cpsAdminPersistenceService.createAnchor(dataspaceName, schemaSetName, anchorName);
     }
 
     @Override
diff --git a/cps-service/src/main/java/org/onap/cps/spi/CpsAdminPersistenceService.java b/cps-service/src/main/java/org/onap/cps/spi/CpsAdminPersistenceService.java
index 4e88d49..1b7ddb7 100644
--- a/cps-service/src/main/java/org/onap/cps/spi/CpsAdminPersistenceService.java
+++ b/cps-service/src/main/java/org/onap/cps/spi/CpsAdminPersistenceService.java
@@ -22,6 +22,7 @@
 package org.onap.cps.spi;
 
 import java.util.Collection;
+import org.checkerframework.checker.nullness.qual.NonNull;
 import org.onap.cps.spi.model.Anchor;
 
 /*
@@ -32,10 +33,12 @@
     /**
      * Create an Anchor.
      *
-     * @param anchor the anchorDetails object.
-     * @return the anchor name.
+     * @param dataspaceName dataspace name
+     * @param schemaSetName schema set name
+     * @param anchorName    anchor name
      */
-    String createAnchor(Anchor anchor);
+    void createAnchor(@NonNull String dataspaceName, @NonNull String schemaSetName, @NonNull String anchorName);
+
 
     /**
      * Read all anchors in the given a dataspace.
@@ -43,5 +46,7 @@
      * @param dataspaceName dataspace name
      * @return a collection of anchors
      */
-    Collection<Anchor> getAnchors(String dataspaceName);
+    @NonNull
+    Collection<Anchor> getAnchors(@NonNull String dataspaceName);
+
 }
diff --git a/cps-service/src/main/java/org/onap/cps/spi/model/Anchor.java b/cps-service/src/main/java/org/onap/cps/spi/model/Anchor.java
index cd1c774..456f733 100644
--- a/cps-service/src/main/java/org/onap/cps/spi/model/Anchor.java
+++ b/cps-service/src/main/java/org/onap/cps/spi/model/Anchor.java
@@ -21,23 +21,21 @@
 package org.onap.cps.spi.model;
 
 import java.io.Serializable;
-import java.util.Map;
-import lombok.Getter;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
 import lombok.NoArgsConstructor;
-import lombok.Setter;
 
-@Setter
-@Getter
+@Data
+@Builder
 @NoArgsConstructor
+@AllArgsConstructor
 public class Anchor implements Serializable {
 
-    // anchor will support both a single module and schema set until CPS-99 is complete
     private static final long serialVersionUID = 1464791260718603291L;
-    private String anchorName;
+
+    private String name;
     private String dataspaceName;
-    private String namespace;
-    private String revision;
-    private String moduleSetName;
-    private Map<String, String> externalReferences;
-    private String xpath;
+    private String schemaSetName;
+
 }
\ No newline at end of file
diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsAdminServiceImplSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsAdminServiceImplSpec.groovy
index d31a2f7..9e13c77 100644
--- a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsAdminServiceImplSpec.groovy
+++ b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsAdminServiceImplSpec.groovy
@@ -21,55 +21,30 @@
 package org.onap.cps.api.impl
 
 import org.onap.cps.spi.CpsAdminPersistenceService
-import org.onap.cps.spi.exceptions.DataspaceNotFoundException
 import org.onap.cps.spi.model.Anchor
 import spock.lang.Specification
 
 class CpsAdminServiceImplSpec extends Specification {
     def mockCpsAdminPersistenceService = Mock(CpsAdminPersistenceService)
     def objectUnderTest = new CpsAdminServiceImpl()
-    def anchor = new Anchor()
 
     def setup() {
         objectUnderTest.cpsAdminPersistenceService = mockCpsAdminPersistenceService
     }
 
-    def 'Create an anchor'() {
-        given: 'that the persistence service returns the name of the anchor'
-            def anchorName = 'some anchor name'
-            mockCpsAdminPersistenceService.createAnchor(_) >> anchorName
-        expect: 'the same anchor name is returned by CPS Admin service'
-            objectUnderTest.createAnchor(anchor) == anchorName
+    def 'Create anchor method invokes persistence service'() {
+        when: 'Create anchor method is invoked'
+            objectUnderTest.createAnchor('dummyDataspace', 'dummySchemaSet', 'dummyAnchorName')
+        then: 'The persistence service method is invoked with same parameters'
+            1 * mockCpsAdminPersistenceService.createAnchor('dummyDataspace', 'dummySchemaSet', 'dummyAnchorName')
     }
 
-    def 'Create an anchor with some exception in the persistence layer'() {
-        given: 'that the persistence service throws some exception'
-            def exceptionThrownInPersistenceLayer = new RuntimeException()
-            mockCpsAdminPersistenceService.createAnchor(_) >> { throw exceptionThrownInPersistenceLayer }
-        when: 'we try to create an anchor'
-            objectUnderTest.createAnchor(anchor)
-        then: 'the same exception is thrown by the CPS Admin Service'
-            def exceptionThrownInServiceLayer = thrown(Exception)
-            exceptionThrownInServiceLayer == exceptionThrownInPersistenceLayer
-    }
-
-    def 'Retrieve all anchors for an existing dataspace'() {
-        given: 'that the dataspace exist and an anchor is associated with the dataspace'
-            Collection<Anchor> anchorCollection = Arrays.asList(anchor)
+    def 'Retrieve all anchors for dataspace'() {
+        given: 'that anchor is associated with the dataspace'
+            Collection<Anchor> anchorCollection = Arrays.asList(new Anchor())
             mockCpsAdminPersistenceService.getAnchors('dummyDataspace') >> { anchorCollection }
-        expect: 'we try to retrieve an anchor, a collection of anchor is returned by the service'
+        expect: 'the collection provided by persistence service is returned as result'
             objectUnderTest.getAnchors('dummyDataspace') == anchorCollection
     }
 
-    def 'Retrieve all anchors for a non existing dataspace'() {
-        given: 'that the dataspace does not exist, service throws an exception'
-            def exceptionThrownInPersistenceLayer = new DataspaceNotFoundException(_ as String)
-            mockCpsAdminPersistenceService.getAnchors('dummyDataspace') >>
-                    { throw exceptionThrownInPersistenceLayer }
-        when: 'we try to retrieve a anchor with a non-existant dataspace'
-            objectUnderTest.getAnchors('dummyDataspace')
-        then: 'the same exception is thrown by CPS'
-            def exceptionThrownInServiceLayer = thrown(Exception)
-            exceptionThrownInServiceLayer == exceptionThrownInPersistenceLayer
-    }
 }
