diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/RequirementCapabilityRelDef.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/RequirementCapabilityRelDef.java
index 615542f..1c14293 100644
--- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/RequirementCapabilityRelDef.java
+++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/RequirementCapabilityRelDef.java
@@ -7,9 +7,9 @@
  * 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.
@@ -20,10 +20,16 @@
 
 package org.openecomp.sdc.be.model;
 
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+@Getter
+@Setter
+@ToString
 public class RequirementCapabilityRelDef extends TargetCapabilityRelDef {
 
     private String fromNode;
-
     private boolean originUI;
 
     public RequirementCapabilityRelDef() {
@@ -36,26 +42,4 @@
         originUI = another.isOriginUI();
     }
 
-
-    public String getFromNode() {
-        return fromNode;
-    }
-
-    public void setFromNode(String fromNode) {
-        this.fromNode = fromNode;
-    }
-
-    public boolean isOriginUI() {
-        return originUI;
-    }
-
-    public void setOriginUI(boolean originUI) {
-        this.originUI = originUI;
-    }
-
-    @Override
-    public String toString() {
-        return "RequirementCapabilityRelDef [fromNode=" + fromNode + ", originUI=" + originUI + ", " + super.toString() + "]";
-    }
-
 }
diff --git a/catalog-model/src/test/java/org/openecomp/sdc/be/model/RequirementCapabilityRelDefTest.java b/catalog-model/src/test/java/org/openecomp/sdc/be/model/RequirementCapabilityRelDefTest.java
new file mode 100644
index 0000000..0c481c4
--- /dev/null
+++ b/catalog-model/src/test/java/org/openecomp/sdc/be/model/RequirementCapabilityRelDefTest.java
@@ -0,0 +1,49 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2020, Nordix Foundation. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.be.model;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class RequirementCapabilityRelDefTest {
+
+    private RequirementCapabilityRelDef createTestSubject() {
+        return new RequirementCapabilityRelDef();
+    }
+
+    @Test
+    public void testRequirementCapabilityRelDef() {
+        final RequirementCapabilityRelDef testSubject;
+
+        // default test
+        testSubject = createTestSubject();
+        Assert.assertNotNull(testSubject);
+    }
+
+    @Test
+    public void testClone() {
+        final RequirementCapabilityRelDef testSubject;
+
+        // default test
+        testSubject = new RequirementCapabilityRelDef(createTestSubject());
+        Assert.assertNotNull(testSubject);
+    }
+}
\ No newline at end of file
