diff --git a/dblib/features/ccsdk-dblib/pom.xml b/dblib/features/ccsdk-dblib/pom.xml
new file mode 100644
index 0000000..8cf1c93
--- /dev/null
+++ b/dblib/features/ccsdk-dblib/pom.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.onap.ccsdk.parent</groupId>
+		<artifactId>single-feature-parent</artifactId>
+		<version>1.0.1-SNAPSHOT</version>
+		<relativePath />
+	</parent>
+
+	<groupId>org.onap.ccsdk.sli.core</groupId>
+	<artifactId>ccsdk-dblib</artifactId>
+	<version>0.2.1-SNAPSHOT</version>
+	<packaging>feature</packaging>
+
+	<name>ccsdk-sli-core :: dblib :: ${project.artifactId}</name>
+
+	<dependencyManagement>
+		<dependencies>
+			<dependency>
+				<groupId>org.opendaylight.mdsal.model</groupId>
+				<artifactId>mdsal-model-artifacts</artifactId>
+				<version>0.11.1</version>
+				<type>pom</type>
+				<scope>import</scope>
+			</dependency>
+			<dependency>
+				<groupId>org.opendaylight.controller</groupId>
+				<artifactId>mdsal-artifacts</artifactId>
+				<version>1.6.1</version>
+				<type>pom</type>
+				<scope>import</scope>
+			</dependency>
+		</dependencies>
+	</dependencyManagement>
+	<dependencies>
+		<dependency>
+			<groupId>org.opendaylight.controller</groupId>
+			<artifactId>odl-mdsal-broker</artifactId>
+			<type>xml</type>
+			<classifier>features</classifier>
+		</dependency>
+
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>dblib-provider</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.mariadb.jdbc</groupId>
+			<artifactId>mariadb-java-client</artifactId>
+			<version>${mariadb.connector.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.tomcat</groupId>
+			<artifactId>tomcat-jdbc</artifactId>
+			<version>${tomcat-jdbc.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.onap.ccsdk.sli.core</groupId>
+			<artifactId>utils-provider</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>equinoxSDK381</groupId>
+			<artifactId>org.eclipse.osgi</artifactId>
+			<version>${equinox.osgi.version}</version>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.derby</groupId>
+			<artifactId>derby</artifactId>
+			<version>10.11.1.1</version>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.karaf.tooling</groupId>
+				<artifactId>karaf-maven-plugin</artifactId>
+				<extensions>true</extensions>
+				<configuration>
+					<excludedArtifactIds>
+						<excludedArtifactId>slf4j-api</excludedArtifactId>
+						<excludedArtifactId>tomcat-jdbc</excludedArtifactId>
+						<excludedArtifactId>tomcat-juli</excludedArtifactId>
+					</excludedArtifactIds>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+</project>
diff --git a/dblib/features/ccsdk-dblib/src/main/feature/feature.xml b/dblib/features/ccsdk-dblib/src/main/feature/feature.xml
new file mode 100644
index 0000000..514ce8d
--- /dev/null
+++ b/dblib/features/ccsdk-dblib/src/main/feature/feature.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="ccsdk-dblib">
+    <repository>mvn:org.opendaylight.controller/odl-mdsal-broker/1.6.1/xml/features</repository>
+    <feature name="ccsdk-dblib" description="ccsdk-sli-core :: dblib :: ccsdk-dblib" version="${project.version}">
+        <details>Root POM to be used in place of odlparent for CCSDK based projects</details>
+        <feature version="1.6.1" prerequisite="false" dependency="false">odl-mdsal-broker</feature>
+        <feature prerequisite="true" dependency="false">wrap</feature>
+        <bundle>mvn:org.onap.ccsdk.sli.core/dblib-provider/${project.version}</bundle>
+        <bundle>mvn:org.mariadb.jdbc/mariadb-java-client/2.1.1</bundle>
+        <bundle>wrap:mvn:org.apache.tomcat/tomcat-jdbc/8.5.14/$DynamicImport-Package=org.mariadb.*,org.apache.derby.*&amp;overwrite=merge</bundle>
+        <bundle>wrap:mvn:org.apache.tomcat/tomcat-juli/8.5.14/$DynamicImport-Package=org.mariadb.*,org.apache.derby.*&amp;overwrite=merge</bundle>
+        <bundle>mvn:org.onap.ccsdk.sli.core/utils-provider/${project.version}</bundle>
+    </feature>
+</features>
diff --git a/dblib/features/features-dblib/pom.xml b/dblib/features/features-dblib/pom.xml
new file mode 100644
index 0000000..b7c2150
--- /dev/null
+++ b/dblib/features/features-dblib/pom.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>feature-repo-parent</artifactId>
+        <version>1.0.1-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.sli.core</groupId>
+    <artifactId>features-dblib</artifactId>
+    <version>0.2.1-SNAPSHOT</version>
+    <packaging>feature</packaging>
+
+    <name>ccsdk-sli-core :: dblib :: ${project.artifactId}</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>ccsdk-dblib</artifactId>
+            <version>${project.version}</version>
+            <type>xml</type>
+            <classifier>features</classifier>
+        </dependency>
+
+    </dependencies>
+</project>
diff --git a/dblib/features/pom.xml b/dblib/features/pom.xml
index e9cb6dd..18f0873 100755
--- a/dblib/features/pom.xml
+++ b/dblib/features/pom.xml
@@ -1,138 +1,23 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
+
 	<parent>
-		<artifactId>dblib</artifactId>
-		<groupId>org.onap.ccsdk.sli.core</groupId>
-		<version>0.2.0-SNAPSHOT</version>
+		<groupId>org.onap.ccsdk.parent</groupId>
+		<artifactId>odlparent-lite</artifactId>
+		<version>1.0.1-SNAPSHOT</version>
+		<relativePath/>
 	</parent>
-	<artifactId>dblib-features</artifactId>
-	<name>DBLIB Adaptor - Features</name>
 
-	<packaging>jar</packaging>
+	<groupId>org.onap.ccsdk.sli.core</groupId>
+	<artifactId>dblib-feature-aggregator</artifactId>
+	<version>0.2.1-SNAPSHOT</version>
+	<packaging>pom</packaging>
 
-	<dependencies>
+	<name>ccsdk-sli-core :: dblib :: ${project.artifactId}</name>
 
-
-		<dependency>
-			<groupId>org.onap.ccsdk.sli.core</groupId>
-			<artifactId>dblib-provider</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>commons-lang</groupId>
-			<artifactId>commons-lang</artifactId>
-			<version>${commons.lang.version}</version>
-			<scope>compile</scope>
-		</dependency>
-
-		<dependency>
-			<groupId>org.opendaylight.mdsal</groupId>
-			<artifactId>features-mdsal</artifactId>
-			<version>${odl.mdsal.features.version}</version>
-			<classifier>features</classifier>
-			<type>xml</type>
-
-			<scope>runtime</scope>
-		</dependency>
-
-		<dependency>
-		    <groupId>org.apache.tomcat</groupId>
-		    <artifactId>tomcat-jdbc</artifactId>
-		    <version>${tomcat-jdbc.version}</version>
-		</dependency>
-
-		<!-- dependency for opendaylight-karaf-empty for use by testing -->
-		<dependency>
-			<groupId>org.opendaylight.odlparent</groupId>
-			<artifactId>opendaylight-karaf-empty</artifactId>
-            <version>${odl.karaf.empty.distro.version}</version>
-			<type>zip</type>
-		</dependency>
-
-		<dependency>
-			<!-- Required for launching the feature tests -->
-			<groupId>org.opendaylight.odlparent</groupId>
-			<artifactId>features-test</artifactId>
-			<version>${odl.commons.opendaylight.version}</version>
-			<scope>test</scope>
-		</dependency>
-
-		<dependency>
-			<groupId>org.opendaylight.yangtools</groupId>
-			<artifactId>features-yangtools</artifactId>
-			<version>${odl.yangtools.version}</version>
-			<classifier>features</classifier>
-			<type>xml</type>
-			<scope>runtime</scope>
-		</dependency>
-	</dependencies>
-
-	<build>
-		<resources>
-			<resource>
-				<filtering>true</filtering>
-				<directory>src/main/resources</directory>
-			</resource>
-		</resources>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-resources-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>filter</id>
-						<goals>
-							<goal>resources</goal>
-						</goals>
-						<phase>generate-resources</phase>
-					</execution>
-				</executions>
-			</plugin>
-					<!-- launches the feature test, which validates that your karaf feature
-					can be installed inside of a karaf container. It doesn't validate that your
-					functionality works correctly, just that you have all of the dependent bundles
-					defined correctly.
-			<plugin>
-
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-surefire-plugin</artifactId>
-				<version>2.16</version>
-				<configuration>
-					<systemPropertyVariables>
-						<karaf.distro.groupId>org.opendaylight.odlparent</karaf.distro.groupId>
-						<karaf.distro.artifactId>opendaylight-karaf-empty</karaf.distro.artifactId>
-						<karaf.distro.version>${odl.karaf.empty.distro.version}</karaf.distro.version>
-					</systemPropertyVariables>
-					<dependenciesToScan>
-						<dependency>org.opendaylight.yangtools:features-test</dependency>
-					</dependenciesToScan>
-				</configuration>
-			</plugin>
-			-->
-			<plugin>
-				<groupId>org.codehaus.mojo</groupId>
-				<artifactId>build-helper-maven-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>attach-artifacts</id>
-						<goals>
-							<goal>attach-artifact</goal>
-						</goals>
-						<phase>package</phase>
-						<configuration>
-							<artifacts>
-								<artifact>
-									<file>${project.build.directory}/classes/${features.file}</file>
-									<type>xml</type>
-									<classifier>features</classifier>
-								</artifact>
-							</artifacts>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
+	<modules>
+        <module>features-dblib</module>
+        <module>ccsdk-dblib</module>
+    </modules>
 </project>
diff --git a/dblib/features/src/main/resources/features.xml b/dblib/features/src/main/resources/features.xml
deleted file mode 100755
index aa31db7..0000000
--- a/dblib/features/src/main/resources/features.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<features name="sdnc-dblib-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
-
-    <repository>mvn:org.opendaylight.mdsal/features-mdsal/${odl.mdsal.features.version}/xml/features</repository>
-
-
-    <feature name='sdnc-dblib' description="sdnc-dblib" version='${project.version}'>
-        <!-- Most applications will have a dependency on the ODL MD-SAL Broker -->
-        <feature version="${odl.mdsal.version}">odl-mdsal-broker</feature>
-        <bundle>wrap:mvn:org.apache.tomcat/tomcat-jdbc/${tomcat-jdbc.version}/$DynamicImport-Package=org.mariadb.*&amp;overwrite=merge</bundle>
-        <bundle>mvn:org.onap.ccsdk.sli.core/dblib-provider/${project.version}</bundle>
-        <bundle>mvn:org.mariadb.jdbc/mariadb-java-client/${mariadb.connector.version}</bundle>
-    </feature>
-
-</features>
diff --git a/dblib/installer/pom.xml b/dblib/installer/pom.xml
index bff1580..8d6147b 100755
--- a/dblib/installer/pom.xml
+++ b/dblib/installer/pom.xml
@@ -1,143 +1,149 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <artifactId>dblib</artifactId>
-        <groupId>org.onap.ccsdk.sli.core</groupId>
-        <version>0.2.0-SNAPSHOT</version>
-    </parent>
-    <artifactId>dblib-installer</artifactId>
-    <name>DBLIB Adaptor - Karaf  Installer</name>
-    <packaging>pom</packaging>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
 
-    <properties>
-        <application.name>sdnc-dblib</application.name>
-        <features.boot>sdnc-dblib</features.boot>
-        <features.repositories>mvn:org.onap.ccsdk.sli.core/dblib-features/${project.version}/xml/features</features.repositories>
-        <include.transitive.dependencies>false</include.transitive.dependencies>
-    </properties>
+	<parent>
+		<groupId>org.onap.ccsdk.parent</groupId>
+		<artifactId>odlparent-lite</artifactId>
+		<version>1.0.1-SNAPSHOT</version>
+		<relativePath />
+	</parent>
 
-    <dependencies>
+	<groupId>org.onap.ccsdk.sli.core</groupId>
+	<artifactId>dblib-installer</artifactId>
+	<version>0.2.1-SNAPSHOT</version>
+	<packaging>pom</packaging>
 
-        <dependency>
-            <groupId>org.onap.ccsdk.sli.core</groupId>
-            <artifactId>dblib-features</artifactId>
-            <version>${project.version}</version>
-            <classifier>features</classifier>
-            <type>xml</type>
-            <exclusions>
-                <exclusion>
-                    <groupId>*</groupId>
-                    <artifactId>*</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
+	<name>ccsdk-sli-core :: dblib :: ${project.artifactId}</name>
 
-        <dependency>
-            <groupId>org.onap.ccsdk.sli.core</groupId>
-            <artifactId>dblib-provider</artifactId>
-            <version>${project.version}</version>
-        </dependency>
+	<properties>
+		<application.name>ccsdk-dblib</application.name>
+		<features.boot>${application.name}</features.boot>
+		<features.repositories>mvn:org.onap.ccsdk.sli.core/${features.boot}/${project.version}/xml/features</features.repositories>
+		<include.transitive.dependencies>false</include.transitive.dependencies>
+	</properties>
+
+	<dependencies>
+
+		<dependency>
+			<groupId>org.onap.ccsdk.sli.core</groupId>
+			<artifactId>${application.name}</artifactId>
+			<version>${project.version}</version>
+			<type>xml</type>
+			<classifier>features</classifier>
+			<exclusions>
+				<exclusion>
+					<groupId>*</groupId>
+					<artifactId>*</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+
+		<dependency>
+			<groupId>org.onap.ccsdk.sli.core</groupId>
+			<artifactId>dblib-provider</artifactId>
+			<version>${project.version}</version>
+		</dependency>
 
 
-	<dependency>
-	    <groupId>org.apache.tomcat</groupId>
-	    <artifactId>tomcat-jdbc</artifactId>
-	    <version>${tomcat-jdbc.version}</version>
-	</dependency>
-    </dependencies>
+		<dependency>
+			<groupId>org.apache.tomcat</groupId>
+			<artifactId>tomcat-jdbc</artifactId>
+			<version>${tomcat-jdbc.version}</version>
+		</dependency>
+	</dependencies>
 
-    <build>
-        <plugins>
-            <plugin>
-                <artifactId>maven-assembly-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>maven-repo-zip</id>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                        <phase>package</phase>
-                        <configuration>
-                            <attach>false</attach>
-                            <finalName>stage/${application.name}-${project.version}</finalName>
-                            <descriptors>
-                                <descriptor>src/assembly/assemble_mvnrepo_zip.xml</descriptor>
-                            </descriptors>
-			    <appendAssemblyId>false</appendAssemblyId>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>installer-zip</id>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                        <phase>package</phase>
-                        <configuration>
-                            <attach>true</attach>
-                            <finalName>${application.name}-${project.version}-installer</finalName>
-                            <descriptors>
-                                <descriptor>src/assembly/assemble_installer_zip.xml</descriptor>
-                            </descriptors>
-			    <appendAssemblyId>false</appendAssemblyId>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-dependency-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>copy-dependencies</id>
-                        <goals>
-                            <goal>copy-dependencies</goal>
-                        </goals>
-                        <phase>prepare-package</phase>
-                        <configuration>
-                            <transitive>false</transitive>
-                            <outputDirectory>${project.build.directory}/assembly/system</outputDirectory>
-                            <overWriteReleases>false</overWriteReleases>
-                            <overWriteSnapshots>true</overWriteSnapshots>
-                            <overWriteIfNewer>true</overWriteIfNewer>
-                            <useRepositoryLayout>true</useRepositoryLayout>
-                            <addParentPoms>false</addParentPoms>
-                            <copyPom>false</copyPom>
-                            <includeGroupIds>org.onap.ccsdk.sli,org.apache.tomcat</includeGroupIds>
-                            <excludeArtifactIds>sli-common,sli-provider</excludeArtifactIds>
-                            <scope>provided</scope>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <artifactId>maven-resources-plugin</artifactId>
-                <version>2.6</version>
-                <executions>
-                    <execution>
-                        <id>copy-version</id>
-                        <goals>
-                            <goal>copy-resources</goal>
-                        </goals><!-- here the phase you need -->
-                        <phase>validate</phase>
-                        <configuration>
-                            <outputDirectory>${basedir}/target/stage</outputDirectory>
-                            <resources>
-                                <resource>
-                                    <directory>src/main/resources/scripts</directory>
-                                    <includes>
-                                        <include>install-feature.sh</include>
-                                    </includes>
-                                    <filtering>true</filtering>
-                                </resource>
-                            </resources>
-                        </configuration>
-                    </execution>
+	<build>
+		<plugins>
+			<plugin>
+				<artifactId>maven-assembly-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>maven-repo-zip</id>
+						<goals>
+							<goal>single</goal>
+						</goals>
+						<phase>package</phase>
+						<configuration>
+							<attach>false</attach>
+							<finalName>stage/${application.name}-${project.version}</finalName>
+							<descriptors>
+								<descriptor>src/assembly/assemble_mvnrepo_zip.xml</descriptor>
+							</descriptors>
+							<appendAssemblyId>false</appendAssemblyId>
+						</configuration>
+					</execution>
+					<execution>
+						<id>installer-zip</id>
+						<goals>
+							<goal>single</goal>
+						</goals>
+						<phase>package</phase>
+						<configuration>
+							<attach>true</attach>
+							<finalName>${application.name}-${project.version}-installer</finalName>
+							<descriptors>
+								<descriptor>src/assembly/assemble_installer_zip.xml</descriptor>
+							</descriptors>
+							<appendAssemblyId>false</appendAssemblyId>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>copy-dependencies</id>
+						<goals>
+							<goal>copy-dependencies</goal>
+						</goals>
+						<phase>prepare-package</phase>
+						<configuration>
+							<transitive>false</transitive>
+							<outputDirectory>${project.build.directory}/assembly/system</outputDirectory>
+							<overWriteReleases>false</overWriteReleases>
+							<overWriteSnapshots>true</overWriteSnapshots>
+							<overWriteIfNewer>true</overWriteIfNewer>
+							<useRepositoryLayout>true</useRepositoryLayout>
+							<addParentPoms>false</addParentPoms>
+							<copyPom>false</copyPom>
+							<includeGroupIds>org.onap.ccsdk.sli,org.apache.tomcat</includeGroupIds>
+							<excludeArtifactIds>sli-common,sli-provider</excludeArtifactIds>
+							<scope>provided</scope>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<artifactId>maven-resources-plugin</artifactId>
+				<version>2.6</version>
+				<executions>
+					<execution>
+						<id>copy-version</id>
+						<goals>
+							<goal>copy-resources</goal>
+						</goals><!-- here the phase you need -->
+						<phase>validate</phase>
+						<configuration>
+							<outputDirectory>${basedir}/target/stage</outputDirectory>
+							<resources>
+								<resource>
+									<directory>src/main/resources/scripts</directory>
+									<includes>
+										<include>install-feature.sh</include>
+									</includes>
+									<filtering>true</filtering>
+								</resource>
+							</resources>
+						</configuration>
+					</execution>
 
-                </executions>
-            </plugin>
+				</executions>
+			</plugin>
 
-        </plugins>
-    </build>
-
+		</plugins>
+	</build>
 </project>
diff --git a/dblib/pom.xml b/dblib/pom.xml
index e7743d8..58f40ff 100755
--- a/dblib/pom.xml
+++ b/dblib/pom.xml
@@ -1,77 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <parent>
-        <groupId>org.onap.ccsdk.sli.core</groupId>
-        <artifactId>ccsdk-sli-core</artifactId>
-        <version>0.2.0-SNAPSHOT</version>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+   <modelVersion>4.0.0</modelVersion>
+
+   <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>odlparent-lite</artifactId>
+        <version>1.0.1-SNAPSHOT</version>
+        <relativePath/>
     </parent>
 
+   <groupId>org.onap.ccsdk.sli.core</groupId>
+   <artifactId>dblib</artifactId>
+   <version>0.2.1-SNAPSHOT</version>
+   <packaging>pom</packaging>
 
-    <modelVersion>4.0.0</modelVersion>
-    <packaging>pom</packaging>
-    <groupId>org.onap.ccsdk.sli.core</groupId>
-    <artifactId>dblib</artifactId>
-
-
-    <name>DBLIB Adaptor</name>
-    <description>The DBLIB adaptor allows service logic to access persistent data in a local sql database</description>
-
-    <version>0.2.0-SNAPSHOT</version>
-
-    <build>
-
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-compiler-plugin</artifactId>
-                    <version>${maven.compile.plugin.version}</version>
-                    <configuration>
-                        <source>${java.version.source}</source>
-                        <target>${java.version.target}</target>
-                    </configuration>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-javadoc-plugin</artifactId>
-                    <version>2.10</version>
-
-                    <executions>
-                        <execution>
-                            <id>aggregate</id>
-                            <goals>
-                                <goal>aggregate</goal>
-                            </goals>
-                            <phase>site</phase>
-
-                        </execution>
-                    </executions>
-                </plugin>
-                <plugin>
-                    <artifactId>maven-source-plugin</artifactId>
-                    <version>2.1.1</version>
-                    <executions>
-                        <execution>
-                            <id>bundle-sources</id>
-                            <phase>package</phase>
-                            <goals>
-                                <!-- produce source artifact for main project sources -->
-                                <goal>jar-no-fork</goal>
-
-                                <!-- produce source artifact for project test sources -->
-                                <goal>test-jar-no-fork</goal>
-                            </goals>
-                        </execution>
-                    </executions>
-                </plugin>
-            </plugins>
-
-        </pluginManagement>
-    </build>
-    <organization>
-        <name>AT&amp;T</name>
+   <name>ccsdk-sli-core :: dblib</name>
+   <description>The DBLIB adaptor allows service logic to access persistent data in a local sql database</description>
+   <organization>
+        <name>ONAP</name>
     </organization>
-  <modules>
+
+   <modules>
     <module>provider</module>
     <module>features</module>
     <module>installer</module>
diff --git a/dblib/provider/pom.xml b/dblib/provider/pom.xml
index 3bdd7e6..e6fd1bc 100755
--- a/dblib/provider/pom.xml
+++ b/dblib/provider/pom.xml
@@ -1,19 +1,27 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
+
 	<parent>
-		<groupId>org.onap.ccsdk.sli.core</groupId>
-		<artifactId>dblib</artifactId>
-		<version>0.2.0-SNAPSHOT</version>
+		<groupId>org.onap.ccsdk.parent</groupId>
+		<artifactId>binding-parent</artifactId>
+		<version>1.0.1-SNAPSHOT</version>
+		<relativePath />
 	</parent>
+
+	<groupId>org.onap.ccsdk.sli.core</groupId>
 	<artifactId>dblib-provider</artifactId>
-	<version>0.2.0-SNAPSHOT</version>
+	<version>0.2.1-SNAPSHOT</version>
 	<packaging>bundle</packaging>
-	<name>DBLIB Adaptor - Provider</name>
+
+	<name>ccsdk-sli-core :: dblib :: ${project.artifactId}</name>
 	<url>http://maven.apache.org</url>
+
 	<properties>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 	</properties>
+
 	<dependencies>
 		<dependency>
 			<groupId>junit</groupId>
@@ -21,12 +29,12 @@
 			<version>${junit.version}</version>
 			<scope>test</scope>
 		</dependency>
-        <dependency>
-            <groupId>ch.vorburger.mariaDB4j</groupId>
-            <artifactId>mariaDB4j</artifactId>
-            <version>2.2.3</version>
-            <scope>test</scope>
-        </dependency>
+		<dependency>
+			<groupId>ch.vorburger.mariaDB4j</groupId>
+			<artifactId>mariaDB4j</artifactId>
+			<version>2.2.3</version>
+			<scope>test</scope>
+		</dependency>
 		<dependency>
 			<groupId>equinoxSDK381</groupId>
 			<artifactId>org.eclipse.osgi</artifactId>
@@ -48,53 +56,31 @@
 			<version>${slf4j.version}</version>
 			<scope>test</scope>
 		</dependency>
-        <dependency>
-            <groupId>org.mariadb.jdbc</groupId>
-            <artifactId>mariadb-java-client</artifactId>
-            <version>${mariadb.connector.version}</version>
-        </dependency>
 		<dependency>
-		    <groupId>org.apache.tomcat</groupId>
-		    <artifactId>tomcat-jdbc</artifactId>
-		    <version>${tomcat-jdbc.version}</version>
+			<groupId>org.mariadb.jdbc</groupId>
+			<artifactId>mariadb-java-client</artifactId>
+			<version>${mariadb.connector.version}</version>
 		</dependency>
-        <dependency>
-            <groupId>com.google.guava</groupId>
-            <artifactId>guava</artifactId>
-        </dependency>
+		<dependency>
+			<groupId>org.apache.tomcat</groupId>
+			<artifactId>tomcat-jdbc</artifactId>
+			<version>${tomcat-jdbc.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>com.google.guava</groupId>
+			<artifactId>guava</artifactId>
+		</dependency>
 		<dependency>
 			<groupId>org.onap.ccsdk.sli.core</groupId>
 			<artifactId>utils-provider</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
-        <!-- Testing related dependencies -->
-        <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-core</artifactId>
-            <scope>test</scope>
-        </dependency>
+		<!-- Testing related dependencies -->
+		<dependency>
+			<groupId>org.mockito</groupId>
+			<artifactId>mockito-core</artifactId>
+			<scope>test</scope>
+		</dependency>
 	</dependencies>
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.felix</groupId>
-				<artifactId>maven-bundle-plugin</artifactId>
-				<version>${bundle.plugin.version}</version>
-				<extensions>true</extensions>
-				<configuration>
-					<instructions>
-						<Bundle-SymbolicName>org.onap.ccsdk.sli.core.dblib</Bundle-SymbolicName>
-						<Export-Package>org.onap.ccsdk.sli.core.dblib;version=${project.version}</Export-Package>
-                        <Import-Package>*,org.mariadb.jdbc</Import-Package>
-						<Embed-Transitive>true</Embed-Transitive>
-					</instructions>
-				</configuration>
-
-			</plugin>
-
-
-		</plugins>
-	</build>
 </project>
diff --git a/dblib/provider/src/main/java/org/onap/ccsdk/sli/core/dblib/CachedDataSource.java b/dblib/provider/src/main/java/org/onap/ccsdk/sli/core/dblib/CachedDataSource.java
index d233178..8dac336 100755
--- a/dblib/provider/src/main/java/org/onap/ccsdk/sli/core/dblib/CachedDataSource.java
+++ b/dblib/provider/src/main/java/org/onap/ccsdk/sli/core/dblib/CachedDataSource.java
@@ -56,500 +56,516 @@
 
 public abstract class CachedDataSource implements DataSource, SQLExecutionMonitorObserver {
 
-    private static final Logger LOGGER = LoggerFactory.getLogger(CachedDataSource.class);
+	private static final Logger LOGGER = LoggerFactory.getLogger(CachedDataSource.class);
 
-    private static final String SQL_FAILURE = "SQL FAILURE. time(ms): ";
-    private static final String FAILED_TO_EXECUTE = "> Failed to execute: ";
-    private static final String WITH_ARGUMENTS = " with arguments: ";
-    private static final String WITH_NO_ARGUMENTS = " with no arguments. ";
-    private static final String SQL_DATA_SOURCE = "SQL DataSource <";
+	private static final String SQL_FAILURE = "SQL FAILURE. time(ms): ";
+	private static final String FAILED_TO_EXECUTE = "> Failed to execute: ";
+	private static final String WITH_ARGUMENTS = " with arguments: ";
+	private static final String WITH_NO_ARGUMENTS = " with no arguments. ";
+	private static final String SQL_DATA_SOURCE = "SQL DataSource <";
 
+	protected long connReqTimeout = 30L;
+	protected long dataReqTimeout = 100L;
 
-    protected long connReqTimeout = 30L;
-    protected long dataReqTimeout = 100L;
+	private final SQLExecutionMonitor monitor;
+	protected DataSource ds = null;
+	protected String connectionName = null;
+	protected boolean initialized = false;
 
-    private final SQLExecutionMonitor monitor;
-    protected DataSource ds = null;
-    protected String connectionName = null;
-    protected boolean initialized = false;
+	private long interval = 1000;
+	private long initialDelay = 5000;
+	private long expectedCompletionTime = 50L;
+	private boolean canTakeOffLine = true;
+	private long unprocessedFailoverThreshold = 3L;
 
-    private long interval = 1000;
-    private long initialDelay = 5000;
-    private long expectedCompletionTime = 50L;
-    private boolean canTakeOffLine = true;
-    private long unprocessedFailoverThreshold = 3L;
+	private long nextErrorReportTime = 0L;
 
-    private long nextErrorReportTime = 0L;
+	private String globalHostName = null;
 
-    private String globalHostName = null;
+	private boolean isDerby = false;
 
+	public CachedDataSource(BaseDBConfiguration jdbcElem) throws DBConfigException {
+		configure(jdbcElem);
 
-    public CachedDataSource(BaseDBConfiguration jdbcElem) throws DBConfigException {
-        configure(jdbcElem);
-        monitor = new SQLExecutionMonitor(this);
-    }
+		if ("org.apache.derby.jdbc.EmbeddedDriver".equals(jdbcElem.getDriverName())) {
+			isDerby = true;
+		}
+		monitor = new SQLExecutionMonitor(this);
+	}
 
-    protected abstract void configure(BaseDBConfiguration jdbcElem) throws DBConfigException;
+	protected abstract void configure(BaseDBConfiguration jdbcElem) throws DBConfigException;
 
-    /* (non-Javadoc)
-     * @see javax.sql.DataSource#getConnection()
-     */
-    @Override
-    public Connection getConnection() throws SQLException {
-        return ds.getConnection();
-    }
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see javax.sql.DataSource#getConnection()
+	 */
+	@Override
+	public Connection getConnection() throws SQLException {
+		return ds.getConnection();
+	}
 
-    public CachedRowSet getData(String statement, List<Object> arguments)
-        throws SQLException {
-        TestObject testObject = monitor.registerRequest();
+	public CachedRowSet getData(String statement, List<Object> arguments) throws SQLException {
+		TestObject testObject = monitor.registerRequest();
 
-        try (Connection connection = this.getConnection()) {
-            if (connection == null) {
-                throw new SQLException("Connection invalid");
-            }
-            if (LOGGER.isDebugEnabled()) {
-                LOGGER.debug("Obtained connection <{}>: {}", connectionName, connection);
-            }
-            return executePreparedStatement(connection, statement, arguments, true);
-        } finally {
-            monitor.deregisterRequest(testObject);
-        }
-    }
+		try (Connection connection = this.getConnection()) {
+			if (connection == null) {
+				throw new SQLException("Connection invalid");
+			}
+			if (LOGGER.isDebugEnabled()) {
+				LOGGER.debug("Obtained connection <{}>: {}", connectionName, connection);
+			}
+			return executePreparedStatement(connection, statement, arguments, true);
+		} finally {
+			monitor.deregisterRequest(testObject);
+		}
+	}
 
-    public boolean writeData(String statement, List<Object> arguments)
-        throws SQLException {
-        TestObject testObject = monitor.registerRequest();
+	public boolean writeData(String statement, List<Object> arguments) throws SQLException {
+		TestObject testObject = monitor.registerRequest();
 
-        try (Connection connection = this.getConnection()) {
-            if (connection == null) {
-                throw new SQLException("Connection invalid");
-            }
-            if (LOGGER.isDebugEnabled()) {
-                LOGGER.debug("Obtained connection <{}>: {}", connectionName, connection);
-            }
-            return executeUpdatePreparedStatement(connection, statement, arguments, true);
-        } finally {
-            monitor.deregisterRequest(testObject);
-        }
-    }
+		try (Connection connection = this.getConnection()) {
+			if (connection == null) {
+				throw new SQLException("Connection invalid");
+			}
+			if (LOGGER.isDebugEnabled()) {
+				LOGGER.debug("Obtained connection <{}>: {}", connectionName, connection);
+			}
+			return executeUpdatePreparedStatement(connection, statement, arguments, true);
+		} finally {
+			monitor.deregisterRequest(testObject);
+		}
+	}
 
-    CachedRowSet executePreparedStatement(Connection conn, String statement,
-        List<Object> arguments, boolean close) throws SQLException {
-        long time = System.currentTimeMillis();
+	CachedRowSet executePreparedStatement(Connection conn, String statement, List<Object> arguments, boolean close)
+			throws SQLException {
+		long time = System.currentTimeMillis();
 
-        CachedRowSet data = null;
-        if (LOGGER.isDebugEnabled()) {
-            LOGGER.debug("SQL Statement: {}", statement);
-            if (arguments != null && !arguments.isEmpty()) {
-                LOGGER.debug("Argunments: {}", arguments);
-            }
-        }
+		CachedRowSet data = null;
+		if (LOGGER.isDebugEnabled()) {
+			LOGGER.debug("SQL Statement: {}", statement);
+			if (arguments != null && !arguments.isEmpty()) {
+				LOGGER.debug("Argunments: {}", arguments);
+			}
+		}
 
-        ResultSet rs = null;
-        try (PreparedStatement ps = conn.prepareStatement(statement)) {
-            data = RowSetProvider.newFactory().createCachedRowSet();
-            if (arguments != null) {
-                for (int i = 0, max = arguments.size(); i < max; i++) {
-                    ps.setObject(i + 1, arguments.get(i));
-                }
-            }
-            rs = ps.executeQuery();
-            data.populate(rs);
-            // Point the rowset Cursor to the start
-            if (LOGGER.isDebugEnabled()) {
-                LOGGER.debug("SQL SUCCESS. rows returned: {}, time(ms): {}", data.size(), (System.currentTimeMillis()
-                    - time));
-            }
-        } catch (SQLException exc) {
-            handleSqlExceptionForExecuteStatement(conn, statement, arguments, exc, time);
-        } finally {
-            handleFinallyBlockForExecutePreparedStatement(rs, conn, close);
-        }
+		ResultSet rs = null;
+		try (PreparedStatement ps = conn.prepareStatement(statement)) {
+			data = RowSetProvider.newFactory().createCachedRowSet();
+			if (arguments != null) {
+				for (int i = 0, max = arguments.size(); i < max; i++) {
+					ps.setObject(i + 1, arguments.get(i));
+				}
+			}
+			rs = ps.executeQuery();
+			data.populate(rs);
+			// Point the rowset Cursor to the start
+			if (LOGGER.isDebugEnabled()) {
+				LOGGER.debug("SQL SUCCESS. rows returned: {}, time(ms): {}", data.size(),
+						(System.currentTimeMillis() - time));
+			}
+		} catch (SQLException exc) {
+			handleSqlExceptionForExecuteStatement(conn, statement, arguments, exc, time);
+		} finally {
+			handleFinallyBlockForExecutePreparedStatement(rs, conn, close);
+		}
 
-        return data;
-    }
+		return data;
+	}
 
-    private void handleSqlExceptionForExecuteStatement(Connection conn, String statement,
-        List<Object> arguments, SQLException exc, long time) throws SQLException {
-        if (LOGGER.isDebugEnabled()) {
-            LOGGER.debug(SQL_FAILURE + (System.currentTimeMillis() - time));
-        }
-        try {
-            conn.rollback();
-        } catch (Exception thr) {
-            LOGGER.error(thr.getLocalizedMessage(), thr);
-        }
-        if (arguments != null && !arguments.isEmpty()) {
-            LOGGER.error(String.format("<%s%s%s%s%s", connectionName, FAILED_TO_EXECUTE, statement, WITH_ARGUMENTS,
-                arguments), exc);
-        } else {
-            LOGGER.error(String.format("<%s%s%s%s", connectionName, FAILED_TO_EXECUTE, statement, WITH_NO_ARGUMENTS),
-                exc);
-        }
-        throw exc;
-    }
+	private void handleSqlExceptionForExecuteStatement(Connection conn, String statement, List<Object> arguments,
+			SQLException exc, long time) throws SQLException {
+		if (LOGGER.isDebugEnabled()) {
+			LOGGER.debug(SQL_FAILURE + (System.currentTimeMillis() - time));
+		}
+		try {
+			conn.rollback();
+		} catch (Exception thr) {
+			LOGGER.error(thr.getLocalizedMessage(), thr);
+		}
+		if (arguments != null && !arguments.isEmpty()) {
+			LOGGER.error(String.format("<%s%s%s%s%s", connectionName, FAILED_TO_EXECUTE, statement, WITH_ARGUMENTS,
+					arguments), exc);
+		} else {
+			LOGGER.error(String.format("<%s%s%s%s", connectionName, FAILED_TO_EXECUTE, statement, WITH_NO_ARGUMENTS),
+					exc);
+		}
+		throw exc;
+	}
 
-    private void handleFinallyBlockForExecutePreparedStatement(ResultSet rs, Connection conn, boolean close) {
-        try {
-            if (rs != null) {
-                rs.close();
-            }
-        } catch (Exception exc) {
-            LOGGER.error(exc.getLocalizedMessage(), exc);
-        }
-        try {
-            if (conn != null && close) {
-                conn.close();
-            }
-        } catch (Exception exc) {
-            LOGGER.error(exc.getLocalizedMessage(), exc);
-        }
-    }
+	private void handleFinallyBlockForExecutePreparedStatement(ResultSet rs, Connection conn, boolean close) {
+		try {
+			if (rs != null) {
+				rs.close();
+			}
+		} catch (Exception exc) {
+			LOGGER.error(exc.getLocalizedMessage(), exc);
+		}
+		try {
+			if (conn != null && close) {
+				conn.close();
+			}
+		} catch (Exception exc) {
+			LOGGER.error(exc.getLocalizedMessage(), exc);
+		}
+	}
 
-    boolean executeUpdatePreparedStatement(Connection conn, String statement, List<Object> arguments,
-        boolean close) throws SQLException {
-        long time = System.currentTimeMillis();
+	boolean executeUpdatePreparedStatement(Connection conn, String statement, List<Object> arguments, boolean close)
+			throws SQLException {
+		long time = System.currentTimeMillis();
 
-        CachedRowSet data;
+		CachedRowSet data;
 
-        try (PreparedStatement ps = conn.prepareStatement(statement)) {
-            data = RowSetProvider.newFactory().createCachedRowSet();
-            if (arguments != null) {
-                prepareStatementForExecuteUpdate(arguments, ps);
-            }
-            ps.executeUpdate();
-            // Point the rowset Cursor to the start
-            if (LOGGER.isDebugEnabled()) {
-                LOGGER.debug("SQL SUCCESS. rows returned: {}, time(ms): {}", data.size(), (System.currentTimeMillis()
-                    - time));
-            }
-            ps.close();
-        } catch (SQLException exc) {
-            handleSqlExceptionForExecuteStatement(conn, statement, arguments, exc, time);
-        } finally {
-            try {
-                if (close) {
-                    conn.close();
-                }
-            } catch (Exception exc) {
-                LOGGER.error(exc.getLocalizedMessage(), exc);
-            }
-        }
+		try (PreparedStatement ps = conn.prepareStatement(statement)) {
+			data = RowSetProvider.newFactory().createCachedRowSet();
+			if (arguments != null) {
+				prepareStatementForExecuteUpdate(arguments, ps);
+			}
+			ps.executeUpdate();
+			// Point the rowset Cursor to the start
+			if (LOGGER.isDebugEnabled()) {
+				LOGGER.debug("SQL SUCCESS. rows returned: {}, time(ms): {}", data.size(),
+						(System.currentTimeMillis() - time));
+			}
+			ps.close();
+		} catch (SQLException exc) {
+			handleSqlExceptionForExecuteStatement(conn, statement, arguments, exc, time);
+		} finally {
+			try {
+				if (close) {
+					conn.close();
+				}
+			} catch (Exception exc) {
+				LOGGER.error(exc.getLocalizedMessage(), exc);
+			}
+		}
 
-        return true;
-    }
+		return true;
+	}
 
-    private void prepareStatementForExecuteUpdate(List<Object> arguments, PreparedStatement ps)
-        throws SQLException {
-        for (int i = 0, max = arguments.size(); i < max; i++) {
-            Object value = arguments.get(i);
-            if (value instanceof Blob) {
-                ps.setBlob(i + 1, (Blob) value);
-            } else if (value instanceof Timestamp) {
-                ps.setTimestamp(i + 1, (Timestamp) value);
-            } else if (value instanceof Integer) {
-                ps.setInt(i + 1, (Integer) value);
-            } else if (value instanceof Long) {
-                ps.setLong(i + 1, (Long) value);
-            } else if (value instanceof Date) {
-                ps.setDate(i + 1, (Date) value);
-            } else {
-                ps.setObject(i + 1, value);
-            }
-        }
-    }
+	private void prepareStatementForExecuteUpdate(List<Object> arguments, PreparedStatement ps) throws SQLException {
+		for (int i = 0, max = arguments.size(); i < max; i++) {
+			Object value = arguments.get(i);
+			if (value instanceof Blob) {
+				ps.setBlob(i + 1, (Blob) value);
+			} else if (value instanceof Timestamp) {
+				ps.setTimestamp(i + 1, (Timestamp) value);
+			} else if (value instanceof Integer) {
+				ps.setInt(i + 1, (Integer) value);
+			} else if (value instanceof Long) {
+				ps.setLong(i + 1, (Long) value);
+			} else if (value instanceof Date) {
+				ps.setDate(i + 1, (Date) value);
+			} else {
+				ps.setObject(i + 1, value);
+			}
+		}
+	}
 
-    /* (non-Javadoc)
-     * @see javax.sql.DataSource#getConnection(java.lang.String, java.lang.String)
-     */
-    @Override
-    public Connection getConnection(String username, String password)
-        throws SQLException {
-        return ds.getConnection(username, password);
-    }
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see javax.sql.DataSource#getConnection(java.lang.String, java.lang.String)
+	 */
+	@Override
+	public Connection getConnection(String username, String password) throws SQLException {
+		return ds.getConnection(username, password);
+	}
 
-    /* (non-Javadoc)
-     * @see javax.sql.DataSource#getLogWriter()
-     */
-    @Override
-    public PrintWriter getLogWriter() throws SQLException {
-        return ds.getLogWriter();
-    }
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see javax.sql.DataSource#getLogWriter()
+	 */
+	@Override
+	public PrintWriter getLogWriter() throws SQLException {
+		return ds.getLogWriter();
+	}
 
-    /* (non-Javadoc)
-     * @see javax.sql.DataSource#getLoginTimeout()
-     */
-    @Override
-    public int getLoginTimeout() throws SQLException {
-        return ds.getLoginTimeout();
-    }
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see javax.sql.DataSource#getLoginTimeout()
+	 */
+	@Override
+	public int getLoginTimeout() throws SQLException {
+		return ds.getLoginTimeout();
+	}
 
-    /* (non-Javadoc)
-     * @see javax.sql.DataSource#setLogWriter(java.io.PrintWriter)
-     */
-    @Override
-    public void setLogWriter(PrintWriter out) throws SQLException {
-        ds.setLogWriter(out);
-    }
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see javax.sql.DataSource#setLogWriter(java.io.PrintWriter)
+	 */
+	@Override
+	public void setLogWriter(PrintWriter out) throws SQLException {
+		ds.setLogWriter(out);
+	}
 
-    /* (non-Javadoc)
-     * @see javax.sql.DataSource#setLoginTimeout(int)
-     */
-    @Override
-    public void setLoginTimeout(int seconds) throws SQLException {
-        ds.setLoginTimeout(seconds);
-    }
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see javax.sql.DataSource#setLoginTimeout(int)
+	 */
+	@Override
+	public void setLoginTimeout(int seconds) throws SQLException {
+		ds.setLoginTimeout(seconds);
+	}
 
+	@Override
+	public final String getDbConnectionName() {
+		return connectionName;
+	}
 
-    @Override
-    public final String getDbConnectionName() {
-        return connectionName;
-    }
+	protected final void setDbConnectionName(String name) {
+		this.connectionName = name;
+	}
 
-    protected final void setDbConnectionName(String name) {
-        this.connectionName = name;
-    }
+	public void cleanUp() {
+		if (ds != null && ds instanceof Closeable) {
+			try {
+				((Closeable) ds).close();
+			} catch (IOException e) {
+				LOGGER.warn(e.getMessage());
+			}
+		}
+		ds = null;
+		monitor.deleteObservers();
+		monitor.cleanup();
+	}
 
-    public void cleanUp() {
-        if (ds != null && ds instanceof Closeable) {
-            try {
-                ((Closeable) ds).close();
-            } catch (IOException e) {
-                LOGGER.warn(e.getMessage());
-            }
-        }
-        ds = null;
-        monitor.deleteObservers();
-        monitor.cleanup();
-    }
+	public boolean isInitialized() {
+		return initialized;
+	}
 
-    public boolean isInitialized() {
-        return initialized;
-    }
+	protected boolean testConnection() {
+		return testConnection(false);
+	}
 
-    protected boolean testConnection() {
-        return testConnection(false);
-    }
+	protected boolean testConnection(boolean errorLevel) {
+		ResultSet rs = null;
+		try (Connection conn = this.getConnection(); Statement stmt = conn.createStatement()) {
+			Boolean readOnly;
+			String hostname;
+			rs = stmt.executeQuery("SELECT @@global.read_only, @@global.hostname"); // ("SELECT 1 FROM DUAL"); //"select
+																					// BANNER from SYS.V_$VERSION"
+			while (rs.next()) {
+				readOnly = rs.getBoolean(1);
+				hostname = rs.getString(2);
 
-    protected boolean testConnection(boolean errorLevel) {
-        ResultSet rs = null;
-        try (Connection conn = this.getConnection(); Statement stmt = conn.createStatement()) {
-            Boolean readOnly;
-            String hostname;
-            rs = stmt.executeQuery(
-                "SELECT @@global.read_only, @@global.hostname");   //("SELECT 1 FROM DUAL"); //"select BANNER from SYS.V_$VERSION"
-            while (rs.next()) {
-                readOnly = rs.getBoolean(1);
-                hostname = rs.getString(2);
+				if (LOGGER.isDebugEnabled()) {
+					LOGGER.debug(SQL_DATA_SOURCE + getDbConnectionName() + "> connected to " + hostname
+							+ ", read-only is " + readOnly + ", tested successfully ");
+				}
+			}
+		} catch (Exception exc) {
+			if (errorLevel) {
+				LOGGER.error(
+						SQL_DATA_SOURCE + this.getDbConnectionName() + "> test failed. Cause : " + exc.getMessage());
+			} else {
+				LOGGER.info(
+						SQL_DATA_SOURCE + this.getDbConnectionName() + "> test failed. Cause : " + exc.getMessage());
+			}
+			return false;
+		} finally {
+			if (rs != null) {
+				try {
+					rs.close();
+				} catch (SQLException e) {
+					LOGGER.error(e.getLocalizedMessage(), e);
+				}
+			}
+		}
+		return true;
+	}
 
-                if (LOGGER.isDebugEnabled()) {
-                    LOGGER.debug(
-                        SQL_DATA_SOURCE + getDbConnectionName() + "> connected to " + hostname + ", read-only is "
-                            + readOnly + ", tested successfully ");
-                }
-            }
-        } catch (Exception exc) {
-            if (errorLevel) {
-                LOGGER.error(
-                    SQL_DATA_SOURCE + this.getDbConnectionName() + "> test failed. Cause : " + exc.getMessage());
-            } else {
-                LOGGER.info(
-                    SQL_DATA_SOURCE + this.getDbConnectionName() + "> test failed. Cause : " + exc.getMessage());
-            }
-            return false;
-        } finally {
-            if (rs != null) {
-                try {
-                    rs.close();
-                } catch (SQLException e) {
-                    LOGGER.error(e.getLocalizedMessage(), e);
-                }
-            }
-        }
-        return true;
-    }
+	@Override
+	public boolean isWrapperFor(Class<?> iface) throws SQLException {
+		return false;
+	}
 
-    @Override
-    public boolean isWrapperFor(Class<?> iface) throws SQLException {
-        return false;
-    }
+	@Override
+	public <T> T unwrap(Class<T> iface) throws SQLException {
+		return null;
+	}
 
-    @Override
-    public <T> T unwrap(Class<T> iface) throws SQLException {
-        return null;
-    }
+	@SuppressWarnings("deprecation")
+	public void setConnectionCachingEnabled(boolean state) {
+		// if(ds != null && ds instanceof OracleDataSource)
+		// try {
+		// ((OracleDataSource)ds).setConnectionCachingEnabled(true);
+		// } catch (SQLException exc) {
+		// LOGGER.warn("", exc);
+		// }
+	}
 
-    @SuppressWarnings("deprecation")
-    public void setConnectionCachingEnabled(boolean state) {
-//		if(ds != null && ds instanceof OracleDataSource)
-//			try {
-//				((OracleDataSource)ds).setConnectionCachingEnabled(true);
-//			} catch (SQLException exc) {
-//				LOGGER.warn("", exc);
-//			}
-    }
+	public void addObserver(Observer observer) {
+		monitor.addObserver(observer);
+	}
 
-    public void addObserver(Observer observer) {
-        monitor.addObserver(observer);
-    }
+	public void deleteObserver(Observer observer) {
+		monitor.deleteObserver(observer);
+	}
 
-    public void deleteObserver(Observer observer) {
-        monitor.deleteObserver(observer);
-    }
+	@Override
+	public long getInterval() {
+		return interval;
+	}
 
-    @Override
-    public long getInterval() {
-        return interval;
-    }
+	@Override
+	public long getInitialDelay() {
+		return initialDelay;
+	}
 
-    @Override
-    public long getInitialDelay() {
-        return initialDelay;
-    }
+	@Override
+	public void setInterval(long value) {
+		interval = value;
+	}
 
-    @Override
-    public void setInterval(long value) {
-        interval = value;
-    }
+	@Override
+	public void setInitialDelay(long value) {
+		initialDelay = value;
+	}
 
-    @Override
-    public void setInitialDelay(long value) {
-        initialDelay = value;
-    }
+	@Override
+	public long getExpectedCompletionTime() {
+		return expectedCompletionTime;
+	}
 
-    @Override
-    public long getExpectedCompletionTime() {
-        return expectedCompletionTime;
-    }
+	@Override
+	public void setExpectedCompletionTime(long value) {
+		expectedCompletionTime = value;
+	}
 
-    @Override
-    public void setExpectedCompletionTime(long value) {
-        expectedCompletionTime = value;
-    }
+	@Override
+	public long getUnprocessedFailoverThreshold() {
+		return unprocessedFailoverThreshold;
+	}
 
-    @Override
-    public long getUnprocessedFailoverThreshold() {
-        return unprocessedFailoverThreshold;
-    }
+	@Override
+	public void setUnprocessedFailoverThreshold(long value) {
+		this.unprocessedFailoverThreshold = value;
+	}
 
-    @Override
-    public void setUnprocessedFailoverThreshold(long value) {
-        this.unprocessedFailoverThreshold = value;
-    }
+	public boolean canTakeOffLine() {
+		return canTakeOffLine;
+	}
 
-    public boolean canTakeOffLine() {
-        return canTakeOffLine;
-    }
+	public void blockImmediateOffLine() {
+		canTakeOffLine = false;
+		final Thread offLineTimer = new Thread(() -> {
+			try {
+				Thread.sleep(30000L);
+			} catch (Exception exc) {
+				LOGGER.error(exc.getLocalizedMessage(), exc);
+			} finally {
+				canTakeOffLine = true;
+			}
+		});
+		offLineTimer.setDaemon(true);
+		offLineTimer.start();
+	}
 
-    public void blockImmediateOffLine() {
-        canTakeOffLine = false;
-        final Thread offLineTimer = new Thread(() -> {
-            try {
-                Thread.sleep(30000L);
-            } catch (Exception exc) {
-                LOGGER.error(exc.getLocalizedMessage(), exc);
-            } finally {
-                canTakeOffLine = true;
-            }
-        });
-        offLineTimer.setDaemon(true);
-        offLineTimer.start();
-    }
+	/**
+	 * @return the monitor
+	 */
+	final SQLExecutionMonitor getMonitor() {
+		return monitor;
+	}
 
-    /**
-     * @return the monitor
-     */
-    final SQLExecutionMonitor getMonitor() {
-        return monitor;
-    }
+	protected boolean isSlave() throws PoolExhaustedException {
 
-    protected boolean isSlave() throws PoolExhaustedException {
-        CachedRowSet rs;
-        boolean isSlave;
-        String hostname = "UNDETERMINED";
-        try {
-            boolean localSlave = true;
-            rs = this.getData("SELECT @@global.read_only, @@global.hostname", new ArrayList<>());
-            while (rs.next()) {
-                localSlave = rs.getBoolean(1);
-                hostname = rs.getString(2);
-            }
-            isSlave = localSlave;
-        } catch (PoolExhaustedException peexc) {
-            throw peexc;
-        } catch (Exception e) {
-            LOGGER.error("", e);
-            isSlave = true;
-        }
-        if (isSlave) {
-            LOGGER.debug("SQL SLAVE : {} on server {}", connectionName, hostname);
-        } else {
-            LOGGER.debug("SQL MASTER : {} on server {}", connectionName, hostname);
-        }
-        return isSlave;
-    }
+		// If using Apache derby, just return false
+		if (isDerby) {
+			return false;
+		}
+		CachedRowSet rs;
+		boolean isSlave;
+		String hostname = "UNDETERMINED";
+		try {
+			boolean localSlave = true;
+			rs = this.getData("SELECT @@global.read_only, @@global.hostname", new ArrayList<>());
+			while (rs.next()) {
+				localSlave = rs.getBoolean(1);
+				hostname = rs.getString(2);
+			}
+			isSlave = localSlave;
+		} catch (PoolExhaustedException peexc) {
+			throw peexc;
+		} catch (Exception e) {
+			LOGGER.error("", e);
+			isSlave = true;
+		}
+		if (isSlave) {
+			LOGGER.debug("SQL SLAVE : {} on server {}", connectionName, hostname);
+		} else {
+			LOGGER.debug("SQL MASTER : {} on server {}", connectionName, hostname);
+		}
+		return isSlave;
+	}
 
-    public boolean isFabric() {
-        return false;
-    }
+	public boolean isFabric() {
+		return false;
+	}
 
-    protected boolean lockTable(Connection conn, String tableName) {
-        boolean retValue = false;
-        String query = "LOCK TABLES " + tableName + " WRITE";
-        try (Statement preStmt = conn.createStatement(); Statement lock = conn.prepareStatement(query);
-            ResultSet rs = preStmt.executeQuery("GETDATE()")) {
-            if (tableName != null) {
-                if (LOGGER.isDebugEnabled()) {
-                    LOGGER.debug("Executing 'LOCK TABLES " + tableName + " WRITE' on connection " + conn.toString());
-                    if ("SVC_LOGIC".equals(tableName)) {
-                        Exception e = new Exception();
-                        StringWriter sw = new StringWriter();
-                        PrintWriter pw = new PrintWriter(sw);
-                        e.printStackTrace(pw);
-                        LOGGER.debug(sw.toString());
-                    }
-                }
-                lock.execute(query);
-                retValue = true;
-            }
-        } catch (Exception exc) {
-            LOGGER.error("", exc);
-            retValue = false;
-        }
-        return retValue;
-    }
+	protected boolean lockTable(Connection conn, String tableName) {
+		boolean retValue = false;
+		String query = "LOCK TABLES " + tableName + " WRITE";
+		try (Statement preStmt = conn.createStatement();
+				Statement lock = conn.prepareStatement(query);
+				ResultSet rs = preStmt.executeQuery("GETDATE()")) {
+			if (tableName != null) {
+				if (LOGGER.isDebugEnabled()) {
+					LOGGER.debug("Executing 'LOCK TABLES " + tableName + " WRITE' on connection " + conn.toString());
+					if ("SVC_LOGIC".equals(tableName)) {
+						Exception e = new Exception();
+						StringWriter sw = new StringWriter();
+						PrintWriter pw = new PrintWriter(sw);
+						e.printStackTrace(pw);
+						LOGGER.debug(sw.toString());
+					}
+				}
+				lock.execute(query);
+				retValue = true;
+			}
+		} catch (Exception exc) {
+			LOGGER.error("", exc);
+			retValue = false;
+		}
+		return retValue;
+	}
 
-    protected boolean unlockTable(Connection conn) {
-        boolean retValue;
-        try (Statement lock = conn.createStatement()) {
-            if (LOGGER.isDebugEnabled()) {
-                LOGGER.debug("Executing 'UNLOCK TABLES' on connection {}", conn);
-            }
-            retValue = lock.execute("UNLOCK TABLES");
-        } catch (Exception exc) {
-            LOGGER.error("", exc);
-            retValue = false;
-        }
-        return retValue;
-    }
+	protected boolean unlockTable(Connection conn) {
+		boolean retValue;
+		try (Statement lock = conn.createStatement()) {
+			if (LOGGER.isDebugEnabled()) {
+				LOGGER.debug("Executing 'UNLOCK TABLES' on connection {}", conn);
+			}
+			retValue = lock.execute("UNLOCK TABLES");
+		} catch (Exception exc) {
+			LOGGER.error("", exc);
+			retValue = false;
+		}
+		return retValue;
+	}
 
-    public void getPoolInfo(boolean allocation) {
+	public void getPoolInfo(boolean allocation) {
 
-    }
+	}
 
-    public long getNextErrorReportTime() {
-        return nextErrorReportTime;
-    }
+	public long getNextErrorReportTime() {
+		return nextErrorReportTime;
+	}
 
-    public void setNextErrorReportTime(long nextTime) {
-        this.nextErrorReportTime = nextTime;
-    }
+	public void setNextErrorReportTime(long nextTime) {
+		this.nextErrorReportTime = nextTime;
+	}
 
-    public void setGlobalHostName(String hostname) {
-        this.globalHostName = hostname;
-    }
+	public void setGlobalHostName(String hostname) {
+		this.globalHostName = hostname;
+	}
 
-    public String getGlobalHostName() {
-        return globalHostName;
-    }
+	public String getGlobalHostName() {
+		return globalHostName;
+	}
 }
diff --git a/dblib/provider/src/main/resources/dblib.properties b/dblib/provider/src/main/resources/dblib.properties
index 3e62308..e0399cc 100755
--- a/dblib/provider/src/main/resources/dblib.properties
+++ b/dblib/provider/src/main/resources/dblib.properties
@@ -1,9 +1,10 @@
 org.onap.ccsdk.sli.dbtype=jdbc
 org.onap.ccsdk.sli.jdbc.hosts=sdnctldb01,sdnctldb02
-org.onap.ccsdk.sli.jdbc.url=jdbc:mysql://DBHOST:3306/sdnctl
+org.onap.ccsdk.sli.jdbc.url=jdbc:derby:memory:sdnctl;create=true
+org.onap.ccsdk.sli.jdbc.driver=org.apache.derby.jdbc.EmbeddedDriver
 org.onap.ccsdk.sli.jdbc.database=sdnctl
-org.onap.ccsdk.sli.jdbc.user={user for sdnctl}
-org.onap.ccsdk.sli.jdbc.password={password for sdnctl}
+org.onap.ccsdk.sli.jdbc.user=test
+org.onap.ccsdk.sli.jdbc.password=test
 org.onap.ccsdk.sli.jdbc.connection.name=sdnctldb01
 
 org.onap.ccsdk.sli.jdbc.connection.timeout=50
diff --git a/filters/features/ccsdk-filters/pom.xml b/filters/features/ccsdk-filters/pom.xml
new file mode 100644
index 0000000..9b5c73b
--- /dev/null
+++ b/filters/features/ccsdk-filters/pom.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.onap.ccsdk.parent</groupId>
+		<artifactId>single-feature-parent</artifactId>
+		<version>1.0.1-SNAPSHOT</version>
+		<relativePath />
+	</parent>
+
+	<groupId>org.onap.ccsdk.sli.core</groupId>
+	<artifactId>ccsdk-filters</artifactId>
+	<version>0.2.1-SNAPSHOT</version>
+	<packaging>feature</packaging>
+
+	<name>ccsdk-sli-core :: filters :: ${project.artifactId}</name>
+
+	<dependencyManagement>
+		<dependencies>
+			<dependency>
+				<groupId>org.opendaylight.mdsal.model</groupId>
+				<artifactId>mdsal-model-artifacts</artifactId>
+				<version>0.11.1</version>
+				<type>pom</type>
+				<scope>import</scope>
+			</dependency>
+			<dependency>
+				<groupId>org.opendaylight.controller</groupId>
+				<artifactId>mdsal-artifacts</artifactId>
+				<version>1.6.1</version>
+				<type>pom</type>
+				<scope>import</scope>
+			</dependency>
+		</dependencies>
+	</dependencyManagement>
+	<dependencies>
+		<dependency>
+			<groupId>org.opendaylight.controller</groupId>
+			<artifactId>odl-mdsal-broker</artifactId>
+			<type>xml</type>
+			<classifier>features</classifier>
+		</dependency>
+
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>ccsdk-sli</artifactId>
+			<version>${project.version}</version>
+			<type>xml</type>
+			<classifier>features</classifier>
+		</dependency>
+
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>filters-provider</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+
+	</dependencies>
+</project>
diff --git a/filters/features/features-filters/pom.xml b/filters/features/features-filters/pom.xml
new file mode 100644
index 0000000..5072971
--- /dev/null
+++ b/filters/features/features-filters/pom.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>feature-repo-parent</artifactId>
+        <version>1.0.1-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.sli.core</groupId>
+    <artifactId>features-filters</artifactId>
+    <version>0.2.1-SNAPSHOT</version>
+    <packaging>feature</packaging>
+
+    <name>ccsdk-sli-core :: filters :: ${project.artifactId}</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>ccsdk-filters</artifactId>
+            <version>${project.version}</version>
+            <type>xml</type>
+            <classifier>features</classifier>
+        </dependency>
+
+    </dependencies>
+</project>
diff --git a/filters/features/pom.xml b/filters/features/pom.xml
index 3662f33..bf98684 100755
--- a/filters/features/pom.xml
+++ b/filters/features/pom.xml
@@ -1,101 +1,22 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
+
 	<parent>
-		<artifactId>filters</artifactId>
-		<groupId>org.onap.ccsdk.sli.core</groupId>
-		<version>0.2.0-SNAPSHOT</version>
+		<groupId>org.onap.ccsdk.parent</groupId>
+		<artifactId>odlparent-lite</artifactId>
+		<version>1.0.1-SNAPSHOT</version>
+		<relativePath/>
 	</parent>
-	<artifactId>filters-features</artifactId>
-	<name>Filters - Features</name>
 
-	<packaging>jar</packaging>
+	<groupId>org.onap.ccsdk.sli.core</groupId>
+	<artifactId>filters-features-aggregator</artifactId>
+	<packaging>pom</packaging>
 
-	<dependencies>
+	<name>ccsdk-sli-core :: filters :: ${project.artifactId}</name>
 
-
-		<dependency>
-			<groupId>org.onap.ccsdk.sli.core</groupId>
-			<artifactId>filters-provider</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-<!--
-		<dependency>
-			<groupId>org.opendaylight.mdsal</groupId>
-			<artifactId>features-mdsal</artifactId>
-			<version>${odl.mdsal.version}</version>
-			<classifier>features</classifier>
-			<type>xml</type>
-
-			<scope>runtime</scope>
-		</dependency>
--->
-	</dependencies>
-
-	<build>
-		<resources>
-			<resource>
-				<filtering>true</filtering>
-				<directory>src/main/resources</directory>
-			</resource>
-		</resources>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-resources-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>filter</id>
-						<goals>
-							<goal>resources</goal>
-						</goals>
-						<phase>generate-resources</phase>
-					</execution>
-				</executions>
-			</plugin>
-					<!-- launches the feature test, which validates that your karaf feature
-					can be installed inside of a karaf container. It doesn't validate that your
-					functionality works correctly, just that you have all of the dependent bundles
-					defined correctly.
-			<plugin>
-
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-surefire-plugin</artifactId>
-				<version>2.16</version>
-				<configuration>
-					<systemPropertyVariables>
-						<karaf.distro.groupId>org.opendaylight.odlparent</karaf.distro.groupId>
-						<karaf.distro.artifactId>opendaylight-karaf-empty</karaf.distro.artifactId>
-						<karaf.distro.version>${odl.karaf.empty.distro.version}</karaf.distro.version>
-					</systemPropertyVariables>
-					<dependenciesToScan>
-						<dependency>org.opendaylight.yangtools:features-test</dependency>
-					</dependenciesToScan>
-				</configuration>
-			</plugin>
-			-->
-			<plugin>
-				<groupId>org.codehaus.mojo</groupId>
-				<artifactId>build-helper-maven-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>attach-artifacts</id>
-						<goals>
-							<goal>attach-artifact</goal>
-						</goals>
-						<phase>package</phase>
-						<configuration>
-							<artifacts>
-								<artifact>
-									<file>${project.build.directory}/classes/${features.file}</file>
-									<type>xml</type>
-									<classifier>features</classifier>
-								</artifact>
-							</artifacts>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
+	<modules>
+        <module>features-filters</module>
+        <module>ccsdk-filters</module>
+    </modules>
 </project>
diff --git a/filters/features/src/main/resources/features.xml b/filters/features/src/main/resources/features.xml
deleted file mode 100644
index 7ede208..0000000
--- a/filters/features/src/main/resources/features.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ============LICENSE_START=======================================================
-  ONAP : CCSDK
-  ================================================================================
-  Copyright (C) 2017 AT&T Intellectual Property. 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=========================================================
-  -->
-
-
-<features name="sdnc-filters-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
-
-    <feature name='sdnc-filters' description="servlet filters" version='${project.version}'>
-	<bundle>mvn:org.onap.ccsdk.sli.core/filters-provider/${project.version}</bundle>
-    </feature>
-
-</features>
diff --git a/filters/installer/pom.xml b/filters/installer/pom.xml
index a22e9ab..a16b6a6 100755
--- a/filters/installer/pom.xml
+++ b/filters/installer/pom.xml
@@ -1,18 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
+
 	<parent>
-		<groupId>org.onap.ccsdk.sli.core</groupId>
-		<artifactId>filters</artifactId>
-		<version>0.2.0-SNAPSHOT</version>
+		<groupId>org.onap.ccsdk.parent</groupId>
+		<artifactId>odlparent-lite</artifactId>
+		<version>1.0.1-SNAPSHOT</version>
+		<relativePath/>
 	</parent>
+
+	<groupId>org.onap.ccsdk.sli.core</groupId>
 	<artifactId>filters-installer</artifactId>
-	<name>Filters - Karaf  Installer</name>
+	<version>0.2.1-SNAPSHOT</version>
 	<packaging>pom</packaging>
 
+	<name>ccsdk-sli-core :: filters :: ${project.artifactId}</name>
+
 	<properties>
-		<application.name>sdnc-filters</application.name>
-		<features.boot>sdnc-filters</features.boot>
+		<application.name>ccsdk-filters</application.name>
+		<features.boot>${application.name}</features.boot>
 		<features.repositories>mvn:org.onap.ccsdk.sli.core/filters-features/${project.version}/xml/features</features.repositories>
 		<include.transitive.dependencies>false</include.transitive.dependencies>
 	</properties>
@@ -21,10 +27,10 @@
 
 		<dependency>
 			<groupId>org.onap.ccsdk.sli.core</groupId>
-			<artifactId>filters-features</artifactId>
+			<artifactId>${application.name}</artifactId>
 			<version>${project.version}</version>
-			<classifier>features</classifier>
 			<type>xml</type>
+			<classifier>features</classifier>
 			<exclusions>
 				<exclusion>
 					<groupId>*</groupId>
@@ -134,5 +140,4 @@
 
 		</plugins>
 	</build>
-
 </project>
diff --git a/filters/pom.xml b/filters/pom.xml
index 7780dce..b40d0d3 100644
--- a/filters/pom.xml
+++ b/filters/pom.xml
@@ -1,79 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+   <modelVersion>4.0.0</modelVersion>
 
-    <parent>
-        <groupId>org.onap.ccsdk.sli.core</groupId>
-        <artifactId>ccsdk-sli-core</artifactId>
-        <version>0.2.0-SNAPSHOT</version>
+   <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>odlparent-lite</artifactId>
+        <version>1.0.1-SNAPSHOT</version>
+        <relativePath/>
     </parent>
 
-    <modelVersion>4.0.0</modelVersion>
-    <packaging>pom</packaging>
-    <groupId>org.onap.ccsdk.sli.core</groupId>
-    <artifactId>filters</artifactId>
+   <groupId>org.onap.ccsdk.sli.core</groupId>
+   <artifactId>filters</artifactId>
+   <version>0.2.1-SNAPSHOT</version>
+   <packaging>pom</packaging>
 
-
-    <name>Filters</name>
-    <description>Servlet filter to implement ECOMP logging spec</description>
-
-    <version>0.2.0-SNAPSHOT</version>
-
-
-
-    <build>
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-compiler-plugin</artifactId>
-                    <version>${maven.compile.plugin.version}</version>
-                    <configuration>
-                        <source>${java.version.source}</source>
-                        <target>${java.version.target}</target>
-                    </configuration>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-javadoc-plugin</artifactId>
-                    <version>2.10</version>
-
-                    <executions>
-                        <execution>
-                            <id>aggregate</id>
-                            <goals>
-                                <goal>aggregate</goal>
-                            </goals>
-                            <phase>site</phase>
-
-                        </execution>
-
-                    </executions>
-                </plugin>
-                <plugin>
-                    <artifactId>maven-source-plugin</artifactId>
-                    <version>2.1.1</version>
-                    <executions>
-                        <execution>
-                            <id>bundle-sources</id>
-                            <phase>package</phase>
-                            <goals>
-                                <!-- produce source artifact for main project sources -->
-                                <goal>jar-no-fork</goal>
-
-                                <!-- produce source artifact for project test sources -->
-                                <goal>test-jar-no-fork</goal>
-                            </goals>
-                        </execution>
-                    </executions>
-                </plugin>
-            </plugins>
-
-        </pluginManagement>
-    </build>
-    <organization>
+   <name>ccsdk-sli-core :: filters</name>
+   <description>Servlet filter to implement ONAP logging spec</description>
+   <organization>
         <name>ONAP</name>
     </organization>
-  <modules>
+
+   <modules>
     <module>provider</module>
     <module>features</module>
     <module>installer</module>
diff --git a/filters/provider/pom.xml b/filters/provider/pom.xml
index 51d0c63..4fdd832 100755
--- a/filters/provider/pom.xml
+++ b/filters/provider/pom.xml
@@ -1,82 +1,66 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<groupId>org.onap.ccsdk.sli.core</groupId>
-		<artifactId>filters</artifactId>
-		<version>0.2.0-SNAPSHOT</version>
-	</parent>
-	<artifactId>filters-provider</artifactId>
-	<packaging>bundle</packaging>
-	<name>Filters - Provider</name>
-	<url>http://maven.apache.org</url>
-	<properties>
-		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-	</properties>
-	<dependencies>
-		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-			<version>${junit.version}</version>
-			<scope>test</scope>
-		</dependency>
-                <dependency>
-                        <groupId>javax.servlet</groupId>
-                        <artifactId>javax.servlet-api</artifactId>
-                        <version>3.0.1</version>
-                        <scope>provided</scope>
-                </dependency>
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>binding-parent</artifactId>
+        <version>1.0.1-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.sli.core</groupId>
+    <artifactId>filters-provider</artifactId>
+    <version>0.2.1-SNAPSHOT</version>
+    <packaging>bundle</packaging>
+
+    <name>ccsdk-sli-core :: filters :: ${project.artifactId}</name>
+    <url>http://maven.apache.org</url>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>${junit.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+        </dependency>
 
 
-		<dependency>
-			<groupId>equinoxSDK381</groupId>
-			<artifactId>org.eclipse.osgi</artifactId>
-			<version>${equinox.osgi.version}</version>
-		</dependency>
+        <dependency>
+            <groupId>equinoxSDK381</groupId>
+            <artifactId>org.eclipse.osgi</artifactId>
+            <version>${equinox.osgi.version}</version>
+            <scope>provided</scope>
+        </dependency>
 
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-api</artifactId>
-			<version>${slf4j.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>jcl-over-slf4j</artifactId>
-			<version>${slf4j.version}</version>
-		</dependency>
-                <dependency>
-                        <groupId>commons-codec</groupId>
-                        <artifactId>commons-codec</artifactId>
-                        <version>${commons.codec.version}</version>
-                </dependency>
-                <dependency>
-                	<groupId>org.onap.ccsdk.sli.core</groupId>
-                	<artifactId>sli-common</artifactId>
-                	<version>${project.version}</version>
-                </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>${slf4j.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>jcl-over-slf4j</artifactId>
+            <version>${slf4j.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+            <version>${commons.codec.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.ccsdk.sli.core</groupId>
+            <artifactId>sli-common</artifactId>
+            <version>${project.version}</version>
+        </dependency>
 
-	</dependencies>
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.felix</groupId>
-				<artifactId>maven-bundle-plugin</artifactId>
-				<version>${bundle.plugin.version}</version>
-				<extensions>true</extensions>
-				<configuration>
-					<instructions>
-						<Bundle-SymbolicName>org.onap.ccsdk.sli.core.filters</Bundle-SymbolicName>
-						<Export-Package>org.onap.ccsdk.sli.core.filters</Export-Package>
-						<DynamicImport-Package>org.onap.ccsdk.sli.core.filters</DynamicImport-Package>
-						<Import-Package>javax.servlet.*,java.io.*,org.osgi.framework.*,org.slf4j.*,org.apache.commons.codec.binary.*</Import-Package>
-						<Embed-Transitive>true</Embed-Transitive>
-					</instructions>
-				</configuration>
-
-			</plugin>
-
-
-		</plugins>
-	</build>
+    </dependencies>
 </project>
diff --git a/pom.xml b/pom.xml
index c7885a9..7ab4d46 100755
--- a/pom.xml
+++ b/pom.xml
@@ -1,21 +1,35 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
-	<packaging>pom</packaging>
-	<groupId>org.onap.ccsdk.sli.core</groupId>
-	<artifactId>ccsdk-sli-core</artifactId>
-
-	<name>ccsdk-sli-core</name>
-	<url>https://wiki.onap.org</url>
-	<description>CCSDK core components contains the SLI, dblib</description>
 
 	<parent>
 		<groupId>org.onap.ccsdk.parent</groupId>
-		<artifactId>odlparent-carbon-sr1</artifactId>
-		<version>0.2.0-SNAPSHOT</version>
+		<artifactId>odlparent-lite</artifactId>
+		<version>1.0.1-SNAPSHOT</version>
+		<relativePath/>
 	</parent>
 
+	<groupId>org.onap.ccsdk.sli.core</groupId>
+	<artifactId>ccsdk-sli-core</artifactId>
+	<version>0.2.1-SNAPSHOT</version>
+	<packaging>pom</packaging>
+
+	<name>ccsdk-sli-core</name>
+	<description>CCSDK core components contains the SLI, dblib</description>
+	<url>https://wiki.onap.org</url>
+	<organization>
+		<name>ONAP</name>
+	</organization>
+
+	<modules>
+        <module>utils</module>
+		<module>dblib</module>
+		<module>sli</module>
+		<module>filters</module>
+		<module>sliPluginUtils</module>
+		<module>sliapi</module>
+	</modules>
+
 	<scm>
 		<connection>scm:git:ssh://git@${onap.git.host}/sdnc-code.git</connection>
 		<developerConnection>scm:git:ssh://${onap.git.host}:${onap.git.port}/${onap.git.project}/sdnc-core.git</developerConnection>
@@ -24,25 +38,6 @@
 	</scm>
 
 
-<!--
-	<distributionManagement>
-		<repository>
-			<id>ecomp-releases</id>
-			<name>onap-repository-releases</name>
-			<url>${onap.nexus.release-url}</url>
-		</repository>
-		<snapshotRepository>
-			<id>ecomp-snapshots</id>
-			<name>onap-repository-snapshots</name>
-			<url>${onap.nexus.snapshot-url}</url>
-		</snapshotRepository>
-		<site>
-			<id>ecomp-site</id>
-			<url>dav:https://${onap.nexus.host}/content/sites/site/org/onap/sdnc/core/${project.artifactId}/${project.version}</url>
-		</site>
-	</distributionManagement>
--->
-
 	<profiles>
 		<profile>
 			<id>blackduck</id>
@@ -81,45 +76,4 @@
 		</profile>
 
 	</profiles>
-
-	<build>
-		<plugins>
-
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-surefire-plugin</artifactId>
-				<version>2.17</version>
-				<configuration>
-					<skipTests>false</skipTests>
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>org.sonatype.plugins</groupId>
-				<artifactId>nexus-staging-maven-plugin</artifactId>
-				<version>1.6.7</version>
-				<extensions>true</extensions>
-				<configuration>
-					<nexusUrl>https://${onap.nexus.host}</nexusUrl>
-					<stagingProfileId>${onap.nexus.staging.profile-id}</stagingProfileId>
-					<serverId>${onap.nexus.staging.server-id}</serverId>
-				</configuration>
-			</plugin>
-
-		</plugins>
-
-	</build>
-	<modules>
-        <module>utils</module>
-		<module>dblib</module>
-		<module>sli</module>
-		<module>filters</module>
-		<module>sliPluginUtils</module>
-		<module>sliapi</module>
-	</modules>
-	<organization>
-		<name>ONAP</name>
-	</organization>
-	<version>0.2.0-SNAPSHOT</version>
-
-
 </project>
diff --git a/sli/common/pom.xml b/sli/common/pom.xml
index 4c7daa3..167a776 100755
--- a/sli/common/pom.xml
+++ b/sli/common/pom.xml
@@ -1,163 +1,136 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <artifactId>sli</artifactId>
-        <groupId>org.onap.ccsdk.sli.core</groupId>
-        <version>0.2.0-SNAPSHOT</version>
-    </parent>
-    <artifactId>sli-common</artifactId>
-    <packaging>bundle</packaging>
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
 
-    <name>SLI - Common Classes</name>
-    <description>The SLI Common package includes common classes used by the various SLI subcomponents, as well as classes used by clients to interface with the service logic interpreter</description>
+	<parent>
+		<groupId>org.onap.ccsdk.parent</groupId>
+		<artifactId>binding-parent</artifactId>
+		<version>1.0.1-SNAPSHOT</version>
+		<relativePath/>
+	</parent>
 
-    <dependencies>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>${junit.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>ch.vorburger.mariaDB4j</groupId>
-            <artifactId>mariaDB4j</artifactId>
-            <version>2.2.3</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.antlr</groupId>
-            <artifactId>antlr4</artifactId>
-            <version>${antlr.version}</version>
-            <type>jar</type>
-            <scope>compile</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <version>${slf4j.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-simple</artifactId>
-            <version>1.7.5</version>
-            <scope>compile</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-lang3</artifactId>
-            <version>${commons.lang3.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.mdsal</groupId>
-            <artifactId>yang-binding</artifactId>
-            <version>${odl.mdsal.yang.binding.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>yang-common</artifactId>
-            <version>${odl.yangtools.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.mdsal.model</groupId>
-            <artifactId>ietf-inet-types</artifactId>
-            <version>${odl.ietf-inet-types.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.mdsal.model</groupId>
-            <artifactId>ietf-yang-types</artifactId>
-            <version>${odl.ietf-yang-types.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.controller</groupId>
-            <artifactId>sal-core-api</artifactId>
-            <version>${odl.mdsal.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>yang-data-impl</artifactId>
-            <version>${odl.yangtools.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>equinoxSDK381</groupId>
-            <artifactId>org.eclipse.osgi</artifactId>
-            <version>${equinox.osgi.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.mariadb.jdbc</groupId>
-            <artifactId>mariadb-java-client</artifactId>
-            <version>${mariadb.connector.version}</version>
-            <type>jar</type>
-            <scope>compile</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.ccsdk.sli.core</groupId>
-            <artifactId>dblib-provider</artifactId>
-            <version>${sdnctl.dblib.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.ccsdk.sli.core</groupId>
-            <artifactId>sliapi-model</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
+	<groupId>org.onap.ccsdk.sli.core</groupId>
+	<artifactId>sli-common</artifactId>
+	<version>0.2.1-SNAPSHOT</version>
+	<packaging>bundle</packaging>
 
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>1.7</source>
-                    <target>1.7</target>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <version>2.4</version>
-                <configuration>
-                    <includes>**/*.xsd</includes>
-                    <archive>
-                        <manifest>
-                            <mainClass>org.onap.ccsdk.sli.core.sli.SvcLogicParser</mainClass>
-                            <packageName>org.onap.ccsdk.sli.core.sli</packageName>
-                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
-                        </manifest>
-                    </archive>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Export-Package>org.onap.ccsdk.sli.core.sli;version=${project.version}</Export-Package>
-                        <Import-Package>*</Import-Package>
-                        <Embed-Dependency>*;scope=compile;artifactId=commons-lang|commons-lang3</Embed-Dependency>
-                        <Embed-Transitive>true</Embed-Transitive>
-                    </instructions>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.antlr</groupId>
-                <artifactId>antlr4-maven-plugin</artifactId>
-                <version>${antlr.version}</version>
-                <executions>
-                    <execution>
-                        <configuration>
-                            <outputDirectory>${project.basedir}/src/main/java/</outputDirectory>
-                        </configuration>
-                        <id>antlr</id>
-                        <goals>
-                            <goal>antlr4</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
+	<name>ccsdk-sli-core :: sli :: ${project.artifactId}</name>
+	<description>The SLI Common package includes common classes used by the various SLI subcomponents, as well as classes used by clients to interface with the service logic interpreter</description>
 
+	<dependencyManagement>
+		<dependencies>
+			<dependency>
+				<groupId>org.opendaylight.controller</groupId>
+				<artifactId>mdsal-artifacts</artifactId>
+				<version>1.6.1</version>
+				<type>pom</type>
+				<scope>import</scope>
+			</dependency>
+		</dependencies>
+	</dependencyManagement>
+	<dependencies>
+		<dependency>
+			<groupId>ch.vorburger.mariaDB4j</groupId>
+			<artifactId>mariaDB4j</artifactId>
+			<version>2.2.3</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.antlr</groupId>
+			<artifactId>antlr4</artifactId>
+			<version>${antlr.version}</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>slf4j-api</artifactId>
+			<version>${slf4j.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>slf4j-simple</artifactId>
+			<version>1.7.5</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>commons-lang3</artifactId>
+			<version>${commons.lang3.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>equinoxSDK381</groupId>
+			<artifactId>org.eclipse.osgi</artifactId>
+			<version>${equinox.osgi.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.mariadb.jdbc</groupId>
+			<artifactId>mariadb-java-client</artifactId>
+			<version>${mariadb.connector.version}</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.onap.ccsdk.sli.core</groupId>
+			<artifactId>dblib-provider</artifactId>
+			<version>${sdnctl.dblib.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.onap.ccsdk.sli.core</groupId>
+			<artifactId>sli-model</artifactId>
+			<version>${project.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.opendaylight.mdsal.model</groupId>
+			<artifactId>ietf-inet-types</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.opendaylight.mdsal.model</groupId>
+			<artifactId>ietf-yang-types</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.opendaylight.controller</groupId>
+			<artifactId>sal-core-api</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>org.opendaylight.controller</groupId>
+			<artifactId>sal-binding-api</artifactId>
+		</dependency>
+
+		<!-- Testing Dependencies -->
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<scope>test</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.mockito</groupId>
+			<artifactId>mockito-core</artifactId>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.antlr</groupId>
+				<artifactId>antlr4-maven-plugin</artifactId>
+				<version>${antlr.version}</version>
+				<executions>
+					<execution>
+						<configuration>
+							<outputDirectory>${project.basedir}/src/main/java/</outputDirectory>
+						</configuration>
+						<id>antlr</id>
+						<goals>
+							<goal>antlr4</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
 </project>
diff --git a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicDblibStore.java b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicDblibStore.java
index 74fa1dd..ee3bcca 100644
--- a/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicDblibStore.java
+++ b/sli/common/src/main/java/org/onap/ccsdk/sli/core/sli/SvcLogicDblibStore.java
@@ -54,10 +54,22 @@
 
 	private static final String DBLIB_SERVICE = "org.onap.ccsdk.sli.core.dblib.DbLibService";
 
+	private DbLibService dbSvc;
+
+	public SvcLogicDblibStore()
+	{
+		// Does nothing, but needed so that argumentless constructor
+		// still works.
+	}
+
+	public SvcLogicDblibStore(DbLibService dbsvc) {
+		this.dbSvc = dbsvc;
+	}
+
 	@Override
 	public void init(Properties props) throws ConfigurationException {
 
-		DbLibService dbSvc = getDbLibService();
+		dbSvc = getDbLibService();
 		if(dbSvc == null) {
 			LOG.error("SvcLogic cannot acquire DBLIB_SERVICE");
 			return;
@@ -74,7 +86,7 @@
 	public boolean hasGraph(String module, String rpc, String version,
 			String mode) throws SvcLogicException {
 
-		DbLibService dbSvc = getDbLibService();
+
 
 		boolean retval = false;
 		CachedRowSet results = null;
@@ -124,7 +136,6 @@
 	public SvcLogicGraph fetch(String module, String rpc, String version,
 			String mode) throws SvcLogicException {
 
-		DbLibService dbSvc = getDbLibService();
 		PreparedStatement fetchGraphStmt = null;
 		Connection dbConn = null;
 		SvcLogicGraph retval = null;
@@ -210,7 +221,7 @@
 
 	public void store(SvcLogicGraph graph) throws SvcLogicException {
 
-		DbLibService dbSvc = getDbLibService();
+
 
 		String storeGraphSql = "INSERT INTO SVC_LOGIC (module, rpc, version, mode, active, graph)"
 				+ " VALUES(?, ?, ?, ?, ?, ?)";
@@ -283,7 +294,7 @@
 	public void delete(String module, String rpc, String version, String mode)
 			throws SvcLogicException {
 
-		DbLibService dbSvc = getDbLibService();
+
 
 		String deleteGraphSql = "DELETE FROM SVC_LOGIC WHERE module = ? AND rpc = ? AND version = ? AND mode = ?";
 
@@ -302,7 +313,7 @@
 	}
 
 	public void activate(SvcLogicGraph graph) throws SvcLogicException {
-		DbLibService dbSvc = getDbLibService();
+
 
 		String deactivateSql = "UPDATE SVC_LOGIC SET active = 'N' WHERE module = ? AND rpc = ? AND mode = ?";
 
@@ -328,8 +339,11 @@
 
 	private DbLibService getDbLibService() {
 
+		if (dbSvc != null) {
+			return dbSvc;
+		}
+
 		// Get DbLibService interface object.
-		DbLibService dblibSvc = null;
 		ServiceReference sref = null;
 		BundleContext bctx = null;
 
@@ -345,8 +359,8 @@
 			if (sref == null) {
 				LOG.warn("Could not find service reference for DBLIB service ({})", DBLIB_SERVICE);
 			} else {
-				dblibSvc = (DbLibService) bctx.getService(sref);
-				if (dblibSvc == null) {
+				dbSvc = (DbLibService) bctx.getService(sref);
+				if (dbSvc == null) {
 
 					LOG.warn("Could not find service reference for DBLIB service ({})", DBLIB_SERVICE);
 				}
@@ -385,16 +399,16 @@
 				}
 
 				try {
-					dblibSvc = new DBResourceManager(dblibProps);
-					JavaSingleton.setInstance(dblibSvc);
+					dbSvc = new DBResourceManager(dblibProps);
+					JavaSingleton.setInstance(dbSvc);
 				} catch (Exception e) {
 					LOG.warn("Caught exception trying to create DBResourceManager", e);
 				}
 			} else {
-				dblibSvc = JavaSingleton.getInstance();
+				dbSvc = JavaSingleton.getInstance();
 			}
 		}
-		return dblibSvc;
+		return dbSvc;
 	}
 
 
@@ -419,7 +433,7 @@
 
     @Override
     public void activate(String module, String rpc, String version, String mode) throws SvcLogicException {
-        DbLibService dbSvc = getDbLibService();
+
 
         String deactivateSql = "UPDATE SVC_LOGIC SET active = 'N' WHERE module = ? AND rpc = ? AND mode = ?";
 
diff --git a/sli/features/features-sli/pom.xml b/sli/features/features-sli/pom.xml
new file mode 100644
index 0000000..de617ba
--- /dev/null
+++ b/sli/features/features-sli/pom.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>feature-repo-parent</artifactId>
+        <version>1.0.1-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.sli.core</groupId>
+    <artifactId>features-sli</artifactId>
+    <version>0.2.1-SNAPSHOT</version>
+    <packaging>feature</packaging>
+
+    <name>ccsdk-sli-core :: sli :: ${project.artifactId}</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>ccsdk-sli</artifactId>
+            <version>${project.version}</version>
+            <type>xml</type>
+            <classifier>features</classifier>
+        </dependency>
+
+    </dependencies>
+</project>
diff --git a/sli/features/odl-sli/pom.xml b/sli/features/odl-sli/pom.xml
new file mode 100644
index 0000000..907cef6
--- /dev/null
+++ b/sli/features/odl-sli/pom.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright © 2017 APL and others. All rights reserved. This program and
+	the accompanying materials are made available under the terms of the Eclipse
+	Public License v1.0 which accompanies this distribution, and is available
+	at http://www.eclipse.org/legal/epl-v10.html INTERNAL -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.onap.ccsdk.parent</groupId>
+		<artifactId>single-feature-parent</artifactId>
+		<version>1.0.1-SNAPSHOT</version>
+		<relativePath />
+	</parent>
+
+	<groupId>org.onap.ccsdk.sli.core</groupId>
+	<artifactId>ccsdk-sli</artifactId>
+	<version>0.2.1-SNAPSHOT</version>
+	<packaging>feature</packaging>
+
+	<name>ccsdk-sli-core :: sli :: ${project.artifactId}</name>
+
+	<dependencyManagement>
+		<dependencies>
+			<dependency>
+				<groupId>org.opendaylight.mdsal.model</groupId>
+				<artifactId>mdsal-model-artifacts</artifactId>
+				<version>0.11.1</version>
+				<type>pom</type>
+				<scope>import</scope>
+			</dependency>
+			<dependency>
+				<groupId>org.opendaylight.controller</groupId>
+				<artifactId>mdsal-artifacts</artifactId>
+				<version>1.6.1</version>
+				<type>pom</type>
+				<scope>import</scope>
+			</dependency>
+		</dependencies>
+	</dependencyManagement>
+	<dependencies>
+		<dependency>
+			<groupId>org.onap.ccsdk.sli.core</groupId>
+			<artifactId>sli-common</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.onap.ccsdk.sli.core</groupId>
+			<artifactId>sli-provider</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.onap.ccsdk.sli.core</groupId>
+			<artifactId>sli-recording</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.mariadb.jdbc</groupId>
+			<artifactId>mariadb-java-client</artifactId>
+			<version>${mariadb.connector.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.onap.ccsdk.sli.core</groupId>
+			<artifactId>ccsdk-dblib</artifactId>
+			<version>${project.version}</version>
+			<type>xml</type>
+			<classifier>features</classifier>
+		</dependency>
+		<dependency>
+			<groupId>org.opendaylight.controller</groupId>
+			<artifactId>odl-mdsal-broker</artifactId>
+			<type>xml</type>
+			<classifier>features</classifier>
+		</dependency>
+		<dependency>
+			<groupId>equinoxSDK381</groupId>
+			<artifactId>org.eclipse.osgi</artifactId>
+			<version>${equinox.osgi.version}</version>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/sli/features/pom.xml b/sli/features/pom.xml
old mode 100755
new mode 100644
index 4630b78..fbb864e
--- a/sli/features/pom.xml
+++ b/sli/features/pom.xml
@@ -1,137 +1,30 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright © 2017 APL and others. All rights reserved.
+
+This program and the accompanying materials are made available under the
+terms of the Eclipse Public License v1.0 which accompanies this distribution,
+and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<artifactId>sli</artifactId>
-		<groupId>org.onap.ccsdk.sli.core</groupId>
-		<version>0.2.0-SNAPSHOT</version>
-	</parent>
-	<artifactId>sli-features</artifactId>
-	<name>SLI - Features</name>
+  <modelVersion>4.0.0</modelVersion>
 
-	<packaging>jar</packaging>
+  <parent>
+    <groupId>org.onap.ccsdk.parent</groupId>
+    <artifactId>odlparent-lite</artifactId>
+    <version>1.0.1-SNAPSHOT</version>
+    <relativePath/>
+  </parent>
 
-	<dependencies>
-		<dependency>
-			<groupId>org.onap.ccsdk.sli.core</groupId>
-			<artifactId>sli-common</artifactId>
-			<version>${project.version}</version>
-		</dependency>
+  <groupId>org.onap.ccsdk.sli.core</groupId>
+  <artifactId>sli-feature-aggregator</artifactId>
+  <version>0.1.0</version>
+  <packaging>pom</packaging>
 
+  <name>ccsdk-sli-core :: sli :: ${project.artifactId}</name>
 
-		<dependency>
-			<groupId>org.onap.ccsdk.sli.core</groupId>
-			<artifactId>sli-recording</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>commons-lang</groupId>
-			<artifactId>commons-lang</artifactId>
-			<version>${commons.lang.version}</version>
-			<scope>compile</scope>
-		</dependency>
-
-		<dependency>
-			<groupId>org.opendaylight.mdsal</groupId>
-			<artifactId>features-mdsal</artifactId>
-			<version>${odl.mdsal.features.version}</version>
-			<classifier>features</classifier>
-			<type>xml</type>
-
-			<scope>runtime</scope>
-		</dependency>
-
-
-		<!-- dependency for opendaylight-karaf-empty for use by testing
-		<dependency>
-			<groupId>org.opendaylight.odlparent</groupId>
-			<artifactId>opendaylight-karaf-empty</artifactId>
-			<version>${odl.karaf.empty.version}</version>
-			<type>zip</type>
-		</dependency>
-		-->
-
-
-		<dependency>
-			<!-- Required for launching the feature tests -->
-			<groupId>org.opendaylight.odlparent</groupId>
-			<artifactId>features-test</artifactId>
-			<version>${odl.commons.opendaylight.version}</version>
-			<scope>test</scope>
-		</dependency>
-
-		<dependency>
-			<groupId>org.opendaylight.yangtools</groupId>
-			<artifactId>features-yangtools</artifactId>
-			<version>${odl.yangtools.version}</version>
-			<classifier>features</classifier>
-			<type>xml</type>
-			<scope>runtime</scope>
-		</dependency>
-	</dependencies>
-
-	<build>
-		<resources>
-			<resource>
-				<filtering>true</filtering>
-				<directory>src/main/resources</directory>
-			</resource>
-		</resources>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-resources-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>filter</id>
-						<goals>
-							<goal>resources</goal>
-						</goals>
-						<phase>generate-resources</phase>
-					</execution>
-				</executions>
-			</plugin>
-
-                        <!-- Comment out feature test, since it fails in Jenkins due to env issues
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-surefire-plugin</artifactId>
-				<version>2.16</version>
-				<configuration>
-					<systemPropertyVariables>
-						<karaf.distro.groupId>org.opendaylight.odlparent</karaf.distro.groupId>
-						<karaf.distro.artifactId>opendaylight-karaf-empty</karaf.distro.artifactId>
-						<karaf.distro.version>${odl.karaf.empty.distro.version}</karaf.distro.version>
-					</systemPropertyVariables>
-					<dependenciesToScan>
-						<dependency>org.opendaylight.yangtools:features-test</dependency>
-					</dependenciesToScan>
-				</configuration>
-			</plugin>
-                        -->
-
-			<plugin>
-				<groupId>org.codehaus.mojo</groupId>
-				<artifactId>build-helper-maven-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>attach-artifacts</id>
-						<goals>
-							<goal>attach-artifact</goal>
-						</goals>
-						<phase>package</phase>
-						<configuration>
-							<artifacts>
-								<artifact>
-									<file>${project.build.directory}/classes/${features.file}</file>
-									<type>xml</type>
-									<classifier>features</classifier>
-								</artifact>
-							</artifacts>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
+  <modules>
+    <module>features-sli</module>
+    <module>odl-sli</module>
+  </modules>
 </project>
diff --git a/sli/features/src/main/resources/features.xml b/sli/features/src/main/resources/features.xml
deleted file mode 100644
index 1f17c1a..0000000
--- a/sli/features/src/main/resources/features.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ============LICENSE_START=======================================================
-  ONAP : CCSDK
-  ================================================================================
-  Copyright (C) 2017 AT&T Intellectual Property. 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=========================================================
-  -->
-
-
-<features name="sdnc-sli-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
-
-    <repository>mvn:org.opendaylight.mdsal/features-mdsal/${odl.mdsal.features.version}/xml/features</repository>
-
-
-    <feature name='sdnc-sli' description="sdnc-sli" version='${project.version}'>
-
-        <feature version="${odl.mdsal.version}">odl-mdsal-broker</feature>
-        <bundle>mvn:org.onap.ccsdk.sli.core/sli-common/${project.version}</bundle>
-        <bundle>mvn:org.onap.ccsdk.sli.core/sli-provider/${project.version}</bundle>
-        <bundle>mvn:org.onap.ccsdk.sli.core/sli-recording/${project.version}</bundle>
-        <feature>sdnc-dblib</feature>
-        <bundle>mvn:org.mariadb.jdbc/mariadb-java-client/${mariadb.connector.version}</bundle>
-    </feature>
-
-</features>
diff --git a/sli/installer/pom.xml b/sli/installer/pom.xml
index 23b7471..ec2b43c 100755
--- a/sli/installer/pom.xml
+++ b/sli/installer/pom.xml
@@ -1,19 +1,25 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
+
 	<parent>
-		<artifactId>sli</artifactId>
-		<groupId>org.onap.ccsdk.sli.core</groupId>
-		<version>0.2.0-SNAPSHOT</version>
+		<groupId>org.onap.ccsdk.parent</groupId>
+		<artifactId>odlparent-lite</artifactId>
+		<version>1.0.1-SNAPSHOT</version>
+		<relativePath/>
 	</parent>
+
+	<groupId>org.onap.ccsdk.sli.core</groupId>
 	<artifactId>sli-installer</artifactId>
-	<name>SLI - Karaf  Installer</name>
+	<version>0.2.1-SNAPSHOT</version>
 	<packaging>pom</packaging>
 
+	<name>ccsdk-sli-core :: sli :: ${project.artifactId}</name>
+
 	<properties>
-		<application.name>sdnc-sli</application.name>
-		<features.boot>sdnc-sli</features.boot>
-		<features.repositories>mvn:org.onap.ccsdk.sli.core/sli-features/${project.version}/xml/features</features.repositories>
+		<application.name>ccsdk-sli</application.name>
+		<features.boot>${application.name}</features.boot>
+        <features.repositories>mvn:org.onap.ccsdk.sli.core/${features.boot}/${project.version}/xml/features</features.repositories>
 		<include.transitive.dependencies>false</include.transitive.dependencies>
 	</properties>
 
@@ -21,10 +27,10 @@
 
 		<dependency>
 			<groupId>org.onap.ccsdk.sli.core</groupId>
-			<artifactId>sli-features</artifactId>
+			<artifactId>${application.name}</artifactId>
 			<version>${project.version}</version>
-			<classifier>features</classifier>
 			<type>xml</type>
+			<classifier>features</classifier>
 			<exclusions>
 				<exclusion>
 					<groupId>*</groupId>
@@ -145,5 +151,4 @@
 
 		</plugins>
 	</build>
-
 </project>
diff --git a/sli/model/pom.xml b/sli/model/pom.xml
index 59658a3..3a78c47 100755
--- a/sli/model/pom.xml
+++ b/sli/model/pom.xml
@@ -1,82 +1,29 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <artifactId>sli</artifactId>
-        <groupId>org.onap.ccsdk.sli.core</groupId>
-        <version>0.2.0-SNAPSHOT</version>
-    </parent>
-    <artifactId>sli-model</artifactId>
-    <packaging>bundle</packaging>
-    <name>SLI - Model</name>
-    <build>
 
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Import-Package>*</Import-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.opendaylight.yangtools</groupId>
-                <artifactId>yang-maven-plugin</artifactId>
-                <version>${odl.yangtools.yang.maven.plugin.version}</version>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.opendaylight.mdsal</groupId>
-                        <artifactId>maven-sal-api-gen-plugin</artifactId>
-                        <version>${odl.sal.api.gen.plugin.version}</version>
-                        <type>jar</type>
-                    </dependency>
-                </dependencies>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>generate-sources</goal>
-                        </goals>
-                        <configuration>
-                            <yangFilesRootDir>${yang.file.directory}</yangFilesRootDir>
-                            <codeGenerators>
-                                <generator>
-                                    <!--
-                                    <codeGeneratorClass>org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl</codeGeneratorClass>
-                                    -->
-                                    <codeGeneratorClass>org.opendaylight.mdsal.binding.maven.api.gen.plugin.CodeGeneratorImpl</codeGeneratorClass>
-                                    <outputBaseDir>${salGeneratorPath}</outputBaseDir>
-                                </generator>
-                            </codeGenerators>
-                            <inspectDependencies>true</inspectDependencies>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
+    <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>binding-parent</artifactId>
+        <version>1.0.1-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.sli.core</groupId>
+    <artifactId>sli-model</artifactId>
+    <version>0.2.1-SNAPSHOT</version>
+    <packaging>bundle</packaging>
+
+    <name>ccsdk-sli-core :: sli :: ${project.artifactId}</name>
+
     <dependencies>
-        <dependency>
-            <groupId>org.opendaylight.mdsal</groupId>
-            <artifactId>yang-binding</artifactId>
-            <version>${odl.mdsal.yang.binding.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>yang-common</artifactId>
-            <version>${odl.yangtools.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.mdsal.model</groupId>
-            <artifactId>ietf-inet-types</artifactId>
-            <version>${odl.ietf-inet-types.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.mdsal.model</groupId>
-            <artifactId>ietf-yang-types</artifactId>
-            <version>${odl.ietf-yang-types.version}</version>
-        </dependency>
+	<dependency>
+		<groupId>org.opendaylight.mdsal.model</groupId>
+		<artifactId>ietf-inet-types</artifactId>
+	</dependency>
+	<dependency>
+		<groupId>org.opendaylight.mdsal.model</groupId>
+		<artifactId>ietf-yang-types</artifactId>
+	</dependency>
     </dependencies>
 </project>
diff --git a/sli/pom.xml b/sli/pom.xml
index 95417c3..985fa1d 100755
--- a/sli/pom.xml
+++ b/sli/pom.xml
@@ -1,53 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
 
     <parent>
-        <groupId>org.onap.ccsdk.sli.core</groupId>
-        <artifactId>ccsdk-sli-core</artifactId>
-            <version>0.2.0-SNAPSHOT</version>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>odlparent-lite</artifactId>
+        <version>1.0.1-SNAPSHOT</version>
+        <relativePath/>
     </parent>
-    <modelVersion>4.0.0</modelVersion>
-    <packaging>pom</packaging>
+
     <groupId>org.onap.ccsdk.sli.core</groupId>
     <artifactId>sli</artifactId>
+    <version>0.2.1-SNAPSHOT</version>
+    <packaging>pom</packaging>
 
-    <dependencyManagement>
-
-        <dependencies>
-            <dependency>
-                <groupId>org.onap.ccsdk.sli.core</groupId>
-                <artifactId>sli-features</artifactId>
-                <classifier>features</classifier>
-                <type>xml</type>
-                <version>${project.version}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>org.onap.ccsdk.sli.core</groupId>
-                <artifactId>sli-common</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>org.onap.ccsdk.sli.core</groupId>
-                <artifactId>sli-provider</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>org.onap.ccsdk.sli.core</groupId>
-                <artifactId>sli-recording</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-
-        </dependencies>
-
-    </dependencyManagement>
-
-
-    <name>Service Logic Interpreter</name>
+    <name>ccsdk-sli-core :: sli</name>
     <description>The Service Logic Interpreter (SLI) allows service planners to design the flow of logic within the SDN controller in an XML format, without a need for custom Java code. </description>
+    <organization>
+        <name>ONAP</name>
+    </organization>
 
     <modules>
         <module>model</module>
@@ -57,10 +28,4 @@
         <module>features</module>
         <module>installer</module>
     </modules>
-    <organization>
-        <name>ONAP</name>
-    </organization>
-    <version>0.2.0-SNAPSHOT</version>
-
-
 </project>
diff --git a/sli/provider/pom.xml b/sli/provider/pom.xml
index 4f410ab..4a90ae0 100755
--- a/sli/provider/pom.xml
+++ b/sli/provider/pom.xml
@@ -1,25 +1,38 @@
 <?xml version="1.0"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.onap.ccsdk.sli.core</groupId>
-        <artifactId>sli</artifactId>
-        <version>0.2.0-SNAPSHOT</version>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+   <modelVersion>4.0.0</modelVersion>
+
+   <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>binding-parent</artifactId>
+        <version>1.0.1-SNAPSHOT</version>
+        <relativePath/>
     </parent>
-    <artifactId>sli-provider</artifactId>
-    <packaging>bundle</packaging>
-    <name>SLI - Provider</name>
-    <properties>
+
+   <groupId>org.onap.ccsdk.sli.core</groupId>
+   <artifactId>sli-provider</artifactId>
+   <version>0.2.1-SNAPSHOT</version>
+   <packaging>bundle</packaging>
+
+   <name>ccsdk-sli-core :: sli :: ${project.artifactId}</name>
+   <description>SLI Provider is the OSGi bundle that exposes the service logic interpreter as a service.</description>
+
+   <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     </properties>
-    <dependencies>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>${junit.version}</version>
-            <scope>test</scope>
-        </dependency>
+
+   <dependencyManagement>
+      <dependencies>
+          <dependency>
+              <groupId>org.opendaylight.controller</groupId>
+              <artifactId>mdsal-artifacts</artifactId>
+              <version>1.6.1</version>
+              <type>pom</type>
+              <scope>import</scope>
+          </dependency>
+      </dependencies>
+  </dependencyManagement>
+   <dependencies>
         <dependency>
             <groupId>ch.vorburger.mariaDB4j</groupId>
             <artifactId>mariaDB4j</artifactId>
@@ -60,129 +73,24 @@
             <scope>compile</scope>
         </dependency>
 
-        <!--
-        <dependency>
-          <groupId>org.antlr</groupId>
-          <artifactId>antlr4</artifactId>
-          <version>${antlr.version}</version>
-          <type>jar</type>
-          <scope>compile</scope>
-        </dependency>
-        -->
+
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>sal-binding-api</artifactId>
+    </dependency>
+
+    <!-- Testing Dependencies -->
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-core</artifactId>
+      <scope>test</scope>
+    </dependency>
 
     </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <version>${bundle.plugin.version}</version>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Bundle-Activator>org.onap.ccsdk.sli.core.sli.provider.SvcLogicActivator</Bundle-Activator>
-                        <Export-Package>org.onap.ccsdk.sli.core.sli.provider;version=${project.version}</Export-Package>
-
-                        <DynamicImport-Package>*</DynamicImport-Package>
-
-
-                        <Import-Package>org.onap.ccsdk.sli.core.sli;version="${project.version}",*</Import-Package>
-
-                        <Embed-Dependency>*;scope=compile;artifactId=commons-lang|commons-lang3</Embed-Dependency>
-
-                        <Embed-Transitive>true</Embed-Transitive>
-                    </instructions>
-                </configuration>
-
-            </plugin>
-            <plugin>
-                <groupId>org.opendaylight.yangtools</groupId>
-                <artifactId>yang-maven-plugin</artifactId>
-                <version>${odl.yangtools.yang.maven.plugin.version}</version>
-                <executions>
-                    <execution>
-                        <id>config</id>
-                        <goals>
-                            <goal>generate-sources</goal>
-                        </goals>
-                        <configuration>
-                            <yangFilesRootDir>src/test/resources</yangFilesRootDir>
-                            <codeGenerators>
-                                <generator>
-                                    <codeGeneratorClass>
-                                        org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
-                                    </codeGeneratorClass>
-                                    <outputBaseDir>${jmxGeneratorPath}</outputBaseDir>
-                                    <additionalConfiguration>
-                                        <namespaceToPackage1>
-                                            urn:opendaylight:params:xml:ns:yang:controller==org.opendaylight.controller.config.yang
-                                        </namespaceToPackage1>
-                                    </additionalConfiguration>
-                                </generator>
-                                <generator>
-                                    <codeGeneratorClass>
-                                        org.opendaylight.mdsal.binding.maven.api.gen.plugin.CodeGeneratorImpl
-                                    </codeGeneratorClass>
-                                    <outputBaseDir>${salGeneratorPath}</outputBaseDir>
-                                </generator>
-                            </codeGenerators>
-                            <inspectDependencies>true</inspectDependencies>
-                        </configuration>
-                    </execution>
-                </executions>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.opendaylight.mdsal</groupId>
-                        <artifactId>maven-sal-api-gen-plugin</artifactId>
-                        <version>${odl.sal.api.gen.plugin.version}</version>
-                        <type>jar</type>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.opendaylight.controller</groupId>
-                        <artifactId>yang-jmx-generator-plugin</artifactId>
-                        <version>${odl.yang.jmx.generator.version}</version>
-                    </dependency>
-                </dependencies>
-            </plugin>
-
-            <!--
-            Cleans up generated test artifacts which get included as a source
-            directory, but which we don't want as part of the bundle.
-             -->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-                <version>1.8</version>
-                <executions>
-                    <execution>
-                        <phase>prepare-package</phase>
-                        <goals>
-                            <goal>run</goal>
-                        </goals>
-                        <configuration>
-                            <target>
-                                <delete includeemptydirs="true">
-                                    <fileset
-                                        dir="${salGeneratorPath}"
-                                        includes="**/*"/>
-                                    <fileset
-                                        dir="${basedir}"
-                                        includes="${salGeneratorPath}"/>
-                                    <fileset
-                                        dir="${jmxGeneratorPath}"
-                                        includes="**/*"/>
-                                    <fileset
-                                        dir="${basedir}"
-                                        includes="${jmxGeneratorPath}"/>
-                                </delete>
-                            </target>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-
-        </plugins>
-    </build>
-    <description>SLI Provider is the OSGi bundle that exposes the service logic interpreter as a service.</description>
 </project>
diff --git a/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/CallNodeExecutor.java b/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/CallNodeExecutor.java
index d11a282..24774af 100644
--- a/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/CallNodeExecutor.java
+++ b/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/CallNodeExecutor.java
@@ -8,9 +8,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.
@@ -34,15 +34,15 @@
 
 	private static final Logger LOG = LoggerFactory
 			.getLogger(CallNodeExecutor.class);
-	
+
 	@Override
 	public SvcLogicNode execute(SvcLogicServiceImpl svc, SvcLogicNode node, SvcLogicContext ctx)
 			throws SvcLogicException {
 
 		String outValue = "not-found";
-		
+
 		SvcLogicGraph myGraph = node.getGraph();
-		
+
 		if (myGraph == null)
 		{
 			LOG.debug("execute: getGraph returned null");
@@ -51,17 +51,17 @@
 		{
 			LOG.debug("execute: got SvcLogicGraph");
 		}
-		
+
 		SvcLogicExpression moduleExpr = null;
-		
+
 		String module = null;
-		
+
 		moduleExpr = node.getAttribute("module");
 		if (moduleExpr != null)
 		{
 			module  = SvcLogicExpressionResolver.evaluate(moduleExpr, node, ctx);
 		}
-		
+
 		if ((module == null) || (module.length() == 0))
 		{
 			if (myGraph != null)
@@ -70,7 +70,7 @@
 				LOG.debug("myGraph.getModule() returned "+module);
 			}
 		}
-		
+
 		SvcLogicExpression rpcExpr = null;
 		String rpc = null;
 		rpcExpr = node.getAttribute("rpc");
@@ -78,7 +78,7 @@
 		{
 			rpc  = SvcLogicExpressionResolver.evaluate(rpcExpr, node, ctx);
 		}
-		
+
 		if ((rpc == null) || (rpc.length() == 0))
 		{
 			if (myGraph != null)
@@ -87,9 +87,9 @@
 				LOG.debug("myGraph.getRpc() returned "+rpc);
 			}
 		}
-		
+
 		String mode = null;
-		
+
 		moduleExpr = node.getAttribute("mode");
 		if (moduleExpr != null)
 		{
@@ -105,9 +105,9 @@
 				LOG.debug("myGraph.getMode() returned "+mode);
 			}
 		}
-		
+
 		String version = null;
-		
+
 		moduleExpr = node.getAttribute("version");
 		if (moduleExpr != null)
 		{
@@ -116,9 +116,9 @@
 
 		String parentGraph = ctx.getAttribute("currentGraph");
         ctx.setAttribute("parentGraph", parentGraph);
-		
-		SvcLogicStore store = getStore();
-		
+
+		SvcLogicStore store = svc.getStore();
+
         if (store != null) {
             SvcLogicGraph calledGraph = store.fetch(module, rpc, version, mode);
             if (calledGraph != null) {
@@ -132,7 +132,7 @@
         } else {
             LOG.debug("Could not get SvcLogicStore reference");
         }
-		
+
 		SvcLogicNode nextNode = node.getOutcomeValue(outValue);
 		if (nextNode != null) {
 			if (LOG.isDebugEnabled()) {
diff --git a/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicActivator.java b/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicActivator.java
deleted file mode 100644
index 95dfb2b..0000000
--- a/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicActivator.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP : CCSDK
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. 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.onap.ccsdk.sli.core.sli.provider;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.Properties;
-import org.onap.ccsdk.sli.core.sli.ConfigurationException;
-import org.onap.ccsdk.sli.core.sli.SvcLogicAdaptor;
-import org.onap.ccsdk.sli.core.sli.SvcLogicException;
-import org.onap.ccsdk.sli.core.sli.SvcLogicStore;
-import org.onap.ccsdk.sli.core.sli.SvcLogicStoreFactory;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.framework.ServiceRegistration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-public class SvcLogicActivator implements BundleActivator {
-
-    private static final String SVCLOGIC_PROP_VAR = "SDNC_SLI_PROPERTIES";
-    private static final String SDNC_CONFIG_DIR = "SDNC_CONFIG_DIR";
-
-    private static final Map<String, SvcLogicNodeExecutor> BUILTIN_NODES = new HashMap<String, SvcLogicNodeExecutor>() {
-        {
-            put("block", new BlockNodeExecutor());
-            put("call", new CallNodeExecutor());
-            put("configure", new ConfigureNodeExecutor());
-            put("delete", new DeleteNodeExecutor());
-            put("execute", new ExecuteNodeExecutor());
-            put("exists", new ExistsNodeExecutor());
-            put("for", new ForNodeExecutor());
-            put("get-resource", new GetResourceNodeExecutor());
-            put("is-available", new IsAvailableNodeExecutor());
-            put("notify", new NotifyNodeExecutor());
-            put("record", new RecordNodeExecutor());
-            put("release", new ReleaseNodeExecutor());
-            put("reserve", new ReserveNodeExecutor());
-            put("return", new ReturnNodeExecutor());
-            put("save", new SaveNodeExecutor());
-            put("set", new SetNodeExecutor());
-            put("switch", new SwitchNodeExecutor());
-            put("update", new UpdateNodeExecutor());
-            put("break", new BreakNodeExecutor());
-            put("while", new WhileNodeExecutor());
-        }
-    };
-
-    private static final Logger LOG = LoggerFactory.getLogger(SvcLogicActivator.class);
-
-    private static LinkedList<ServiceRegistration> registrations = new LinkedList<>();
-
-    private static HashMap<String, SvcLogicAdaptor> adaptorMap;
-
-    private static Properties props;
-
-    private static BundleContext bundleCtx;
-
-    private static SvcLogicService svcLogicServiceImpl;
-
-    @Override
-    public void start(BundleContext ctx) throws Exception {
-
-        LOG.info("Activating SLI");
-
-        synchronized (SvcLogicActivator.class) {
-            bundleCtx = ctx;
-            props = new Properties();
-        }
-
-        // Read properties
-        String propPath = System.getenv(SVCLOGIC_PROP_VAR);
-
-        if (propPath == null) {
-            String propDir = System.getenv(SDNC_CONFIG_DIR);
-            if (propDir == null) {
-
-                propDir = "/opt/sdnc/data/properties";
-            }
-            propPath = propDir + "/svclogic.properties";
-            LOG.warn("Environment variable {} unset - defaulting to {}", SVCLOGIC_PROP_VAR, propPath);
-        }
-
-        File propFile = new File(propPath);
-
-        if (!propFile.exists()) {
-            throw new ConfigurationException("Missing configuration properties file : " + propFile);
-        }
-
-        try {
-            props.load(new FileInputStream(propFile));
-        } catch (Exception e) {
-            throw new ConfigurationException("Could not load properties file " + propPath, e);
-
-        }
-
-        synchronized (SvcLogicActivator.class) {
-            if (registrations == null) {
-                registrations = new LinkedList<>();
-            }
-            // Advertise SvcLogicService
-            svcLogicServiceImpl = new SvcLogicServiceImpl();
-        }
-
-        LOG.info("SLI: Registering service {} in bundle {}", SvcLogicService.NAME, ctx.getBundle().getSymbolicName());
-        ServiceRegistration reg = ctx.registerService(SvcLogicService.NAME, svcLogicServiceImpl, null);
-        registrations.add(reg);
-
-        // Initialize SvcLogicStore
-        try {
-            SvcLogicStore store = getStore();
-        } catch (ConfigurationException e) {
-            LOG.warn("Could not initialize SvcLogicScore", e);
-        }
-
-        LOG.info("SLI - done registering services");
-    }
-
-    @Override
-    public void stop(BundleContext ctx) throws Exception {
-
-        if (registrations != null) {
-            for (ServiceRegistration reg : registrations) {
-                ServiceReference regRef = reg.getReference();
-                reg.unregister();
-            }
-            synchronized (SvcLogicActivator.class) {
-                registrations = null;
-            }
-        }
-    }
-
-    public static SvcLogicStore getStore() throws SvcLogicException {
-        // Create and initialize SvcLogicStore object - used to access
-        // saved service logic.
-
-        SvcLogicStore store;
-
-        try {
-            store = SvcLogicStoreFactory.getSvcLogicStore(props);
-        } catch (Exception e) {
-            throw new ConfigurationException("Could not get service logic store", e);
-
-        }
-
-        try {
-            store.init(props);
-        } catch (Exception e) {
-            throw new ConfigurationException("Could not get service logic store", e);
-        }
-
-        return(store);
-    }
-
-
-}
diff --git a/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicNodeExecutor.java b/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicNodeExecutor.java
index 43296c6..951536b 100644
--- a/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicNodeExecutor.java
+++ b/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicNodeExecutor.java
@@ -8,9 +8,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.
@@ -36,7 +36,7 @@
 import org.slf4j.LoggerFactory;
 
 public abstract class SvcLogicNodeExecutor {
-	
+
 	public abstract SvcLogicNode execute(SvcLogicServiceImpl svc, SvcLogicNode node, SvcLogicContext ctx) throws SvcLogicException;
 
     private static final Logger LOG = LoggerFactory.getLogger(SvcLogicNodeExecutor.class);
@@ -51,15 +51,12 @@
 				node, ctx));
 
 	}
-	
-    protected SvcLogicStore getStore() throws SvcLogicException {
-        return SvcLogicActivator.getStore();
-    }
-    
+
+
     protected SvcLogicAdaptor getAdaptor(String adaptorName) {
         return SvcLogicAdaptorFactory.getInstance(adaptorName);
     }
-    
+
     protected SvcLogicResource getSvcLogicResource(String plugin) {
         BundleContext bctx = FrameworkUtil.getBundle(this.getClass())
                 .getBundleContext();
@@ -75,7 +72,7 @@
             return null;
         }
     }
-    
+
     protected SvcLogicRecorder getSvcLogicRecorder(String plugin) {
         BundleContext bctx = FrameworkUtil.getBundle(this.getClass())
                 .getBundleContext();
@@ -90,7 +87,7 @@
             return null;
         }
     }
-    
+
     protected SvcLogicJavaPlugin getSvcLogicJavaPlugin(String pluginName){
         BundleContext bctx = FrameworkUtil.getBundle(this.getClass())
                  .getBundleContext();
@@ -106,5 +103,5 @@
              return plugin;
          }
  }
-    
+
 }
diff --git a/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicPropertiesProvider.java b/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicPropertiesProvider.java
new file mode 100644
index 0000000..6e85972
--- /dev/null
+++ b/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicPropertiesProvider.java
@@ -0,0 +1,188 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * onap
+ * ================================================================================
+ * Copyright (C) 2016 - 2017 ONAP
+ * ================================================================================
+ * 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.onap.ccsdk.sli.core.sli.provider;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Optional;
+import java.util.Properties;
+import java.util.Vector;
+
+import org.onap.ccsdk.sli.core.dblib.DblibConfigurationException;
+import org.onap.ccsdk.sli.core.sli.ConfigurationException;
+import org.onap.ccsdk.sli.core.utils.JREFileResolver;
+import org.onap.ccsdk.sli.core.utils.KarafRootFileResolver;
+import org.onap.ccsdk.sli.core.utils.PropertiesFileResolver;
+import org.onap.ccsdk.sli.core.utils.common.CoreDefaultFileResolver;
+import org.onap.ccsdk.sli.core.utils.common.SdncConfigEnvVarFileResolver;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Responsible for determining the properties file to use and instantiating the
+ * <code>DBResourceManager</code> Service. The priority for properties file
+ * resolution is as follows:
+ *
+ * <ol>
+ * <li>A directory identified by the system environment variable
+ * <code>SDNC_CONFIG_DIR</code></li>
+ * <li>The default directory <code>DEFAULT_DBLIB_PROP_DIR</code></li>
+ * <li>A directory identified by the JRE argument
+ * <code>dblib.properties</code></li>
+ * <li>A <code>dblib.properties</code> file located in the karaf root
+ * directory</li>
+ * </ol>
+ */
+public class SvcLogicPropertiesProvider {
+
+	private static final Logger LOG = LoggerFactory.getLogger(SvcLogicPropertiesProvider.class);
+
+	/**
+	 * The name of the properties file for database configuration
+	 */
+	private static final String SVCLOGIC_PROP_FILE_NAME = "svclogic.properties";
+
+	/**
+	 * A prioritized list of strategies for resolving dblib properties files.
+	 */
+	private Vector<PropertiesFileResolver> sliPropertiesFileResolvers = new Vector<>();
+
+	/**
+	 * The configuration properties for the db connection.
+	 */
+	private Properties properties;
+
+	/**
+	 * Set up the prioritized list of strategies for resolving dblib properties
+	 * files.
+	 */
+	public SvcLogicPropertiesProvider() {
+		sliPropertiesFileResolvers
+				.add(new SdncConfigEnvVarFileResolver("Using property file (1) from environment variable"));
+		sliPropertiesFileResolvers.add(new CoreDefaultFileResolver("Using property file (2) from default directory"));
+
+		sliPropertiesFileResolvers.add(
+				new JREFileResolver("Using property file (3) from JRE argument", SvcLogicPropertiesProvider.class));
+		sliPropertiesFileResolvers.add(new KarafRootFileResolver("Using property file (4) from karaf root", this));
+
+		// determines properties file as according to the priority described in the
+		// class header comment
+		final File propertiesFile = determinePropertiesFile(this);
+		if (propertiesFile != null) {
+			try (FileInputStream fileInputStream = new FileInputStream(propertiesFile)) {
+				properties = new Properties();
+				properties.load(fileInputStream);
+			} catch (final IOException e) {
+				LOG.error("Failed to load properties for file: {}", propertiesFile.toString(),
+						new ConfigurationException("Failed to load properties for file: " + propertiesFile.toString(),
+								e));
+			}
+		} else {
+			// Try to read properties as resource
+
+			InputStream propStr = getClass().getResourceAsStream("/" + SVCLOGIC_PROP_FILE_NAME);
+			if (propStr != null) {
+				properties = new Properties();
+				try {
+					properties.load(propStr);
+					propStr.close();
+				} catch (IOException e) {
+					properties = null;
+				}
+			}
+
+		}
+
+		if (properties == null) {
+			reportFailure("Missing configuration properties resource(3)", new ConfigurationException(
+					"Missing configuration properties resource(3): " + SVCLOGIC_PROP_FILE_NAME));
+		}
+	}
+
+	/**
+	 * Extract svclogic config properties.
+	 *
+	 * @return the svclogic config properties
+	 */
+	public Properties getProperties() {
+		return properties;
+	}
+
+	/**
+	 * Reports the method chosen for properties resolution to the
+	 * <code>Logger</code>.
+	 *
+	 * @param message
+	 *            Some user friendly message
+	 * @param fileOptional
+	 *            The file location of the chosen properties file
+	 * @return the file location of the chosen properties file
+	 */
+	private static File reportSuccess(final String message, final Optional<File> fileOptional) {
+		if (fileOptional.isPresent()) {
+			final File file = fileOptional.get();
+			LOG.info("{} {}", message, file.getPath());
+			return file;
+		}
+		return null;
+	}
+
+	/**
+	 * Reports fatal errors. This is the case in which no properties file could be
+	 * found.
+	 *
+	 * @param message
+	 *            An appropriate fatal error message
+	 * @param configurationException
+	 *            An exception describing what went wrong during resolution
+	 */
+	private static void reportFailure(final String message, final ConfigurationException configurationException) {
+
+		LOG.error("{}", message, configurationException);
+	}
+
+	/**
+	 * Determines the dblib properties file to use based on the following priority:
+	 * <ol>
+	 * <li>A directory identified by the system environment variable
+	 * <code>SDNC_CONFIG_DIR</code></li>
+	 * <li>The default directory <code>DEFAULT_DBLIB_PROP_DIR</code></li>
+	 * <li>A directory identified by the JRE argument
+	 * <code>dblib.properties</code></li>
+	 * <li>A <code>dblib.properties</code> file located in the karaf root
+	 * directory</li>
+	 * </ol>
+	 */
+	File determinePropertiesFile(final SvcLogicPropertiesProvider resourceProvider) {
+
+		for (final PropertiesFileResolver sliPropertiesFileResolver : sliPropertiesFileResolvers) {
+			final Optional<File> fileOptional = sliPropertiesFileResolver.resolveFile(SVCLOGIC_PROP_FILE_NAME);
+			if (fileOptional.isPresent()) {
+				return reportSuccess(sliPropertiesFileResolver.getSuccessfulResolutionMessage(), fileOptional);
+			}
+		}
+
+		return null;
+	}
+}
diff --git a/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicServiceImpl.java b/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicServiceImpl.java
index 5f4d365..53875b3 100644
--- a/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicServiceImpl.java
+++ b/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicServiceImpl.java
@@ -8,9 +8,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.
@@ -24,12 +24,16 @@
 import java.util.HashMap;
 import java.util.Properties;
 
+import org.onap.ccsdk.sli.core.dblib.DbLibService;
+import org.onap.ccsdk.sli.core.sli.ConfigurationException;
 import org.onap.ccsdk.sli.core.sli.MetricLogger;
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
+import org.onap.ccsdk.sli.core.sli.SvcLogicDblibStore;
 import org.onap.ccsdk.sli.core.sli.SvcLogicException;
 import org.onap.ccsdk.sli.core.sli.SvcLogicGraph;
 import org.onap.ccsdk.sli.core.sli.SvcLogicNode;
 import org.onap.ccsdk.sli.core.sli.SvcLogicStore;
+import org.onap.ccsdk.sli.core.sli.SvcLogicStoreFactory;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.FrameworkUtil;
@@ -51,6 +55,25 @@
 
     private BundleContext bctx = null;
 
+    private Properties properties;
+
+    private SvcLogicStore store;
+
+    public SvcLogicServiceImpl(SvcLogicPropertiesProvider resourceProvider) throws SvcLogicException{
+
+    		properties = resourceProvider.getProperties();
+
+    		getStore();
+    }
+
+    public SvcLogicServiceImpl(SvcLogicPropertiesProvider resourceProvider, DbLibService dbSvc) throws SvcLogicException{
+
+		properties = resourceProvider.getProperties();
+		store = new SvcLogicDblibStore(dbSvc);
+}
+
+
+
     private void registerExecutors() {
 
         LOG.info("Entered register executors");
@@ -210,8 +233,6 @@
     @Override
     public boolean hasGraph(String module, String rpc, String version, String mode) throws SvcLogicException
     {
-        SvcLogicStore store = SvcLogicActivator.getStore();
-
         return (store.hasGraph(module, rpc, version, mode));
     }
 
@@ -226,8 +247,6 @@
     public Properties execute(String module, String rpc, String version, String mode,
             Properties props, DOMDataBroker domDataBroker) throws SvcLogicException {
 
-        // See if there is a service logic defined
-        SvcLogicStore store = SvcLogicActivator.getStore();
 
         LOG.info("Fetching service logic from data store");
         SvcLogicGraph graph = store.fetch(module, rpc, version, mode);
@@ -249,4 +268,28 @@
 
         return(ctx.toProperties());
     }
+
+    public  SvcLogicStore getStore() throws SvcLogicException {
+        // Create and initialize SvcLogicStore object - used to access
+        // saved service logic.
+
+		if (store != null) {
+			return store;
+		}
+
+        try {
+            store = SvcLogicStoreFactory.getSvcLogicStore(properties);
+        } catch (Exception e) {
+            throw new ConfigurationException("Could not get service logic store", e);
+
+        }
+
+        try {
+            store.init(properties);
+        } catch (SvcLogicException e) {
+            throw new ConfigurationException("Could not get service logic store", e);
+        }
+
+        return store;
+    }
 }
diff --git a/sli/provider/src/main/resources/org/opendaylight/blueprint/sli-blueprint.xml b/sli/provider/src/main/resources/org/opendaylight/blueprint/sli-blueprint.xml
new file mode 100755
index 0000000..8290574
--- /dev/null
+++ b/sli/provider/src/main/resources/org/opendaylight/blueprint/sli-blueprint.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+           xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"
+           odl:use-default-for-reference-types="true">
+
+    <bean id="propProvider" class="org.onap.ccsdk.sli.core.sli.provider.SvcLogicPropertiesProvider" />
+    <reference id="dblibService" interface="org.onap.ccsdk.sli.core.dblib.DbLibService" />
+
+    <bean id="svcLogicService" class="org.onap.ccsdk.sli.core.sli.provider.SvcLogicServiceImpl">
+        <argument ref="propProvider" />
+        <argument ref="dblibService"/>
+    </bean>
+
+
+    <service ref="svcLogicService">
+        <interfaces>
+            <value>org.onap.ccsdk.sli.core.sli.provider.SvcLogicService</value>
+        </interfaces>
+    </service>
+
+</blueprint>
\ No newline at end of file
diff --git a/sli/provider/src/main/resources/svclogic.properties b/sli/provider/src/main/resources/svclogic.properties
new file mode 100644
index 0000000..49d39ab
--- /dev/null
+++ b/sli/provider/src/main/resources/svclogic.properties
@@ -0,0 +1,25 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP : CCSDK
+# ================================================================================
+# Copyright (C) 2017 AT&T Intellectual Property. 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=========================================================
+###
+
+org.onap.ccsdk.sli.dbtype = dblib
+org.onap.ccsdk.sli.jdbc.url=jdbc:derby:memory:sdnctl;create=true
+org.onap.ccsdk.sli.jdbc.driver=org.apache.derby.jdbc.EmbeddedDriver
+org.onap.ccsdk.sli.jdbc.database = sdnctl
diff --git a/sli/provider/src/test/java/org/onap/ccsdk/sli/core/sli/provider/ExecuteNodeExecutorTest.java b/sli/provider/src/test/java/org/onap/ccsdk/sli/core/sli/provider/ExecuteNodeExecutorTest.java
index 48e49f8..eccbfc9 100644
--- a/sli/provider/src/test/java/org/onap/ccsdk/sli/core/sli/provider/ExecuteNodeExecutorTest.java
+++ b/sli/provider/src/test/java/org/onap/ccsdk/sli/core/sli/provider/ExecuteNodeExecutorTest.java
@@ -8,9 +8,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.
@@ -53,7 +53,8 @@
         MockExecuteNodeExecutor execute = new MockExecuteNodeExecutor();
         SvcLogicNode node = new SvcLogicNode(0, "", "", new SvcLogicGraph());
         node.setAttribute("method", "selectLunch");
-        execute.execute(new SvcLogicServiceImpl(), new SvcLogicNode(0, "", "", new SvcLogicGraph()), new SvcLogicContext());
+        SvcLogicPropertiesProvider resourceProvider = new SvcLogicPropertiesProvider();
+        execute.execute(new SvcLogicServiceImpl(resourceProvider), new SvcLogicNode(0, "", "", new SvcLogicGraph()), new SvcLogicContext());
     }
 
 }
diff --git a/sli/provider/src/test/java/org/onap/ccsdk/sli/core/sli/provider/ITCaseSvcLogicGraphExecutor.java b/sli/provider/src/test/java/org/onap/ccsdk/sli/core/sli/provider/ITCaseSvcLogicGraphExecutor.java
index 724e946..18f044b 100644
--- a/sli/provider/src/test/java/org/onap/ccsdk/sli/core/sli/provider/ITCaseSvcLogicGraphExecutor.java
+++ b/sli/provider/src/test/java/org/onap/ccsdk/sli/core/sli/provider/ITCaseSvcLogicGraphExecutor.java
@@ -102,8 +102,8 @@
         SvcLogicParser parser = new SvcLogicParser();
 
         // Loop through executor tests
-
-        SvcLogicServiceImpl svc = new SvcLogicServiceImpl();
+        SvcLogicPropertiesProvider resourceProvider = new SvcLogicPropertiesProvider();
+        SvcLogicServiceImpl svc = new SvcLogicServiceImpl(resourceProvider);
 
         for (String nodeType : BUILTIN_NODES.keySet()) {
             LOG.info("SLI - registering node executor for node type " + nodeType);
@@ -156,8 +156,9 @@
             SvcLogicParser parser = new SvcLogicParser();
 
             // Loop through executor tests
+            SvcLogicPropertiesProvider resourceProvider = new SvcLogicPropertiesProvider();
 
-            SvcLogicServiceImpl svc = new SvcLogicServiceImpl();
+            SvcLogicServiceImpl svc = new SvcLogicServiceImpl(resourceProvider);
 
             for (String nodeType : BUILTIN_NODES.keySet()) {
 
diff --git a/sli/provider/src/test/resources/svclogic.properties b/sli/provider/src/test/resources/svclogic.properties
index 25eb3bd..49d39ab 100644
--- a/sli/provider/src/test/resources/svclogic.properties
+++ b/sli/provider/src/test/resources/svclogic.properties
@@ -8,9 +8,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.
@@ -19,8 +19,7 @@
 # ============LICENSE_END=========================================================
 ###
 
-org.onap.ccsdk.sli.dbtype = jdbc
-org.onap.ccsdk.sli.jdbc.url = jdbc:mysql://localhost:3306/sdnctl
+org.onap.ccsdk.sli.dbtype = dblib
+org.onap.ccsdk.sli.jdbc.url=jdbc:derby:memory:sdnctl;create=true
+org.onap.ccsdk.sli.jdbc.driver=org.apache.derby.jdbc.EmbeddedDriver
 org.onap.ccsdk.sli.jdbc.database = sdnctl
-org.onap.ccsdk.sli.jdbc.user = sdnctl
-org.onap.ccsdk.sli.jdbc.password = gamma
diff --git a/sli/recording/pom.xml b/sli/recording/pom.xml
index b571cfb..e8b136f 100755
--- a/sli/recording/pom.xml
+++ b/sli/recording/pom.xml
@@ -1,24 +1,38 @@
 <?xml version="1.0"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
+
   <parent>
-    <groupId>org.onap.ccsdk.sli.core</groupId>
-    <artifactId>sli</artifactId>
-    <version>0.2.0-SNAPSHOT</version>
+    <groupId>org.onap.ccsdk.parent</groupId>
+    <artifactId>binding-parent</artifactId>
+    <version>1.0.1-SNAPSHOT</version>
+    <relativePath/>
   </parent>
+
+  <groupId>org.onap.ccsdk.sli.core</groupId>
   <artifactId>sli-recording</artifactId>
+  <version>0.2.1-SNAPSHOT</version>
   <packaging>bundle</packaging>
-  <name>SLI - Recording</name>
+
+  <name>ccsdk-sli-core :: sli :: ${project.artifactId}</name>
+  <description>SLI Recording is an OSGi bundle that implements recording service for the service logic record node.</description>
+
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
+
+  <dependencyManagement>
+      <dependencies>
+          <dependency>
+              <groupId>org.opendaylight.controller</groupId>
+              <artifactId>mdsal-artifacts</artifactId>
+              <version>1.6.1</version>
+              <type>pom</type>
+              <scope>import</scope>
+          </dependency>
+      </dependencies>
+  </dependencyManagement>
   <dependencies>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>${junit.version}</version>
-      <scope>test</scope>
-    </dependency>
     		<dependency>
 			<groupId>org.onap.ccsdk.sli.core</groupId>
 			<artifactId>sli-common</artifactId>
@@ -48,28 +62,23 @@
 			<scope>compile</scope>
 		</dependency>
 
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>sal-binding-api</artifactId>
+    </dependency>
+
+    <!-- Testing Dependencies -->
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-core</artifactId>
+      <scope>test</scope>
+    </dependency>
+
   </dependencies>
-
-  <build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.felix</groupId>
-				<artifactId>maven-bundle-plugin</artifactId>
-				<version>${bundle.plugin.version}</version>
-				<extensions>true</extensions>
-				<configuration>
-					<instructions>
-						<Export-Package>org.onap.ccsdk.sli.core.sli.recording;version=${project.version}</Export-Package>
-						<Embed-Transitive>true</Embed-Transitive>
-					</instructions>
-
-
-				</configuration>
-
-			</plugin>
-
-
-		</plugins>
-	</build>
-  <description>SLI Recording is an OSGi bundle that implements recording service for the service logic record node.</description>
 </project>
diff --git a/sliPluginUtils/features/ccsdk-sliPluginUtils/pom.xml b/sliPluginUtils/features/ccsdk-sliPluginUtils/pom.xml
new file mode 100644
index 0000000..8ea5ca8
--- /dev/null
+++ b/sliPluginUtils/features/ccsdk-sliPluginUtils/pom.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>single-feature-parent</artifactId>
+        <version>1.0.1-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.sli.core</groupId>
+    <artifactId>ccsdk-sliPluginUtils</artifactId>
+    <version>0.2.1-SNAPSHOT</version>
+    <packaging>feature</packaging>
+
+    <name>ccsdk-sli-core :: sliPluginUtils :: ${project.artifactId}</name>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.opendaylight.mdsal.model</groupId>
+                <artifactId>mdsal-model-artifacts</artifactId>
+                <version>0.11.1</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.opendaylight.controller</groupId>
+                <artifactId>mdsal-artifacts</artifactId>
+                <version>1.6.1</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+    <dependencies>
+        <dependency>
+            <groupId>org.opendaylight.controller</groupId>
+            <artifactId>odl-mdsal-broker</artifactId>
+            <type>xml</type>
+            <classifier>features</classifier>
+        </dependency>
+
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>ccsdk-sli</artifactId>
+            <version>${project.version}</version>
+            <type>xml</type>
+            <classifier>features</classifier>
+        </dependency>
+
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>sliPluginUtils-provider</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>equinoxSDK381</groupId>
+            <artifactId>org.eclipse.osgi</artifactId>
+            <version>${equinox.osgi.version}</version>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/sliPluginUtils/features/features-sliPluginUtils/pom.xml b/sliPluginUtils/features/features-sliPluginUtils/pom.xml
new file mode 100644
index 0000000..004277d
--- /dev/null
+++ b/sliPluginUtils/features/features-sliPluginUtils/pom.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.onap.ccsdk.parent</groupId>
+		<artifactId>feature-repo-parent</artifactId>
+		<version>1.0.1-SNAPSHOT</version>
+		<relativePath/>
+	</parent>
+
+	<groupId>org.onap.ccsdk.sli.core</groupId>
+	<artifactId>features-sliPluginUtils</artifactId>
+	<version>0.2.1-SNAPSHOT</version>
+	<packaging>feature</packaging>
+
+	<name>ccsdk-sli-core :: sliPluginUtils :: ${project.artifactId}</name>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>ccsdk-sliPluginUtils</artifactId>
+			<version>${project.version}</version>
+			<type>xml</type>
+			<classifier>features</classifier>
+		</dependency>
+
+	</dependencies>
+</project>
diff --git a/sliPluginUtils/features/pom.xml b/sliPluginUtils/features/pom.xml
index 19d32f7..4a1f899 100755
--- a/sliPluginUtils/features/pom.xml
+++ b/sliPluginUtils/features/pom.xml
@@ -1,127 +1,23 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-	<artifactId>sliPluginUtils-features</artifactId>
-	<packaging>jar</packaging>
 	<modelVersion>4.0.0</modelVersion>
 
 	<parent>
-		<artifactId>sliPluginUtils</artifactId>
-		<groupId>org.onap.ccsdk.sli.core</groupId>
-		<version>0.2.0-SNAPSHOT</version>
+		<groupId>org.onap.ccsdk.parent</groupId>
+		<artifactId>odlparent-lite</artifactId>
+		<version>1.0.1-SNAPSHOT</version>
+		<relativePath/>
 	</parent>
 
-	<name>SliPluginUtils Plugin - Features</name>
+	<groupId>org.onap.ccsdk.sli.core</groupId>
+	<artifactId>sliPluginUtils-features</artifactId>
+	<version>0.2.1-SNAPSHOT</version>
+	<packaging>pom</packaging>
 
-	<dependencies>
-		<dependency>
-			<groupId>org.onap.ccsdk.sli.core</groupId>
-			<artifactId>sliPluginUtils-provider</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>commons-lang</groupId>
-			<artifactId>commons-lang</artifactId>
-			<version>${commons.lang.version}</version>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.opendaylight.mdsal</groupId>
-			<artifactId>features-mdsal</artifactId>
-			<version>${odl.mdsal.features.version}</version>
-			<classifier>features</classifier>
-			<type>xml</type>
-			<scope>runtime</scope>
-		</dependency>
-		<!-- dependency for opendaylight-karaf-empty for use by testing -->
-		<dependency>
-			<groupId>org.opendaylight.odlparent</groupId>
-			<artifactId>opendaylight-karaf-empty</artifactId>
-			<version>${odl.karaf.empty.distro.version}</version>
-			<type>zip</type>
-		</dependency>
-		<dependency>
-			<!-- Required for launching the feature tests -->
-			<groupId>org.opendaylight.odlparent</groupId>
-			<artifactId>features-test</artifactId>
-			<version>${odl.commons.opendaylight.version}</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.opendaylight.yangtools</groupId>
-			<artifactId>features-yangtools</artifactId>
-			<version>${odl.yangtools.version}</version>
-			<classifier>features</classifier>
-			<type>xml</type>
-			<scope>runtime</scope>
-		</dependency>
-	</dependencies>
+	<name>ccsdk-sli-core :: sliPluginUtils :: ${project.artifactId}</name>
 
-	<build>
-		<resources>
-			<resource>
-				<filtering>true</filtering>
-				<directory>src/main/resources</directory>
-			</resource>
-		</resources>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-resources-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>filter</id>
-						<goals>
-							<goal>resources</goal>
-						</goals>
-						<phase>generate-resources</phase>
-					</execution>
-				</executions>
-			</plugin>
-
-					<!-- launches the feature test, which validates that your karaf feature
-					can be installed inside of a karaf container. It doesn't validate that your
-					functionality works correctly, just that you have all of the dependent bundles
-					defined correctly.
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-surefire-plugin</artifactId>
-				<version>2.16</version>
-				<configuration>
-					<systemPropertyVariables>
-						<karaf.distro.groupId>org.opendaylight.odlparent</karaf.distro.groupId>
-						<karaf.distro.artifactId>opendaylight-karaf-empty</karaf.distro.artifactId>
-						<karaf.distro.version>${odl.karaf.empty.distro.version}</karaf.distro.version>
-					</systemPropertyVariables>
-					<dependenciesToScan>
-						<dependency>org.opendaylight.yangtools:features-test</dependency>
-					</dependenciesToScan>
-				</configuration>
-			</plugin>
-			-->
-
-			<plugin>
-				<groupId>org.codehaus.mojo</groupId>
-				<artifactId>build-helper-maven-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>attach-artifacts</id>
-						<goals>
-							<goal>attach-artifact</goal>
-						</goals>
-						<phase>package</phase>
-						<configuration>
-							<artifacts>
-								<artifact>
-									<file>${project.build.directory}/classes/${features.file}</file>
-									<type>xml</type>
-									<classifier>features</classifier>
-								</artifact>
-							</artifacts>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
+	<modules>
+		<module>features-sliPluginUtils</module>
+		<module>ccsdk-sliPluginUtils</module>
+	</modules>
 </project>
diff --git a/sliPluginUtils/features/src/main/resources/features.xml b/sliPluginUtils/features/src/main/resources/features.xml
deleted file mode 100644
index f59cea4..0000000
--- a/sliPluginUtils/features/src/main/resources/features.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ============LICENSE_START=======================================================
-  ONAP : CCSDK
-  ================================================================================
-  Copyright (C) 2017 AT&T Intellectual Property. 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=========================================================
-  -->
-
-
-<features name="sdnc-sliPluginUtils-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
-
-    <repository>mvn:org.opendaylight.mdsal/features-mdsal/${odl.mdsal.features.version}/xml/features</repository>
-
-
-    <feature name='sdnc-sliPluginUtils' description="sdnc-sliPluginUtils" version='${project.version}'>
-        <!-- Most applications will have a dependency on the ODL MD-SAL Broker -->
-        <feature version="${odl.mdsal.version}">odl-mdsal-broker</feature>
-        <feature>sdnc-sli</feature>
-        <bundle>mvn:org.onap.ccsdk.sli.core/sliPluginUtils-provider/${project.version}</bundle>
-    </feature>
-
-</features>
diff --git a/sliPluginUtils/installer/pom.xml b/sliPluginUtils/installer/pom.xml
index 736d222..1c0704a 100755
--- a/sliPluginUtils/installer/pom.xml
+++ b/sliPluginUtils/installer/pom.xml
@@ -1,18 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
+
 	<parent>
-		<artifactId>sliPluginUtils</artifactId>
-		<groupId>org.onap.ccsdk.sli.core</groupId>
-		<version>0.2.0-SNAPSHOT</version>
+		<groupId>org.onap.ccsdk.parent</groupId>
+		<artifactId>odlparent-lite</artifactId>
+		<version>1.0.1-SNAPSHOT</version>
+		<relativePath/>
 	</parent>
+
+	<groupId>org.onap.ccsdl.sli.core</groupId>
 	<artifactId>sliPluginUtils-installer</artifactId>
-	<name>SLI Plugin Utilities - Karaf  Installer</name>
+	<version>0.2.1-SNAPSHOT</version>
 	<packaging>pom</packaging>
 
+	<name>ccsdk-sli-core :: sliPluginUtils :: ${project.artifactId}</name>
+
 	<properties>
-		<application.name>sdnc-sliPluginUtils</application.name>
-		<features.boot>sdnc-sliPluginUtils</features.boot>
+		<application.name>ccsdk-sliPluginUtils</application.name>
+		<features.boot>${application.name}</features.boot>
 		<features.repositories>mvn:org.onap.ccsdk.sli.core/sliPluginUtils-features/${project.version}/xml/features</features.repositories>
 		<include.transitive.dependencies>false</include.transitive.dependencies>
 	</properties>
@@ -21,10 +27,10 @@
 
 		<dependency>
 			<groupId>org.onap.ccsdk.sli.core</groupId>
-			<artifactId>sliPluginUtils-features</artifactId>
+			<artifactId>${application.name}</artifactId>
 			<version>${project.version}</version>
-			<classifier>features</classifier>
 			<type>xml</type>
+			<classifier>features</classifier>
 			<exclusions>
 				<exclusion>
 					<groupId>*</groupId>
@@ -134,5 +140,4 @@
 
 		</plugins>
 	</build>
-
 </project>
diff --git a/sliPluginUtils/pom.xml b/sliPluginUtils/pom.xml
index 21efb17..45be684 100755
--- a/sliPluginUtils/pom.xml
+++ b/sliPluginUtils/pom.xml
@@ -1,38 +1,22 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.onap.ccsdk.parent</groupId>
+		<artifactId>odlparent-lite</artifactId>
+		<version>1.0.1-SNAPSHOT</version>
+		<relativePath/>
+	</parent>
 
 	<groupId>org.onap.ccsdk.sli.core</groupId>
 	<artifactId>sliPluginUtils</artifactId>
-	<version>0.2.0-SNAPSHOT</version>
+	<version>0.2.1-SNAPSHOT</version>
 	<packaging>pom</packaging>
-	<modelVersion>4.0.0</modelVersion>
 
-
-	<parent>
-		<groupId>org.onap.ccsdk.sli.core</groupId>
-		<artifactId>ccsdk-sli-core</artifactId>
-        	<version>0.2.0-SNAPSHOT</version>
-	</parent>
-	<name>Service Logic Interface Plugin Utilities</name>
+	<name>ccsdk-sli-core :: sliPluginUtils</name>
 	<description>A package of static utility functions to be used when developing SLI plugins</description>
 
-	<dependencyManagement>
-		<dependencies>
-			<dependency>
-				<groupId>org.onap.ccsdk.sli.core</groupId>
-				<artifactId>SliPluginUtils-features</artifactId>
-				<classifier>features</classifier>
-				<type>xml</type>
-				<version>${project.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.onap.ccsdk.sli.core</groupId>
-				<artifactId>SliPluginUtils-provider</artifactId>
-				<version>${project.version}</version>
-				</dependency>
-		</dependencies>
-	</dependencyManagement>
-
 	<modules>
 		<module>provider</module>
 		<module>features</module>
diff --git a/sliPluginUtils/provider/pom.xml b/sliPluginUtils/provider/pom.xml
index 61b5e95..0a274ed 100755
--- a/sliPluginUtils/provider/pom.xml
+++ b/sliPluginUtils/provider/pom.xml
@@ -1,17 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-	<artifactId>sliPluginUtils-provider</artifactId>
-	<packaging>bundle</packaging>
 	<modelVersion>4.0.0</modelVersion>
 
 	<parent>
-		<groupId>org.onap.ccsdk.sli.core</groupId>
-		<artifactId>sliPluginUtils</artifactId>
-		<version>0.2.0-SNAPSHOT</version>
+		<groupId>org.onap.ccsdk.parent</groupId>
+		<artifactId>binding-parent</artifactId>
+		<version>1.0.1-SNAPSHOT</version>
+		<relativePath/>
 	</parent>
 
-	<name>SliPluginUtils Plugin - Provider</name>
+	<groupId>org.onap.ccsdk.sli.core</groupId>
+	<artifactId>sliPluginUtils-provider</artifactId>
+	<version>0.2.1-SNAPSHOT</version>
+	<packaging>bundle</packaging>
+
+	<name>ccsdk-sli-core :: sliPluginUtils :: ${project.artifactId}</name>
 	<url>http://maven.apache.org</url>
 
 	<properties>
@@ -22,11 +25,10 @@
 		<dependency>
 			<groupId>junit</groupId>
 			<artifactId>junit</artifactId>
-			<version>${junit.version}</version>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
-			<groupId>org.onap.ccsdk.sli.core</groupId>
+			<groupId>${project.groupId}</groupId>
 			<artifactId>sli-common</artifactId>
 			<version>${project.version}</version>
 			<scope>compile</scope>
@@ -34,22 +36,18 @@
 		<dependency>
 			<groupId>equinoxSDK381</groupId>
 			<artifactId>org.eclipse.osgi</artifactId>
-			<version>${equinox.osgi.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>org.slf4j</groupId>
 			<artifactId>slf4j-api</artifactId>
-			<version>${slf4j.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>org.slf4j</groupId>
 			<artifactId>jcl-over-slf4j</artifactId>
-			<version>${slf4j.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.commons</groupId>
 			<artifactId>commons-lang3</artifactId>
-			<version>3.1</version>
 		</dependency>
 		<dependency>
 			<groupId>org.hamcrest</groupId>
@@ -68,27 +66,4 @@
 			<version>1.1</version>
 		</dependency>
 	</dependencies>
-
-	<build>
-		<plugins>
-
-			<plugin>
-				<groupId>org.apache.felix</groupId>
-				<artifactId>maven-bundle-plugin</artifactId>
-				<version>${bundle.plugin.version}</version>
-				<extensions>true</extensions>
-				<configuration>
-					<instructions>
-						<Bundle-SymbolicName>org.onap.ccsdk.sli.core.slipluginutils</Bundle-SymbolicName>
-						<Export-Package>org.onap.ccsdk.sli.core.slipluginutils</Export-Package>
-						<Import-Package>org.onap.ccsdk.sli.core.*,org.osgi.framework.*,org.slf4j.*,java.net.*</Import-Package>
-						<Embed-Dependency>*;scope=compile|runtime;artifactId=!sli-common|org.eclipse.osgi|mariadb-java-client|slf4j-api|jcl-over-slf4j</Embed-Dependency>
-						<Embed-Transitive>true</Embed-Transitive>
-					</instructions>
-				</configuration>
-			</plugin>
-
-		</plugins>
-
-	</build>
 </project>
diff --git a/sliPluginUtils/provider/src/main/java/org/onap/ccsdk/sli/core/slipluginutils/Dme2PropertiesProvider.java b/sliPluginUtils/provider/src/main/java/org/onap/ccsdk/sli/core/slipluginutils/Dme2PropertiesProvider.java
index 07c84c6..6802c9a 100644
--- a/sliPluginUtils/provider/src/main/java/org/onap/ccsdk/sli/core/slipluginutils/Dme2PropertiesProvider.java
+++ b/sliPluginUtils/provider/src/main/java/org/onap/ccsdk/sli/core/slipluginutils/Dme2PropertiesProvider.java
@@ -8,9 +8,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.
@@ -31,193 +31,248 @@
 import java.nio.file.Paths;
 import java.util.Optional;
 import java.util.Properties;
+import java.util.Vector;
 
+import org.onap.ccsdk.sli.core.utils.JREFileResolver;
+import org.onap.ccsdk.sli.core.utils.KarafRootFileResolver;
+import org.onap.ccsdk.sli.core.utils.PropertiesFileResolver;
+import org.onap.ccsdk.sli.core.utils.common.CoreDefaultFileResolver;
+import org.onap.ccsdk.sli.core.utils.common.SdncConfigEnvVarFileResolver;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * Immutable properties container for dme2 properties.  Since the initial design decision was made to
- * utilize <code>Properties</code> instead of an OSGi <code>ManagedService</code>, it was decided
- * to make these properties immutable.
+ * Immutable properties container for dme2 properties. Since the initial design
+ * decision was made to utilize <code>Properties</code> instead of an OSGi
+ * <code>ManagedService</code>, it was decided to make these properties
+ * immutable.
  */
 public final class Dme2PropertiesProvider {
 
-    private static final Logger LOG = LoggerFactory.getLogger(Dme2PropertiesProvider.class);
+	private static final Logger LOG = LoggerFactory.getLogger(Dme2PropertiesProvider.class);
 
-    /**
-     * The name of the environment variable to specify the configuration directory.
-     */
-    private static final String SDNC_ROOT_DIR_ENV_VAR_KEY = "SDNC_CONFIG_DIR";
+	/**
+	 * The name of the environment variable to specify the configuration directory.
+	 */
+	private static final String SDNC_ROOT_DIR_ENV_VAR_KEY = "SDNC_CONFIG_DIR";
 
-    /**
-     * the dme2 properties file name.
-     */
-    private static final String DME2_PROPERTIES_FILE_NAME = "dme2.properties";
+	/**
+	 * the dme2 properties file name.
+	 */
+	private static final String DME2_PROPERTIES_FILE_NAME = "dme2.properties";
 
-    /**
-     * the key for <code>proxyUrl</code>, which represents a CSV list of urls
-     */
-    static final String PROXY_URL_KEY = "proxyUrl";
+	/**
+	 * the key for <code>proxyUrl</code>, which represents a CSV list of urls
+	 */
+	static final String PROXY_URL_KEY = "proxyUrl";
 
-    /**
-     * indicates that proxy urls are separated by commas
-     */
-    private static final String PROXY_URLS_VALUE_SEPARATOR = ",";
+	/**
+	 * indicates that proxy urls are separated by commas
+	 */
+	private static final String PROXY_URLS_VALUE_SEPARATOR = ",";
 
-    /**
-     * the key for <code>aafUserName</code>
-     */
-    static final String AAF_USERNAME_KEY = "aafUserName";
+	/**
+	 * the key for <code>aafUserName</code>
+	 */
+	static final String AAF_USERNAME_KEY = "aafUserName";
 
-    /**
-     * the key for <code>aafPassword</code>
-     */
-    static final String AAF_PASSWORD_KEY = "aafPassword";
+	/**
+	 * the key for <code>aafPassword</code>
+	 */
+	static final String AAF_PASSWORD_KEY = "aafPassword";
 
-    /**
-     * the key for <code>envContext</code>
-     */
-    static final String ENV_CONTEXT_KEY = "envContext";
+	/**
+	 * the key for <code>envContext</code>
+	 */
+	static final String ENV_CONTEXT_KEY = "envContext";
 
-    /**
-     * the key for <code>routeOffer</code>
-     */
-    static final String ROUTE_OFFER_KEY = "routeOffer";
+	/**
+	 * the key for <code>routeOffer</code>
+	 */
+	static final String ROUTE_OFFER_KEY = "routeOffer";
 
-    /**
-     * the key for <code>commonServiceVersion</code>
-     */
-    static final String COMMON_SERVICE_VERSION_KEY = "commonServiceVersion";
+	/**
+	 * the key for <code>commonServiceVersion</code>
+	 */
+	static final String COMMON_SERVICE_VERSION_KEY = "commonServiceVersion";
 
-    /**
-     * the key for <code>partner</code>
-     */
-    static final String PARTNER_KEY = "partner";
+	/**
+	 * the key for <code>partner</code>
+	 */
+	static final String PARTNER_KEY = "partner";
 
-    private Optional<String []> proxyUrls = Optional.empty();
+	private Optional<String[]> proxyUrls = Optional.empty();
 
-    private Optional<String> aafUsername = Optional.empty();
+	private Optional<String> aafUsername = Optional.empty();
 
-    private Optional<String> aafPassword = Optional.empty();
+	private Optional<String> aafPassword = Optional.empty();
 
-    private Optional<String> envContext = Optional.empty();
+	private Optional<String> envContext = Optional.empty();
 
-    private Optional<String> routeOffer = Optional.empty();
+	private Optional<String> routeOffer = Optional.empty();
 
-    private Optional<String> commonServiceVersion = Optional.empty();
+	private Optional<String> commonServiceVersion = Optional.empty();
 
-    private Optional<String> partner = Optional.empty();
+	private Optional<String> partner = Optional.empty();
 
+	/**
+	 * A prioritized list of strategies for resolving dme2 properties files.
+	 */
+	private Vector<PropertiesFileResolver> dme2PropertiesFileResolvers = new Vector<>();
 
-    /**
-     * Instantiates the properties provider, which involves loading the appropriate properties for dme2.
-     */
-    public Dme2PropertiesProvider() {
-        this(getDme2Path(SDNC_ROOT_DIR_ENV_VAR_KEY, DME2_PROPERTIES_FILE_NAME).toString());
-    }
+	/**
+	 * Instantiates the properties provider, which involves loading the appropriate
+	 * properties for dme2.
+	 */
+	public Dme2PropertiesProvider() {
+		this(DME2_PROPERTIES_FILE_NAME);
+	}
 
-    /**
-     * Instantiates the properties provider, which involves loading the appropriate properties for dme2.
-     *
-     * @param dme2Path location of the dme2.properties file
-     */
-    @VisibleForTesting
-    Dme2PropertiesProvider(final String dme2Path) {
-        final Properties properties;
-        try {
-            properties = getProperties(dme2Path);
-            this.proxyUrls = getProxyUrls(properties);
-            this.aafUsername = getAafUsername(properties);
-            this.aafPassword = getAafPassword(properties);
-            this.envContext = getEnvContext(properties);
-            this.routeOffer = getRouteOffer(properties);
-            this.commonServiceVersion = getCommonServiceVersion(properties);
-            this.partner = getPartner(properties);
-        } catch (final FileNotFoundException e) {
-            LOG.error("dme2.properties file could not be found at path: {}", dme2Path, e);
-        } catch (final IOException e) {
-            LOG.error("fatal error reading dme2.properties at path: {}", dme2Path, e);
-        }
-    }
+	/**
+	 * Instantiates the properties provider, which involves loading the appropriate
+	 * properties for dme2.
+	 *
+	 * @param dme2Path
+	 *            location of the dme2.properties file
+	 */
+	@VisibleForTesting
+	Dme2PropertiesProvider(final String dme2FileName) {
+		dme2PropertiesFileResolvers
+				.add(new SdncConfigEnvVarFileResolver("Using property file (1) from environment variable"));
+		dme2PropertiesFileResolvers.add(new CoreDefaultFileResolver("Using property file (2) from default directory"));
 
-    private static Path getDme2Path(final String sdncRootDirectory, final String dme2Filename) {
-        return Paths.get(sdncRootDirectory, dme2Filename);
-    }
+		dme2PropertiesFileResolvers
+				.add(new JREFileResolver("Using property file (3) from JRE argument", Dme2PropertiesProvider.class));
+		dme2PropertiesFileResolvers.add(new KarafRootFileResolver("Using property file (4) from karaf root", this));
 
-    private static Properties getProperties(final String dme2Path) throws IOException {
-        final File dme2File = new File(dme2Path);
-        final Properties properties = new Properties();
-        properties.load(new FileReader(dme2File));
-        return properties;
-    }
+		File dme2File = getDme2File(dme2FileName);
 
-    private String getProxyUrl(final Properties properties) {
-        return properties.getProperty(PROXY_URL_KEY);
-    }
+		init(dme2File);
+	}
 
-    private Optional<String []> getProxyUrls(final Properties properties) {
-        final String proxyUrlsValue = getProxyUrl(properties);
-        if (!Strings.isNullOrEmpty(proxyUrlsValue)) {
-            return Optional.ofNullable(proxyUrlsValue.split(PROXY_URLS_VALUE_SEPARATOR));
-        }
-        return Optional.empty();
-    }
+	private void init(final File dme2Path) {
+		final Properties properties;
+		try {
+			properties = getProperties(dme2Path);
+			this.proxyUrls = getProxyUrls(properties);
+			this.aafUsername = getAafUsername(properties);
+			this.aafPassword = getAafPassword(properties);
+			this.envContext = getEnvContext(properties);
+			this.routeOffer = getRouteOffer(properties);
+			this.commonServiceVersion = getCommonServiceVersion(properties);
+			this.partner = getPartner(properties);
+		} catch (final FileNotFoundException e) {
 
-    public Optional<String []> getProxyUrls() {
-        return this.proxyUrls;
-    }
+			LOG.error("dme2.properties file could not be found at path: {}", dme2Path, e);
+		} catch (final IOException e) {
+			LOG.error("fatal error reading dme2.properties at path: {}", dme2Path, e);
+		}
+	}
 
-    private Optional<String> getAafUsername(final Properties properties) {
-        final String aafUsernameValue = properties.getProperty(AAF_USERNAME_KEY);
-        return Optional.ofNullable(aafUsernameValue);
-    }
+	/**
+	 * Reports the method chosen for properties resolution to the
+	 * <code>Logger</code>.
+	 *
+	 * @param message
+	 *            Some user friendly message
+	 * @param fileOptional
+	 *            The file location of the chosen properties file
+	 * @return the file location of the chosen properties file
+	 */
+	private static File reportSuccess(final String message, final Optional<File> fileOptional) {
+		if (fileOptional.isPresent()) {
+			final File file = fileOptional.get();
+			LOG.info("{} {}", message, file.getPath());
+			return file;
+		}
+		return null;
+	}
 
-    Optional<String> getAafUsername() {
-        return this.aafUsername;
-    }
+	private File getDme2File(final String dme2Filename) {
 
-    private Optional<String> getAafPassword(final Properties properties) {
-        final String aafPassword = properties.getProperty(AAF_PASSWORD_KEY);
-        return Optional.ofNullable(aafPassword);
-    }
+		for (final PropertiesFileResolver dblibPropertiesFileResolver : dme2PropertiesFileResolvers) {
+			final Optional<File> fileOptional = dblibPropertiesFileResolver.resolveFile(dme2Filename);
+			if (fileOptional.isPresent()) {
+				return reportSuccess(dblibPropertiesFileResolver.getSuccessfulResolutionMessage(), fileOptional);
+			}
+		}
+		return (new File(dme2Filename));
+	}
 
-    Optional<String> getAafPassword() {
-        return this.aafPassword;
-    }
+	private static Properties getProperties(final File dme2File) throws IOException {
 
-    private Optional<String> getEnvContext(final Properties properties) {
-        final String envContext = properties.getProperty(ENV_CONTEXT_KEY);
-        return Optional.ofNullable(envContext);
-    }
+		final Properties properties = new Properties();
+		properties.load(new FileReader(dme2File));
+		return properties;
+	}
 
-    Optional<String> getEnvContext() {
-        return this.envContext;
-    }
+	private String getProxyUrl(final Properties properties) {
+		return properties.getProperty(PROXY_URL_KEY);
+	}
 
-    private Optional<String> getRouteOffer(final Properties properties) {
-        final String routeOffer = properties.getProperty(ROUTE_OFFER_KEY);
-        return Optional.ofNullable(routeOffer);
-    }
+	private Optional<String[]> getProxyUrls(final Properties properties) {
+		final String proxyUrlsValue = getProxyUrl(properties);
+		if (!Strings.isNullOrEmpty(proxyUrlsValue)) {
+			return Optional.ofNullable(proxyUrlsValue.split(PROXY_URLS_VALUE_SEPARATOR));
+		}
+		return Optional.empty();
+	}
 
-    Optional<String> getRouteOffer() {
-        return this.routeOffer;
-    }
+	public Optional<String[]> getProxyUrls() {
+		return this.proxyUrls;
+	}
 
-    private Optional<String> getCommonServiceVersion(final Properties properties) {
-        final String commonServiceVersion = properties.getProperty(COMMON_SERVICE_VERSION_KEY);
-        return Optional.ofNullable(commonServiceVersion);
-    }
+	private Optional<String> getAafUsername(final Properties properties) {
+		final String aafUsernameValue = properties.getProperty(AAF_USERNAME_KEY);
+		return Optional.ofNullable(aafUsernameValue);
+	}
 
-    Optional<String> getCommonServiceVersion() {
-        return this.commonServiceVersion;
-    }
+	Optional<String> getAafUsername() {
+		return this.aafUsername;
+	}
 
-    private Optional<String> getPartner(final Properties properties) {
-        final String partner = properties.getProperty(PARTNER_KEY);
-        return Optional.ofNullable(partner);
-    }
+	private Optional<String> getAafPassword(final Properties properties) {
+		final String aafPassword = properties.getProperty(AAF_PASSWORD_KEY);
+		return Optional.ofNullable(aafPassword);
+	}
 
-    Optional<String> getPartner() {
-        return this.partner;
-    }
+	Optional<String> getAafPassword() {
+		return this.aafPassword;
+	}
+
+	private Optional<String> getEnvContext(final Properties properties) {
+		final String envContext = properties.getProperty(ENV_CONTEXT_KEY);
+		return Optional.ofNullable(envContext);
+	}
+
+	Optional<String> getEnvContext() {
+		return this.envContext;
+	}
+
+	private Optional<String> getRouteOffer(final Properties properties) {
+		final String routeOffer = properties.getProperty(ROUTE_OFFER_KEY);
+		return Optional.ofNullable(routeOffer);
+	}
+
+	Optional<String> getRouteOffer() {
+		return this.routeOffer;
+	}
+
+	private Optional<String> getCommonServiceVersion(final Properties properties) {
+		final String commonServiceVersion = properties.getProperty(COMMON_SERVICE_VERSION_KEY);
+		return Optional.ofNullable(commonServiceVersion);
+	}
+
+	Optional<String> getCommonServiceVersion() {
+		return this.commonServiceVersion;
+	}
+
+	private Optional<String> getPartner(final Properties properties) {
+		final String partner = properties.getProperty(PARTNER_KEY);
+		return Optional.ofNullable(partner);
+	}
+
+	Optional<String> getPartner() {
+		return this.partner;
+	}
 }
diff --git a/sliPluginUtils/provider/src/main/resources/dme2.properties b/sliPluginUtils/provider/src/main/resources/dme2.properties
new file mode 100644
index 0000000..3734484
--- /dev/null
+++ b/sliPluginUtils/provider/src/main/resources/dme2.properties
@@ -0,0 +1,7 @@
+aafUserName=user@sample.com
+aafPassword=fake
+envContext=UAT
+routeOffer=UAT
+proxyUrl=http://sample.com:25055,http://sample.com:25055
+commonServiceVersion=1702.0
+partner=
\ No newline at end of file
diff --git a/sliapi/features/ccsdk-sliapi/pom.xml b/sliapi/features/ccsdk-sliapi/pom.xml
new file mode 100644
index 0000000..be4025b
--- /dev/null
+++ b/sliapi/features/ccsdk-sliapi/pom.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>single-feature-parent</artifactId>
+        <version>1.0.1-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.sli.core</groupId>
+    <artifactId>ccsdk-sliapi</artifactId>
+    <version>0.2.1-SNAPSHOT</version>
+    <packaging>feature</packaging>
+
+    <name>ccsdk-sli-core :: sliapi :: ${project.artifactId}</name>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.opendaylight.mdsal.model</groupId>
+                <artifactId>mdsal-model-artifacts</artifactId>
+                <version>0.11.1</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.opendaylight.controller</groupId>
+                <artifactId>mdsal-artifacts</artifactId>
+                <version>1.6.1</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+    <dependencies>
+        <dependency>
+            <groupId>org.opendaylight.controller</groupId>
+            <artifactId>odl-mdsal-broker</artifactId>
+            <type>xml</type>
+            <classifier>features</classifier>
+        </dependency>
+
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>ccsdk-sli</artifactId>
+            <version>${project.version}</version>
+            <type>xml</type>
+            <classifier>features</classifier>
+        </dependency>
+
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>sliapi-provider</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+    </dependencies>
+</project>
diff --git a/sliapi/features/features-sliapi/pom.xml b/sliapi/features/features-sliapi/pom.xml
new file mode 100644
index 0000000..f3481cb
--- /dev/null
+++ b/sliapi/features/features-sliapi/pom.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.onap.ccsdk.parent</groupId>
+		<artifactId>feature-repo-parent</artifactId>
+		<version>1.0.1-SNAPSHOT</version>
+		<relativePath/>
+	</parent>
+
+	<groupId>org.onap.ccsdk.sli.core</groupId>
+	<artifactId>features-sliapi</artifactId>
+	<version>0.2.1-SNAPSHOT</version>
+	<packaging>feature</packaging>
+
+	<name>ccsdk-sli-core :: sliapi :: ${project.artifactId}</name>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>ccsdk-sliapi</artifactId>
+			<version>${project.version}</version>
+			<type>xml</type>
+			<classifier>features</classifier>
+		</dependency>
+
+	</dependencies>
+</project>
diff --git a/sliapi/features/pom.xml b/sliapi/features/pom.xml
index 78bfb89..17fa8fb 100755
--- a/sliapi/features/pom.xml
+++ b/sliapi/features/pom.xml
@@ -1,134 +1,23 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
+
 	<parent>
-		<artifactId>sliapi</artifactId>
-		<groupId>org.onap.ccsdk.sli.core</groupId>
-		<version>0.2.0-SNAPSHOT</version>
+		<groupId>org.onap.ccsdk.parent</groupId>
+		<artifactId>odlparent-lite</artifactId>
+		<version>1.0.1-SNAPSHOT</version>
+		<relativePath/>
 	</parent>
-	<artifactId>sliapi-features</artifactId>
 
-	<packaging>jar</packaging>
+	<groupId>org.onap.ccsdk.sli.core</groupId>
+	<artifactId>sliapi-feature-aggregator</artifactId>
+	<version>0.2.1-SNAPSHOT</version>
+	<packaging>pom</packaging>
 
-	<dependencies>
-		<dependency>
-			<groupId>org.onap.ccsdk.sli.core</groupId>
-			<artifactId>sliapi-model</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.onap.ccsdk.sli.core</groupId>
-			<artifactId>sliapi-provider</artifactId>
-			<classifier>config</classifier>
-			<type>xml</type>
-		</dependency>
-		<dependency>
-			<groupId>org.onap.ccsdk.sli.core</groupId>
-			<artifactId>sliapi-provider</artifactId>
-		</dependency>
+	<name>ccsdk-sli-core :: sliapi :: ${project.artifactId}</name>
 
-		<dependency>
-			<groupId>org.opendaylight.mdsal</groupId>
-			<artifactId>features-mdsal</artifactId>
-			<version>${odl.mdsal.features.version}</version>
-			<classifier>features</classifier>
-			<type>xml</type>
-
-			<scope>runtime</scope>
-		</dependency>
-
-
-
-		<!-- dependency for opendaylight-karaf-empty for use by testing -->
-		<dependency>
-			<groupId>org.opendaylight.odlparent</groupId>
-			<artifactId>opendaylight-karaf-empty</artifactId>
-			<version>${odl.karaf.empty.distro.version}</version>
-			<type>zip</type>
-		</dependency>
-
-
-		<dependency>
-		    <!-- Required for launching the feature tests-->
-			<groupId>org.opendaylight.odlparent</groupId>
-			<artifactId>features-test</artifactId>
-			<scope>test</scope>
-			<version>${odl.commons.opendaylight.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>org.opendaylight.yangtools</groupId>
-			<artifactId>features-yangtools</artifactId>
-			<version>${odl.yangtools.version}</version>
-			<classifier>features</classifier>
-			<type>xml</type>
-			<scope>runtime</scope>
-		</dependency>
-	</dependencies>
-
-	<build>
-		<resources>
-			<resource>
-				<filtering>true</filtering>
-				<directory>src/main/resources</directory>
-			</resource>
-		</resources>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-resources-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>filter</id>
-						<goals>
-							<goal>resources</goal>
-						</goals>
-						<phase>generate-resources</phase>
-					</execution>
-				</executions>
-			</plugin>
-		 <!-- launches the feature test, which validates that your karaf feature can
-			         be installed inside of a karaf container. It doesn't validate that your
-			         functionality works correctly, just that you have all of the dependent
-			         bundles defined correctly.
-			<plugin>
-
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-surefire-plugin</artifactId>
-				<version>2.16</version>
-				<configuration>
-					<systemPropertyVariables>
-						<karaf.distro.groupId>org.opendaylight.odlparent</karaf.distro.groupId>
-						<karaf.distro.artifactId>opendaylight-karaf-empty</karaf.distro.artifactId>
-						<karaf.distro.version>${odl.karaf.empty.distro.version}</karaf.distro.version>
-					</systemPropertyVariables>
-					<dependenciesToScan>
-						<dependency>org.opendaylight.yangtools:features-test</dependency>
-					</dependenciesToScan>
-				</configuration>
-			</plugin>
-			-->
-			<plugin>
-				<groupId>org.codehaus.mojo</groupId>
-				<artifactId>build-helper-maven-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>attach-artifacts</id>
-						<goals>
-							<goal>attach-artifact</goal>
-						</goals>
-						<phase>package</phase>
-						<configuration>
-							<artifacts>
-								<artifact>
-									<file>${project.build.directory}/classes/${features.file}</file>
-									<type>xml</type>
-									<classifier>features</classifier>
-								</artifact>
-							</artifacts>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
+	<modules>
+		<module>features-sliapi</module>
+		<module>ccsdk-sliapi</module>
+	</modules>
 </project>
diff --git a/sliapi/features/src/main/resources/features.xml b/sliapi/features/src/main/resources/features.xml
deleted file mode 100644
index c5df348..0000000
--- a/sliapi/features/src/main/resources/features.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ============LICENSE_START=======================================================
-  ONAP : CCSDK
-  ================================================================================
-  Copyright (C) 2017 AT&T Intellectual Property. 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=========================================================
-  -->
-
-
-<features name="sdnc-sliapi-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
-
-    <repository>mvn:org.opendaylight.mdsal/features-mdsal/${odl.mdsal.features.version}/xml/features</repository>
-
-    <feature name='sdnc-sliapi' description="sdnc-sliapi" version='${project.version}'>
-        <!-- Most applications will have a dependency on the ODL MD-SAL Broker -->
-        <feature version="${odl.mdsal.version}">odl-mdsal-broker</feature>
-        <feature version="${sdnctl.sli.version}">sdnc-sli</feature>
-        <bundle>mvn:org.onap.ccsdk.sli.core/sliapi-model/${project.version}</bundle>
-        <bundle>mvn:org.onap.ccsdk.sli.core/sliapi-provider/${project.version}</bundle>
-        <configfile finalname="etc/opendaylight/karaf/200-sliapiprovider.xml">mvn:org.onap.ccsdk.sli.core/sliapi-provider/${project.version}/xml/config</configfile>
-    </feature>
-
-</features>
diff --git a/sliapi/installer/pom.xml b/sliapi/installer/pom.xml
index cddcf6d..290524e 100755
--- a/sliapi/installer/pom.xml
+++ b/sliapi/installer/pom.xml
@@ -1,18 +1,25 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
+
 	<parent>
-		<artifactId>sliapi</artifactId>
-		<groupId>org.onap.ccsdk.sli.core</groupId>
-		<version>0.2.0-SNAPSHOT</version>
+		<groupId>org.onap.ccsdk.parent</groupId>
+		<artifactId>odlparent-lite</artifactId>
+		<version>1.0.1-SNAPSHOT</version>
+		<relativePath/>
 	</parent>
+
+	<groupId>org.onap.ccsdk.sli.core</groupId>
 	<artifactId>sliapi-installer</artifactId>
+	<version>0.2.1-SNAPSHOT</version>
 	<packaging>pom</packaging>
 
+	<name>ccsdk-sli-core :: sliapi :: ${project.artifactId}</name>
+
 	<properties>
-		<application.name>sdnc-sliapi</application.name>
-		<features.boot>sdnc-sliapi</features.boot>
-		<features.repositories>mvn:org.onap.ccsdk.sli.core/sliapi-features/${project.version}/xml/features</features.repositories>
+		<application.name>ccsdk-sliapi</application.name>
+		<features.boot>${application.name}</features.boot>
+        <features.repositories>mvn:org.onap.ccsdk.sli.core/${features.boot}/${project.version}/xml/features</features.repositories>
 		<include.transitive.dependencies>false</include.transitive.dependencies>
 	</properties>
 
@@ -20,10 +27,10 @@
 
 		<dependency>
 			<groupId>org.onap.ccsdk.sli.core</groupId>
-			<artifactId>sliapi-features</artifactId>
+			<artifactId>${application.name}</artifactId>
 			<version>${project.version}</version>
-			<classifier>features</classifier>
 			<type>xml</type>
+			<classifier>features</classifier>
 			<exclusions>
 				<exclusion>
 					<groupId>*</groupId>
@@ -133,5 +140,4 @@
 
 		</plugins>
 	</build>
-
 </project>
diff --git a/sliapi/installer/src/assembly/assemble_mvnrepo_zip.xml b/sliapi/installer/src/assembly/assemble_mvnrepo_zip.xml
index e22c6f5..5f3e3af 100644
--- a/sliapi/installer/src/assembly/assemble_mvnrepo_zip.xml
+++ b/sliapi/installer/src/assembly/assemble_mvnrepo_zip.xml
@@ -8,9 +8,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.
@@ -44,12 +44,6 @@
 		</fileSet>
 	</fileSets>
 
-	<files>
-		<file>
-			<source>../provider/src/main/resources/initial/${feature-name}-provider.xml</source>
-			<destName>./etc/opendaylight/karaf/200-${feature-name}provider.xml</destName>
-		</file>
 
-	</files>
 
 </assembly>
diff --git a/sliapi/model/pom.xml b/sliapi/model/pom.xml
index 4ea8851..bbdcea0 100755
--- a/sliapi/model/pom.xml
+++ b/sliapi/model/pom.xml
@@ -1,89 +1,29 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
+
 	<parent>
-		<artifactId>sliapi</artifactId>
-		<groupId>org.onap.ccsdk.sli.core</groupId>
-		<version>0.2.0-SNAPSHOT</version>
+		<groupId>org.onap.ccsdk.parent</groupId>
+		<artifactId>binding-parent</artifactId>
+		<version>1.0.1-SNAPSHOT</version>
+		<relativePath/>
 	</parent>
+
+	<groupId>org.onap.ccsdk.sli.core</groupId>
 	<artifactId>sliapi-model</artifactId>
+	<version>0.2.1-SNAPSHOT</version>
 	<packaging>bundle</packaging>
 
-	<build>
+	<name>ccsdk-sli-core :: sliapi :: ${project.artifactId}</name>
 
-		<plugins>
-			<plugin>
-				<groupId>org.apache.felix</groupId>
-				<artifactId>maven-bundle-plugin</artifactId>
-				<extensions>true</extensions>
-				<configuration>
-					<instructions>
-						<Import-Package>*</Import-Package>
-					</instructions>
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>org.opendaylight.yangtools</groupId>
-				<artifactId>yang-maven-plugin</artifactId>
-				<version>${odl.yangtools.yang.maven.plugin.version}</version>
-				<dependencies>
-					<dependency>
-						<groupId>org.opendaylight.mdsal</groupId>
-						<artifactId>maven-sal-api-gen-plugin</artifactId>
-						<version>${odl.sal.api.gen.plugin.version}</version>
-						<type>jar</type>
-					</dependency>
-                    <dependency>
-                        <groupId>org.opendaylight.netconf</groupId>
-                        <artifactId>sal-rest-docgen-maven</artifactId>
-                        <version>${odl.restconf.version}</version>
-                        <type>jar</type>
-                    </dependency>
-				</dependencies>
-				<executions>
-					<execution>
-						<goals>
-							<goal>generate-sources</goal>
-						</goals>
-						<configuration>
-							<yangFilesRootDir>${yang.file.directory}</yangFilesRootDir>
-							<codeGenerators>
-								<generator>
-									<codeGeneratorClass>org.opendaylight.mdsal.binding.maven.api.gen.plugin.CodeGeneratorImpl</codeGeneratorClass>
-									<outputBaseDir>${salGeneratorPath}</outputBaseDir>
-								</generator>
-                                 <generator>
-                                    <codeGeneratorClass>org.opendaylight.netconf.sal.rest.doc.maven.StaticDocGenerator</codeGeneratorClass>
-                                    <outputBaseDir>target/swagger</outputBaseDir>
-                                </generator>
-							</codeGenerators>
-							<inspectDependencies>true</inspectDependencies>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
 	<dependencies>
 		<dependency>
-			<groupId>org.opendaylight.mdsal</groupId>
-			<artifactId>yang-binding</artifactId>
-			<version>${odl.mdsal.yang.binding.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.opendaylight.yangtools</groupId>
-			<artifactId>yang-common</artifactId>
-			<version>${odl.yangtools.version}</version>
-		</dependency>
-		<dependency>
 			<groupId>org.opendaylight.mdsal.model</groupId>
 			<artifactId>ietf-inet-types</artifactId>
-			<version>${odl.ietf-inet-types.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>org.opendaylight.mdsal.model</groupId>
 			<artifactId>ietf-yang-types</artifactId>
-			<version>${odl.ietf-yang-types.version}</version>
 		</dependency>
 	</dependencies>
 </project>
diff --git a/sliapi/pom.xml b/sliapi/pom.xml
index a08d8fc..46057da 100755
--- a/sliapi/pom.xml
+++ b/sliapi/pom.xml
@@ -1,56 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
 
-
 	<parent>
-		<groupId>org.onap.ccsdk.sli.core</groupId>
-		<artifactId>ccsdk-sli-core</artifactId>
-        	<version>0.2.0-SNAPSHOT</version>
+		<groupId>org.onap.ccsdk.parent</groupId>
+		<artifactId>odlparent-lite</artifactId>
+		<version>1.0.1-SNAPSHOT</version>
+		<relativePath/>
 	</parent>
 
-	<packaging>pom</packaging>
 	<groupId>org.onap.ccsdk.sli.core</groupId>
 	<artifactId>sliapi</artifactId>
-	<version>0.2.0-SNAPSHOT</version>
+	<version>0.2.1-SNAPSHOT</version>
+	<packaging>pom</packaging>
 
-	<properties>
-		<feature-name>sliapi</feature-name>
-	</properties>
-
-	<dependencyManagement>
-
-		<dependencies>
-
-			<dependency>
-				<groupId>org.onap.ccsdk.sli.core</groupId>
-				<artifactId>sliapi-features</artifactId>
-				<classifier>features</classifier>
-				<type>xml</type>
-				<version>${project.version}</version>
-			</dependency>
-
-			<dependency>
-				<groupId>org.onap.ccsdk.sli.core</groupId>
-				<artifactId>sliapi-model</artifactId>
-				<version>${project.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.onap.ccsdk.sli.core</groupId>
-				<artifactId>sliapi-provider</artifactId>
-				<version>${project.version}</version>
-				<classifier>config</classifier>
-				<type>xml</type>
-			</dependency>
-			<dependency>
-				<groupId>org.onap.ccsdk.sli.core</groupId>
-				<artifactId>sliapi-provider</artifactId>
-				<version>${project.version}</version>
-			</dependency>
-		</dependencies>
-
-
-	</dependencyManagement>
+	<name>ccsdk-sli-core :: sliapi</name>
 
 	<modules>
 		<module>model</module>
@@ -58,4 +22,8 @@
 		<module>provider</module>
 		<module>installer</module>
 	</modules>
+
+	<properties>
+		<feature-name>sliapi</feature-name>
+	</properties>
 </project>
diff --git a/sliapi/provider/pom.xml b/sliapi/provider/pom.xml
index 5db9671..cb4dfc8 100755
--- a/sliapi/provider/pom.xml
+++ b/sliapi/provider/pom.xml
@@ -1,125 +1,53 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
+
 	<parent>
-		<artifactId>sliapi</artifactId>
-		<groupId>org.onap.ccsdk.sli.core</groupId>
-		<version>0.2.0-SNAPSHOT</version>
+		<groupId>org.onap.ccsdk.parent</groupId>
+		<artifactId>binding-parent</artifactId>
+		<version>1.0.1-SNAPSHOT</version>
+		<relativePath/>
 	</parent>
+
+	<groupId>org.onap.ccsdk.sli.core</groupId>
 	<artifactId>sliapi-provider</artifactId>
+	<version>0.2.1-SNAPSHOT</version>
 	<packaging>bundle</packaging>
 
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.felix</groupId>
-				<artifactId>maven-bundle-plugin</artifactId>
-				<extensions>true</extensions>
-				<configuration>
-					<instructions>
-						<Export-Package>org.opendaylight.controller.config.yang.config.sliapi.impl</Export-Package>
-						<Import-Package>*</Import-Package>
-					</instructions>
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>org.opendaylight.yangtools</groupId>
-				<artifactId>yang-maven-plugin</artifactId>
-				<version>${odl.yangtools.yang.maven.plugin.version}</version>
-				<executions>
-					<execution>
-						<id>config</id>
-						<goals>
-							<goal>generate-sources</goal>
-						</goals>
-						<configuration>
-							<codeGenerators>
-								<generator>
-									<codeGeneratorClass>org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator</codeGeneratorClass>
-									<outputBaseDir>${jmxGeneratorPath}</outputBaseDir>
-									<additionalConfiguration>
-										<namespaceToPackage1>urn:opendaylight:params:xml:ns:yang:controller==org.opendaylight.controller.config.yang</namespaceToPackage1>
-									</additionalConfiguration>
-								</generator>
-								<generator>
-									<!--
-									<codeGeneratorClass>org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl</codeGeneratorClass>
-									-->
-									<codeGeneratorClass>org.opendaylight.mdsal.binding.maven.api.gen.plugin.CodeGeneratorImpl</codeGeneratorClass>
-									<outputBaseDir>${salGeneratorPath}</outputBaseDir>
-								</generator>
-							</codeGenerators>
-							<inspectDependencies>true</inspectDependencies>
-						</configuration>
-					</execution>
-				</executions>
-				<dependencies>
-					<dependency>
-						<groupId>org.opendaylight.mdsal</groupId>
-						<artifactId>maven-sal-api-gen-plugin</artifactId>
-						<version>${odl.sal.api.gen.plugin.version}</version>
-						<type>jar</type>
-					</dependency>
-					<dependency>
-						<groupId>org.opendaylight.controller</groupId>
-						<artifactId>yang-jmx-generator-plugin</artifactId>
-						<version>${odl.yang.jmx.generator.version}</version>
-					</dependency>
-				</dependencies>
-			</plugin>
-			<plugin>
-				<groupId>org.codehaus.mojo</groupId>
-				<artifactId>build-helper-maven-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>attach-artifacts</id>
-						<goals>
-							<goal>attach-artifact</goal>
-						</goals>
-						<phase>package</phase>
-						<configuration>
-							<artifacts>
-								<artifact>
-									<file>${project.build.directory}/classes/initial/sliapi-provider.xml</file>
-									<type>xml</type>
-									<classifier>config</classifier>
-								</artifact>
-							</artifacts>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
+	<name>ccsdk-sli-core :: sliapi :: ${project.artifactId}</name>
 
+	<dependencyManagement>
+		<dependencies>
+			<dependency>
+				<groupId>org.opendaylight.controller</groupId>
+				<artifactId>mdsal-artifacts</artifactId>
+				<version>1.6.1</version>
+				<type>pom</type>
+				<scope>import</scope>
+			</dependency>
+		</dependencies>
+	</dependencyManagement>
 	<dependencies>
 		<dependency>
 			<groupId>org.onap.ccsdk.sli.core</groupId>
 			<artifactId>sliapi-model</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.opendaylight.controller</groupId>
-			<artifactId>config-api</artifactId>
-			<version>${odl.controller.config.api.version}</version>
+			<version>${project.version}</version>
 		</dependency>
 
 
 		<dependency>
 			<groupId>org.opendaylight.controller</groupId>
 			<artifactId>sal-binding-config</artifactId>
-			<version>${odl.mdsal.version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>org.opendaylight.controller</groupId>
 			<artifactId>sal-binding-api</artifactId>
-			<version>${odl.mdsal.version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>org.opendaylight.controller</groupId>
 			<artifactId>sal-common-util</artifactId>
-			<version>${odl.mdsal.version}</version>
 		</dependency>
 
 
@@ -136,12 +64,10 @@
 		<dependency>
 			<groupId>org.opendaylight.controller</groupId>
 			<artifactId>sal-core-api</artifactId>
-			<version>${odl.mdsal.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>org.opendaylight.yangtools</groupId>
 			<artifactId>yang-data-impl</artifactId>
-			<version>${odl.yangtools.version}</version>
 		</dependency>
 	</dependencies>
 </project>
diff --git a/sliapi/provider/src/main/java/org/onap/ccsdk/sli/core/sliapi/sliapiProvider.java b/sliapi/provider/src/main/java/org/onap/ccsdk/sli/core/sliapi/sliapiProvider.java
index 82e6600..c3ad4ed 100644
--- a/sliapi/provider/src/main/java/org/onap/ccsdk/sli/core/sliapi/sliapiProvider.java
+++ b/sliapi/provider/src/main/java/org/onap/ccsdk/sli/core/sliapi/sliapiProvider.java
@@ -31,6 +31,7 @@
 import java.util.concurrent.Future;
 import org.onap.ccsdk.sli.core.sli.provider.SvcLogicService;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
@@ -118,7 +119,7 @@
 
     protected DataBroker dataBroker;
     protected DOMDataBroker domDataBroker;
-    protected NotificationProviderService notificationService;
+    protected NotificationPublishService notificationService;
     protected RpcProviderRegistry rpcRegistry;
 
 	protected BindingAwareBroker.RpcRegistration<SLIAPIService> rpcRegistration;
@@ -142,16 +143,24 @@
 	}
 
 
-    public sliapiProvider() {
+    public sliapiProvider(
+			DataBroker dataBroker,
+			NotificationPublishService notificationPublishService,
+			RpcProviderRegistry rpcProviderRegistry) {
         this.LOG.info( "Creating provider for " + appName );
+        this.dataBroker = dataBroker;
+        this.notificationService = notificationPublishService;
+        this.rpcRegistry = rpcProviderRegistry;
+        initialize();
     }
 
+
+
     public void initialize(){
         LOG.info( "Initializing provider for " + appName );
         //initialization code goes here.
         sdncStatusFile = System.getenv(SDNC_STATUS_FILE);
         LOG.info( "SDNC STATUS FILE = " + sdncStatusFile );
-		rpcRegistration = rpcRegistry.addRpcImplementation(SLIAPIService.class, this);
         LOG.info( "Initialization complete for " + appName );
     }
 
@@ -179,7 +188,7 @@
     }
 
     public void setNotificationService(
-            NotificationProviderService notificationService) {
+            NotificationPublishService notificationService) {
         this.notificationService = notificationService;
         if( LOG.isDebugEnabled() ){
             LOG.debug( "Notification Service set to " + (notificationService==null?"null":"non-null") + "." );
diff --git a/sliapi/provider/src/main/java/org/opendaylight/yang/gen/v1/org/onap/ccsdk/sli/core/sliapi/provider/impl/rev140523/SliapiProviderModule.java b/sliapi/provider/src/main/java/org/opendaylight/yang/gen/v1/org/onap/ccsdk/sli/core/sliapi/provider/impl/rev140523/SliapiProviderModule.java
deleted file mode 100644
index e7444e3..0000000
--- a/sliapi/provider/src/main/java/org/opendaylight/yang/gen/v1/org/onap/ccsdk/sli/core/sliapi/provider/impl/rev140523/SliapiProviderModule.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP : CCSDK
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. 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.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.provider.impl.rev140523;
-
-import org.onap.ccsdk.sli.core.sliapi.sliapiProvider;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class SliapiProviderModule extends org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.provider.impl.rev140523.AbstractSliapiProviderModule {
-    private final Logger LOG = LoggerFactory.getLogger( SliapiProviderModule.class );
-
-	public SliapiProviderModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
-        super(identifier, dependencyResolver);
-    }
-
-    public SliapiProviderModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.provider.impl.rev140523.SliapiProviderModule oldModule, java.lang.AutoCloseable oldInstance) {
-        super(identifier, dependencyResolver, oldModule, oldInstance);
-    }
-
-    @Override
-    public void customValidation() {
-        // add custom validation form module attributes here.
-    }
-
-    @Override
-    public java.lang.AutoCloseable createInstance() {
-
-    	LOG.info("Calling SliapiProviderModule.createInstance");
-        final sliapiProvider provider = new sliapiProvider();
-        provider.setDataBroker( getDataBrokerDependency() );
-        provider.setNotificationService( getNotificationServiceDependency() );
-        provider.setRpcRegistry( getRpcRegistryDependency() );
-        provider.initialize();
-        return new AutoCloseable() {
-
-           @Override
-           public void close() throws Exception {
-               //TODO: CLOSE ANY REGISTRATION OBJECTS CREATED USING ABOVE BROKER/NOTIFICATION
-               //SERVIE/RPC REGISTRY
-               provider.close();
-           }
-       };
-    }
-
-}
diff --git a/sliapi/provider/src/main/java/org/opendaylight/yang/gen/v1/org/onap/ccsdk/sli/core/sliapi/provider/impl/rev140523/SliapiProviderModuleFactory.java b/sliapi/provider/src/main/java/org/opendaylight/yang/gen/v1/org/onap/ccsdk/sli/core/sliapi/provider/impl/rev140523/SliapiProviderModuleFactory.java
deleted file mode 100644
index 6454d17..0000000
--- a/sliapi/provider/src/main/java/org/opendaylight/yang/gen/v1/org/onap/ccsdk/sli/core/sliapi/provider/impl/rev140523/SliapiProviderModuleFactory.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP : CCSDK
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. 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=========================================================
- */
-
-/*
-* Generated file
-*
-* Generated from: yang module name: sliapi-provider-impl yang module local name: sliapi-provider-impl
-* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
-* Generated at: Thu Aug 03 16:10:18 EDT 2017
-*
-* Do not modify this file unless it is present under src/main directory
-*/
-package org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.provider.impl.rev140523;
-public class SliapiProviderModuleFactory extends org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.provider.impl.rev140523.AbstractSliapiProviderModuleFactory {
-
-}
diff --git a/sliapi/provider/src/main/resources/initial/sliapi-provider.xml b/sliapi/provider/src/main/resources/initial/sliapi-provider.xml
deleted file mode 100644
index 47d31d0..0000000
--- a/sliapi/provider/src/main/resources/initial/sliapi-provider.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ============LICENSE_START=======================================================
-  ONAP : CCSDK
-  ================================================================================
-  Copyright (C) 2017 AT&T Intellectual Property. 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=========================================================
-  -->
-
-<!-- vi: set et smarttab sw=4 tabstop=4: -->
-<snapshot>
-    <configuration>
-        <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
-            <modules xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
-                <module>
-
-                    <!-- This xmlns:prefix should match the namespace in the *-provider-impl.yang file
-                         The prefix: inside type should match the prefix of the yang file. -->
-                    <type xmlns:prefix="org:onap:ccsdk:sli:core:sliapi:provider:impl">
-                        prefix:sliapi-provider-impl
-                    </type>
-                    <name>sliapi-provider-impl</name>
-
-                    <!--  The following sections contain bindings to services defined in the
-                          *-provider-impl yang file. For example the rpc-registry is required
-                          because we have a dependency (or augmentation) named "rpc-registry"
-                          and which binds to the md-sa-binding-registry. If you remove those
-                          dependencies from the yang file then you can remove them from here. -->
-                    <rpc-registry>
-                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-rpc-registry</type>
-                        <name>binding-rpc-broker</name>
-                    </rpc-registry>
-
-                    <data-broker>
-                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-async-data-broker</type>
-                        <name>binding-data-broker</name>
-                    </data-broker>
-
-                     <notification-service>
-                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">
-                            binding:binding-notification-service
-                        </type>
-                        <name>binding-notification-broker</name>
-                    </notification-service>
-                </module>
-
-            </modules>
-        </data>
-
-    </configuration>
-
-    <!--  Required capabilities are basically a listing of all modules that need to be imported before
-          our service can be resolved. Capabilities for dependencies defined above are implied which is
-          why we do not have define a required capability for the data broker, for example. -->
-    <required-capabilities>
-        <capability>org:onap:ccsdk:sli:core:sliapi:provider:impl?module=sliapi-provider-impl&amp;revision=2014-05-23</capability>
-    </required-capabilities>
-
-</snapshot>
diff --git a/sliapi/provider/src/main/resources/org/opendaylight/blueprint/sliapi-blueprint.xml b/sliapi/provider/src/main/resources/org/opendaylight/blueprint/sliapi-blueprint.xml
new file mode 100644
index 0000000..761b014
--- /dev/null
+++ b/sliapi/provider/src/main/resources/org/opendaylight/blueprint/sliapi-blueprint.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+           xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"
+           odl:use-default-for-reference-types="true">
+
+    <reference id="svcLogicService"
+               interface="org.onap.ccsdk.sli.core.sli.provider.SvcLogicService" />
+
+
+    <reference id="dataBroker"
+               interface="org.opendaylight.controller.md.sal.binding.api.DataBroker"
+               odl:type="default" />
+
+    <reference id="notificationService"
+               interface="org.opendaylight.controller.md.sal.binding.api.NotificationPublishService"
+               odl:type="default" />
+
+    <reference id="rpcRegistry"
+               interface="org.opendaylight.controller.sal.binding.api.RpcProviderRegistry"
+               odl:type="default" />
+
+    <bean id="provider" class="org.onap.ccsdk.sli.core.sliapi.sliapiProvider">
+        <argument ref="dataBroker" />
+        <argument ref="notificationService" />
+        <argument ref="rpcRegistry" />
+
+    </bean>
+</blueprint>
\ No newline at end of file
diff --git a/utils/features/features-util/pom.xml b/utils/features/features-util/pom.xml
new file mode 100644
index 0000000..9a4cd43
--- /dev/null
+++ b/utils/features/features-util/pom.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>feature-repo-parent</artifactId>
+        <version>1.0.1-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.sli.core</groupId>
+    <artifactId>features-util</artifactId>
+    <version>0.2.1-SNAPSHOT</version>
+    <packaging>feature</packaging>
+
+    <name>ccsdk-sli-core :: utils :: ${project.artifactId}</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>ccsdk-slicore-utils</artifactId>
+            <version>${project.version}</version>
+            <type>xml</type>
+            <classifier>features</classifier>
+        </dependency>
+
+    </dependencies>
+</project>
diff --git a/utils/features/features3-util/pom.xml b/utils/features/features3-util/pom.xml
new file mode 100755
index 0000000..5cc0d89
--- /dev/null
+++ b/utils/features/features3-util/pom.xml
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<artifactId>utils</artifactId>
+		<groupId>org.onap.ccsdk.sli.core</groupId>
+		<version>0.2.0-SNAPSHOT</version>
+	        <relativePath/>
+	</parent>
+	<groupId>org.onap.ccsdk.sli.core</groupId>
+	<artifactId>utils-features</artifactId>
+        <name>ccsdk-sli-core :: utils :: ${project.artifactId}</name>
+	<name>DBLIB Adaptor - Features</name>
+
+	<packaging>jar</packaging>
+
+	<dependencies>
+
+
+		<dependency>
+			<groupId>org.onap.ccsdk.sli.core</groupId>
+			<artifactId>utils-provider</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>commons-lang</groupId>
+			<artifactId>commons-lang</artifactId>
+			<version>${commons.lang.version}</version>
+			<scope>compile</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.opendaylight.mdsal</groupId>
+			<artifactId>features-mdsal</artifactId>
+			<version>${odl.mdsal.features.version}</version>
+			<classifier>features</classifier>
+			<type>xml</type>
+
+			<scope>runtime</scope>
+		</dependency>
+
+		<dependency>
+		    <groupId>org.apache.tomcat</groupId>
+		    <artifactId>tomcat-jdbc</artifactId>
+		    <version>${tomcat-jdbc.version}</version>
+		</dependency>
+
+		<!-- dependency for opendaylight-karaf-empty for use by testing -->
+		<dependency>
+			<groupId>org.opendaylight.odlparent</groupId>
+			<artifactId>opendaylight-karaf-empty</artifactId>
+            <version>${odl.karaf.empty.distro.version}</version>
+			<type>zip</type>
+		</dependency>
+
+		<dependency>
+			<!-- Required for launching the feature tests -->
+			<groupId>org.opendaylight.odlparent</groupId>
+			<artifactId>features-test</artifactId>
+			<version>${odl.commons.opendaylight.version}</version>
+			<scope>test</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.opendaylight.yangtools</groupId>
+			<artifactId>features-yangtools</artifactId>
+			<version>${odl.yangtools.version}</version>
+			<classifier>features</classifier>
+			<type>xml</type>
+			<scope>runtime</scope>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<resources>
+			<resource>
+				<filtering>true</filtering>
+				<directory>src/main/resources</directory>
+			</resource>
+		</resources>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-resources-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>filter</id>
+						<goals>
+							<goal>resources</goal>
+						</goals>
+						<phase>generate-resources</phase>
+					</execution>
+				</executions>
+			</plugin>
+					<!-- launches the feature test, which validates that your karaf feature
+					can be installed inside of a karaf container. It doesn't validate that your
+					functionality works correctly, just that you have all of the dependent bundles
+					defined correctly.
+			<plugin>
+
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<version>2.16</version>
+				<configuration>
+					<systemPropertyVariables>
+						<karaf.distro.groupId>org.opendaylight.odlparent</karaf.distro.groupId>
+						<karaf.distro.artifactId>opendaylight-karaf-empty</karaf.distro.artifactId>
+						<karaf.distro.version>${odl.karaf.empty.distro.version}</karaf.distro.version>
+					</systemPropertyVariables>
+					<dependenciesToScan>
+						<dependency>org.opendaylight.yangtools:features-test</dependency>
+					</dependenciesToScan>
+				</configuration>
+			</plugin>
+			-->
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>build-helper-maven-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>attach-artifacts</id>
+						<goals>
+							<goal>attach-artifact</goal>
+						</goals>
+						<phase>package</phase>
+						<configuration>
+							<artifacts>
+								<artifact>
+									<file>${project.build.directory}/classes/${features.file}</file>
+									<type>xml</type>
+									<classifier>features</classifier>
+								</artifact>
+							</artifacts>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+</project>
diff --git a/utils/features/src/main/resources/features.xml b/utils/features/features3-util/src/main/resources/features.xml
similarity index 100%
rename from utils/features/src/main/resources/features.xml
rename to utils/features/features3-util/src/main/resources/features.xml
diff --git a/utils/features/pom.xml b/utils/features/pom.xml
index be6227d..8bc1cd8 100755
--- a/utils/features/pom.xml
+++ b/utils/features/pom.xml
@@ -1,138 +1,22 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<artifactId>utils</artifactId>
-		<groupId>org.onap.ccsdk.sli.core</groupId>
-		<version>0.2.0-SNAPSHOT</version>
-	</parent>
-	<artifactId>utils-features</artifactId>
-	<name>DBLIB Adaptor - Features</name>
+    <modelVersion>4.0.0</modelVersion>
 
-	<packaging>jar</packaging>
+    <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>odlparent-lite</artifactId>
+        <version>1.0.1-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
 
-	<dependencies>
+    <groupId>org.onap.ccsdk.sli.core</groupId>
+    <artifactId>utils-features-aggregator</artifactId>
+    <packaging>pom</packaging>
 
+    <name>ccsdk-sli-core :: utils :: ${project.artifactId}</name>
 
-		<dependency>
-			<groupId>org.onap.ccsdk.sli.core</groupId>
-			<artifactId>utils-provider</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>commons-lang</groupId>
-			<artifactId>commons-lang</artifactId>
-			<version>${commons.lang.version}</version>
-			<scope>compile</scope>
-		</dependency>
-
-		<dependency>
-			<groupId>org.opendaylight.mdsal</groupId>
-			<artifactId>features-mdsal</artifactId>
-			<version>${odl.mdsal.features.version}</version>
-			<classifier>features</classifier>
-			<type>xml</type>
-
-			<scope>runtime</scope>
-		</dependency>
-
-		<dependency>
-		    <groupId>org.apache.tomcat</groupId>
-		    <artifactId>tomcat-jdbc</artifactId>
-		    <version>${tomcat-jdbc.version}</version>
-		</dependency>
-
-		<!-- dependency for opendaylight-karaf-empty for use by testing -->
-		<dependency>
-			<groupId>org.opendaylight.odlparent</groupId>
-			<artifactId>opendaylight-karaf-empty</artifactId>
-            <version>${odl.karaf.empty.distro.version}</version>
-			<type>zip</type>
-		</dependency>
-
-		<dependency>
-			<!-- Required for launching the feature tests -->
-			<groupId>org.opendaylight.odlparent</groupId>
-			<artifactId>features-test</artifactId>
-			<version>${odl.commons.opendaylight.version}</version>
-			<scope>test</scope>
-		</dependency>
-
-		<dependency>
-			<groupId>org.opendaylight.yangtools</groupId>
-			<artifactId>features-yangtools</artifactId>
-			<version>${odl.yangtools.version}</version>
-			<classifier>features</classifier>
-			<type>xml</type>
-			<scope>runtime</scope>
-		</dependency>
-	</dependencies>
-
-	<build>
-		<resources>
-			<resource>
-				<filtering>true</filtering>
-				<directory>src/main/resources</directory>
-			</resource>
-		</resources>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-resources-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>filter</id>
-						<goals>
-							<goal>resources</goal>
-						</goals>
-						<phase>generate-resources</phase>
-					</execution>
-				</executions>
-			</plugin>
-					<!-- launches the feature test, which validates that your karaf feature
-					can be installed inside of a karaf container. It doesn't validate that your
-					functionality works correctly, just that you have all of the dependent bundles
-					defined correctly.
-			<plugin>
-
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-surefire-plugin</artifactId>
-				<version>2.16</version>
-				<configuration>
-					<systemPropertyVariables>
-						<karaf.distro.groupId>org.opendaylight.odlparent</karaf.distro.groupId>
-						<karaf.distro.artifactId>opendaylight-karaf-empty</karaf.distro.artifactId>
-						<karaf.distro.version>${odl.karaf.empty.distro.version}</karaf.distro.version>
-					</systemPropertyVariables>
-					<dependenciesToScan>
-						<dependency>org.opendaylight.yangtools:features-test</dependency>
-					</dependenciesToScan>
-				</configuration>
-			</plugin>
-			-->
-			<plugin>
-				<groupId>org.codehaus.mojo</groupId>
-				<artifactId>build-helper-maven-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>attach-artifacts</id>
-						<goals>
-							<goal>attach-artifact</goal>
-						</goals>
-						<phase>package</phase>
-						<configuration>
-							<artifacts>
-								<artifact>
-									<file>${project.build.directory}/classes/${features.file}</file>
-									<type>xml</type>
-									<classifier>features</classifier>
-								</artifact>
-							</artifacts>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
+    <modules>
+        <module>features-util</module>
+        <module>sdnc-slicore-utils</module>
+    </modules>
 </project>
diff --git a/utils/features/sdnc-slicore-utils/pom.xml b/utils/features/sdnc-slicore-utils/pom.xml
new file mode 100644
index 0000000..85c81ff
--- /dev/null
+++ b/utils/features/sdnc-slicore-utils/pom.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>single-feature-parent</artifactId>
+        <version>1.0.1-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.sli.core</groupId>
+    <artifactId>ccsdk-slicore-utils</artifactId>
+    <version>0.2.1-SNAPSHOT</version>
+    <packaging>feature</packaging>
+
+    <name>ccsdk-sli-core :: utils :: ${project.artifactId}</name>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.opendaylight.mdsal.model</groupId>
+                <artifactId>mdsal-model-artifacts</artifactId>
+                <version>0.11.1</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.opendaylight.controller</groupId>
+                <artifactId>mdsal-artifacts</artifactId>
+                <version>1.6.1</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+    <dependencies>
+        <dependency>
+            <groupId>org.opendaylight.controller</groupId>
+            <artifactId>odl-mdsal-broker</artifactId>
+            <type>xml</type>
+            <classifier>features</classifier>
+        </dependency>
+
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>utils-provider</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+    </dependencies>
+</project>
diff --git a/utils/installer/pom.xml b/utils/installer/pom.xml
index df7fc0d..c19ac8c 100755
--- a/utils/installer/pom.xml
+++ b/utils/installer/pom.xml
@@ -1,19 +1,25 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
+
     <parent>
-        <artifactId>utils</artifactId>
-        <groupId>org.onap.ccsdk.sli.core</groupId>
-        <version>0.2.0-SNAPSHOT</version>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>odlparent-lite</artifactId>
+        <version>1.0.1-SNAPSHOT</version>
+        <relativePath/>
     </parent>
+
+    <groupId>org.onap.ccsdk.sli.core</groupId>
     <artifactId>utils-installer</artifactId>
-    <name>SLI core utils - Karaf  Installer</name>
+    <version>0.2.1-SNAPSHOT</version>
     <packaging>pom</packaging>
 
+    <name>ccsdk-sli-core :: utils :: ${project.artifactId}</name>
+
     <properties>
-        <application.name>sdnc-slicore-utils</application.name>
-        <features.boot>sdnc-slicore-utils</features.boot>
-        <features.repositories>mvn:org.onap.ccsdk.sli.core/utils-features/${project.version}/xml/features</features.repositories>
+        <application.name>ccsdk-slicore-utils</application.name>
+        <features.boot>${application.name}</features.boot>
+        <features.repositories>mvn:org.onap.ccsdk.sli.core/${features.boot}/${project.version}/xml/features</features.repositories>
         <include.transitive.dependencies>false</include.transitive.dependencies>
     </properties>
 
@@ -21,10 +27,10 @@
 
         <dependency>
             <groupId>org.onap.ccsdk.sli.core</groupId>
-            <artifactId>utils-features</artifactId>
+            <artifactId>${application.name}</artifactId>
             <version>${project.version}</version>
-            <classifier>features</classifier>
             <type>xml</type>
+            <classifier>features</classifier>
             <exclusions>
                 <exclusion>
                     <groupId>*</groupId>
@@ -134,5 +140,4 @@
 
         </plugins>
     </build>
-
 </project>
diff --git a/utils/pom.xml b/utils/pom.xml
index 17a0f6b..cd342f7 100755
--- a/utils/pom.xml
+++ b/utils/pom.xml
@@ -1,77 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <parent>
-        <groupId>org.onap.ccsdk.sli.core</groupId>
-        <artifactId>ccsdk-sli-core</artifactId>
-        <version>0.2.0-SNAPSHOT</version>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+   <modelVersion>4.0.0</modelVersion>
+
+   <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>odlparent-lite</artifactId>
+        <version>1.0.1-SNAPSHOT</version>
+        <relativePath/>
     </parent>
 
+   <groupId>org.onap.ccsdk.sli.core</groupId>
+   <artifactId>utils</artifactId>
+   <version>0.2.1-SNAPSHOT</version>
+   <packaging>pom</packaging>
 
-    <modelVersion>4.0.0</modelVersion>
-    <packaging>pom</packaging>
-    <groupId>org.onap.ccsdk.sli.core</groupId>
-    <artifactId>utils</artifactId>
-
-
-    <name>SLI Utils</name>
-    <description>Utilities used across sli-core</description>
-
-    <version>0.2.0-SNAPSHOT</version>
-
-    <build>
-
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-compiler-plugin</artifactId>
-                    <version>${maven.compile.plugin.version}</version>
-                    <configuration>
-                        <source>${java.version.source}</source>
-                        <target>${java.version.target}</target>
-                    </configuration>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-javadoc-plugin</artifactId>
-                    <version>2.10</version>
-
-                    <executions>
-                        <execution>
-                            <id>aggregate</id>
-                            <goals>
-                                <goal>aggregate</goal>
-                            </goals>
-                            <phase>site</phase>
-
-                        </execution>
-                    </executions>
-                </plugin>
-                <plugin>
-                    <artifactId>maven-source-plugin</artifactId>
-                    <version>2.1.1</version>
-                    <executions>
-                        <execution>
-                            <id>bundle-sources</id>
-                            <phase>package</phase>
-                            <goals>
-                                <!-- produce source artifact for main project sources -->
-                                <goal>jar-no-fork</goal>
-
-                                <!-- produce source artifact for project test sources -->
-                                <goal>test-jar-no-fork</goal>
-                            </goals>
-                        </execution>
-                    </executions>
-                </plugin>
-            </plugins>
-
-        </pluginManagement>
-    </build>
-    <organization>
-        <name>AT&amp;T</name>
+   <name>ccsdk-sli-core :: utils</name>
+   <description>Utilities used across sli-core</description>
+   <organization>
+        <name>ONAP</name>
     </organization>
-  <modules>
+
+   <modules>
     <module>provider</module>
     <module>features</module>
     <module>installer</module>
diff --git a/utils/provider/pom.xml b/utils/provider/pom.xml
index b0adc7d..7a4e8c9 100644
--- a/utils/provider/pom.xml
+++ b/utils/provider/pom.xml
@@ -1,21 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
 
     <parent>
-        <groupId>org.onap.ccsdk.sli.core</groupId>
-        <artifactId>utils</artifactId>
-        <version>0.2.0-SNAPSHOT</version>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>binding-parent</artifactId>
+        <version>1.0.1-SNAPSHOT</version>
+        <relativePath/>
     </parent>
 
-    <modelVersion>4.0.0</modelVersion>
-    <packaging>bundle</packaging>
+    <groupId>org.onap.ccsdk.sli.core</groupId>
     <artifactId>utils-provider</artifactId>
-    <name>SLI Core Utilities Package</name>
+    <version>0.2.1-SNAPSHOT</version>
+    <packaging>bundle</packaging>
 
+    <name>ccsdk-sli-core :: utils :: ${project.artifactId}</name>
     <description>
         The SLI Core Utilities Package provides common functionality for setting up SLI connectivity.
     </description>
+    <organization>
+        <name>ONAP</name>
+    </organization>
 
     <dependencies>
         <dependency>
@@ -26,6 +31,7 @@
             <groupId>equinoxSDK381</groupId>
             <artifactId>org.eclipse.osgi</artifactId>
             <version>${equinox.osgi.version}</version>
+            <scope>provided</scope>
         </dependency>
 
         <!-- Testing Dependencies -->
@@ -41,17 +47,4 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <version>${bundle.plugin.version}</version>
-            </plugin>
-        </plugins>
-    </build>
-    <organization>
-        <name>Inocybe Technologies and Others</name>
-    </organization>
 </project>
diff --git a/utils/provider/src/main/java/org/onap/ccsdk/sli/core/utils/JREFileResolver.java b/utils/provider/src/main/java/org/onap/ccsdk/sli/core/utils/JREFileResolver.java
index 8da9b7e..cc164d0 100755
--- a/utils/provider/src/main/java/org/onap/ccsdk/sli/core/utils/JREFileResolver.java
+++ b/utils/provider/src/main/java/org/onap/ccsdk/sli/core/utils/JREFileResolver.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.
@@ -54,9 +54,11 @@
      */
     @Override
     public Optional<File> resolveFile(final String filename) {
+
         final Bundle bundle = FrameworkUtil.getBundle(this.clazz);
         final File dataFile;
 
+
         try {
             if (bundle == null) {
                 return Optional.empty();
@@ -67,6 +69,7 @@
                 return Optional.empty();
             }
 
+
             dataFile = bundle.getDataFile(filename);
             if(dataFile.exists()) {
                 dataFile.delete();
