diff --git a/jtosca/pom.xml b/jtosca/pom.xml
index ce50fec..3ef6a3c 100644
--- a/jtosca/pom.xml
+++ b/jtosca/pom.xml
@@ -5,11 +5,11 @@
 	<parent>
 		<groupId>org.openecomp.sdc.sdc-distribution-client</groupId>
 		<artifactId>sdc-main-distribution-client</artifactId>
-		<version>1.1.9-SNAPSHOT</version>
+		<version>1.1.13-SNAPSHOT</version>
 	</parent>
 	
 	<artifactId>jtosca</artifactId>
-	<version>0.1.3-SNAPSHOT</version>
+	<version>0.1.6-SNAPSHOT</version>
 	
 	<dependencies>
 	
diff --git a/jtosca/src/main/java/org/openecomp/sdc/toscaparser/api/elements/NodeType.java b/jtosca/src/main/java/org/openecomp/sdc/toscaparser/api/elements/NodeType.java
index 853b8ac..e7dc464 100644
--- a/jtosca/src/main/java/org/openecomp/sdc/toscaparser/api/elements/NodeType.java
+++ b/jtosca/src/main/java/org/openecomp/sdc/toscaparser/api/elements/NodeType.java
@@ -106,7 +106,10 @@
                             // the capability type
             				String captype = (String)req.get("capability");
             				String value = _getNodeTypeByCap(captype);
-            				relation = _getRelation(key,value);
+            				String getRelation = _getRelation(key,value);
+            				if (getRelation != null)  {
+            					relation = getRelation;
+            				}
             				keyword = key;
             				nodeType = value;
             			}
diff --git a/pom.xml b/pom.xml
index 2b3583e..51bcfe5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
 
 	<groupId>org.openecomp.sdc.sdc-distribution-client</groupId>
 	<artifactId>sdc-main-distribution-client</artifactId>
-	<version>1.1.10-SNAPSHOT</version>
+	<version>1.1.13-SNAPSHOT</version>
 	<packaging>pom</packaging>
 
 	<modules>
@@ -35,6 +35,8 @@
 		<logback.version>1.1.2</logback.version>
 		<junit.version>4.12</junit.version>
 		<snakeyaml.version>1.14</snakeyaml.version>
+		<guava.version>21.0</guava.version>
+		
 		
 		<sonar.skipDesign>true</sonar.skipDesign>
 		<sonar.projectBaseDir>${project.basedir}</sonar.projectBaseDir>
diff --git a/sdc-distribution-ci/pom.xml b/sdc-distribution-ci/pom.xml
index f76457c..68cbd9c 100644
--- a/sdc-distribution-ci/pom.xml
+++ b/sdc-distribution-ci/pom.xml
@@ -6,7 +6,7 @@
 	<parent>
 		<groupId>org.openecomp.sdc.sdc-distribution-client</groupId>
 		<artifactId>sdc-main-distribution-client</artifactId>
-		<version>1.1.10-SNAPSHOT</version>
+		<version>1.1.13-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>sdc-distribution-ci</artifactId>
diff --git a/sdc-distribution-ci/src/main/java/org/openecomp/test/CsarToscaTester.java b/sdc-distribution-ci/src/main/java/org/openecomp/test/CsarToscaTester.java
index 404f6d2..068ef24 100644
--- a/sdc-distribution-ci/src/main/java/org/openecomp/test/CsarToscaTester.java
+++ b/sdc-distribution-ci/src/main/java/org/openecomp/test/CsarToscaTester.java
@@ -40,9 +40,9 @@
 		        List<NodeTemplate> vflist = csarHelper.getServiceVfList();
 		        List<Input> inputs = csarHelper.getServiceInputs();
 		        List<String> exceptionReport = ExceptionCollector.getCriticalsReport();
-		        System.out.println("CRITICALS during CSAR parsing are: " + (exceptionReport != null ? exceptionReport.toString() : "none"));
+		        //System.out.println("CRITICALS during CSAR parsing are: " + (exceptionReport != null ? exceptionReport.toString() : "none"));
 		        List<String> warningsReport = ExceptionCollector.getWarningsReport();
-		        System.out.println("WARNINGS during CSAR parsing are: " + (warningsReport != null ? warningsReport.toString() : "none"));
+		        //System.out.println("WARNINGS during CSAR parsing are: " + (warningsReport != null ? warningsReport.toString() : "none"));
 		        
 				
 		        if (!exceptionReport.isEmpty())  {
diff --git a/sdc-distribution-client/pom.xml b/sdc-distribution-client/pom.xml
index d7f0ea7..2047ff3 100644
--- a/sdc-distribution-client/pom.xml
+++ b/sdc-distribution-client/pom.xml
@@ -6,7 +6,7 @@
 	<parent>
 		<groupId>org.openecomp.sdc.sdc-distribution-client</groupId>
 		<artifactId>sdc-main-distribution-client</artifactId>
-		<version>1.1.10-SNAPSHOT</version>
+		<version>1.1.13-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>sdc-distribution-client</artifactId>
@@ -137,7 +137,7 @@
 		<dependency>
 			<groupId>com.google.guava</groupId>
 			<artifactId>guava</artifactId>
-			<version>15.0</version>
+			<version>${guava.version}</version>
 			<scope>test</scope>
 		</dependency>
 
diff --git a/sdc-tosca-parser/pom.xml b/sdc-tosca-parser/pom.xml
index f027a96..d6b0bb8 100644
--- a/sdc-tosca-parser/pom.xml
+++ b/sdc-tosca-parser/pom.xml
@@ -6,14 +6,14 @@
 	<parent>
 		<groupId>org.openecomp.sdc.sdc-distribution-client</groupId>
 		<artifactId>sdc-main-distribution-client</artifactId>
-		<version>1.1.10-SNAPSHOT</version>
+		<version>1.1.13-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>sdc-tosca-parser</artifactId>
 	<name>SDC Tosca Parser</name>
 	<description>Tosca Parser JAR file for use by consumers</description>
 	<packaging>jar</packaging>
-	
+
 
 	<dependencies>
 
@@ -58,7 +58,7 @@
 			<version>${snakeyaml.version}</version>
 			<scope>compile</scope>
 		</dependency>
-		
+
 		<!-- Apache Commons -->
 		<dependency>
 			<groupId>org.apache.commons</groupId>
@@ -66,12 +66,19 @@
 			<version>3.5</version>
 			<scope>compile</scope>
 		</dependency>
+		
+		<dependency>
+			<groupId>com.google.guava</groupId>
+			<artifactId>guava</artifactId>
+			<version>${guava.version}</version>
+			<scope>compile</scope>
+		</dependency>
 
 		<!-- jtosca Tosca Parser -->
 		<dependency>
 			<groupId>org.openecomp.sdc.sdc-distribution-client</groupId>
 			<artifactId>jtosca</artifactId>
-			<version>0.1.3-SNAPSHOT</version>
+			<version>0.1.6-SNAPSHOT</version>
 		</dependency>
 
 
@@ -90,12 +97,12 @@
 			<scope>test</scope>
 		</dependency>
 
-		<!--<dependency>-->
-			<!--<groupId>junit</groupId>-->
-			<!--<artifactId>junit</artifactId>-->
-			<!--<version>4.12</version>-->
-			<!--<scope>test</scope>-->
-		<!--</dependency>-->
+		<!--<dependency> -->
+		<!--<groupId>junit</groupId> -->
+		<!--<artifactId>junit</artifactId> -->
+		<!--<version>4.12</version> -->
+		<!--<scope>test</scope> -->
+		<!--</dependency> -->
 
 		<dependency>
 			<groupId>org.testng</groupId>
@@ -111,19 +118,8 @@
 			<scope>test</scope>
 		</dependency>
 
-		<dependency>
-			<groupId>com.google.guava</groupId>
-			<artifactId>guava</artifactId>
-			<version>15.0</version>
-			<!--<scope>test</scope>-->
-		</dependency>
-		
-		<!-- <dependency>
-			<groupId>ch.qos.logback</groupId>
-			<artifactId>logback-classic</artifactId>
-			<version>1.1.2</version>
-			<scope>test</scope>
-		</dependency> -->
+		<!-- <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> 
+			<version>1.1.2</version> <scope>test</scope> </dependency> -->
 
 	</dependencies>
 
diff --git a/sdc-tosca-parser/src/main/java/org/openecomp/sdc/tosca/parser/api/ISdcCsarHelper.java b/sdc-tosca-parser/src/main/java/org/openecomp/sdc/tosca/parser/api/ISdcCsarHelper.java
index e1c1802..fd5a435 100644
--- a/sdc-tosca-parser/src/main/java/org/openecomp/sdc/tosca/parser/api/ISdcCsarHelper.java
+++ b/sdc-tosca-parser/src/main/java/org/openecomp/sdc/tosca/parser/api/ISdcCsarHelper.java
@@ -96,7 +96,7 @@
 	 * will return "false".
 	 * @param nodeTemplate - nodeTemplate where the property should be looked up.
 	 * @param pathToPropertyLeafValue - the full path of the required property.
-	 * @return the leaf value as Object, or null if there's no such property, or it's not a leaf.
+	 * @return the leaf value as Object, or null if there's no such property. It's up to the caller to cast it to a proper type.
 	 */
 	public Object getNodeTemplatePropertyAsObject(NodeTemplate nodeTemplate, String pathToPropertyLeafValue);
 
@@ -110,11 +110,11 @@
 	public String getGroupPropertyLeafValue(Group group, String propertyName);
 
 	/**
-	 * Get any property leaf value for a group definition by full path separated by #.
+	 * Get any property value for a group definition by full path separated by #.
 	 * Same logic as in {@link #getNodeTemplatePropertyLeafValue(NodeTemplate, String) getNodeTemplatePropertyLeafValue}, only for a group.
 	 * @param group - group where the property should be looked up.
 	 * @param propertyName - the name of the required property.
-	 * @return the leaf value as Object, or null if there's no such property, or it's not a leaf.
+	 * @return the leaf value as Object, or null if there's no such property. It's up to the caller to cast it to a proper type.
 	 */
 	public Object getGroupPropertyAsObject(Group group, String propertyName);
 
@@ -174,7 +174,7 @@
 	 * Same logic as in {@link #getNodeTemplatePropertyLeafValue(NodeTemplate, String) getNodeTemplatePropertyLeafValue}, only for an input full path.
 	 * The expected format is "input_name#default[optionally #rest_of_path]"
 	 * @param inputLeafValuePath by full path separated by #.
-	 * @return input leaf value for the service as Service.
+	 * @return input value for the service as Object. It's up to the caller to cast it to a proper type.
 	 */
 	public Object getServiceInputLeafValueOfDefaultAsObject(String inputLeafValuePath);
 
@@ -292,14 +292,25 @@
 	public List<Input> getServiceInputs();
 
 	
-
+	/**
+	 * Get the conformance level of this CSAR. <br>
+	 * The conformance level value of the CSAR is located in csar.meta file at the top level of the CSAR file.<br>
+	 * For 1707 CSARs, the conformance level is 3.0.
+	 * @return the conformance level of the CSAR. 
+	 */
 	public String getConformanceLevel();
 	
 	
 	/**
-	 * Get the map of CP-related props from
-	 * @param vfc - VFC to look for CP-related props.
-	 * @return map of CP node template name to a map of CP-related properties key-value for this CP.
+	 * Get the map of CP-related props from a VFC node template. <br>
+	 * Let's say there are 5 CPs related to this VFC. Then the output will look like this: <br><br>
+	 * {port_fe1_sigtran={ip_requirements#ip_count_required#count=1, ip_requirements#dhcp_enabled=true, ip_requirements#ip_version=4, subnetpoolid="subnet_1", network_role_tag="SIGNET_vrf_B1_direct"},<br> 
+	 *  port_fe_cluster={ip_requirements#ip_count_required#count=2, ip_requirements#dhcp_enabled=true, ip_requirements#ip_version=4},<br>
+	 *  port_fe_slan={ip_requirements#ip_count_required#count=1, ip_requirements#dhcp_enabled=true, ip_requirements#ip_version=4},<br> 
+	 *  port_fe_interce={ip_requirements#ip_count_required#count=1, ip_requirements#dhcp_enabled=true, ip_requirements#ip_version=4},<br> 
+	 *  port_fe_oam={ip_requirements#ip_count_required#count=2, ip_requirements#dhcp_enabled=true, ip_requirements#ip_version=4, subnetpoolid="subnet_2", network_role_tag="Mobility_OAM_protected"}}<br><br>
+	 * @param vfc - VFC node template to look for CP-related props.
+	 * @return map <CP node template name>  to a map of <full path to a property on this CP> <value of this property on this CP>.
 	 */
 	public Map<String, Map<String, Object>> getCpPropertiesFromVfc(NodeTemplate vfc);
 }
