diff --git a/epsdk-app-onap/pom.xml b/epsdk-app-onap/pom.xml
index bd32fb7..e8622f0 100755
--- a/epsdk-app-onap/pom.xml
+++ b/epsdk-app-onap/pom.xml
@@ -6,7 +6,7 @@
 	<!-- This is the Maven project object model (POM) file for the open-source 
 		SDK web app. This is NOT the Portal - but it is developed and supported by 
 		the Portal team. -->
-	<groupId>org.openecomp.vid</groupId>
+	<groupId>org.onap.vid</groupId>
 	<artifactId>epsdk-app-onap</artifactId>
 	<version>1.1.1-SNAPSHOT</version>
 	<packaging>war</packaging>
diff --git a/epsdk-app-onap/src/main/java/org/openecomp/portalapp/conf/ExternalAppConfig.java b/epsdk-app-onap/src/main/java/org/onap/portalapp/conf/ExternalAppConfig.java
old mode 100755
new mode 100644
similarity index 97%
rename from epsdk-app-onap/src/main/java/org/openecomp/portalapp/conf/ExternalAppConfig.java
rename to epsdk-app-onap/src/main/java/org/onap/portalapp/conf/ExternalAppConfig.java
index f713cf1..eb11093
--- a/epsdk-app-onap/src/main/java/org/openecomp/portalapp/conf/ExternalAppConfig.java
+++ b/epsdk-app-onap/src/main/java/org/onap/portalapp/conf/ExternalAppConfig.java
@@ -1,249 +1,248 @@
-/*-
- * ================================================================================
- * ECOMP Portal SDK
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property
- * ================================================================================
- * 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.
- * ================================================================================
- */
-package org.openecomp.portalapp.conf;
-
-import java.util.ArrayList;
-import java.util.List;
-import javax.annotation.PostConstruct;
-import javax.sql.DataSource;
-
-//import org.openecomp.portalapp.lm.FusionLicenseManagerImpl;
-import org.openecomp.portalapp.login.LoginStrategyImpl;
-import org.openecomp.portalapp.scheduler.RegistryAdapter;
-import org.openecomp.portalsdk.core.auth.LoginStrategy;
-import org.openecomp.portalsdk.core.conf.AppConfig;
-import org.openecomp.portalsdk.core.conf.Configurable;
-import org.openecomp.portalsdk.core.lm.FusionLicenseManager;
-import org.openecomp.portalsdk.core.lm.FusionLicenseManagerUtils;
-//import org.openecomp.portalsdk.core.lm.LicenseableClassImpl;
-import org.openecomp.portalsdk.core.objectcache.AbstractCacheManager;
-import org.openecomp.portalsdk.core.service.DataAccessService;
-import org.openecomp.portalsdk.core.util.CacheManager;
-import org.openecomp.portalsdk.core.util.SystemProperties;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-import org.springframework.context.annotation.Profile;
-import org.springframework.context.annotation.PropertySource;
-import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
-import org.springframework.core.io.Resource;
-import org.springframework.jdbc.datasource.init.DataSourceInitializer;
-import org.springframework.jdbc.datasource.init.DatabasePopulator;
-import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
-import org.springframework.scheduling.annotation.EnableAsync;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.scheduling.quartz.SchedulerFactoryBean;
-import org.springframework.web.servlet.ViewResolver;
-import org.springframework.web.servlet.config.annotation.EnableWebMvc;
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
-import org.openecomp.portalsdk.core.service.DataAccessService;
-import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
-/**
- * ECOMP Portal SDK sample application. ECOMP Portal SDK core AppConfig class to
- * reuse interceptors, view resolvers and other features defined there.
- */
-@Configuration
-@EnableWebMvc
-@ComponentScan(basePackages = "org.openecomp")
-@PropertySource(value = { "${container.classpath:}/WEB-INF/conf/app/test.properties" }, ignoreResourceNotFound = true)
-@Profile("src")
-@EnableAsync
-@EnableScheduling
-public class ExternalAppConfig extends AppConfig implements Configurable {
-
-	private RegistryAdapter schedulerRegistryAdapter;
-	/** The Constant LOG. */
-	private static final EELFLoggerDelegate LOG = EELFLoggerDelegate.getLogger(ExternalAppConfig.class);
-
-	/** The vid schema script. */
-	@Value("classpath:vid-schema.sql")
-	private Resource vidSchemaScript;
-
-	/** The vid data script. */
-	@Value("classpath:vid-data.sql")
-	private Resource vidDataScript;
-	
-	/**
-	 * The Class InnerConfiguration.
-	 */
-	@Configuration
-	@Import(SystemProperties.class)
-	static class InnerConfiguration {
-	}
-
-	/**
-	 * View resolver.
-	 *
-	 * @return the view resolver
-	 * @see org.openecomp.portalsdk.core.conf.AppConfig#viewResolver()
-	 */
-	public ViewResolver viewResolver() {
-		return super.viewResolver();
-	}
-
-	/**
-	 * @see org.openecomp.portalsdk.core.conf.AppConfig#addResourceHandlers(ResourceHandlerRegistry)
-	 * 
-	 * @param registry
-	 */
-	public void addResourceHandlers(ResourceHandlerRegistry registry) {
-		super.addResourceHandlers(registry);
-	}
-
-	/**
-	 * @see org.openecomp.portalsdk.core.conf.AppConfig#dataAccessService()
-	 */
-	public DataAccessService dataAccessService() {
-		// Echo the JDBC URL to assist developers when starting the app.
-		System.out.println("ExternalAppConfig: " + SystemProperties.DB_CONNECTIONURL + " is "
-				+ SystemProperties.getProperty(SystemProperties.DB_CONNECTIONURL));
-		return super.dataAccessService();
-	}
-
-	/**
-	 * Creates a new list with a single entry that is the external app
-	 * definitions.xml path.
-	 * 
-	 * @return List of String, size 1
-	 */
-	public List<String> addTileDefinitions() {
-		List<String> definitions = new ArrayList<String>();
-		definitions.add("/WEB-INF/defs/definitions.xml");
-		return definitions;
-	}
-
-	/**
-	 * Adds request interceptors to the specified registry by calling
-	 * {@link AppConfig#addInterceptors(InterceptorRegistry)}, but excludes
-	 * certain paths from the session timeout interceptor.
-	 */
-	@Override
-	public void addInterceptors(InterceptorRegistry registry) {
-		super.setExcludeUrlPathsForSessionTimeout("/login_external", "*/login_external.htm", "login", "/login.htm",
-				"/api*", "/single_signon.htm", "/single_signon");
-		super.addInterceptors(registry);
-	}
-
-	/**
-	 * Creates and returns a new instance of a {@link CacheManager} class.
-	 * 
-	 * @return New instance of {@link CacheManager}
-	 */
-	@Bean
-	public AbstractCacheManager cacheManager() {
-		return new CacheManager();
-	}
-
-	
-
-
-       /**
-	 * Creates and returns a new instance of a {@link FusionLicenseManager}.
-	 * 
-	 * @return New instance of {@link FusionLicenseManager}.
-	 */
-//	@Bean
-//	public FusionLicenseManager fusionLicenseManager() {
-//		return new FusionLicenseManagerImpl();
-//	}
-
-	/**
-	 * Creates and returns a new instance of a
-	 * {@link FusionLicenseManagerUtils}.
-	 * 
-	 * @return New instance of {@link FusionLicenseManagerUtils}.
-	 */
-//	@Bean
-//	public FusionLicenseManagerUtils fusionLicenseManagerUtils() {
-//		return new FusionLicenseManagerUtils();
-//	}
-
-	/**
-	 * Creates and returns a new instance of a {@link SchedulerFactoryBean} and
-	 * populates it with triggers.
-	 * 
-	 * @return New instance of {@link SchedulerFactoryBean}
-	 * @throws Exception
-	 */
-	// @Bean // ANNOTATION COMMENTED OUT
-	// APPLICATIONS REQUIRING QUARTZ SHOULD RESTORE ANNOTATION
-	public SchedulerFactoryBean schedulerFactoryBean() throws Exception {
-		SchedulerFactoryBean scheduler = new SchedulerFactoryBean();
-		scheduler.setTriggers(schedulerRegistryAdapter.getTriggers());
-		scheduler.setConfigLocation(appApplicationContext.getResource("WEB-INF/conf/quartz.properties"));
-		scheduler.setDataSource(dataSource());
-		return scheduler;
-	}
-
-	/**
-	 * Data source initializer.
-	 *
-	 * @param dataSource the data source
-	 * @return the data source initializer
-	 */
-	@Bean
-	public DataSourceInitializer dataSourceInitializer(DataSource dataSource) {
-		
-		LOG.info("Initializing VID data source");
-		
-		final DataSourceInitializer initializer = new DataSourceInitializer();
-		initializer.setDataSource(dataSource);
-		initializer.setDatabasePopulator(databasePopulator());
-		return initializer;
-	}
-	
-	/**
-	 * Database populator.
-	 *
-	 * @return the database populator
-	 */
-	public DatabasePopulator databasePopulator() {
-		LOG.info("Populating VID data source");
-		
-		final ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
-		populator.addScript(vidSchemaScript);
-		populator.addScript(vidDataScript);
-		return populator;
-	}
-	
-	/**
-	 * Sets the scheduler registry adapter.
-	 * 
-	 * @param schedulerRegistryAdapter
-	 */
-	@Autowired
-	public void setSchedulerRegistryAdapter(final RegistryAdapter schedulerRegistryAdapter) {
-		this.schedulerRegistryAdapter = schedulerRegistryAdapter;
-	}
-
-	/**
-	 * Creates the LoginStrategy
-	 * @return instance of LoginStrategy
-	 */
-	@Bean
-	public LoginStrategy loginStrategy() {
-
-		return new LoginStrategyImpl();
-	}
-}
+/*-
+ * ================================================================================
+ * ECOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * 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.
+ * ================================================================================
+ */
+package org.onap.portalapp.conf;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.annotation.PostConstruct;
+import javax.sql.DataSource;
+
+import org.onap.portalapp.login.LoginStrategyImpl;
+import org.onap.portalapp.scheduler.RegistryAdapter;
+import org.openecomp.portalsdk.core.auth.LoginStrategy;
+import org.openecomp.portalsdk.core.conf.AppConfig;
+import org.openecomp.portalsdk.core.conf.Configurable;
+import org.openecomp.portalsdk.core.lm.FusionLicenseManager;
+import org.openecomp.portalsdk.core.lm.FusionLicenseManagerUtils;
+//import org.openecomp.portalsdk.core.lm.LicenseableClassImpl;
+import org.openecomp.portalsdk.core.objectcache.AbstractCacheManager;
+import org.openecomp.portalsdk.core.service.DataAccessService;
+import org.openecomp.portalsdk.core.util.CacheManager;
+import org.openecomp.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.context.annotation.Profile;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
+import org.springframework.core.io.Resource;
+import org.springframework.jdbc.datasource.init.DataSourceInitializer;
+import org.springframework.jdbc.datasource.init.DatabasePopulator;
+import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.quartz.SchedulerFactoryBean;
+import org.springframework.web.servlet.ViewResolver;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.openecomp.portalsdk.core.service.DataAccessService;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+/**
+ * ECOMP Portal SDK sample application. ECOMP Portal SDK core AppConfig class to
+ * reuse interceptors, view resolvers and other features defined there.
+ */
+@Configuration
+@EnableWebMvc
+@ComponentScan(basePackages = "org.openecomp")
+@PropertySource(value = { "${container.classpath:}/WEB-INF/conf/app/test.properties" }, ignoreResourceNotFound = true)
+@Profile("src")
+@EnableAsync
+@EnableScheduling
+public class ExternalAppConfig extends AppConfig implements Configurable {
+
+	private RegistryAdapter schedulerRegistryAdapter;
+	/** The Constant LOG. */
+	private static final EELFLoggerDelegate LOG = EELFLoggerDelegate.getLogger(ExternalAppConfig.class);
+
+	/** The vid schema script. */
+	@Value("classpath:vid-schema.sql")
+	private Resource vidSchemaScript;
+
+	/** The vid data script. */
+	@Value("classpath:vid-data.sql")
+	private Resource vidDataScript;
+	
+	/**
+	 * The Class InnerConfiguration.
+	 */
+	@Configuration
+	@Import(SystemProperties.class)
+	static class InnerConfiguration {
+	}
+
+	/**
+	 * View resolver.
+	 *
+	 * @return the view resolver
+	 * @see org.openecomp.portalsdk.core.conf.AppConfig#viewResolver()
+	 */
+	public ViewResolver viewResolver() {
+		return super.viewResolver();
+	}
+
+	/**
+	 * @see org.openecomp.portalsdk.core.conf.AppConfig#addResourceHandlers(ResourceHandlerRegistry)
+	 * 
+	 * @param registry
+	 */
+	public void addResourceHandlers(ResourceHandlerRegistry registry) {
+		super.addResourceHandlers(registry);
+	}
+
+	/**
+	 * @see org.openecomp.portalsdk.core.conf.AppConfig#dataAccessService()
+	 */
+	public DataAccessService dataAccessService() {
+		// Echo the JDBC URL to assist developers when starting the app.
+		System.out.println("ExternalAppConfig: " + SystemProperties.DB_CONNECTIONURL + " is "
+				+ SystemProperties.getProperty(SystemProperties.DB_CONNECTIONURL));
+		return super.dataAccessService();
+	}
+
+	/**
+	 * Creates a new list with a single entry that is the external app
+	 * definitions.xml path.
+	 * 
+	 * @return List of String, size 1
+	 */
+	public List<String> addTileDefinitions() {
+		List<String> definitions = new ArrayList<String>();
+		definitions.add("/WEB-INF/defs/definitions.xml");
+		return definitions;
+	}
+
+	/**
+	 * Adds request interceptors to the specified registry by calling
+	 * {@link AppConfig#addInterceptors(InterceptorRegistry)}, but excludes
+	 * certain paths from the session timeout interceptor.
+	 */
+	@Override
+	public void addInterceptors(InterceptorRegistry registry) {
+		super.setExcludeUrlPathsForSessionTimeout("/login_external", "*/login_external.htm", "login", "/login.htm",
+				"/api*", "/single_signon.htm", "/single_signon");
+		super.addInterceptors(registry);
+	}
+
+	/**
+	 * Creates and returns a new instance of a {@link CacheManager} class.
+	 * 
+	 * @return New instance of {@link CacheManager}
+	 */
+	@Bean
+	public AbstractCacheManager cacheManager() {
+		return new CacheManager();
+	}
+
+	
+
+
+       /**
+	 * Creates and returns a new instance of a {@link FusionLicenseManager}.
+	 * 
+	 * @return New instance of {@link FusionLicenseManager}.
+	 */
+//	@Bean
+//	public FusionLicenseManager fusionLicenseManager() {
+//		return new FusionLicenseManagerImpl();
+//	}
+
+	/**
+	 * Creates and returns a new instance of a
+	 * {@link FusionLicenseManagerUtils}.
+	 * 
+	 * @return New instance of {@link FusionLicenseManagerUtils}.
+	 */
+//	@Bean
+//	public FusionLicenseManagerUtils fusionLicenseManagerUtils() {
+//		return new FusionLicenseManagerUtils();
+//	}
+
+	/**
+	 * Creates and returns a new instance of a {@link SchedulerFactoryBean} and
+	 * populates it with triggers.
+	 * 
+	 * @return New instance of {@link SchedulerFactoryBean}
+	 * @throws Exception
+	 */
+	// @Bean // ANNOTATION COMMENTED OUT
+	// APPLICATIONS REQUIRING QUARTZ SHOULD RESTORE ANNOTATION
+	public SchedulerFactoryBean schedulerFactoryBean() throws Exception {
+		SchedulerFactoryBean scheduler = new SchedulerFactoryBean();
+		scheduler.setTriggers(schedulerRegistryAdapter.getTriggers());
+		scheduler.setConfigLocation(appApplicationContext.getResource("WEB-INF/conf/quartz.properties"));
+		scheduler.setDataSource(dataSource());
+		return scheduler;
+	}
+
+	/**
+	 * Data source initializer.
+	 *
+	 * @param dataSource the data source
+	 * @return the data source initializer
+	 */
+	@Bean
+	public DataSourceInitializer dataSourceInitializer(DataSource dataSource) {
+		
+		LOG.info("Initializing VID data source");
+		
+		final DataSourceInitializer initializer = new DataSourceInitializer();
+		initializer.setDataSource(dataSource);
+		initializer.setDatabasePopulator(databasePopulator());
+		return initializer;
+	}
+	
+	/**
+	 * Database populator.
+	 *
+	 * @return the database populator
+	 */
+	public DatabasePopulator databasePopulator() {
+		LOG.info("Populating VID data source");
+		
+		final ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
+		populator.addScript(vidSchemaScript);
+		populator.addScript(vidDataScript);
+		return populator;
+	}
+	
+	/**
+	 * Sets the scheduler registry adapter.
+	 * 
+	 * @param schedulerRegistryAdapter
+	 */
+	@Autowired
+	public void setSchedulerRegistryAdapter(final RegistryAdapter schedulerRegistryAdapter) {
+		this.schedulerRegistryAdapter = schedulerRegistryAdapter;
+	}
+
+	/**
+	 * Creates the LoginStrategy
+	 * @return instance of LoginStrategy
+	 */
+	@Bean
+	public LoginStrategy loginStrategy() {
+
+		return new LoginStrategyImpl();
+	}
+}
diff --git a/epsdk-app-onap/src/main/java/org/openecomp/portalapp/conf/ExternalAppInitializer.java b/epsdk-app-onap/src/main/java/org/onap/portalapp/conf/ExternalAppInitializer.java
old mode 100755
new mode 100644
similarity index 97%
rename from epsdk-app-onap/src/main/java/org/openecomp/portalapp/conf/ExternalAppInitializer.java
rename to epsdk-app-onap/src/main/java/org/onap/portalapp/conf/ExternalAppInitializer.java
index 6e5354a..347bb51
--- a/epsdk-app-onap/src/main/java/org/openecomp/portalapp/conf/ExternalAppInitializer.java
+++ b/epsdk-app-onap/src/main/java/org/onap/portalapp/conf/ExternalAppInitializer.java
@@ -1,47 +1,47 @@
-/*-
- * ================================================================================
- * ECOMP Portal SDK
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property
- * ================================================================================
- * 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.
- * ================================================================================
- */
-package org.openecomp.portalapp.conf;
-
-import org.openecomp.portalsdk.core.conf.AppInitializer;
-
-public class ExternalAppInitializer extends AppInitializer {
-
-	@Override
-	protected Class<?>[] getRootConfigClasses() {
-		return super.getRootConfigClasses();
-	}
-
-	@Override
-	protected Class<?>[] getServletConfigClasses() {
-		Class<?> appConfigClass = ExternalAppConfig.class;
-		// Show something on stdout to indicate the app is starting.
-		System.out.println("ExternalAppInitializer: servlet configuration class is " + appConfigClass.getName());
-		return new Class[] { appConfigClass };
-	}
-
-	/*
-	 * URL request will direct to the Spring dispatcher for processing
-	 */
-	@Override
-	protected String[] getServletMappings() {
-		return super.getServletMappings();
-	}
-
-}
+/*-
+ * ================================================================================
+ * ECOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * 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.
+ * ================================================================================
+ */
+package org.onap.portalapp.conf;
+
+import org.openecomp.portalsdk.core.conf.AppInitializer;
+
+public class ExternalAppInitializer extends AppInitializer {
+
+	@Override
+	protected Class<?>[] getRootConfigClasses() {
+		return super.getRootConfigClasses();
+	}
+
+	@Override
+	protected Class<?>[] getServletConfigClasses() {
+		Class<?> appConfigClass = ExternalAppConfig.class;
+		// Show something on stdout to indicate the app is starting.
+		System.out.println("ExternalAppInitializer: servlet configuration class is " + appConfigClass.getName());
+		return new Class[] { appConfigClass };
+	}
+
+	/*
+	 * URL request will direct to the Spring dispatcher for processing
+	 */
+	@Override
+	protected String[] getServletMappings() {
+		return super.getServletMappings();
+	}
+
+}
diff --git a/epsdk-app-onap/src/main/java/org/openecomp/portalapp/conf/HibernateMappingLocations.java b/epsdk-app-onap/src/main/java/org/onap/portalapp/conf/HibernateMappingLocations.java
old mode 100755
new mode 100644
similarity index 97%
rename from epsdk-app-onap/src/main/java/org/openecomp/portalapp/conf/HibernateMappingLocations.java
rename to epsdk-app-onap/src/main/java/org/onap/portalapp/conf/HibernateMappingLocations.java
index bc751f7..e0e09d6
--- a/epsdk-app-onap/src/main/java/org/openecomp/portalapp/conf/HibernateMappingLocations.java
+++ b/epsdk-app-onap/src/main/java/org/onap/portalapp/conf/HibernateMappingLocations.java
@@ -1,57 +1,57 @@
-/*-
- * ================================================================================
- * ECOMP Portal SDK
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property
- * ================================================================================
- * 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.
- * ================================================================================
- */
-package org.openecomp.portalapp.conf;
-
-import org.springframework.context.annotation.Profile;
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.core.io.Resource;
-import org.springframework.stereotype.Component;
-
-import org.openecomp.portalsdk.core.conf.HibernateMappingLocatable;
-
-@Component
-@Profile("src")
-public class HibernateMappingLocations implements HibernateMappingLocatable {
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.openecomp.portalsdk.core.conf.HibernateMappingLocatable#
-	 * getMappingLocations()
-	 */
-	@Override
-	public Resource[] getMappingLocations() {
-		return new Resource[] { new ClassPathResource("../fusion/orm/Fusion.hbm.xml"),
-				new ClassPathResource("../fusion/orm/Workflow.hbm.xml"),
-				new ClassPathResource("../fusion/orm/RNoteBookIntegration.hbm.xml") };
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.openecomp.portalsdk.core.conf.HibernateMappingLocatable#
-	 * getPackagesToScan()
-	 */
-	@Override
-	public String[] getPackagesToScan() {
-		return new String[] { "org.openecomp" };
-	}
-
-}
+/*-
+ * ================================================================================
+ * ECOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * 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.
+ * ================================================================================
+ */
+package org.onap.portalapp.conf;
+
+import org.springframework.context.annotation.Profile;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.stereotype.Component;
+
+import org.openecomp.portalsdk.core.conf.HibernateMappingLocatable;
+
+@Component
+@Profile("src")
+public class HibernateMappingLocations implements HibernateMappingLocatable {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.openecomp.portalsdk.core.conf.HibernateMappingLocatable#
+	 * getMappingLocations()
+	 */
+	@Override
+	public Resource[] getMappingLocations() {
+		return new Resource[] { new ClassPathResource("../fusion/orm/Fusion.hbm.xml"),
+				new ClassPathResource("../fusion/orm/Workflow.hbm.xml"),
+				new ClassPathResource("../fusion/orm/RNoteBookIntegration.hbm.xml") };
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.openecomp.portalsdk.core.conf.HibernateMappingLocatable#
+	 * getPackagesToScan()
+	 */
+	@Override
+	public String[] getPackagesToScan() {
+		return new String[] { "org.openecomp" };
+	}
+
+}
diff --git a/epsdk-app-onap/src/main/java/org/openecomp/portalapp/lm/FusionLicenseManagerImpl.java b/epsdk-app-onap/src/main/java/org/onap/portalapp/lm/FusionLicenseManagerImpl.java
old mode 100755
new mode 100644
similarity index 96%
rename from epsdk-app-onap/src/main/java/org/openecomp/portalapp/lm/FusionLicenseManagerImpl.java
rename to epsdk-app-onap/src/main/java/org/onap/portalapp/lm/FusionLicenseManagerImpl.java
index e6a3936..75569d4
--- a/epsdk-app-onap/src/main/java/org/openecomp/portalapp/lm/FusionLicenseManagerImpl.java
+++ b/epsdk-app-onap/src/main/java/org/onap/portalapp/lm/FusionLicenseManagerImpl.java
@@ -1,70 +1,70 @@
-package org.openecomp.portalapp.lm;
-
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-
-import org.openecomp.portalsdk.core.lm.FusionLicenseManager;
-import org.springframework.stereotype.Component;
-
-/*
- *  Please note that this class is not being used; its a dummy stub to have a qualifying bean for the interface.
- */
-
-@Component
-public class FusionLicenseManagerImpl implements FusionLicenseManager {
-
-	@Override
-	public void initKeyStoreParam() {
-		
-	}
-	
-	@Override
-	public void initCipherParam() {
-		
-	}
-
-	@Override	
-	public void initLicenseParam() {
-		
-	}
-
-	@Override
-	public void doInitWork() {
-		
-	}
-
-	@Override
-	public int installLicense() {
-		return 0;
-	}
-
-	@Override
-	public synchronized int verifyLicense(ServletContext context) {
-		return 0;
-	}
-
-	@Override
-	public void generateLicense(Map<String, String> clientInfoMap, List<String> ipAddressList) throws Exception {
-		
-	}
-	
-	@Override
-	public String nvl(String s) {
-		return null;
-	}
-
-	@Override
-	public Date getExpiredDate() {
-		return null;
-	}
-
-	@Override	
-	public void setExpiredDate(Date expiredDate) {
-		
-	}
-
-	
-}
+package org.onap.portalapp.lm;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.ServletContext;
+
+import org.openecomp.portalsdk.core.lm.FusionLicenseManager;
+import org.springframework.stereotype.Component;
+
+/*
+ *  Please note that this class is not being used; its a dummy stub to have a qualifying bean for the interface.
+ */
+
+@Component
+public class FusionLicenseManagerImpl implements FusionLicenseManager {
+
+	@Override
+	public void initKeyStoreParam() {
+		
+	}
+	
+	@Override
+	public void initCipherParam() {
+		
+	}
+
+	@Override	
+	public void initLicenseParam() {
+		
+	}
+
+	@Override
+	public void doInitWork() {
+		
+	}
+
+	@Override
+	public int installLicense() {
+		return 0;
+	}
+
+	@Override
+	public synchronized int verifyLicense(ServletContext context) {
+		return 0;
+	}
+
+	@Override
+	public void generateLicense(Map<String, String> clientInfoMap, List<String> ipAddressList) throws Exception {
+		
+	}
+	
+	@Override
+	public String nvl(String s) {
+		return null;
+	}
+
+	@Override
+	public Date getExpiredDate() {
+		return null;
+	}
+
+	@Override	
+	public void setExpiredDate(Date expiredDate) {
+		
+	}
+
+	
+}
diff --git a/epsdk-app-onap/src/main/java/org/openecomp/portalapp/lm/LicenseableClassImpl.java b/epsdk-app-onap/src/main/java/org/onap/portalapp/lm/LicenseableClassImpl.java
old mode 100755
new mode 100644
similarity index 97%
rename from epsdk-app-onap/src/main/java/org/openecomp/portalapp/lm/LicenseableClassImpl.java
rename to epsdk-app-onap/src/main/java/org/onap/portalapp/lm/LicenseableClassImpl.java
index d688987..856d8e0
--- a/epsdk-app-onap/src/main/java/org/openecomp/portalapp/lm/LicenseableClassImpl.java
+++ b/epsdk-app-onap/src/main/java/org/onap/portalapp/lm/LicenseableClassImpl.java
@@ -1,62 +1,62 @@
-/*-
- * ================================================================================
- * eCOMP Portal SDK
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property
- * ================================================================================
- * 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.
- * ================================================================================
- */
-package org.openecomp.portalapp.lm;
-
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import org.openecomp.portalsdk.core.lm.LicenseableClass;
-
-/*
- *  Please note that this class is not being used; its a dummy stub to have a qualifying bean for the interface.
- */
-
-public class LicenseableClassImpl implements LicenseableClass {
-		  
-	public String getApplicationName() {
-		return "";
-	}
-
-	public InputStream getPublicKeystoreAsInputStream() throws FileNotFoundException {
-	  return null;
-	}
-
-	public String getAlias() {
-		return "";
-	}
-
-	public String getKeyPasswd() {
-		return "";
-	}
-
-	public String getPublicKeystorePassword() {
-		return "";
-	}
-
-	public String getCipherParamPassword() {
-		return "";
-	}
-
-	@SuppressWarnings("rawtypes")
-	public Class getClassToLicense() {
-		return this.getClass();
-	}
-}
-
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * 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.
+ * ================================================================================
+ */
+package org.onap.portalapp.lm;
+
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+
+import org.openecomp.portalsdk.core.lm.LicenseableClass;
+
+/*
+ *  Please note that this class is not being used; its a dummy stub to have a qualifying bean for the interface.
+ */
+
+public class LicenseableClassImpl implements LicenseableClass {
+		  
+	public String getApplicationName() {
+		return "";
+	}
+
+	public InputStream getPublicKeystoreAsInputStream() throws FileNotFoundException {
+	  return null;
+	}
+
+	public String getAlias() {
+		return "";
+	}
+
+	public String getKeyPasswd() {
+		return "";
+	}
+
+	public String getPublicKeystorePassword() {
+		return "";
+	}
+
+	public String getCipherParamPassword() {
+		return "";
+	}
+
+	@SuppressWarnings("rawtypes")
+	public Class getClassToLicense() {
+		return this.getClass();
+	}
+}
+
diff --git a/epsdk-app-onap/src/main/java/org/openecomp/portalapp/login/LoginStrategyImpl.java b/epsdk-app-onap/src/main/java/org/onap/portalapp/login/LoginStrategyImpl.java
old mode 100755
new mode 100644
similarity index 97%
rename from epsdk-app-onap/src/main/java/org/openecomp/portalapp/login/LoginStrategyImpl.java
rename to epsdk-app-onap/src/main/java/org/onap/portalapp/login/LoginStrategyImpl.java
index e004c24..b042022
--- a/epsdk-app-onap/src/main/java/org/openecomp/portalapp/login/LoginStrategyImpl.java
+++ b/epsdk-app-onap/src/main/java/org/onap/portalapp/login/LoginStrategyImpl.java
@@ -1,69 +1,69 @@
-package org.openecomp.portalapp.login;
-
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.openecomp.portalsdk.core.auth.LoginStrategy;
-import org.openecomp.portalsdk.core.onboarding.exception.PortalAPIException;
-import org.openecomp.portalsdk.core.onboarding.util.CipherUtil;
-import org.openecomp.portalsdk.core.onboarding.util.PortalApiConstants;
-import org.openecomp.portalsdk.core.onboarding.util.PortalApiProperties;
-import org.springframework.web.servlet.ModelAndView;
-
-public class LoginStrategyImpl extends LoginStrategy {
-	
-	@Override
-	public ModelAndView doLogin(HttpServletRequest request, HttpServletResponse response) throws Exception {
-		//'login' for opensource is same as 'external' login.
-		return doExternalLogin(request, response);
-	}
-	
-	@Override
-	public String getUserId(HttpServletRequest request) throws PortalAPIException {
-		// Check ECOMP Portal cookie
-		if (!isLoginCookieExist(request))
-			return null;
-
-		String userid = null;
-		try {
-			userid = getUserIdFromCookie(request);
-		} catch (Exception e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-		return userid;	
-	}
-
-	private static String getUserIdFromCookie(HttpServletRequest request) throws Exception {
-		String userId = "";
-		Cookie[] cookies = request.getCookies();
-		Cookie userIdcookie = null;
-		if (cookies != null)
-			for (Cookie cookie : cookies)
-				if (cookie.getName().equals(USER_ID))
-					userIdcookie = cookie;
-		if(userIdcookie!=null){
-			userId = CipherUtil.decrypt(userIdcookie.getValue());
-		}
-		return userId;
-	
-	}
-	
-	private static boolean isLoginCookieExist(HttpServletRequest request) {
-		Cookie ep = getCookie(request, EP_SERVICE);
-		return (ep != null);
-	}
-	
-	private static Cookie getCookie(HttpServletRequest request, String cookieName) {
-		Cookie[] cookies = request.getCookies();
-		if (cookies != null)
-			for (Cookie cookie : cookies)
-				if (cookie.getName().equals(cookieName))
-					return cookie;
-
-		return null;
-	}
-
-	
-}
+package org.onap.portalapp.login;
+
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.openecomp.portalsdk.core.auth.LoginStrategy;
+import org.openecomp.portalsdk.core.onboarding.exception.PortalAPIException;
+import org.openecomp.portalsdk.core.onboarding.util.CipherUtil;
+import org.openecomp.portalsdk.core.onboarding.util.PortalApiConstants;
+import org.openecomp.portalsdk.core.onboarding.util.PortalApiProperties;
+import org.springframework.web.servlet.ModelAndView;
+
+public class LoginStrategyImpl extends LoginStrategy {
+	
+	@Override
+	public ModelAndView doLogin(HttpServletRequest request, HttpServletResponse response) throws Exception {
+		//'login' for opensource is same as 'external' login.
+		return doExternalLogin(request, response);
+	}
+	
+	@Override
+	public String getUserId(HttpServletRequest request) throws PortalAPIException {
+		// Check ECOMP Portal cookie
+		if (!isLoginCookieExist(request))
+			return null;
+
+		String userid = null;
+		try {
+			userid = getUserIdFromCookie(request);
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return userid;	
+	}
+
+	private static String getUserIdFromCookie(HttpServletRequest request) throws Exception {
+		String userId = "";
+		Cookie[] cookies = request.getCookies();
+		Cookie userIdcookie = null;
+		if (cookies != null)
+			for (Cookie cookie : cookies)
+				if (cookie.getName().equals(USER_ID))
+					userIdcookie = cookie;
+		if(userIdcookie!=null){
+			userId = CipherUtil.decrypt(userIdcookie.getValue());
+		}
+		return userId;
+	
+	}
+	
+	private static boolean isLoginCookieExist(HttpServletRequest request) {
+		Cookie ep = getCookie(request, EP_SERVICE);
+		return (ep != null);
+	}
+	
+	private static Cookie getCookie(HttpServletRequest request, String cookieName) {
+		Cookie[] cookies = request.getCookies();
+		if (cookies != null)
+			for (Cookie cookie : cookies)
+				if (cookie.getName().equals(cookieName))
+					return cookie;
+
+		return null;
+	}
+
+	
+}
diff --git a/epsdk-app-onap/src/main/java/org/openecomp/portalapp/scheduler/Register.java b/epsdk-app-onap/src/main/java/org/onap/portalapp/scheduler/Register.java
old mode 100755
new mode 100644
similarity index 96%
rename from epsdk-app-onap/src/main/java/org/openecomp/portalapp/scheduler/Register.java
rename to epsdk-app-onap/src/main/java/org/onap/portalapp/scheduler/Register.java
index acf934d..165f331
--- a/epsdk-app-onap/src/main/java/org/openecomp/portalapp/scheduler/Register.java
+++ b/epsdk-app-onap/src/main/java/org/onap/portalapp/scheduler/Register.java
@@ -1,71 +1,72 @@
-/*-
- * ================================================================================
- * ECOMP Portal SDK
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property
- * ================================================================================
- * 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.
- * ================================================================================
- */
-package org.openecomp.portalapp.scheduler;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
-import org.openecomp.portalsdk.core.scheduler.Registerable;
-import org.openecomp.portalsdk.core.util.SystemProperties;
-import org.quartz.Trigger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.DependsOn;
-import org.springframework.stereotype.Component;
-
-@Component
-@DependsOn({ "logRegistry", "systemProperties" })
-public class Register implements Registerable {
-
-	EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(Register.class);
-
-	private List<Trigger> scheduleTriggers = new ArrayList<Trigger>();
-	Trigger trigger[] = new Trigger[1];
-
-	@Autowired
-	private LogRegistry logRegistry;
-
-	@Override
-	public Trigger[] getTriggers() {
-		return getScheduleTriggers().toArray(trigger);
-	}
-
-	@Override
-	public void registerTriggers() {
-		// if the property value is not available; the cron will not be added
-		// and can be ignored. its safe to ignore the exceptions
-		try {
-			if (SystemProperties.getProperty(SystemProperties.LOG_CRON) != null)
-				getScheduleTriggers().add(logRegistry.getTrigger());
-		} catch (IllegalStateException ies) {
-			logger.info(EELFLoggerDelegate.debugLogger, ("Log Cron not available"));
-		}
-
-	}
-
-	public List<Trigger> getScheduleTriggers() {
-		return scheduleTriggers;
-	}
-
-	public void setScheduleTriggers(List<Trigger> scheduleTriggers) {
-		this.scheduleTriggers = scheduleTriggers;
-	}
-
-}
+/*-
+ * ================================================================================
+ * ECOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * 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.
+ * ================================================================================
+ */
+package org.onap.portalapp.scheduler;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.openecomp.portalapp.scheduler.LogRegistry;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.openecomp.portalsdk.core.scheduler.Registerable;
+import org.openecomp.portalsdk.core.util.SystemProperties;
+import org.quartz.Trigger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.DependsOn;
+import org.springframework.stereotype.Component;
+
+@Component
+@DependsOn({ "logRegistry", "systemProperties" })
+public class Register implements Registerable {
+
+	EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(Register.class);
+
+	private List<Trigger> scheduleTriggers = new ArrayList<Trigger>();
+	Trigger trigger[] = new Trigger[1];
+
+	@Autowired
+	private LogRegistry logRegistry;
+
+	@Override
+	public Trigger[] getTriggers() {
+		return getScheduleTriggers().toArray(trigger);
+	}
+
+	@Override
+	public void registerTriggers() {
+		// if the property value is not available; the cron will not be added
+		// and can be ignored. its safe to ignore the exceptions
+		try {
+			if (SystemProperties.getProperty(SystemProperties.LOG_CRON) != null)
+				getScheduleTriggers().add(logRegistry.getTrigger());
+		} catch (IllegalStateException ies) {
+			logger.info(EELFLoggerDelegate.debugLogger, ("Log Cron not available"));
+		}
+
+	}
+
+	public List<Trigger> getScheduleTriggers() {
+		return scheduleTriggers;
+	}
+
+	public void setScheduleTriggers(List<Trigger> scheduleTriggers) {
+		this.scheduleTriggers = scheduleTriggers;
+	}
+
+}
diff --git a/epsdk-app-onap/src/main/java/org/openecomp/portalapp/scheduler/RegistryAdapter.java b/epsdk-app-onap/src/main/java/org/onap/portalapp/scheduler/RegistryAdapter.java
old mode 100755
new mode 100644
similarity index 98%
rename from epsdk-app-onap/src/main/java/org/openecomp/portalapp/scheduler/RegistryAdapter.java
rename to epsdk-app-onap/src/main/java/org/onap/portalapp/scheduler/RegistryAdapter.java
index 902c545..2cb5d89
--- a/epsdk-app-onap/src/main/java/org/openecomp/portalapp/scheduler/RegistryAdapter.java
+++ b/epsdk-app-onap/src/main/java/org/onap/portalapp/scheduler/RegistryAdapter.java
@@ -1,92 +1,92 @@
-/*-
- * ================================================================================
- * ECOMP Portal SDK
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property
- * ================================================================================
- * 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.
- * ================================================================================
- */
-package org.openecomp.portalapp.scheduler;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.openecomp.portalsdk.core.scheduler.Registerable;
-import org.openecomp.portalsdk.workflow.services.WorkflowScheduleService;
-import org.quartz.Trigger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.quartz.SchedulerFactoryBean;
-import org.springframework.stereotype.Component;
-
-@Component
-public class RegistryAdapter {
-
-	@Autowired
-	private Registerable registry;
-
-	@Autowired
-	private WorkflowScheduleService workflowScheduleService;
-
-	private SchedulerFactoryBean schedulerBean;
-
-	Trigger trigger[] = new Trigger[1];
-
-	public Trigger[] getTriggers() {
-
-		registry.registerTriggers();
-
-		List<Trigger> allTriggers = new ArrayList<Trigger>();
-
-		List<Trigger> coreTriggers = addCoreTriggers();
-		final Trigger[] extTriggerArray = registry.getTriggers();
-
-		allTriggers.addAll(Arrays.asList(extTriggerArray));
-		allTriggers.addAll(coreTriggers);
-
-		return allTriggers.toArray(trigger);
-	}
-
-	public List<Trigger> addCoreTriggers() {
-		// On startup of the application after crash recovery, invoke workflow
-		// schedule trigger
-		List<Trigger> triggers = getWorkflowScheduleService().triggerWorkflowScheduling();
-		return triggers;
-	}
-
-	public void setSchedulerBean(SchedulerFactoryBean _schedulerBean) {
-		schedulerBean = _schedulerBean;
-	}
-
-	public SchedulerFactoryBean getSchedulerBean() {
-		return schedulerBean;
-	}
-
-	public Registerable getRegistry() {
-		return registry;
-	}
-
-	public void setRegistry(Registerable registry) {
-		this.registry = registry;
-	}
-
-	public WorkflowScheduleService getWorkflowScheduleService() {
-		return workflowScheduleService;
-	}
-
-	public void setWorkflowScheduleService(WorkflowScheduleService workflowScheduleService) {
-		this.workflowScheduleService = workflowScheduleService;
-	}
-
-}
+/*-
+ * ================================================================================
+ * ECOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * 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.
+ * ================================================================================
+ */
+package org.onap.portalapp.scheduler;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.openecomp.portalsdk.core.scheduler.Registerable;
+import org.openecomp.portalsdk.workflow.services.WorkflowScheduleService;
+import org.quartz.Trigger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.quartz.SchedulerFactoryBean;
+import org.springframework.stereotype.Component;
+
+@Component
+public class RegistryAdapter {
+
+	@Autowired
+	private Registerable registry;
+
+	@Autowired
+	private WorkflowScheduleService workflowScheduleService;
+
+	private SchedulerFactoryBean schedulerBean;
+
+	Trigger trigger[] = new Trigger[1];
+
+	public Trigger[] getTriggers() {
+
+		registry.registerTriggers();
+
+		List<Trigger> allTriggers = new ArrayList<Trigger>();
+
+		List<Trigger> coreTriggers = addCoreTriggers();
+		final Trigger[] extTriggerArray = registry.getTriggers();
+
+		allTriggers.addAll(Arrays.asList(extTriggerArray));
+		allTriggers.addAll(coreTriggers);
+
+		return allTriggers.toArray(trigger);
+	}
+
+	public List<Trigger> addCoreTriggers() {
+		// On startup of the application after crash recovery, invoke workflow
+		// schedule trigger
+		List<Trigger> triggers = getWorkflowScheduleService().triggerWorkflowScheduling();
+		return triggers;
+	}
+
+	public void setSchedulerBean(SchedulerFactoryBean _schedulerBean) {
+		schedulerBean = _schedulerBean;
+	}
+
+	public SchedulerFactoryBean getSchedulerBean() {
+		return schedulerBean;
+	}
+
+	public Registerable getRegistry() {
+		return registry;
+	}
+
+	public void setRegistry(Registerable registry) {
+		this.registry = registry;
+	}
+
+	public WorkflowScheduleService getWorkflowScheduleService() {
+		return workflowScheduleService;
+	}
+
+	public void setWorkflowScheduleService(WorkflowScheduleService workflowScheduleService) {
+		this.workflowScheduleService = workflowScheduleService;
+	}
+
+}
diff --git a/epsdk-app-onap/src/main/java/org/openecomp/portalapp/service/AdminAuthExtension.java b/epsdk-app-onap/src/main/java/org/onap/portalapp/service/AdminAuthExtension.java
old mode 100755
new mode 100644
similarity index 95%
rename from epsdk-app-onap/src/main/java/org/openecomp/portalapp/service/AdminAuthExtension.java
rename to epsdk-app-onap/src/main/java/org/onap/portalapp/service/AdminAuthExtension.java
index 4145aa3..e3dbdf8
--- a/epsdk-app-onap/src/main/java/org/openecomp/portalapp/service/AdminAuthExtension.java
+++ b/epsdk-app-onap/src/main/java/org/onap/portalapp/service/AdminAuthExtension.java
@@ -1,64 +1,65 @@
-/*-
- * ================================================================================
- * ECOMP Portal SDK
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property
- * ================================================================================
- * 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.
- * ================================================================================
- */
-package org.openecomp.portalapp.service;
-
-import java.util.Set;
-
-import org.openecomp.portalsdk.core.domain.Role;
-import org.openecomp.portalsdk.core.domain.User;
-import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-
-@Service("adminAuthExtension")
-@Transactional
-/**
- * Provides empty implementations of the methods in IAdminAuthExtension.
- */
-public class AdminAuthExtension implements IAdminAuthExtension {
-
-	EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(AdminAuthExtension.class);
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.openecomp.portalapp.service.IAdminAuthExtension#saveUserExtension(org.openecomp.portalsdk.core.domain.User)
-	 */
-	public void saveUserExtension(User user) {
-		logger.debug("saveUserExtension");
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.openecomp.portalapp.service.IAdminAuthExtension#editUserExtension(org.openecomp.portalsdk.core.domain.User)
-	 */
-	public void editUserExtension(User user) {
-		logger.debug("editUserExtension");
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.openecomp.portalapp.service.IAdminAuthExtension#saveUserRoleExtension(java.util.Set, org.openecomp.portalsdk.core.domain.User)
-	 */
-	public void saveUserRoleExtension(Set<Role> roles, User user) {
-		logger.debug("saveUserRoleExtension");
-	}
-
-}
+/*-
+ * ================================================================================
+ * ECOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * 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.
+ * ================================================================================
+ */
+package org.onap.portalapp.service;
+
+import java.util.Set;
+
+import org.openecomp.portalapp.service.IAdminAuthExtension;
+import org.openecomp.portalsdk.core.domain.Role;
+import org.openecomp.portalsdk.core.domain.User;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+
+@Service("adminAuthExtension")
+@Transactional
+/**
+ * Provides empty implementations of the methods in IAdminAuthExtension.
+ */
+public class AdminAuthExtension implements IAdminAuthExtension {
+
+	EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(AdminAuthExtension.class);
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.openecomp.portalapp.service.IAdminAuthExtension#saveUserExtension(org.openecomp.portalsdk.core.domain.User)
+	 */
+	public void saveUserExtension(User user) {
+		logger.debug("saveUserExtension");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.openecomp.portalapp.service.IAdminAuthExtension#editUserExtension(org.openecomp.portalsdk.core.domain.User)
+	 */
+	public void editUserExtension(User user) {
+		logger.debug("editUserExtension");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.openecomp.portalapp.service.IAdminAuthExtension#saveUserRoleExtension(java.util.Set, org.openecomp.portalsdk.core.domain.User)
+	 */
+	public void saveUserRoleExtension(Set<Role> roles, User user) {
+		logger.debug("saveUserRoleExtension");
+	}
+
+}
diff --git a/epsdk-app-onap/src/main/resources/portal.properties b/epsdk-app-onap/src/main/resources/portal.properties
index 824fd73..4058211 100755
--- a/epsdk-app-onap/src/main/resources/portal.properties
+++ b/epsdk-app-onap/src/main/resources/portal.properties
@@ -30,7 +30,7 @@
 ##########################################################################
 
 # Name of java class that implements the OnBoardingApiService interface.
-portal.api.impl.class = org.openecomp.portalapp.service.OnBoardingApiServiceImpl
+portal.api.impl.class = org.onap.portalapp.service.OnBoardingApiServiceImpl
 
 # Log On for single sign on
 ecomp_redirect_url = http://portal.api.simpledemo.onap.org:8989/ONAPPORTAL/login.htm
diff --git a/epsdk-app-onap/src/main/resources/portal_template.properties b/epsdk-app-onap/src/main/resources/portal_template.properties
index ed69401..d01413a 100755
--- a/epsdk-app-onap/src/main/resources/portal_template.properties
+++ b/epsdk-app-onap/src/main/resources/portal_template.properties
@@ -1,6 +1,6 @@
 # Properties read by ECOMP Framework library, ecompFW.jar
 
-portal.api.impl.class = org.openecomp.portalapp.service.OnBoardingApiServiceImpl
+portal.api.impl.class = org.onap.portalapp.service.OnBoardingApiServiceImpl
 portal.api.prefix = /api
 max.idle.time = 5
 user.attribute.name = user_attribute
diff --git a/epsdk-app-onap/src/main/resources/vid-data.sql b/epsdk-app-onap/src/main/resources/vid-data.sql
index 497ca20..8f0eabe 100755
--- a/epsdk-app-onap/src/main/resources/vid-data.sql
+++ b/epsdk-app-onap/src/main/resources/vid-data.sql
@@ -28,8 +28,11 @@
 DELETE FROM `fn_function`;
 DELETE FROM `fn_lu_alert_method`;
 DELETE FROM `fn_lu_activity`;
+DELETE FROM `fn_lu_call_times`;
+DELETE FROM `fn_lu_country`;
 DELETE FROM `fn_lu_menu_set`;
 DELETE FROM `fn_lu_priority`;
+DELETE FROM `fn_lu_state`;
 DELETE FROM `fn_lu_tab_set`;
 
 --
@@ -44,6 +47,31 @@
 INSERT IGNORE INTO `fn_app` VALUES (1,'Default',null,'Some Default Description','Some Default Note',null,null,null,'ECPP','?',1,'okYTaDrhzibcbGVq5mjkVQ==','N','N',null,'Default',null,null,'ECOMP-PORTAL-INBOX');
 
 
+--
+-- Dumping data for table `vid_workflow`
+--
+INSERT INTO `vid_workflow` (`WORKFLOW_DB_ID`, `WORKFLOW_APP_NAME`) VALUES (1, 'Update') ON DUPLICATE KEY UPDATE WORKFLOW_APP_NAME='Update';
+INSERT INTO `vid_workflow` (`WORKFLOW_DB_ID`, `WORKFLOW_APP_NAME`) VALUES (2, 'Replace') ON DUPLICATE KEY UPDATE WORKFLOW_APP_NAME='Replace';
+INSERT INTO `vid_workflow` (`WORKFLOW_DB_ID`, `WORKFLOW_APP_NAME`) VALUES (3, 'VNF In Place Software Update') ON DUPLICATE KEY UPDATE WORKFLOW_APP_NAME='VNF In Place Software Update';
+
+
+--
+-- Dumping data for table `vid_category_parameter`
+--
+INSERT INTO `vid_category_parameter` (`CATEGORY_ID`, `NAME`, `ID_SUPPORTED`, `FAMILY`,`CREATED_DATE`, `MODIFIED_DATE`) VALUES (1, 'platform', 0, 'PARAMETER_STANDARDIZATION','2017-09-12 17:01:13', '2017-09-12 17:01:13') ON DUPLICATE KEY UPDATE NAME='platform';
+INSERT INTO `vid_category_parameter` (`CATEGORY_ID`, `NAME`, `ID_SUPPORTED`, `FAMILY`,`CREATED_DATE`, `MODIFIED_DATE`) VALUES (2, 'project', 0, 'PARAMETER_STANDARDIZATION','2017-09-12 18:23:54', '2017-09-13 15:05:25') ON DUPLICATE KEY UPDATE NAME='project';
+INSERT INTO `vid_category_parameter` (`CATEGORY_ID`, `NAME`, `ID_SUPPORTED`, `FAMILY`,`CREATED_DATE`, `MODIFIED_DATE`) VALUES (3, 'lineOfBusiness', 0,'PARAMETER_STANDARDIZATION', '2017-09-12 18:24:14', '2017-09-12 18:24:15') ON DUPLICATE KEY UPDATE NAME='lineOfBusiness';
+INSERT INTO `vid_category_parameter` (`CATEGORY_ID`, `NAME`, `ID_SUPPORTED`, `FAMILY`,`CREATED_DATE`, `MODIFIED_DATE`) VALUES (4, 'owningEntity', 1, 'PARAMETER_STANDARDIZATION', '2017-09-12 18:24:26', '2017-09-12 18:24:28') ON DUPLICATE KEY UPDATE NAME='owningEntity';
+INSERT INTO `vid_category_parameter` (`CATEGORY_ID`, `NAME`, `ID_SUPPORTED`, `FAMILY`,`CREATED_DATE`, `MODIFIED_DATE`) VALUES (5,'operational-environment-type', 0,'TENANT_ISOLATION', '2017-11-12 18:24:26', '2017-11-12 18:24:28') ON DUPLICATE KEY UPDATE NAME='operational-environment-type';
+INSERT INTO `vid_category_parameter` (`CATEGORY_ID`, `NAME`, `ID_SUPPORTED`, `FAMILY`,`CREATED_DATE`, `MODIFIED_DATE`) VALUES (6,'workload-context', 0, 'TENANT_ISOLATION','2017-11-12 18:24:26', '2017-11-12 18:24:28') ON DUPLICATE KEY UPDATE NAME='workload-context';
+
+--
+-- Dumping data for table `vid_category_parameter_option`
+--
+INSERT INTO `vid_category_parameter_option` (`CATEGORY_OPT_APP_ID`, `NAME`, `CATEGORY_ID`) VALUES ('ECOMP', 'ECOMP', '6') ON DUPLICATE KEY UPDATE NAME='ECOMP';
+INSERT INTO `vid_category_parameter_option` (`CATEGORY_OPT_APP_ID`, `NAME`, `CATEGORY_ID`) VALUES ('DEV', 'DEV', '6') ON DUPLICATE KEY UPDATE NAME='DEV';
+INSERT INTO `vid_category_parameter_option` (`CATEGORY_OPT_APP_ID`, `NAME`, `CATEGORY_ID`) VALUES ('TEST', 'TEST', '6') ON DUPLICATE KEY UPDATE NAME='TEST';
+INSERT INTO `vid_category_parameter_option` (`CATEGORY_OPT_APP_ID`, `NAME`, `CATEGORY_ID`) VALUES ('VNF', 'VNF', '5') ON DUPLICATE KEY UPDATE NAME='VNF';
 
 --
 -- Dumping data for table `fn_function`
@@ -84,6 +112,8 @@
 INSERT INTO `fn_function` VALUES ('menu_viewlog','Log Menu') ON DUPLICATE KEY UPDATE FUNCTION_NAME='Log Menu';
 INSERT INTO `fn_function` VALUES ('view_reports','View Raptor reports') ON DUPLICATE KEY UPDATE FUNCTION_NAME='View Raptor reports';
 INSERT INTO `fn_function` VALUES ('menu_searchexisting', 'Search for Existing Service Instances') ON DUPLICATE KEY UPDATE FUNCTION_NAME='Search for Existing Service Instances';
+INSERT INTO `fn_function` VALUES ('menu_changemanagement','VNF Changes') ON DUPLICATE KEY UPDATE FUNCTION_NAME='VNF Changes';
+INSERT INTO `fn_function` VALUES ('menu_testenvironment','Test Environments') ON DUPLICATE KEY UPDATE FUNCTION_NAME='Test Environments';
 
 --
 -- Dumping data for table `fn_lu_activity`
@@ -111,6 +141,303 @@
 REPLACE INTO `fn_lu_alert_method` VALUES ('SMS','SMS');
 
 --
+-- Dumping data for table `fn_lu_call_times`
+--
+REPLACE INTO `fn_lu_call_times` VALUES (1,20,'20 min');
+REPLACE INTO `fn_lu_call_times` VALUES (2,40,'40 min');
+REPLACE INTO `fn_lu_call_times` VALUES (3,60,'1 hr');
+REPLACE INTO `fn_lu_call_times` VALUES (4,80,'1 hr 20 min');
+REPLACE INTO `fn_lu_call_times` VALUES (5,100,'1 hr 40 min');
+REPLACE INTO `fn_lu_call_times` VALUES (6,120,'2 hrs');
+REPLACE INTO `fn_lu_call_times` VALUES (7,140,'2 hr 20 min');
+REPLACE INTO `fn_lu_call_times` VALUES (8,160,'2 hr 40 min');
+REPLACE INTO `fn_lu_call_times` VALUES (9,180,'3 hrs');
+REPLACE INTO `fn_lu_call_times` VALUES (10,200,'3 hr 20 min');
+REPLACE INTO `fn_lu_call_times` VALUES (11,220,'3 hr 40 min');
+REPLACE INTO `fn_lu_call_times` VALUES (12,240,'4 hrs');
+REPLACE INTO `fn_lu_call_times` VALUES (13,260,'4 hr 20 min');
+REPLACE INTO `fn_lu_call_times` VALUES (14,280,'4 hr 40 min');
+REPLACE INTO `fn_lu_call_times` VALUES (15,300,'5 hrs');
+REPLACE INTO `fn_lu_call_times` VALUES (16,320,'5 hr 20 min');
+REPLACE INTO `fn_lu_call_times` VALUES (17,340,'5 hr 40 min');
+REPLACE INTO `fn_lu_call_times` VALUES (18,360,'6 hrs');
+REPLACE INTO `fn_lu_call_times` VALUES (19,380,'6 hr 20 min');
+REPLACE INTO `fn_lu_call_times` VALUES (20,400,'6 hr 40 min');
+REPLACE INTO `fn_lu_call_times` VALUES (21,420,'7 hrs');
+REPLACE INTO `fn_lu_call_times` VALUES (22,440,'7 hr 20 min');
+REPLACE INTO `fn_lu_call_times` VALUES (23,460,'7 hr 40 min');
+REPLACE INTO `fn_lu_call_times` VALUES (24,480,'8 hrs');
+REPLACE INTO `fn_lu_call_times` VALUES (25,500,'8 hr 20 min');
+REPLACE INTO `fn_lu_call_times` VALUES (26,520,'8 hr 40 min');
+REPLACE INTO `fn_lu_call_times` VALUES (27,540,'9 hrs');
+REPLACE INTO `fn_lu_call_times` VALUES (28,560,'9 hr 20 min');
+REPLACE INTO `fn_lu_call_times` VALUES (29,580,'9 hr 40 min');
+REPLACE INTO `fn_lu_call_times` VALUES (30,600,'10 hrs');
+REPLACE INTO `fn_lu_call_times` VALUES (31,10,'10 min');
+REPLACE INTO `fn_lu_call_times` VALUES (32,5,'5 min');
+REPLACE INTO `fn_lu_call_times` VALUES (33,1200,'20 hrs');
+REPLACE INTO `fn_lu_call_times` VALUES (34,1800,'30 hrs');
+REPLACE INTO `fn_lu_call_times` VALUES (35,2400,'40 hrs');
+REPLACE INTO `fn_lu_call_times` VALUES (36,3000,'50 hrs');
+REPLACE INTO `fn_lu_call_times` VALUES (37,4200,'70 hrs');
+REPLACE INTO `fn_lu_call_times` VALUES (38,4800,'80 hrs');
+REPLACE INTO `fn_lu_call_times` VALUES (39,5400,'90 hrs');
+REPLACE INTO `fn_lu_call_times` VALUES (40,6000,'100 hrs');
+REPLACE INTO `fn_lu_call_times` VALUES (41,7200,'120 hrs');
+REPLACE INTO `fn_lu_call_times` VALUES (42,9600,'160 hrs');
+REPLACE INTO `fn_lu_call_times` VALUES (43,10800,'180 hrs');
+REPLACE INTO `fn_lu_call_times` VALUES (44,12000,'200 hrs');
+REPLACE INTO `fn_lu_call_times` VALUES (45,18000,'300 hrs');
+REPLACE INTO `fn_lu_call_times` VALUES (46,24000,'400 hrs');
+REPLACE INTO `fn_lu_call_times` VALUES (47,30000,'500 hrs');
+
+--
+-- Dumping data for table `fn_lu_country`
+--
+REPLACE INTO `fn_lu_country` VALUES ('AD','Andorra','Andorra',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('AE','United Arab Emirates','United Arab Emirates',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('AF','Afghanistan','Afghanistan',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('AG','Antigua and Barbuda','Antigua and Barbuda',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('AI','Anguilla','Anguilla',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('AL','Albania','Albania',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('AM','Armenia','Armenia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('AN','Netherlands Antilles','Netherlands Antilles',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('AO','Angola','Angola',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('AQ','Antarctica','Antarctica',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('AR','Argentina','Argentina',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('AS','American Samoa','American Samoa',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('AT','Austria','Austria',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('AU','Australia','Australia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('AW','Aruba','Aruba',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('AZ','Azerbaidjan','Azerbaidjan',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('BA','Bosnia-Herzegovina','Bosnia-Herzegovina',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('BB','Barbados','Barbados',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('BD','Bangladesh','Bangladesh',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('BE','Belgium','Belgium',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('BF','Burkina Faso','Burkina Faso',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('BG','Bulgaria','Bulgaria',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('BH','Bahrain','Bahrain',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('BI','Burundi','Burundi',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('BJ','Benin','Benin',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('BM','Bermuda','Bermuda',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('BN','Brunei Darussalam','Brunei Darussalam',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('BO','Bolivia','Bolivia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('BR','Brazil','Brazil',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('BS','Bahamas','Bahamas',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('BT','Bhutan','Bhutan',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('BV','Bouvet Island','Bouvet Island',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('BW','Botswana','Botswana',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('BY','Belarus','Belarus',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('BZ','Belize','Belize',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('CA','Canada','Canada',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('CC','Cocos (Keeling) Islands','Cocos (Keeling) Islands',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('CF','Central African Republic','Central African Republic',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('CG','Congo','Congo',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('CH','Switzerland','Switzerland',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('CI','Ivory Coast (Cote D\'Ivoire)','Ivory Coast (Cote D\'Ivoire)',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('CK','Cook Islands','Cook Islands',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('CL','Chile','Chile',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('CM','Cameroon','Cameroon',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('CN','China','China','China');
+REPLACE INTO `fn_lu_country` VALUES ('CO','Colombia','Colombia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('CR','Costa Rica','Costa Rica',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('CS','Former Czechoslovakia','Former Czechoslovakia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('CU','Cuba','Cuba',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('CV','Cape Verde','Cape Verde',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('CX','Christmas Island','Christmas Island',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('CY','Cyprus','Cyprus',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('CZ','Czech Republic','Czech Republic',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('DE','Germany','Germany',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('DJ','Djibouti','Djibouti',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('DK','Denmark','Denmark',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('DM','Dominica','Dominica',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('DO','Dominican Republic','Dominican Republic',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('DZ','Algeria','Algeria',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('EC','Ecuador','Ecuador',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('EE','Estonia','Estonia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('EG','Egypt','Egypt',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('EH','Western Sahara','Western Sahara',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('ER','Eritrea','Eritrea',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('ES','Spain','Spain',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('ET','Ethiopia','Ethiopia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('FI','Finland','Finland',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('FJ','Fiji','Fiji',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('FK','Falkland Islands','Falkland Islands',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('FM','Micronesia','Micronesia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('FO','Faroe Islands','Faroe Islands',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('FR','France','France',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('FX','France (European Territory)','France (European Territory)',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('GA','Gabon','Gabon',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('GB','Great Britain','Great Britain',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('GD','Grenada','Grenada',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('GE','Georgia','Georgia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('GF','French Guyana','French Guyana',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('GH','Ghana','Ghana',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('GI','Gibraltar','Gibraltar',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('GL','Greenland','Greenland',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('GM','Gambia','Gambia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('GN','Guinea','Guinea',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('GP','Guadeloupe (French)','Guadeloupe (French)',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('GQ','Equatorial Guinea','Equatorial Guinea',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('GR','Greece','Greece',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('GS','S. Georgia and S. Sandwich Isls.','S. Georgia and S. Sandwich Isls.',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('GT','Guatemala','Guatemala',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('GU','Guam (USA)','Guam (USA)',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('GW','Guinea Bissau','Guinea Bissau',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('GY','Guyana','Guyana',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('HK','Hong Kong','Hong Kong',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('HM','Heard and McDonald Islands','Heard and McDonald Islands',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('HN','Honduras','Honduras',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('HR','Croatia','Croatia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('HT','Haiti','Haiti',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('HU','Hungary','Hungary',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('ID','Indonesia','Indonesia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('IE','Ireland','Ireland',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('IL','Israel','Israel',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('IN','India','India',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('IO','British Indian Ocean Territory','British Indian Ocean Territory',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('IQ','Iraq','Iraq',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('IR','Iran','Iran',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('IS','Iceland','Iceland',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('IT','Italy','Italy',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('JM','Jamaica','Jamaica',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('JO','Jordan','Jordan',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('JP','Japan','Japan',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('KE','Kenya','Kenya',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('KG','Kyrgyzstan','Kyrgyzstan',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('KH','Cambodia','Cambodia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('KI','Kiribati','Kiribati',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('KM','Comoros','Comoros',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('KN','Saint Kitts and Nevis Anguilla','Saint Kitts and Nevis Anguilla',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('KP','North Korea','North Korea',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('KR','South Korea','South Korea',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('KW','Kuwait','Kuwait',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('KY','Cayman Islands','Cayman Islands',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('KZ','Kazakhstan','Kazakhstan',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('LA','Laos','Laos',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('LB','Lebanon','Lebanon',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('LC','Saint Lucia','Saint Lucia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('LI','Liechtenstein','Liechtenstein',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('LK','Sri Lanka','Sri Lanka',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('LR','Liberia','Liberia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('LS','Lesotho','Lesotho',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('LT','Lithuania','Lithuania',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('LU','Luxembourg','Luxembourg',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('LV','Latvia','Latvia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('LY','Libya','Libya',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('MA','Morocco','Morocco',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('MC','Monaco','Monaco',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('MD','Moldavia','Moldavia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('MG','Madagascar','Madagascar',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('MH','Marshall Islands','Marshall Islands',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('MK','Macedonia','Macedonia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('ML','Mali','Mali',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('MM','Myanmar','Myanmar',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('MN','Mongolia','Mongolia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('MO','Macau','Macau',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('MP','Northern Mariana Islands','Northern Mariana Islands',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('MQ','Martinique (French)','Martinique (French)',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('MR','Mauritania','Mauritania',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('MS','Montserrat','Montserrat',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('MT','Malta','Malta',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('MU','Mauritius','Mauritius',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('MV','Maldives','Maldives',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('MW','Malawi','Malawi',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('MX','Mexico','Mexico','Mexico');
+REPLACE INTO `fn_lu_country` VALUES ('MY','Malaysia','Malaysia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('MZ','Mozambique','Mozambique',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('NA','Namibia','Namibia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('NC','New Caledonia (French)','New Caledonia (French)',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('NE','Niger','Niger',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('NF','Norfolk Island','Norfolk Island',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('NG','Nigeria','Nigeria',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('NI','Nicaragua','Nicaragua',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('NL','Netherlands','Netherlands',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('NO','Norway','Norway',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('NP','Nepal','Nepal',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('NR','Nauru','Nauru',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('NU','Niue','Niue',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('NZ','New Zealand','New Zealand',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('OM','Oman','Oman',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('PA','Panama','Panama',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('PE','Peru','Peru',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('PF','Polynesia (French)','Polynesia (French)',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('PG','Papua New Guinea','Papua New Guinea',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('PH','Philippines','Philippines',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('PK','Pakistan','Pakistan',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('PL','Poland','Poland',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('PM','Saint Pierre and Miquelon','Saint Pierre and Miquelon',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('PN','Pitcairn Island','Pitcairn Island',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('PR','Puerto Rico','Puerto Rico',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('PT','Portugal','Portugal',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('PW','Palau','Palau',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('PY','Paraguay','Paraguay',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('QA','Qatar','Qatar',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('RE','Reunion (French)','Reunion (French)',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('RO','Romania','Romania',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('RU','Russian Federation','Russian Federation',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('RW','Rwanda','Rwanda',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('SA','Saudi Arabia','Saudi Arabia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('SB','Solomon Islands','Solomon Islands',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('SC','Seychelles','Seychelles',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('SD','Sudan','Sudan',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('SE','Sweden','Sweden',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('SG','Singapore','Singapore',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('SH','Saint Helena','Saint Helena',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('SI','Slovenia','Slovenia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('SJ','Svalbard and Jan Mayen Islands','Svalbard and Jan Mayen Islands',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('SK','Slovak Republic','Slovak Republic',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('SL','Sierra Leone','Sierra Leone',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('SM','San Marino','San Marino',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('SN','Senegal','Senegal',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('SO','Somalia','Somalia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('SR','Suriname','Suriname',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('ST','Saint Tome (Sao Tome) and Principe','Saint Tome (Sao Tome) and Principe',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('SU','Former USSR','Former USSR',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('SV','El Salvador','El Salvador',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('SY','Syria','Syria',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('SZ','Swaziland','Swaziland',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('TC','Turks and Caicos Islands','Turks and Caicos Islands',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('TD','Chad','Chad',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('TF','French Southern Territories','French Southern Territories',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('TG','Togo','Togo',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('TH','Thailand','Thailand',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('TJ','Tadjikistan','Tadjikistan',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('TK','Tokelau','Tokelau',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('TM','Turkmenistan','Turkmenistan',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('TN','Tunisia','Tunisia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('TO','Tonga','Tonga',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('TP','East Timor','East Timor',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('TR','Turkey','Turkey',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('TT','Trinidad and Tobago','Trinidad and Tobago',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('TV','Tuvalu','Tuvalu',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('TW','Taiwan','Taiwan',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('TZ','Tanzania','Tanzania',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('UA','Ukraine','Ukraine',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('UG','Uganda','Uganda',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('UK','United Kingdom','United Kingdom',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('UM','USA Minor Outlying Islands','USA Minor Outlying Islands',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('US','United States','United States','USA');
+REPLACE INTO `fn_lu_country` VALUES ('UY','Uruguay','Uruguay',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('UZ','Uzbekistan','Uzbekistan',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('VA','Vatican City State','Vatican City State',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('VC','Saint Vincent and Grenadines','Saint Vincent and Grenadines',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('VE','Venezuela','Venezuela',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('VG','Virgin Islands (British)','Virgin Islands (British)',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('VI','Virgin Islands (USA)','Virgin Islands (USA)',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('VN','Vietnam','Vietnam',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('VU','Vanuatu','Vanuatu',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('WF','Wallis and Futuna Islands','Wallis and Futuna Islands',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('WS','Samoa','Samoa',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('YE','Yemen','Yemen',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('YT','Mayotte','Mayotte',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('YU','Yugoslavia','Yugoslavia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('ZA','South Africa','South Africa',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('ZM','Zambia','Zambia',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('ZR','Zaire','Zaire',NULL);
+REPLACE INTO `fn_lu_country` VALUES ('ZW','Zimbabwe','Zimbabwe',NULL);
+
+--
 -- Dumping data for table `fn_lu_menu_set`
 --
 INSERT INTO `fn_lu_menu_set` VALUES ('APP','Application Menu') ON DUPLICATE KEY UPDATE MENU_SET_NAME='Application Menu';
@@ -124,6 +451,62 @@
 REPLACE INTO `fn_lu_priority` VALUES (40,'Urgent','Y',40);
 REPLACE INTO `fn_lu_priority` VALUES (50,'Fatal','Y',50);
 
+--
+-- Dumping data for table `fn_lu_state`
+--
+REPLACE INTO `fn_lu_state` VALUES ('AK','AK - Alaska');
+REPLACE INTO `fn_lu_state` VALUES ('AL','AL - Alabama');
+REPLACE INTO `fn_lu_state` VALUES ('AR','AR - Arkansas');
+REPLACE INTO `fn_lu_state` VALUES ('AZ','AZ - Arizona');
+REPLACE INTO `fn_lu_state` VALUES ('CA','CA - California');
+REPLACE INTO `fn_lu_state` VALUES ('CO','CO - Colorado');
+REPLACE INTO `fn_lu_state` VALUES ('CT','CT - Connecticut');
+REPLACE INTO `fn_lu_state` VALUES ('DC','DC - District Of Columbia');
+REPLACE INTO `fn_lu_state` VALUES ('DE','DE - Delaware');
+REPLACE INTO `fn_lu_state` VALUES ('FL','FL - Florida');
+REPLACE INTO `fn_lu_state` VALUES ('GA','GA - Georgia');
+REPLACE INTO `fn_lu_state` VALUES ('HI','HI - Hawaii');
+REPLACE INTO `fn_lu_state` VALUES ('IA','IA - Iowa');
+REPLACE INTO `fn_lu_state` VALUES ('ID','ID - Idaho');
+REPLACE INTO `fn_lu_state` VALUES ('IL','IL - Illinois');
+REPLACE INTO `fn_lu_state` VALUES ('IN','IN - Indiana');
+REPLACE INTO `fn_lu_state` VALUES ('KS','KS - Kansas');
+REPLACE INTO `fn_lu_state` VALUES ('KY','KY - Kentucky');
+REPLACE INTO `fn_lu_state` VALUES ('LA','LA - Louisiana');
+REPLACE INTO `fn_lu_state` VALUES ('MA','MA - Massachusetts');
+REPLACE INTO `fn_lu_state` VALUES ('MD','MD - Maryland');
+REPLACE INTO `fn_lu_state` VALUES ('ME','ME - Maine');
+REPLACE INTO `fn_lu_state` VALUES ('MI','MI - Michigan');
+REPLACE INTO `fn_lu_state` VALUES ('MN','MN - Minnesota');
+REPLACE INTO `fn_lu_state` VALUES ('MO','MO - Missouri');
+REPLACE INTO `fn_lu_state` VALUES ('MS','MS - Mississippi');
+REPLACE INTO `fn_lu_state` VALUES ('MT','MT - Montana');
+REPLACE INTO `fn_lu_state` VALUES ('NC','NC - North Carolina');
+REPLACE INTO `fn_lu_state` VALUES ('ND','ND - North Dakota');
+REPLACE INTO `fn_lu_state` VALUES ('NE','NE - Nebraska');
+REPLACE INTO `fn_lu_state` VALUES ('NH','NH - New Hampshire');
+REPLACE INTO `fn_lu_state` VALUES ('NJ','NJ - New Jersey');
+REPLACE INTO `fn_lu_state` VALUES ('NM','NM - New Mexico');
+REPLACE INTO `fn_lu_state` VALUES ('NV','NV - Nevada');
+REPLACE INTO `fn_lu_state` VALUES ('NY','NY - New York');
+REPLACE INTO `fn_lu_state` VALUES ('OH','OH - Ohio');
+REPLACE INTO `fn_lu_state` VALUES ('OK','OK - Oklahoma');
+REPLACE INTO `fn_lu_state` VALUES ('OR','OR - Oregon');
+REPLACE INTO `fn_lu_state` VALUES ('PA','PA - Pennsylvania');
+REPLACE INTO `fn_lu_state` VALUES ('PR','PR - Puerto Rico');
+REPLACE INTO `fn_lu_state` VALUES ('RI','RI - Rhode Island');
+REPLACE INTO `fn_lu_state` VALUES ('SC','SC - South Carolina');
+REPLACE INTO `fn_lu_state` VALUES ('SD','SD - South Dakota');
+REPLACE INTO `fn_lu_state` VALUES ('TN','TN - Tennessee');
+REPLACE INTO `fn_lu_state` VALUES ('TX','TX - Texas');
+REPLACE INTO `fn_lu_state` VALUES ('UT','UT - Utah');
+REPLACE INTO `fn_lu_state` VALUES ('VA','VA - Virginia');
+REPLACE INTO `fn_lu_state` VALUES ('VI','VI-Virgin Island');
+REPLACE INTO `fn_lu_state` VALUES ('VT','VT - Vermont');
+REPLACE INTO `fn_lu_state` VALUES ('WA','WA - Washington');
+REPLACE INTO `fn_lu_state` VALUES ('WI','WI - Wisconsin');
+REPLACE INTO `fn_lu_state` VALUES ('WV','WV - West Virginia');
+REPLACE INTO `fn_lu_state` VALUES ('WY','WY - Wyoming');
 
 --
 -- Dumping data for table `fn_lu_tab_set`
@@ -305,6 +688,9 @@
 REPLACE INTO `fn_role_function` VALUES ('1', 'menu_searchexisting');
 REPLACE INTO `fn_role_function` VALUES ('16', 'menu_searchexisting');
 
+update fn_menu set active_yn = 'Y' where label = 'Admin';
+update fn_menu set active_yn = 'Y' where label = 'Root';
+update fn_menu set action = 'admin' where label = 'Admin';
 
 --
 -- Dumping data for table `fn_tab`
diff --git a/epsdk-app-onap/src/main/resources/vid-schema.sql b/epsdk-app-onap/src/main/resources/vid-schema.sql
index 6ca06b1..efd4d05 100755
--- a/epsdk-app-onap/src/main/resources/vid-schema.sql
+++ b/epsdk-app-onap/src/main/resources/vid-schema.sql
@@ -66,8 +66,8 @@
   `PARENT_FOLDER_ID` INT(11) NULL DEFAULT NULL,
   `PUBLIC_YN` VARCHAR(1) NOT NULL DEFAULT 'N',
   PRIMARY KEY (`FOLDER_ID`),
-  INDEX `fk_parent_key_cr_folder` (`PARENT_FOLDER_ID` ASC),
-  CONSTRAINT `fk_parent_key_cr_folder`
+  INDEX `FK_PARENT_KEY_CR_FOLDER` (`PARENT_FOLDER_ID` ASC),
+  CONSTRAINT `FK_PARENT_KEY_CR_FOLDER`
     FOREIGN KEY (`PARENT_FOLDER_ID`)
     REFERENCES `vid_openecomp_epsdk`.`cr_folder` (`FOLDER_ID`))
 ENGINE = InnoDB
@@ -94,11 +94,11 @@
   `HIST_ID` INT(11) NOT NULL,
   `USER_ID` INT(11) NOT NULL,
   PRIMARY KEY (`HIST_ID`, `USER_ID`),
-  INDEX `sys_c0014617` (`USER_ID` ASC),
-  CONSTRAINT `sys_c0014616`
+  INDEX `SYS_C0014617` (`USER_ID` ASC),
+  CONSTRAINT `SYS_C0014616`
     FOREIGN KEY (`HIST_ID`)
     REFERENCES `vid_openecomp_epsdk`.`cr_report_file_history` (`HIST_ID`),
-  CONSTRAINT `sys_c0014617`
+  CONSTRAINT `SYS_C0014617`
     FOREIGN KEY (`USER_ID`)
     REFERENCES `vid_openecomp_epsdk`.`fn_user` (`USER_ID`))
 ENGINE = InnoDB
@@ -167,7 +167,7 @@
   `DASHBOARD_TYPE_YN` VARCHAR(1) NULL DEFAULT 'N',
   `DASHBOARD_YN` VARCHAR(1) NULL DEFAULT 'N',
   PRIMARY KEY (`REP_ID`),
-  INDEX `cr_report_create_idpublic_yntitle` (`CREATE_ID` ASC, `PUBLIC_YN` ASC, `TITLE` ASC))
+  INDEX `CR_REPORT_CREATE_IDPUBLIC_YNTITLE` (`CREATE_ID` ASC, `PUBLIC_YN` ASC, `TITLE` ASC))
 ENGINE = InnoDB
 DEFAULT CHARACTER SET = utf8;
 
@@ -181,7 +181,7 @@
   `USER_ID` DECIMAL(11,0) NULL DEFAULT NULL,
   `READ_ONLY_YN` VARCHAR(1) NOT NULL DEFAULT 'N',
   PRIMARY KEY (`REP_ID`, `ORDER_NO`),
-  CONSTRAINT `fk_cr_repor_ref_8550_cr_repor`
+  CONSTRAINT `FK_CR_REPOR_REF_8550_CR_REPOR`
     FOREIGN KEY (`REP_ID`)
     REFERENCES `vid_openecomp_epsdk`.`cr_report` (`REP_ID`))
 ENGINE = InnoDB
@@ -213,8 +213,8 @@
   `ACCESS_FLAG` VARCHAR(1) NOT NULL DEFAULT 'Y',
   `TOUCH_DATE` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
   PRIMARY KEY (`LOG_ID`),
-  INDEX `fk_cr_report_rep_id` (`REP_ID` ASC),
-  CONSTRAINT `fk_cr_report_rep_id`
+  INDEX `FK_CR_REPORT_REP_ID` (`REP_ID` ASC),
+  CONSTRAINT `FK_CR_REPORT_REP_ID`
     FOREIGN KEY (`REP_ID`)
     REFERENCES `vid_openecomp_epsdk`.`cr_report` (`REP_ID`))
 ENGINE = InnoDB
@@ -241,12 +241,12 @@
   `DELETED_YN` CHAR(1) NULL DEFAULT 'N',
   `DELETED_BY` DECIMAL(38,0) NULL DEFAULT NULL,
   PRIMARY KEY (`HIST_ID`),
-  INDEX `sys_c0014614` (`FILE_TYPE_ID` ASC),
-  INDEX `sys_c0014615` (`REP_ID` ASC),
-  CONSTRAINT `sys_c0014614`
+  INDEX `SYS_C0014614` (`FILE_TYPE_ID` ASC),
+  INDEX `SYS_C0014615` (`REP_ID` ASC),
+  CONSTRAINT `SYS_C0014614`
     FOREIGN KEY (`FILE_TYPE_ID`)
     REFERENCES `vid_openecomp_epsdk`.`cr_lu_file_type` (`LOOKUP_ID`),
-  CONSTRAINT `sys_c0014615`
+  CONSTRAINT `SYS_C0014615`
     FOREIGN KEY (`REP_ID`)
     REFERENCES `vid_openecomp_epsdk`.`cr_report` (`REP_ID`))
 ENGINE = InnoDB
@@ -262,8 +262,8 @@
   `ACTION` VARCHAR(2000) NOT NULL,
   `ACTION_VALUE` VARCHAR(50) NULL DEFAULT NULL,
   `FORM_FIELDS` VARCHAR(4000) NULL DEFAULT NULL,
-  INDEX `fk_cr_repor_ref_17645_cr_repor` (`REP_ID` ASC),
-  CONSTRAINT `fk_cr_repor_ref_17645_cr_repor`
+  INDEX `FK_CR_REPOR_REF_17645_CR_REPOR` (`REP_ID` ASC),
+  CONSTRAINT `FK_CR_REPOR_REF_17645_CR_REPOR`
     FOREIGN KEY (`REP_ID`)
     REFERENCES `vid_openecomp_epsdk`.`cr_report` (`REP_ID`))
 ENGINE = InnoDB
@@ -292,8 +292,8 @@
   `ENCRYPT_YN` CHAR(1) NULL DEFAULT 'N',
   `ATTACHMENT_YN` CHAR(1) NULL DEFAULT 'Y',
   PRIMARY KEY (`SCHEDULE_ID`),
-  INDEX `fk_cr_repor_ref_14707_cr_repor` (`REP_ID` ASC),
-  CONSTRAINT `fk_cr_repor_ref_14707_cr_repor`
+  INDEX `FK_CR_REPOR_REF_14707_CR_REPOR` (`REP_ID` ASC),
+  CONSTRAINT `FK_CR_REPOR_REF_14707_CR_REPOR`
     FOREIGN KEY (`REP_ID`)
     REFERENCES `vid_openecomp_epsdk`.`cr_report` (`REP_ID`))
 ENGINE = InnoDB
@@ -309,7 +309,7 @@
   `ROLE_ID` DECIMAL(11,0) NULL DEFAULT NULL,
   `ORDER_NO` DECIMAL(11,0) NOT NULL,
   PRIMARY KEY (`SCHEDULE_ID`, `REP_ID`, `USER_ID`, `ORDER_NO`),
-  CONSTRAINT `fk_cr_repor_ref_14716_cr_repor`
+  CONSTRAINT `FK_CR_REPOR_REF_14716_CR_REPOR`
     FOREIGN KEY (`SCHEDULE_ID`)
     REFERENCES `vid_openecomp_epsdk`.`cr_report_schedule` (`SCHEDULE_ID`))
 ENGINE = InnoDB
@@ -343,12 +343,12 @@
   `SRC_TABLE_NAME` VARCHAR(30) NOT NULL,
   `DEST_TABLE_NAME` VARCHAR(30) NOT NULL,
   `JOIN_EXPR` VARCHAR(500) NOT NULL,
-  INDEX `cr_table_join_dest_table_name` (`DEST_TABLE_NAME` ASC),
-  INDEX `cr_table_join_src_table_name` (`SRC_TABLE_NAME` ASC),
-  CONSTRAINT `fk_cr_table_ref_311_cr_tab`
+  INDEX `CR_TABLE_JOIN_DEST_TABLE_NAME` (`DEST_TABLE_NAME` ASC),
+  INDEX `CR_TABLE_JOIN_SRC_TABLE_NAME` (`SRC_TABLE_NAME` ASC),
+  CONSTRAINT `FK_CR_TABLE_REF_311_CR_TAB`
     FOREIGN KEY (`SRC_TABLE_NAME`)
     REFERENCES `vid_openecomp_epsdk`.`cr_table_source` (`TABLE_NAME`),
-  CONSTRAINT `fk_cr_table_ref_315_cr_tab`
+  CONSTRAINT `FK_CR_TABLE_REF_315_CR_TAB`
     FOREIGN KEY (`DEST_TABLE_NAME`)
     REFERENCES `vid_openecomp_epsdk`.`cr_table_source` (`TABLE_NAME`))
 ENGINE = InnoDB
@@ -361,7 +361,7 @@
   `TABLE_NAME` VARCHAR(30) NOT NULL,
   `ROLE_ID` DECIMAL(11,0) NOT NULL,
   PRIMARY KEY (`TABLE_NAME`, `ROLE_ID`),
-  CONSTRAINT `fk_cr_table_ref_32384_cr_table`
+  CONSTRAINT `FK_CR_TABLE_REF_32384_CR_TABLE`
     FOREIGN KEY (`TABLE_NAME`)
     REFERENCES `vid_openecomp_epsdk`.`cr_table_source` (`TABLE_NAME`))
 ENGINE = InnoDB
@@ -383,74 +383,7 @@
 DEFAULT CHARACTER SET = utf8;
 
 -- ----------------------------------------------------------------------------
--- Table vid_openecomp_epsdk.demo_bar_chart
--- ----------------------------------------------------------------------------
-CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`demo_bar_chart` (
-  `label` VARCHAR(20) NULL DEFAULT NULL,
-  `value` DECIMAL(25,15) NULL DEFAULT NULL)
-ENGINE = InnoDB
-DEFAULT CHARACTER SET = utf8;
-
--- ----------------------------------------------------------------------------
--- Table vid_openecomp_epsdk.demo_bar_chart_inter
--- ----------------------------------------------------------------------------
-CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`demo_bar_chart_inter` (
-  `spam_date` DATE NULL DEFAULT NULL,
-  `num_rpt_sources` DECIMAL(10,0) NULL DEFAULT NULL,
-  `num_det_sources` DECIMAL(10,0) NULL DEFAULT NULL)
-ENGINE = InnoDB
-DEFAULT CHARACTER SET = utf8;
-
--- ----------------------------------------------------------------------------
--- Table vid_openecomp_epsdk.demo_line_chart
--- ----------------------------------------------------------------------------
-CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`demo_line_chart` (
-  `series` VARCHAR(20) NULL DEFAULT NULL,
-  `log_date` DATE NULL DEFAULT NULL,
-  `data_value` DECIMAL(10,5) NULL DEFAULT NULL)
-ENGINE = InnoDB
-DEFAULT CHARACTER SET = utf8;
-
--- ----------------------------------------------------------------------------
--- Table vid_openecomp_epsdk.demo_pie_chart
--- ----------------------------------------------------------------------------
-CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`demo_pie_chart` (
-  `legend` VARCHAR(20) NULL DEFAULT NULL,
-  `data_value` DECIMAL(10,5) NULL DEFAULT NULL)
-ENGINE = InnoDB
-DEFAULT CHARACTER SET = utf8;
-
--- ----------------------------------------------------------------------------
--- Table vid_openecomp_epsdk.demo_scatter_chart
--- ----------------------------------------------------------------------------
-CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`demo_scatter_chart` (
-  `rainfall` DECIMAL(10,2) NULL DEFAULT NULL,
-  `key_value` VARCHAR(20) NULL DEFAULT NULL,
-  `measurements` DECIMAL(10,2) NULL DEFAULT NULL)
-ENGINE = InnoDB
-DEFAULT CHARACTER SET = utf8;
-
--- ----------------------------------------------------------------------------
--- Table vid_openecomp_epsdk.demo_scatter_plot
--- ----------------------------------------------------------------------------
-CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`demo_scatter_plot` (
-  `SERIES` VARCHAR(20) NULL DEFAULT NULL,
-  `VALUEX` DECIMAL(25,15) NULL DEFAULT NULL,
-  `VALUEY` DECIMAL(25,15) NULL DEFAULT NULL)
-ENGINE = InnoDB
-DEFAULT CHARACTER SET = utf8;
-
--- ----------------------------------------------------------------------------
--- Table vid_openecomp_epsdk.demo_util_chart
--- ----------------------------------------------------------------------------
-CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`demo_util_chart` (
-  `traffic_date` DATE NULL DEFAULT NULL,
-  `util_perc` DECIMAL(10,5) NULL DEFAULT NULL)
-ENGINE = InnoDB
-DEFAULT CHARACTER SET = utf8;
-
--- ----------------------------------------------------------------------------
--- Table vid_openecomp_epsdk.fn_app
+-- Table vid_portal.fn_app
 -- ----------------------------------------------------------------------------
 CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`fn_app` (
   `APP_ID` INT(11) NOT NULL AUTO_INCREMENT,
@@ -478,6 +411,21 @@
 DEFAULT CHARACTER SET = utf8;
 
 -- ----------------------------------------------------------------------------
+-- Table vid_openecomp_epsdk.fn_app_mme_cpu
+-- ----------------------------------------------------------------------------
+CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`fn_app_mme_cpu` (
+  `MME` VARCHAR(200) NULL DEFAULT NULL,
+  `YEARMONTH` INT(11) NULL DEFAULT NULL,
+  `SCTP_CPU` INT(11) NULL DEFAULT NULL,
+  `AP_CPU` INT(11) NULL DEFAULT NULL,
+  `DP_CPU` INT(11) NULL DEFAULT NULL,
+  `ROUTER_CPU` INT(11) NULL DEFAULT NULL,
+  `PEB_CPU` INT(11) NULL DEFAULT NULL,
+  `SAU` INT(11) NULL DEFAULT NULL)
+ENGINE = InnoDB
+DEFAULT CHARACTER SET = utf8;
+
+-- ----------------------------------------------------------------------------
 -- Table vid_openecomp_epsdk.fn_audit_action
 -- ----------------------------------------------------------------------------
 CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`fn_audit_action` (
@@ -519,14 +467,14 @@
   `AFFECTED_RECORD_ID_BK` VARCHAR(500) NULL DEFAULT NULL,
   `AFFECTED_RECORD_ID` VARCHAR(4000) NULL DEFAULT NULL,
   PRIMARY KEY (`LOG_ID`),
-  INDEX `fn_audit_log_activity_cd` (`ACTIVITY_CD` ASC),
-  INDEX `fn_audit_log_user_id` (`USER_ID` ASC),
+  INDEX `FN_AUDIT_LOG_ACTIVITY_CD` (`ACTIVITY_CD` ASC),
+  INDEX `FN_AUDIT_LOG_USER_ID` (`USER_ID` ASC),
+  CONSTRAINT `FK_FN_AUDIT_REF_205_FN_LU_AC`
+    FOREIGN KEY (`ACTIVITY_CD`)
+    REFERENCES `vid_openecomp_epsdk`.`fn_lu_activity` (`ACTIVITY_CD`),
   CONSTRAINT `FK_FN_AUDIT_REF_209_FN_USER`
     FOREIGN KEY (`USER_ID`)
-    REFERENCES `vid_openecomp_epsdk`.`fn_user` (`USER_ID`),
-  CONSTRAINT `fk_fn_audit_ref_205_fn_lu_ac`
-    FOREIGN KEY (`ACTIVITY_CD`)
-    REFERENCES `vid_openecomp_epsdk`.`fn_lu_activity` (`ACTIVITY_CD`))
+    REFERENCES `vid_openecomp_epsdk`.`fn_user` (`USER_ID`))
 ENGINE = InnoDB
 DEFAULT CHARACTER SET = utf8;
 
@@ -604,6 +552,7 @@
   `DS_TYPE` VARCHAR(20) NULL DEFAULT NULL,
   PRIMARY KEY (`ID`))
 ENGINE = InnoDB
+AUTO_INCREMENT = 4
 DEFAULT CHARACTER SET = utf8;
 
 -- ----------------------------------------------------------------------------
@@ -617,6 +566,76 @@
 DEFAULT CHARACTER SET = utf8;
 
 -- ----------------------------------------------------------------------------
+-- Table vid_openecomp_epsdk.fn_license
+-- ----------------------------------------------------------------------------
+CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`fn_license` (
+  `id` DECIMAL(11,0) NOT NULL,
+  `app_id` DECIMAL(11,0) NOT NULL,
+  `ip_address` VARCHAR(100) NOT NULL,
+  `quantum_version_id` DECIMAL(11,0) NOT NULL,
+  `created_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `modified_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `created_id` DECIMAL(11,0) NULL DEFAULT NULL,
+  `modified_id` DECIMAL(11,0) NULL DEFAULT NULL,
+  `end_date` TIMESTAMP NOT NULL DEFAULT '2036-01-19 03:14:07',
+  PRIMARY KEY (`id`),
+  INDEX `fn_license_r02` (`quantum_version_id` ASC),
+  CONSTRAINT `fn_license_r02`
+    FOREIGN KEY (`quantum_version_id`)
+    REFERENCES `vid_openecomp_epsdk`.`fn_license_version` (`id`))
+ENGINE = InnoDB
+DEFAULT CHARACTER SET = utf8;
+
+-- ----------------------------------------------------------------------------
+-- Table vid_openecomp_epsdk.fn_license_app
+-- ----------------------------------------------------------------------------
+CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`fn_license_app` (
+  `id` DECIMAL(11,0) NOT NULL,
+  `app_name` VARCHAR(100) NOT NULL,
+  `ctxt_name` VARCHAR(100) NULL DEFAULT NULL,
+  INDEX `fn_license_app_ID` (`id` ASC))
+ENGINE = InnoDB
+DEFAULT CHARACTER SET = utf8;
+
+-- ----------------------------------------------------------------------------
+-- Table vid_openecomp_epsdk.fn_license_contact
+-- ----------------------------------------------------------------------------
+CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`fn_license_contact` (
+  `id` INT(11) NOT NULL,
+  `license_id` INT(11) NULL DEFAULT NULL,
+  `sbcid` VARCHAR(20) NULL DEFAULT NULL,
+  PRIMARY KEY (`id`))
+ENGINE = InnoDB
+DEFAULT CHARACTER SET = utf8;
+
+-- ----------------------------------------------------------------------------
+-- Table vid_openecomp_epsdk.fn_license_history
+-- ----------------------------------------------------------------------------
+CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`fn_license_history` (
+  `license_id` DECIMAL(11,0) NULL DEFAULT NULL,
+  `app_id` DECIMAL(11,0) NULL DEFAULT NULL,
+  `ip_address` VARCHAR(100) NULL DEFAULT NULL,
+  `quantum_version_id` DECIMAL(11,0) NULL DEFAULT NULL,
+  `created_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `modified_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `created_id` DECIMAL(11,0) NULL DEFAULT NULL,
+  `modified_id` DECIMAL(11,0) NULL DEFAULT NULL,
+  `id` DECIMAL(11,0) NOT NULL,
+  PRIMARY KEY (`id`))
+ENGINE = InnoDB
+DEFAULT CHARACTER SET = utf8;
+
+-- ----------------------------------------------------------------------------
+-- Table vid_openecomp_epsdk.fn_license_version
+-- ----------------------------------------------------------------------------
+CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`fn_license_version` (
+  `id` DECIMAL(11,0) NOT NULL,
+  `quantum_version` VARCHAR(25) NULL DEFAULT NULL,
+  PRIMARY KEY (`id`))
+ENGINE = InnoDB
+DEFAULT CHARACTER SET = utf8;
+
+-- ----------------------------------------------------------------------------
 -- Table vid_openecomp_epsdk.fn_lu_activity
 -- ----------------------------------------------------------------------------
 CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`fn_lu_activity` (
@@ -647,6 +666,40 @@
 DEFAULT CHARACTER SET = utf8;
 
 -- ----------------------------------------------------------------------------
+-- Table vid_openecomp_epsdk.fn_lu_call_times
+-- ----------------------------------------------------------------------------
+CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`fn_lu_call_times` (
+  `CALL_TIME_ID` DECIMAL(10,0) NOT NULL,
+  `CALL_TIME_AMOUNT` DECIMAL(10,0) NOT NULL,
+  `CALL_TIME_DISPLAY` VARCHAR(50) NOT NULL,
+  PRIMARY KEY (`CALL_TIME_ID`))
+ENGINE = InnoDB
+DEFAULT CHARACTER SET = utf8;
+
+-- ----------------------------------------------------------------------------
+-- Table vid_openecomp_epsdk.fn_lu_city
+-- ----------------------------------------------------------------------------
+CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`fn_lu_city` (
+  `CITY_CD` VARCHAR(2) NOT NULL,
+  `CITY` VARCHAR(100) NOT NULL,
+  `STATE_CD` VARCHAR(2) NOT NULL,
+  PRIMARY KEY (`CITY_CD`, `STATE_CD`))
+ENGINE = InnoDB
+DEFAULT CHARACTER SET = utf8;
+
+-- ----------------------------------------------------------------------------
+-- Table vid_openecomp_epsdk.fn_lu_country
+-- ----------------------------------------------------------------------------
+CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`fn_lu_country` (
+  `COUNTRY_CD` VARCHAR(3) NOT NULL,
+  `COUNTRY` VARCHAR(100) NOT NULL,
+  `FULL_NAME` VARCHAR(100) NULL DEFAULT NULL,
+  `WEBPHONE_COUNTRY_LABEL` VARCHAR(30) NULL DEFAULT NULL,
+  PRIMARY KEY (`COUNTRY_CD`))
+ENGINE = InnoDB
+DEFAULT CHARACTER SET = utf8;
+
+-- ----------------------------------------------------------------------------
 -- Table vid_openecomp_epsdk.fn_lu_menu_set
 -- ----------------------------------------------------------------------------
 CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`fn_lu_menu_set` (
@@ -657,16 +710,6 @@
 DEFAULT CHARACTER SET = utf8;
 
 -- ----------------------------------------------------------------------------
--- Table vid_openecomp_epsdk.fn_lu_message_location
--- ----------------------------------------------------------------------------
-CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`fn_lu_message_location` (
-  `message_location_id` DECIMAL(11,0) NOT NULL,
-  `message_location_descr` VARCHAR(30) NOT NULL,
-  PRIMARY KEY (`message_location_id`))
-ENGINE = InnoDB
-DEFAULT CHARACTER SET = utf8;
-
--- ----------------------------------------------------------------------------
 -- Table vid_openecomp_epsdk.fn_lu_priority
 -- ----------------------------------------------------------------------------
 CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`fn_lu_priority` (
@@ -689,6 +732,16 @@
 DEFAULT CHARACTER SET = utf8;
 
 -- ----------------------------------------------------------------------------
+-- Table vid_openecomp_epsdk.fn_lu_state
+-- ----------------------------------------------------------------------------
+CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`fn_lu_state` (
+  `STATE_CD` VARCHAR(2) NOT NULL,
+  `STATE` VARCHAR(100) NOT NULL,
+  PRIMARY KEY (`STATE_CD`))
+ENGINE = InnoDB
+DEFAULT CHARACTER SET = utf8;
+
+-- ----------------------------------------------------------------------------
 -- Table vid_openecomp_epsdk.fn_lu_tab_set
 -- ----------------------------------------------------------------------------
 CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`fn_lu_tab_set` (
@@ -730,7 +783,7 @@
   PRIMARY KEY (`MENU_ID`),
   INDEX `FK_FN_MENU_REF_196_FN_MENU` (`PARENT_ID` ASC),
   INDEX `FK_FN_MENU_MENU_SET_CD` (`MENU_SET_CD` ASC),
-  INDEX `fn_menu_function_cd` (`FUNCTION_CD` ASC),
+  INDEX `FN_MENU_FUNCTION_CD` (`FUNCTION_CD` ASC),
   CONSTRAINT `FK_FN_MENU_MENU_SET_CD`
     FOREIGN KEY (`MENU_SET_CD`)
     REFERENCES `vid_openecomp_epsdk`.`fn_lu_menu_set` (`MENU_SET_CD`),
@@ -741,7 +794,7 @@
     FOREIGN KEY (`FUNCTION_CD`)
     REFERENCES `vid_openecomp_epsdk`.`fn_function` (`FUNCTION_CD`))
 ENGINE = InnoDB
-AUTO_INCREMENT = 150039
+AUTO_INCREMENT = 150029
 DEFAULT CHARACTER SET = utf8;
 
 -- ----------------------------------------------------------------------------
@@ -752,7 +805,7 @@
   `ORG_NAME` VARCHAR(50) NOT NULL,
   `ACCESS_CD` VARCHAR(10) NULL DEFAULT NULL,
   PRIMARY KEY (`ORG_ID`),
-  INDEX `fn_org_access_cd` (`ACCESS_CD` ASC))
+  INDEX `FN_ORG_ACCESS_CD` (`ACCESS_CD` ASC))
 ENGINE = InnoDB
 DEFAULT CHARACTER SET = utf8;
 
@@ -817,12 +870,12 @@
   `IS_NONCONCURRENT` VARCHAR(1) NULL DEFAULT NULL,
   `REQUESTS_RECOVERY` VARCHAR(1) NULL DEFAULT NULL,
   PRIMARY KEY (`SCHED_NAME`, `ENTRY_ID`),
-  INDEX `idx_fn_qz_ft_trig_inst_name` (`SCHED_NAME` ASC, `INSTANCE_NAME` ASC),
-  INDEX `idx_fn_qz_ft_inst_job_req_rcvry` (`SCHED_NAME` ASC, `INSTANCE_NAME` ASC, `REQUESTS_RECOVERY` ASC),
-  INDEX `idx_fn_qz_ft_j_g` (`SCHED_NAME` ASC, `JOB_NAME` ASC, `JOB_GROUP` ASC),
-  INDEX `idx_fn_qz_ft_jg` (`SCHED_NAME` ASC, `JOB_GROUP` ASC),
-  INDEX `idx_fn_qz_ft_t_g` (`SCHED_NAME` ASC, `TRIGGER_NAME` ASC, `TRIGGER_GROUP` ASC),
-  INDEX `idx_fn_qz_ft_tg` (`SCHED_NAME` ASC, `TRIGGER_GROUP` ASC))
+  INDEX `IDX_FN_QZ_FT_TRIG_INST_NAME` (`SCHED_NAME` ASC, `INSTANCE_NAME` ASC),
+  INDEX `IDX_FN_QZ_FT_INST_JOB_REQ_RCVRY` (`SCHED_NAME` ASC, `INSTANCE_NAME` ASC, `REQUESTS_RECOVERY` ASC),
+  INDEX `IDX_FN_QZ_FT_J_G` (`SCHED_NAME` ASC, `JOB_NAME` ASC, `JOB_GROUP` ASC),
+  INDEX `IDX_FN_QZ_FT_JG` (`SCHED_NAME` ASC, `JOB_GROUP` ASC),
+  INDEX `IDX_FN_QZ_FT_T_G` (`SCHED_NAME` ASC, `TRIGGER_NAME` ASC, `TRIGGER_GROUP` ASC),
+  INDEX `IDX_FN_QZ_FT_TG` (`SCHED_NAME` ASC, `TRIGGER_GROUP` ASC))
 ENGINE = InnoDB
 DEFAULT CHARACTER SET = utf8;
 
@@ -841,8 +894,8 @@
   `REQUESTS_RECOVERY` VARCHAR(1) NOT NULL,
   `JOB_DATA` BLOB NULL DEFAULT NULL,
   PRIMARY KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`),
-  INDEX `idx_fn_qz_j_req_recovery` (`SCHED_NAME` ASC, `REQUESTS_RECOVERY` ASC),
-  INDEX `idx_fn_qz_j_grp` (`SCHED_NAME` ASC, `JOB_GROUP` ASC))
+  INDEX `IDX_FN_QZ_J_REQ_RECOVERY` (`SCHED_NAME` ASC, `REQUESTS_RECOVERY` ASC),
+  INDEX `IDX_FN_QZ_J_GRP` (`SCHED_NAME` ASC, `JOB_GROUP` ASC))
 ENGINE = InnoDB
 DEFAULT CHARACTER SET = utf8;
 
@@ -941,20 +994,18 @@
   `MISFIRE_INSTR` SMALLINT(2) NULL DEFAULT NULL,
   `JOB_DATA` BLOB NULL DEFAULT NULL,
   PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`),
-  INDEX `idx_fn_qz_t_j` (`SCHED_NAME` ASC, `JOB_NAME` ASC, `JOB_GROUP` ASC),
-  INDEX `idx_fn_qz_t_jg` (`SCHED_NAME` ASC, `JOB_GROUP` ASC),
-  INDEX `idx_fn_qz_t_c` (`SCHED_NAME` ASC, `CALENDAR_NAME` ASC),
-  INDEX `idx_fn_qz_t_g` (`SCHED_NAME` ASC, `TRIGGER_GROUP` ASC),
-  INDEX `idx_fn_qz_t_state` (`SCHED_NAME` ASC, `TRIGGER_STATE` ASC),
-  INDEX `idx_fn_qz_t_n_state` (`SCHED_NAME` ASC, `TRIGGER_NAME` ASC, `TRIGGER_GROUP` ASC, `TRIGGER_STATE` ASC),
-  INDEX `idx_fn_qz_t_n_g_state` (`SCHED_NAME` ASC, `TRIGGER_GROUP` ASC, `TRIGGER_STATE` ASC),
-  INDEX `idx_fn_qz_t_next_fire_time` (`SCHED_NAME` ASC, `NEXT_FIRE_TIME` ASC),
-  INDEX `idx_fn_qz_t_nft_st` (`SCHED_NAME` ASC, `TRIGGER_STATE` ASC, `NEXT_FIRE_TIME` ASC),
-  INDEX `idx_fn_qz_t_nft_misfire` (`SCHED_NAME` ASC, `MISFIRE_INSTR` ASC, `NEXT_FIRE_TIME` ASC),
-  INDEX `idx_fn_qz_t_nft_st_misfire` (`SCHED_NAME` ASC, `MISFIRE_INSTR` ASC, `NEXT_FIRE_TIME` ASC, `TRIGGER_STATE` ASC),
-  INDEX `idx_fn_qz_t_nft_st_misfire_grp` (`SCHED_NAME` ASC, `MISFIRE_INSTR` ASC, `NEXT_FIRE_TIME` ASC, `TRIGGER_GROUP` ASC, 
-
-`TRIGGER_STATE` ASC),
+  INDEX `IDX_FN_QZ_T_J` (`SCHED_NAME` ASC, `JOB_NAME` ASC, `JOB_GROUP` ASC),
+  INDEX `IDX_FN_QZ_T_JG` (`SCHED_NAME` ASC, `JOB_GROUP` ASC),
+  INDEX `IDX_FN_QZ_T_C` (`SCHED_NAME` ASC, `CALENDAR_NAME` ASC),
+  INDEX `IDX_FN_QZ_T_G` (`SCHED_NAME` ASC, `TRIGGER_GROUP` ASC),
+  INDEX `IDX_FN_QZ_T_STATE` (`SCHED_NAME` ASC, `TRIGGER_STATE` ASC),
+  INDEX `IDX_FN_QZ_T_N_STATE` (`SCHED_NAME` ASC, `TRIGGER_NAME` ASC, `TRIGGER_GROUP` ASC, `TRIGGER_STATE` ASC),
+  INDEX `IDX_FN_QZ_T_N_G_STATE` (`SCHED_NAME` ASC, `TRIGGER_GROUP` ASC, `TRIGGER_STATE` ASC),
+  INDEX `IDX_FN_QZ_T_NEXT_FIRE_TIME` (`SCHED_NAME` ASC, `NEXT_FIRE_TIME` ASC),
+  INDEX `IDX_FN_QZ_T_NFT_ST` (`SCHED_NAME` ASC, `TRIGGER_STATE` ASC, `NEXT_FIRE_TIME` ASC),
+  INDEX `IDX_FN_QZ_T_NFT_MISFIRE` (`SCHED_NAME` ASC, `MISFIRE_INSTR` ASC, `NEXT_FIRE_TIME` ASC),
+  INDEX `IDX_FN_QZ_T_NFT_ST_MISFIRE` (`SCHED_NAME` ASC, `MISFIRE_INSTR` ASC, `NEXT_FIRE_TIME` ASC, `TRIGGER_STATE` ASC),
+  INDEX `IDX_FN_QZ_T_NFT_ST_MISFIRE_GRP` (`SCHED_NAME` ASC, `MISFIRE_INSTR` ASC, `NEXT_FIRE_TIME` ASC, `TRIGGER_GROUP` ASC, `TRIGGER_STATE` ASC),
   CONSTRAINT `fn_qz_triggers_ibfk_1`
     FOREIGN KEY (`SCHED_NAME` , `JOB_NAME` , `JOB_GROUP`)
     REFERENCES `vid_openecomp_epsdk`.`fn_qz_job_details` (`SCHED_NAME` , `JOB_NAME` , `JOB_GROUP`))
@@ -968,8 +1019,8 @@
   `RESTRICTED_URL` VARCHAR(250) NOT NULL,
   `FUNCTION_CD` VARCHAR(30) NOT NULL,
   PRIMARY KEY (`RESTRICTED_URL`, `FUNCTION_CD`),
-  INDEX `fk_restricted_url_function_cd` (`FUNCTION_CD` ASC),
-  CONSTRAINT `fk_restricted_url_function_cd`
+  INDEX `FK_RESTRICTED_URL_FUNCTION_CD` (`FUNCTION_CD` ASC),
+  CONSTRAINT `FK_RESTRICTED_URL_FUNCTION_CD`
     FOREIGN KEY (`FUNCTION_CD`)
     REFERENCES `vid_openecomp_epsdk`.`fn_function` (`FUNCTION_CD`))
 ENGINE = InnoDB
@@ -980,7 +1031,7 @@
 -- ----------------------------------------------------------------------------
 CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`fn_role` (
   `ROLE_ID` INT(11) NOT NULL AUTO_INCREMENT,
-  `ROLE_NAME` VARCHAR(50) NOT NULL,
+  `ROLE_NAME` VARCHAR(255) NOT NULL,
   `ACTIVE_YN` VARCHAR(1) NOT NULL DEFAULT 'Y',
   `PRIORITY` DECIMAL(4,0) NULL DEFAULT NULL,
   PRIMARY KEY (`ROLE_ID`))
@@ -988,6 +1039,9 @@
 AUTO_INCREMENT = 17
 DEFAULT CHARACTER SET = utf8;
 
+ALTER TABLE `vid_openecomp_epsdk`.`fn_role` MODIFY `ROLE_NAME` VARCHAR (255);
+
+
 -- ----------------------------------------------------------------------------
 -- Table vid_openecomp_epsdk.fn_role_composite
 -- ----------------------------------------------------------------------------
@@ -1012,12 +1066,12 @@
   `ROLE_ID` INT(11) NOT NULL,
   `FUNCTION_CD` VARCHAR(30) NOT NULL,
   PRIMARY KEY (`ROLE_ID`, `FUNCTION_CD`),
-  INDEX `fn_role_function_function_cd` (`FUNCTION_CD` ASC),
-  INDEX `fn_role_function_role_id` (`ROLE_ID` ASC),
+  INDEX `FN_ROLE_FUNCTION_FUNCTION_CD` (`FUNCTION_CD` ASC),
+  INDEX `FN_ROLE_FUNCTION_ROLE_ID` (`ROLE_ID` ASC),
   CONSTRAINT `FK_FN_ROLE__REF_198_FN_ROLE`
     FOREIGN KEY (`ROLE_ID`)
     REFERENCES `vid_openecomp_epsdk`.`fn_role` (`ROLE_ID`),
-  CONSTRAINT `fk_fn_role__ref_201_fn_funct`
+  CONSTRAINT `FK_FN_ROLE__REF_201_FN_FUNCT`
     FOREIGN KEY (`FUNCTION_CD`)
     REFERENCES `vid_openecomp_epsdk`.`fn_function` (`FUNCTION_CD`))
 ENGINE = InnoDB
@@ -1053,12 +1107,12 @@
   `PARENT_TAB_CD` VARCHAR(30) NULL DEFAULT NULL,
   `TAB_SET_CD` VARCHAR(30) NULL DEFAULT NULL,
   PRIMARY KEY (`TAB_CD`),
-  INDEX `fk_fn_tab_function_cd` (`FUNCTION_CD` ASC),
-  INDEX `fk_fn_tab_set_cd` (`TAB_SET_CD` ASC),
-  CONSTRAINT `fk_fn_tab_function_cd`
+  INDEX `FK_FN_TAB_FUNCTION_CD` (`FUNCTION_CD` ASC),
+  INDEX `FK_FN_TAB_SET_CD` (`TAB_SET_CD` ASC),
+  CONSTRAINT `FK_FN_TAB_FUNCTION_CD`
     FOREIGN KEY (`FUNCTION_CD`)
     REFERENCES `vid_openecomp_epsdk`.`fn_function` (`FUNCTION_CD`),
-  CONSTRAINT `fk_fn_tab_set_cd`
+  CONSTRAINT `FK_FN_TAB_SET_CD`
     FOREIGN KEY (`TAB_SET_CD`)
     REFERENCES `vid_openecomp_epsdk`.`fn_lu_tab_set` (`TAB_SET_CD`))
 ENGINE = InnoDB
@@ -1071,7 +1125,7 @@
   `SELECTED_TAB_CD` VARCHAR(30) NOT NULL,
   `TAB_URI` VARCHAR(40) NOT NULL,
   PRIMARY KEY (`SELECTED_TAB_CD`, `TAB_URI`),
-  CONSTRAINT `fk_fn_tab_selected_tab_cd`
+  CONSTRAINT `FK_FN_TAB_SELECTED_TAB_CD`
     FOREIGN KEY (`SELECTED_TAB_CD`)
     REFERENCES `vid_openecomp_epsdk`.`fn_tab` (`TAB_CD`))
 ENGINE = InnoDB
@@ -1124,37 +1178,38 @@
   `FIN_LOC_CODE` VARCHAR(10) NULL DEFAULT NULL,
   `SILO_STATUS` VARCHAR(10) NULL DEFAULT NULL,
   PRIMARY KEY (`USER_ID`),
-  UNIQUE INDEX `fn_user_hrid` (`HRID` ASC),
-  UNIQUE INDEX `fn_user_login_id` (`LOGIN_ID` ASC),
-  INDEX `fn_user_address_id` (`ADDRESS_ID` ASC),
-  INDEX `fn_user_alert_method_cd` (`ALERT_METHOD_CD` ASC),
-  INDEX `fn_user_org_id` (`ORG_ID` ASC),
-  INDEX `fk_fn_user_ref_197_fn_user` (`MANAGER_ID` ASC),
-  INDEX `fk_fn_user_ref_198_fn_user` (`CREATED_ID` ASC),
-  INDEX `fk_fn_user_ref_199_fn_user` (`MODIFIED_ID` ASC),
-  INDEX `fk_timezone` (`TIMEZONE` ASC),
-  CONSTRAINT `fk_fn_user_ref_110_fn_org`
+  UNIQUE INDEX `FN_USER_HRID` (`HRID` ASC),
+  UNIQUE INDEX `FN_USER_LOGIN_ID` (`LOGIN_ID` ASC),
+  INDEX `FN_USER_ADDRESS_ID` (`ADDRESS_ID` ASC),
+  INDEX `FN_USER_ALERT_METHOD_CD` (`ALERT_METHOD_CD` ASC),
+  INDEX `FN_USER_ORG_ID` (`ORG_ID` ASC),
+  INDEX `FK_FN_USER_REF_197_FN_USER` (`MANAGER_ID` ASC),
+  INDEX `FK_FN_USER_REF_198_FN_USER` (`CREATED_ID` ASC),
+  INDEX `FK_FN_USER_REF_199_FN_USER` (`MODIFIED_ID` ASC),
+  INDEX `FK_TIMEZONE` (`TIMEZONE` ASC),
+  CONSTRAINT `FK_FN_USER_REF_110_FN_ORG`
     FOREIGN KEY (`ORG_ID`)
     REFERENCES `vid_openecomp_epsdk`.`fn_org` (`ORG_ID`),
-  CONSTRAINT `fk_fn_user_ref_123_fn_lu_al`
+  CONSTRAINT `FK_FN_USER_REF_123_FN_LU_AL`
     FOREIGN KEY (`ALERT_METHOD_CD`)
     REFERENCES `vid_openecomp_epsdk`.`fn_lu_alert_method` (`ALERT_METHOD_CD`),
-  CONSTRAINT `fk_fn_user_ref_197_fn_user`
+  CONSTRAINT `FK_FN_USER_REF_197_FN_USER`
     FOREIGN KEY (`MANAGER_ID`)
     REFERENCES `vid_openecomp_epsdk`.`fn_user` (`USER_ID`),
-  CONSTRAINT `fk_fn_user_ref_198_fn_user`
+  CONSTRAINT `FK_FN_USER_REF_198_FN_USER`
     FOREIGN KEY (`CREATED_ID`)
     REFERENCES `vid_openecomp_epsdk`.`fn_user` (`USER_ID`),
-  CONSTRAINT `fk_fn_user_ref_199_fn_user`
+  CONSTRAINT `FK_FN_USER_REF_199_FN_USER`
     FOREIGN KEY (`MODIFIED_ID`)
     REFERENCES `vid_openecomp_epsdk`.`fn_user` (`USER_ID`),
-  CONSTRAINT `fk_timezone`
+  CONSTRAINT `FK_TIMEZONE`
     FOREIGN KEY (`TIMEZONE`)
     REFERENCES `vid_openecomp_epsdk`.`fn_lu_timezone` (`TIMEZONE_ID`))
 ENGINE = InnoDB
-AUTO_INCREMENT = 2
+AUTO_INCREMENT = 3
 DEFAULT CHARACTER SET = utf8;
 
+
 -- ----------------------------------------------------------------------------
 -- Table vid_openecomp_epsdk.fn_user_pseudo_role
 -- ----------------------------------------------------------------------------
@@ -1162,11 +1217,11 @@
   `PSEUDO_ROLE_ID` INT(11) NOT NULL,
   `USER_ID` INT(11) NOT NULL,
   PRIMARY KEY (`PSEUDO_ROLE_ID`, `USER_ID`),
-  INDEX `fk_pseudo_role_user_id` (`USER_ID` ASC),
-  CONSTRAINT `fk_pseudo_role_pseudo_role_id`
+  INDEX `FK_PSEUDO_ROLE_USER_ID` (`USER_ID` ASC),
+  CONSTRAINT `FK_PSEUDO_ROLE_PSEUDO_ROLE_ID`
     FOREIGN KEY (`PSEUDO_ROLE_ID`)
     REFERENCES `vid_openecomp_epsdk`.`fn_role` (`ROLE_ID`),
-  CONSTRAINT `fk_pseudo_role_user_id`
+  CONSTRAINT `FK_PSEUDO_ROLE_USER_ID`
     FOREIGN KEY (`USER_ID`)
     REFERENCES `vid_openecomp_epsdk`.`fn_user` (`USER_ID`))
 ENGINE = InnoDB
@@ -1181,16 +1236,16 @@
   `PRIORITY` DECIMAL(4,0) NULL DEFAULT NULL,
   `APP_ID` INT(11) NOT NULL DEFAULT '1',
   PRIMARY KEY (`USER_ID`, `ROLE_ID`, `APP_ID`),
-  INDEX `fn_user_role_role_id` (`ROLE_ID` ASC),
-  INDEX `fn_user_role_user_id` (`USER_ID` ASC),
-  INDEX `fk_fn_user__ref_178_fn_app_IDX` (`APP_ID` ASC),
+  INDEX `FN_USER_ROLE_ROLE_ID` (`ROLE_ID` ASC),
+  INDEX `FN_USER_ROLE_USER_ID` (`USER_ID` ASC),
+  INDEX `FK_FN_USER__REF_178_FN_APP_idx` (`APP_ID` ASC),
   CONSTRAINT `FK_FN_USER__REF_172_FN_USER`
     FOREIGN KEY (`USER_ID`)
     REFERENCES `vid_openecomp_epsdk`.`fn_user` (`USER_ID`),
   CONSTRAINT `FK_FN_USER__REF_175_FN_ROLE`
     FOREIGN KEY (`ROLE_ID`)
     REFERENCES `vid_openecomp_epsdk`.`fn_role` (`ROLE_ID`),
-  CONSTRAINT `fk_fn_user__ref_178_fn_app`
+  CONSTRAINT `FK_FN_USER__REF_178_FN_APP`
     FOREIGN KEY (`APP_ID`)
     REFERENCES `vid_openecomp_epsdk`.`fn_app` (`APP_ID`))
 ENGINE = InnoDB
@@ -1218,26 +1273,12 @@
 DEFAULT CHARACTER SET = utf8;
 
 -- ----------------------------------------------------------------------------
--- Table vid_openecomp_epsdk.rcloudinvocation
+-- Table vid_openecomp_epsdk.fn_xmltype
 -- ----------------------------------------------------------------------------
-CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`rcloudinvocation` (
-  `id` VARCHAR(128) NOT NULL,
-  `created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-  `userinfo` VARCHAR(2048) NOT NULL,
-  `notebookid` VARCHAR(128) NOT NULL,
-  `parameters` VARCHAR(2048) NULL DEFAULT NULL,
-  `tokenreaddate` TIMESTAMP NULL DEFAULT NULL,
-  PRIMARY KEY (`id`))
-ENGINE = InnoDB
-DEFAULT CHARACTER SET = utf8;
-
--- ----------------------------------------------------------------------------
--- Table vid_openecomp_epsdk.rcloudnotebook
--- ----------------------------------------------------------------------------
-CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`rcloudnotebook` (
-  `notebookname` VARCHAR(128) NOT NULL,
-  `notebookid` VARCHAR(128) NOT NULL,
-  PRIMARY KEY (`notebookname`))
+CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`fn_xmltype` (
+  `ID` DECIMAL(10,0) NOT NULL,
+  `XML_DOCUMENT` TEXT NULL DEFAULT NULL,
+  UNIQUE INDEX `FN_XMLTYPE_ID` (`ID` ASC))
 ENGINE = InnoDB
 DEFAULT CHARACTER SET = utf8;
 
@@ -1257,16 +1298,87 @@
   `IDLE_CONNECTION_TEST_PERIOD` INT(11) NOT NULL)
 ENGINE = InnoDB
 DEFAULT CHARACTER SET = utf8;
+-- ----------------------------------------------------------------------------
+-- Table vid_openecomp_epsdk.vid_vnf
+-- ----------------------------------------------------------------------------
+
+CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`vid_vnf` (
+  `VNF_DB_ID` int(11) NOT NULL AUTO_INCREMENT,
+  `VNF_APP_UUID` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
+  `VNF_APP_INVARIANT_UUID` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
+  `CREATED_DATE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `MODIFIED_DATE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  PRIMARY KEY (`VNF_DB_ID`),
+  UNIQUE KEY `vid_vnf_VNF_ID_uindex` (`VNF_APP_UUID`,`VNF_APP_INVARIANT_UUID`)
+) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
+
+-- ----------------------------------------------------------------------------
+-- Table vid_openecomp_epsdk.vid_workflow
+-- ----------------------------------------------------------------------------
+
+CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`vid_workflow` (
+  `WORKFLOW_DB_ID` int(11) NOT NULL AUTO_INCREMENT,
+  `WORKFLOW_APP_NAME` varchar(50) COLLATE utf8_bin NOT NULL,
+  `CREATED_DATE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `MODIFIED_DATE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  PRIMARY KEY (`WORKFLOW_DB_ID`),
+  UNIQUE KEY `vid_workflow_workflow_uuid_uindex` (`WORKFLOW_APP_NAME`),
+  UNIQUE KEY `vid_workflow_WORKFLOW_ID_uindex` (`WORKFLOW_DB_ID`)
+) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------------------------------------------------------
+-- Table vid_openecomp_epsdk.vid_vnf_workflow
+-- ----------------------------------------------------------------------------
+
+
+CREATE TABLE IF NOT EXISTS `vid_openecomp_epsdk`.`vid_vnf_workflow` (
+  `VNF_DB_ID` int(11) NOT NULL,
+  `WORKFLOW_DB_ID` int(11) NOT NULL,
+  KEY `vid_vnf_workflow_vid_vnf_VND_ID_fk` (`VNF_DB_ID`),
+  KEY `vid_vnf_workflow_vid_workflow_WORKFLOW_ID_fk` (`WORKFLOW_DB_ID`),
+  CONSTRAINT `vid_vnf_workflow_vid_vnf_VND_ID_fk` FOREIGN KEY (`VNF_DB_ID`) REFERENCES `vid_vnf` (`VNF_DB_ID`),
+  CONSTRAINT `vid_vnf_workflow_vid_workflow_WORKFLOW_ID_fk` FOREIGN KEY (`WORKFLOW_DB_ID`) REFERENCES `vid_openecomp_epsdk`.`vid_workflow` (`WORKFLOW_DB_ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+
+-- ----------------------------------------------------------------------------
+-- Table vid_openecomp_epsdk.vid_category_parameter
+-- ----------------------------------------------------------------------------
+
+
+CREATE TABLE IF NOT EXISTS `vid_category_parameter` (
+	`CATEGORY_ID` INT(11) NOT NULL AUTO_INCREMENT,
+	`NAME` VARCHAR(255) NULL COLLATE 'utf8_bin',
+	`ID_SUPPORTED` TINYINT(1) NOT NULL DEFAULT '0',
+  `CREATED_DATE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `MODIFIED_DATE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+	PRIMARY KEY (`CATEGORY_ID`)
+) COLLATE='utf8_bin' ENGINE=InnoDB AUTO_INCREMENT=5;
+
+-------------------------------------------------------------------------------
+
+ALTER TABLE `vid_category_parameter`
+	ADD COLUMN if not exists `FAMILY` ENUM('PARAMETER_STANDARDIZATION','TENANT_ISOLATION') NOT NULL DEFAULT 'PARAMETER_STANDARDIZATION' AFTER `ID_SUPPORTED`;
+-- ----------------------------------------------------------------------------
+-- Table vid_openecomp_epsdk.vid_category_parameter
+-- ----------------------------------------------------------------------------
+CREATE TABLE IF NOT EXISTS `vid_category_parameter_option` (
+  `CATEGORY_OPT_DB_ID` INT(11) NOT NULL AUTO_INCREMENT,
+  `CATEGORY_OPT_APP_ID` VARCHAR(50) NOT NULL COLLATE 'utf8_bin',
+  `NAME` VARCHAR(50) NULL COLLATE 'utf8_bin',
+  `CATEGORY_ID` INT(11) NOT NULL DEFAULT '0',
+  `CREATED_DATE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `MODIFIED_DATE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  PRIMARY KEY (`CATEGORY_OPT_DB_ID`),
+  UNIQUE INDEX `APP_ID_CATEGORY_UNIQUE` (`CATEGORY_ID`, `CATEGORY_OPT_APP_ID`),
+  UNIQUE INDEX `NAME_CATEGORY_UNIQUE` (`CATEGORY_ID`, `NAME`),
+  CONSTRAINT `FK_OWNING_ENTITY_OPTIONS_TO_OE` FOREIGN KEY (`CATEGORY_ID`) REFERENCES `vid_openecomp_epsdk`.`vid_category_parameter` (`CATEGORY_ID`)
+) COLLATE='utf8_bin' ENGINE=InnoDB AUTO_INCREMENT=25;
+
 
 -- ----------------------------------------------------------------------------
 -- View vid_openecomp_epsdk.v_url_access
 -- ----------------------------------------------------------------------------
-CREATE OR REPLACE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW `v_url_access` AS select distinct `m`.`ACTION` AS 
-
-`URL`,`m`.`FUNCTION_CD` AS `FUNCTION_CD` from `fn_menu` `m` where (`m`.`ACTION` is not null) union select distinct 
-
-`t`.`ACTION` AS `URL`,`t`.`FUNCTION_CD` AS `FUNCTION_CD` from `fn_tab` `t` where (`t`.`ACTION` is not null) union select 
-
-`r`.`RESTRICTED_URL` AS `URL`,`r`.`FUNCTION_CD` AS `FUNCTION_CD` from `fn_restricted_url` `r`;
+CREATE OR REPLACE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW `v_url_access` AS select distinct `m`.`ACTION` AS `URL`,`m`.`FUNCTION_CD` AS `FUNCTION_CD` from `fn_menu` `m` where (`m`.`ACTION` is not null) union select distinct `t`.`ACTION` AS `URL`,`t`.`FUNCTION_CD` AS `FUNCTION_CD` from `fn_tab` `t` where (`t`.`ACTION` is not null) union select `r`.`RESTRICTED_URL` AS `URL`,`r`.`FUNCTION_CD` AS `FUNCTION_CD` from `fn_restricted_url` `r`;
 SET FOREIGN_KEY_CHECKS = 1;
 
diff --git a/epsdk-app-onap/src/main/swm/common/common.sh b/epsdk-app-onap/src/main/swm/common/common.sh
deleted file mode 100755
index 4b98a5e..0000000
--- a/epsdk-app-onap/src/main/swm/common/common.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/bash
-
-if [[ "${INSTALL_ROOT}" = */ ]]; then
-	export ROOT_DIR=${INSTALL_ROOT}opt/app/vid/portal
-else
-	export ROOT_DIR=${INSTALL_ROOT}/opt/app/vid/portal
-fi
-
-export JAVA_HOME=/opt/app/java/jdk/jdk180
-
-
-OS=`uname`
-
-if [ "${OS}" = "SunOS" ]; then
-    CURRENT_USER=`/usr/xpg4/bin/id -un`
-    CURRENT_GROUP=`/usr/xpg4/bin/id -gn`
-else
-    CURRENT_USER=`id -un`
-    CURRENT_GROUP=`id -gn`
-fi
-
-export CURRENT_USER CURRENT_GROUP
-export TOMCAT_HOME=/opt/app/vid/tomcat
-
-if [ -z "${VID_ENDPOINT_NAME}" ]; then
-	VID_ENDPOINT_NAME="vid"
-fi
-
-# Fail - used to quickly exit with a rc and error message
-fail() {
-    rc=$1
-    shift;
-    echo "ERROR: $@"
-    exit $rc
-}
diff --git a/epsdk-app-onap/src/main/swm/common/localize.sh b/epsdk-app-onap/src/main/swm/common/localize.sh
deleted file mode 100755
index 711287e..0000000
--- a/epsdk-app-onap/src/main/swm/common/localize.sh
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/bash
-
-COMMON_DIR="$(dirname "$AFTSWM_ACTIONHANDLER_SCRIPT")/../../common"
-
-source "${COMMON_DIR}/localize_logback.sh" || {
-	echo "ERROR: Localizing logback.xml failed"
-	exit 1
-}
-
-source "${COMMON_DIR}/localize_portal.sh" || {
-	echo "ERROR: Localizing portal.properties failed"
-	exit 1
-}
-
-source "${COMMON_DIR}/localize_quartz.sh" || {
-	echo "ERROR: Localizing quartz.properties failed"
-	exit 1
-}
-
-source "${COMMON_DIR}/localize_system.sh" || {
-	echo "ERROR: Localizing system.properties failed"
-	exit 1
-}
-
-source "${COMMON_DIR}/localize_cache.sh" || {
-	echo "ERROR: Localizing cache.ccf failed"
-	exit 1
-}
-
-source "${COMMON_DIR}/localize_asdc.sh" || {
-	echo "ERROR: Localizing asdc.properties failed"
-	exit 1
-}
diff --git a/epsdk-app-onap/src/main/swm/common/localize_asdc.sh b/epsdk-app-onap/src/main/swm/common/localize_asdc.sh
deleted file mode 100755
index 5774e5a..0000000
--- a/epsdk-app-onap/src/main/swm/common/localize_asdc.sh
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/bin/bash
-
-FINAL_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/conf/asdc.properties
-TEMPLATE_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/conf/asdc_template.properties
-BACKUP1_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/conf/asdc.properties.bk.1
-BACKUP2_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/conf/asdc.properties.bk.2
-
-echo "Localizing the SDC client configuration"
-
-if [ -z "${ASDC_CLIENT_TYPE}" ]; then
-	ASDC_CLIENT_TYPE=REST
-fi
-
-if [ "${ASDC_CLIENT_TYPE}" = "REST" ]; then
-	if [ -z "${ASDC_CLIENT_REST_HOST}" ]; then
-		echo 'ASDC_CLIENT_REST_HOST must be provided when ASDC_CLIENT_TYPE=REST'
-		exit 1
-	fi
-
-	if [ -z "${ASDC_CLIENT_REST_AUTH}" ]; then
-		echo 'ASDC_CLIENT_REST_AUTH must be provided when ASDC_CLIENT_TYPE=REST'
-		exit 2
-	fi
-
-	if [ -z "${ASDC_CLIENT_REST_PROTOCOL}" ]; then
-		ASDC_CLIENT_REST_PROTOCOL=http
-	fi
-
-	if [ -z "${ASDC_CLIENT_REST_PORT}" ]; then
-		ASDC_CLIENT_REST_PORT=8080
-	fi
-else
-	ASDC_CLIENT_REST_HOST=""
-	ASDC_CLIENT_REST_AUTH=""
-	ASDC_CLIENT_REST_PROTOCOL="http"
-	ASDC_CLIENT_REST_PORT="8080"
-fi
-
-#------------------------------------------------------------------------
-#- MAKE A BACKUP OF PREVIOUS BACKUP FILE, IF EXISTS
-#------------------------------------------------------------------------
-if [ -f ${BACKUP1_CONFIG_FILE} ]; then
-    cp -f ${BACKUP1_CONFIG_FILE} ${BACKUP2_CONFIG_FILE} || {
-        echo "ERROR: Could not copy ${BACKUP1_CONFIG_FILE} to ${BACKUP2_CONFIG_FILE}"
-        exit 2
-    }
-fi
- 
-#------------------------------------------------------------------------
-#- MAKE A BACKUP OF CURRENT FILE, IF EXISTS
-#------------------------------------------------------------------------
-if [ -f ${FINAL_CONFIG_FILE} ]; then
-    cp -f ${FINAL_CONFIG_FILE} ${BACKUP1_CONFIG_FILE} || {
-        echo "ERROR: Could not copy ${FINAL_CONFIG_FILE} to ${BACKUP1_CONFIG_FILE}"
-        exit 3
-    }
-fi
-
-sed -e 's ${ASDC_CLIENT_TYPE} '${ASDC_CLIENT_TYPE}' g' \
-	-e 's ${ASDC_CLIENT_REST_HOST} '${ASDC_CLIENT_REST_HOST}' g' \
-	-e 's ${ASDC_CLIENT_REST_PORT} '${ASDC_CLIENT_REST_PORT}' g' \
-	-e 's ${ASDC_CLIENT_REST_PROTOCOL} '${ASDC_CLIENT_REST_PROTOCOL}' g' \
-	-e 's/${ASDC_CLIENT_REST_AUTH}/'"${ASDC_CLIENT_REST_AUTH}"'/g' ${TEMPLATE_CONFIG_FILE} > ${FINAL_CONFIG_FILE} || {
-		echo "ERROR: Could not process template file ${TEMPLATE_CONFIG_FILE} into ${FINAL_CONFIG_FILE}"
-		exit 4
-	}
-
-echo "Localized ${FINAL_CONFIG_FILE} successfully."
diff --git a/epsdk-app-onap/src/main/swm/common/localize_cache.sh b/epsdk-app-onap/src/main/swm/common/localize_cache.sh
deleted file mode 100755
index 00069f8..0000000
--- a/epsdk-app-onap/src/main/swm/common/localize_cache.sh
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/bin/bash
-
-FINAL_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/classes/cache.ccf
-TEMPLATE_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/classes/cache_template.ccf
-BACKUP1_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/classes/cache.ccf.bk.1
-BACKUP2_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/classes/cache.ccf.bk.2
-
-echo "Localizing the VID cache configuration"
-
-if [ -z "${CACHE_DIRECTORY}" ]; then
-	CACHE_DIRECTORY=${ROOT_DIR}/cache
-fi
-
-mkdir -p "${CACHE_DIRECTORY}"
-
-#------------------------------------------------------------------------
-#- MAKE A BACKUP OF PREVIOUS BACKUP FILE, IF EXISTS
-#------------------------------------------------------------------------
-if [ -f ${BACKUP1_CONFIG_FILE} ]; then
-    cp -f ${BACKUP1_CONFIG_FILE} ${BACKUP2_CONFIG_FILE} || {
-        echo "ERROR: Could not copy ${BACKUP1_CONFIG_FILE} to ${BACKUP2_CONFIG_FILE}"
-        exit 1
-    }
-fi
- 
-#------------------------------------------------------------------------
-#- MAKE A BACKUP OF CURRENT FILE, IF EXISTS
-#------------------------------------------------------------------------
-if [ -f ${FINAL_CONFIG_FILE} ]; then
-    cp -f ${FINAL_CONFIG_FILE} ${BACKUP1_CONFIG_FILE} || {
-        echo "ERROR: Could not copy ${FINAL_CONFIG_FILE} to ${BACKUP1_CONFIG_FILE}"
-        exit 2
-    }
-fi
-
-sed -e 's,${CACHE_DIRECTORY},'${CACHE_DIRECTORY}',g' ${TEMPLATE_CONFIG_FILE} > ${FINAL_CONFIG_FILE} || {
-		echo "ERROR: Could not process template file ${TEMPLATE_CONFIG_FILE} into ${FINAL_CONFIG_FILE}"
-		exit 3
-	}
-
-echo "Localized ${FINAL_CONFIG_FILE} successfully."
diff --git a/epsdk-app-onap/src/main/swm/common/localize_log4j.sh b/epsdk-app-onap/src/main/swm/common/localize_log4j.sh
deleted file mode 100755
index 1b044aa..0000000
--- a/epsdk-app-onap/src/main/swm/common/localize_log4j.sh
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/bin/bash
-
-FINAL_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/conf/log4j.properties
-TEMPLATE_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/conf/log4j_template.properties
-BACKUP1_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/conf/log4j.properties.bk.1
-BACKUP2_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/conf/log4j.properties.bk.2
-
-echo "Localizing the VID log4j configuration"
-
-if [ -z "${LOG4J_LOGLEVEL}" ]; then
-	LOG4J_LOGLEVEL=INFO
-fi
-
-
-if [ -z "${LOG4J_APPENDER}" ]; then
-	LOG4J_APPENDER=rollingfile
-fi
-
-if [ -z "${LOG4J_LOGS_DIRECTORY}" ]; then
-	LOG4J_LOGS_DIRECTORY=${ROOT_DIR}/logs
-fi
-
-mkdir -p ${LOG4J_LOGS_DIRECTORY}
-
-#------------------------------------------------------------------------
-#- MAKE A BACKUP OF PREVIOUS BACKUP FILE, IF EXISTS
-#------------------------------------------------------------------------
-if [ -f ${BACKUP1_CONFIG_FILE} ]; then
-    cp -f ${BACKUP1_CONFIG_FILE} ${BACKUP2_CONFIG_FILE} || {
-        echo "ERROR: Could not copy ${BACKUP1_CONFIG_FILE} to ${BACKUP2_CONFIG_FILE}"
-        exit 1
-    }
-fi
- 
-#------------------------------------------------------------------------
-#- MAKE A BACKUP OF CURRENT FILE, IF EXISTS
-#------------------------------------------------------------------------
-if [ -f ${FINAL_CONFIG_FILE} ]; then
-    cp -f ${FINAL_CONFIG_FILE} ${BACKUP1_CONFIG_FILE} || {
-        echo "ERROR: Could not copy ${FINAL_CONFIG_FILE} to ${BACKUP1_CONFIG_FILE}"
-        exit 2
-    }
-fi
-
-sed -e 's/${LOG4J_LOGLEVEL}/'${LOG4J_LOGLEVEL}'/g' \
-	-e 's/${LOG4J_APPENDER}/'${LOG4J_APPENDER}'/g' \
-	-e 's,${LOG4J_LOGS_DIRECTORY},'${LOG4J_LOGS_DIRECTORY}',g' ${TEMPLATE_CONFIG_FILE} > ${FINAL_CONFIG_FILE} || {
-		echo "ERROR: Could not process template file ${TEMPLATE_CONFIG_FILE} into ${FINAL_CONFIG_FILE}"
-		exit 3
-	}
-
-echo "Localized ${FINAL_CONFIG_FILE} successfully."
-
-
diff --git a/epsdk-app-onap/src/main/swm/common/localize_logback.sh b/epsdk-app-onap/src/main/swm/common/localize_logback.sh
deleted file mode 100755
index bda2486..0000000
--- a/epsdk-app-onap/src/main/swm/common/localize_logback.sh
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/bin/bash
-
-FINAL_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/classes/logback.xml
-TEMPLATE_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/classes/logback_template.xml
-BACKUP1_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/classes/logback.xml.bk.1
-BACKUP2_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/classes/logback.xml.bk.2
-
-echo "Localizing the VID logback configuration"
-
-if [ -z "${VID_LOG_DIR}" ]; then
-	VID_LOG_DIR="${ROOT_DIR}/logs"
-fi
-
-if [ -z "${VID_LOG_LEVEL}" ]; then
-	VID_LOG_LEVEL="INFO"
-fi
-
-mkdir -p "${VID_LOG_DIR}"
-
-#------------------------------------------------------------------------
-#- MAKE A BACKUP OF PREVIOUS BACKUP FILE, IF EXISTS
-#------------------------------------------------------------------------
-if [ -f ${BACKUP1_CONFIG_FILE} ]; then
-    cp -f ${BACKUP1_CONFIG_FILE} ${BACKUP2_CONFIG_FILE} || {
-        echo "ERROR: Could not copy ${BACKUP1_CONFIG_FILE} to ${BACKUP2_CONFIG_FILE}"
-        exit 1
-    }
-fi
- 
-#------------------------------------------------------------------------
-#- MAKE A BACKUP OF CURRENT FILE, IF EXISTS
-#------------------------------------------------------------------------
-if [ -f ${FINAL_CONFIG_FILE} ]; then
-    cp -f ${FINAL_CONFIG_FILE} ${BACKUP1_CONFIG_FILE} || {
-        echo "ERROR: Could not copy ${FINAL_CONFIG_FILE} to ${BACKUP1_CONFIG_FILE}"
-        exit 2
-    }
-fi
-
-sed -e 's/${VID_LOG_LEVEL}/'${VID_LOG_LEVEL}'/g' \
-	-e 's,${VID_LOG_DIR},'${VID_LOG_DIR}',g' ${TEMPLATE_CONFIG_FILE} > ${FINAL_CONFIG_FILE} || {
-		echo "ERROR: Could not process template file ${TEMPLATE_CONFIG_FILE} into ${FINAL_CONFIG_FILE}"
-		exit 3
-	}
-
-echo "Localized ${FINAL_CONFIG_FILE} successfully."
diff --git a/epsdk-app-onap/src/main/swm/common/localize_portal.sh b/epsdk-app-onap/src/main/swm/common/localize_portal.sh
deleted file mode 100755
index 27ea24a..0000000
--- a/epsdk-app-onap/src/main/swm/common/localize_portal.sh
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/bin/bash
-
-FINAL_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/classes/portal.properties
-TEMPLATE_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/classes/portal_template.properties
-BACKUP1_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/classes/portal.properties.bk.1
-BACKUP2_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/classes/portal.properties.bk.2
-
-echo "Localizing the VID portal configuration"
-
-if [ -z "${VID_ECOMP_REDIRECT_URL}" ]; then
-	VID_ECOMP_REDIRECT_URL=http://portal.api.simpledemo.onap.org:8989/ONAPPORTAL/login.htm
-fi
-
-if [ -z "${VID_WJ_LOGOUT_URL}" ]; then
-	VID_WJ_LOGOUT_URL=https://portal.openecomp.org/ecompportal/ecompportal/process_csp
-fi
-
-if [ -z "${VID_ECOMP_REST_URL}" ]; then
-	VID_ECOMP_REST_URL=http://portal.api.simpledemo.onap.org:8989/ONAPPORTAL/auxapi
-fi
-
-if [ -z "${VID_UEB_URL_LIST}" ]; then
-	VID_UEB_URL_LIST=ueb.openecomp.org
-fi
-
-if [ -z "${VID_UEB_CONSUMER_GROUP}" ]; then
-	VID_UEB_CONSUMER_GROUP=VID
-fi
-
-if [ -z "${VID_ECOMP_PORTAL_INBOX_NAME}" ]; then
-	VID_ECOMP_PORTAL_INBOX_NAME=ECOMP-PORTAL-INBOX-DEV-LOCAL
-fi
-
-if [ -z "${VID_UEB_APP_KEY}" ]; then
-	VID_UEB_APP_KEY=sYH0NJnsKmJC1B2A
-fi
-
-if [ -z "${VID_UEB_APP_SECRET}" ]; then
-	VID_UEB_APP_SECRET=YOtknsT2wVFz9WISlSPDaAtd
-fi
-
-if [ -z "${VID_UEB_APP_MAILBOX_NAME}" ]; then
-	VID_UEB_APP_MAILBOX_NAME="ECOMP-PORTAL-OUTBOX-90"
-fi
-
-if [ -z "${VID_UEB_LISTENERS_ENABLE}" ]; then
-	VID_UEB_LISTENERS_ENABLE="false"
-fi
-
-#------------------------------------------------------------------------
-#- MAKE A BACKUP OF PREVIOUS BACKUP FILE, IF EXISTS
-#------------------------------------------------------------------------
-if [ -f ${BACKUP1_CONFIG_FILE} ]; then
-    cp -f ${BACKUP1_CONFIG_FILE} ${BACKUP2_CONFIG_FILE} || {
-        echo "ERROR: Could not copy ${BACKUP1_CONFIG_FILE} to ${BACKUP2_CONFIG_FILE}"
-        exit 2
-    }
-fi
- 
-#------------------------------------------------------------------------
-#- MAKE A BACKUP OF CURRENT FILE, IF EXISTS
-#------------------------------------------------------------------------
-if [ -f ${FINAL_CONFIG_FILE} ]; then
-    cp -f ${FINAL_CONFIG_FILE} ${BACKUP1_CONFIG_FILE} || {
-        echo "ERROR: Could not copy ${FINAL_CONFIG_FILE} to ${BACKUP1_CONFIG_FILE}"
-        exit 3
-    }
-fi
-
-sed -e 's ${VID_WJ_LOGOUT_URL} '${VID_WJ_LOGOUT_URL}' g' \
-	-e 's ${VID_ECOMP_REDIRECT_URL} '${VID_ECOMP_REDIRECT_URL}' g' \
-	-e 's ${VID_ECOMP_REST_URL} '${VID_ECOMP_REST_URL}' g' \
-	-e 's ${VID_UEB_URL_LIST} '${VID_UEB_URL_LIST}' g' \
-	-e 's ${VID_ECOMP_PORTAL_INBOX_NAME} '${VID_ECOMP_PORTAL_INBOX_NAME}' g' \
-	-e 's ${VID_UEB_APP_KEY} '${VID_UEB_APP_KEY}' g' \
-	-e 's ${VID_UEB_APP_SECRET} '${VID_UEB_APP_SECRET}' g' \
-	-e 's ${VID_UEB_APP_MAILBOX_NAME} '${VID_UEB_APP_MAILBOX_NAME}' g' \
-	-e 's ${VID_UEB_LISTENERS_ENABLE} '${VID_UEB_LISTENERS_ENABLE}' g' \
-	-e 's/${VID_UEB_CONSUMER_GROUP}/'${VID_UEB_CONSUMER_GROUP}'/g' ${TEMPLATE_CONFIG_FILE} > ${FINAL_CONFIG_FILE} || {
-		echo "ERROR: Could not process template file ${TEMPLATE_CONFIG_FILE} into ${FINAL_CONFIG_FILE}"
-		exit 4
-	}
-
-echo "Localized ${FINAL_CONFIG_FILE} successfully."
diff --git a/epsdk-app-onap/src/main/swm/common/localize_quartz.sh b/epsdk-app-onap/src/main/swm/common/localize_quartz.sh
deleted file mode 100755
index 9a64686..0000000
--- a/epsdk-app-onap/src/main/swm/common/localize_quartz.sh
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/bin/bash
-
-FINAL_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/conf/quartz.properties
-TEMPLATE_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/conf/quartz_template.properties
-BACKUP1_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/conf/quartz.properties.bk.1
-BACKUP2_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/conf/quartz.properties.bk.2
-
-echo "Localizing the VID quartz configuration"
-
-if [ -z "${VID_MYSQL_HOST}" ]; then
-	VID_MYSQL_HOST=localhost
-fi
-
-if [ -z "${VID_MYSQL_PORT}" ]; then
-	VID_MYSQL_PORT=3306
-fi
-
-if [ -z "${VID_MYSQL_DBNAME}" ]; then
-	VID_MYSQL_DBNAME=vid_portal
-fi
-
-if [ -z "${VID_MYSQL_USER}" ]; then
-	VID_MYSQL_USER=$(id -un)
-fi
-
-if [ -z "${VID_MYSQL_MAXCONNECTIONS}" ]; then
-	VID_MYSQL_MAXCONNECTIONS=5
-fi
-
-if [ -z "${VID_MYSQL_PASS}" ]; then
-	echo "Missing required parameter VID_MYSQL_PASS"
-	exit 1
-fi
-
-#------------------------------------------------------------------------
-#- MAKE A BACKUP OF PREVIOUS BACKUP FILE, IF EXISTS
-#------------------------------------------------------------------------
-if [ -f ${BACKUP1_CONFIG_FILE} ]; then
-    cp -f ${BACKUP1_CONFIG_FILE} ${BACKUP2_CONFIG_FILE} || {
-        echo "ERROR: Could not copy ${BACKUP1_CONFIG_FILE} to ${BACKUP2_CONFIG_FILE}"
-        exit 2
-    }
-fi
- 
-#------------------------------------------------------------------------
-#- MAKE A BACKUP OF CURRENT FILE, IF EXISTS
-#------------------------------------------------------------------------
-if [ -f ${FINAL_CONFIG_FILE} ]; then
-    cp -f ${FINAL_CONFIG_FILE} ${BACKUP1_CONFIG_FILE} || {
-        echo "ERROR: Could not copy ${FINAL_CONFIG_FILE} to ${BACKUP1_CONFIG_FILE}"
-        exit 3
-    }
-fi
-
-sed -e 's/${VID_MYSQL_HOST}/'${VID_MYSQL_HOST}'/g' \
-	-e 's/${VID_MYSQL_PORT}/'${VID_MYSQL_PORT}'/g' \
-	-e 's/${VID_MYSQL_DBNAME}/'${VID_MYSQL_DBNAME}'/g' \
-	-e 's/${VID_MYSQL_USER}/'${VID_MYSQL_USER}'/g' \
-	-e 's/${VID_MYSQL_PASS}/'${VID_MYSQL_PASS}'/g' \
-	-e 's/${VID_MYSQL_MAXCONNECTIONS}/'${VID_MYSQL_MAXCONNECTIONS}'/g' ${TEMPLATE_CONFIG_FILE} > ${FINAL_CONFIG_FILE} || {
-		echo "ERROR: Could not process template file ${TEMPLATE_CONFIG_FILE} into ${FINAL_CONFIG_FILE}"
-		exit 4
-	}
-
-echo "Localized ${FINAL_CONFIG_FILE} successfully."
-
-
diff --git a/epsdk-app-onap/src/main/swm/common/localize_system.sh b/epsdk-app-onap/src/main/swm/common/localize_system.sh
deleted file mode 100755
index c9d0afd..0000000
--- a/epsdk-app-onap/src/main/swm/common/localize_system.sh
+++ /dev/null
@@ -1,178 +0,0 @@
-#!/bin/bash
-
-FINAL_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/conf/system.properties
-TEMPLATE_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/conf/system_template.properties
-BACKUP1_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/conf/system.properties.bk.1
-BACKUP2_CONFIG_FILE=${ROOT_DIR}/war/WEB-INF/conf/system.properties.bk.2
-
-echo "Localizing the VID system configuration"
-
-if [ -z "${VID_MYSQL_HOST}" ]; then
-	VID_MYSQL_HOST=localhost
-fi
-
-if [ -z "${VID_MYSQL_PORT}" ]; then
-	VID_MYSQL_PORT=3306
-fi
-
-if [ -z "${VID_MYSQL_DBNAME}" ]; then
-	VID_MYSQL_DBNAME=vid_portal
-fi
-
-if [ -z "${VID_MYSQL_USER}" ]; then
-	VID_MYSQL_USER=vid_admin
-fi
-
-if [ -z "${VID_MYSQL_MAXCONNECTIONS}" ]; then
-	VID_MYSQL_MAXCONNECTIONS=5
-fi
-
-if [ -z "${VID_AAI_HOST}" ]; then
-	VID_AAI_HOST=aai.api.openecomp.org
-fi
-
-if [ -z "${VID_AAI_PORT}" ]; then
-	VID_AAI_PORT=8443
-fi
-
-if [ -z "${VID_APP_DISPLAY_NAME}" ]; then
-	VID_APP_DISPLAY_NAME=VID
-fi
-
-if [ -z "${VID_ECOMP_SHARED_CONTEXT_REST_URL}" ]; then
-	VID_ECOMP_SHARED_CONTEXT_REST_URL="https://portal.openecomp.org:8080/ecompportal/context"
-fi
-
-if [ -z "${VID_ECOMP_REDIRECT_URL}" ]; then
-	VID_ECOMP_REDIRECT_URL=http://portal.api.simpledemo.onap.org:8989/ONAPPORTAL/login.htm
-fi
-
-if [ -z "${VID_ECOMP_REST_URL}" ]; then
-	VID_ECOMP_REST_URL=http://portal.api.simpledemo.onap.org:8989/ONAPPORTAL/auxapi
-fi
-
-if [ -z "${VID_MSO_SERVER_URL}" ]; then
-	VID_MSO_SERVER_URL=https://mso.api.openecomp.org:8443
-fi
-
-if [ -z "${VID_TRUSTSTORE_FILE}" ]; then
-	VID_TRUSTSTORE_FILE=${ROOT_DIR}/etc/vid_keystore.jks
-fi
-
-if [ -z "${VID_MYLOGIN_FEED_DIRECTORY}" ]; then
-	VID_MYLOGIN_FEED_DIRECTORY=/tmp/MyLogins
-fi
-
-if [ -z "${VID_TRUSTSTORE_PASS}" ]; then
-	echo "ERROR: Missing required parameter VID_TRUSTSTORE_PASS"
-	exit 1
-fi
-
-if [ -z "${VID_MSO_USER}" ]; then
-	echo "ERROR: Missing required parameter VID_MSO_USER"
-	exit 1
-fi
-
-if [ -z "${VID_MSO_PASS}" ]; then
-	echo "ERROR: Missing required parameter VID_MSO_PASS";
-	exit 1
-fi
-
-if [ -z "${VID_MYSQL_PASS}" ]; then
-	echo "ERROR: Missing required parameter VID_MYSQL_PASS"
-	exit 1
-fi
-
-if [ -z "${MSO_DME2_CLIENT_TIMEOUT}" ]; then
-	echo "ERROR: Missing required parameter MSO_DME2_CLIENT_TIMEOUT"
-	exit 1
-fi
-
-if [ -z "${MSO_DME2_CLIENT_READ_TIMEOUT}" ]; then
-	echo "ERROR: Missing required parameter MSO_DME2_CLIENT_READ_TIMEOUT"
-	exit 1
-fi
-
-if [ -z "${MSO_DME2_SERVER_URL}" ]; then
-	echo "ERROR: Missing required parameter MSO_DME2_SERVER_URL"
-	exit 1
-fi
-if [ -z "${MSO_DME2_ENABLED}" ]; then
-	echo "ERROR: Missing required parameter MSO_DME2_ENABLED"
-	exit 1
-fi
-if [ -z "${MSO_POLLING_INTERVAL_MSECS}" ]; then
-	MSO_POLLING_INTERVAL_MSECS=10000
-fi
-
-if [ -z "${AAI_TRUSTSTORE_FILENAME}" ]; then
-	AAI_TRUSTSTORE_FILENAME=tomcat_keystore
-fi
-
-if [ -z "${AAI_TRUSTSTORE_PASSWD_X}" ]; then
-	AAI_TRUSTSTORE_PASSWD_X=70c87528c88dcd9f9c2558d30e817868
-fi
-
-if [ -z "${AAI_KEYSTORE_FILENAME}" ]; then
-	AAI_KEYSTORE_FILENAME=aai-client-cert.p12
-fi
-
-if [ -z "${AAI_KEYSTORE_PASSWD_X}" ]; then
-	AAI_KEYSTORE_PASSWD_X=70c87528c88dcd9f9c2558d30e817868
-fi
-
-mkdir -p "${VID_MYLOGIN_FEED_DIRECTORY}"
-
-#------------------------------------------------------------------------
-#- MAKE A BACKUP OF PREVIOUS BACKUP FILE, IF EXISTS
-#------------------------------------------------------------------------
-if [ -f ${BACKUP1_CONFIG_FILE} ]; then
-    cp -f ${BACKUP1_CONFIG_FILE} ${BACKUP2_CONFIG_FILE} || {
-        echo "ERROR: Could not copy ${BACKUP1_CONFIG_FILE} to ${BACKUP2_CONFIG_FILE}"
-        exit 2
-    }
-fi
- 
-#------------------------------------------------------------------------
-#- MAKE A BACKUP OF CURRENT FILE, IF EXISTS
-#------------------------------------------------------------------------
-if [ -f ${FINAL_CONFIG_FILE} ]; then
-    cp -f ${FINAL_CONFIG_FILE} ${BACKUP1_CONFIG_FILE} || {
-        echo "ERROR: Could not copy ${FINAL_CONFIG_FILE} to ${BACKUP1_CONFIG_FILE}"
-        exit 3
-    }
-fi
-
-sed -e 's/${VID_MYSQL_HOST}/'${VID_MYSQL_HOST}'/g' \
-	-e 's/${VID_MYSQL_PORT}/'${VID_MYSQL_PORT}'/g' \
-	-e 's/${VID_MYSQL_DBNAME}/'${VID_MYSQL_DBNAME}'/g' \
-	-e 's/${VID_MYSQL_USER}/'${VID_MYSQL_USER}'/g' \
-	-e 's/${VID_MYSQL_PASS}/'${VID_MYSQL_PASS}'/g' \
-	-e 's/${VID_AAI_HOST}/'${VID_AAI_HOST}'/g' \
-	-e 's/${VID_AAI_PORT}/'${VID_AAI_PORT}'/g' \
-	-e 's,${AAI_TRUSTSTORE_FILENAME},'${AAI_TRUSTSTORE_FILENAME}',g' \
-	-e 's/${AAI_TRUSTSTORE_PASSWD_X}/'${AAI_TRUSTSTORE_PASSWD_X}'/g' \
-	-e 's,${AAI_KEYSTORE_FILENAME},'${AAI_KEYSTORE_FILENAME}',g' \
-	-e 's/${AAI_KEYSTORE_PASSWD_X}/'${AAI_KEYSTORE_PASSWD_X}'/g' \
-	-e 's/${VID_APP_DISPLAY_NAME}/'${VID_APP_DISPLAY_NAME}'/g' \
-	-e 's ${VID_ECOMP_SHARED_CONTEXT_REST_URL} '${VID_ECOMP_SHARED_CONTEXT_REST_URL}' g' \
-	-e 's ${VID_ECOMP_REDIRECT_URL} '${VID_ECOMP_REDIRECT_URL}' g' \
-	-e 's ${VID_ECOMP_REST_URL} '${VID_ECOMP_REST_URL}' g' \
-	-e 's ${VID_MSO_SERVER_URL} '${VID_MSO_SERVER_URL}' g' \
-	-e 's/${VID_MSO_USER}/'${VID_MSO_USER}'/g' \
-	-e 's/${VID_MSO_PASS}/'${VID_MSO_PASS}'/g' \
-	-e 's,${VID_MYLOGIN_FEED_DIRECTORY},'${VID_MYLOGIN_FEED_DIRECTORY}',g' \
-	-e 's,${MSO_DME2_CLIENT_TIMEOUT},'${MSO_DME2_CLIENT_TIMEOUT}',g' \
-	-e 's,${MSO_DME2_CLIENT_READ_TIMEOUT},'${MSO_DME2_CLIENT_READ_TIMEOUT}',g' \
-	-e 's,${MSO_DME2_SERVER_URL},'${MSO_DME2_SERVER_URL}',g' \
-	-e 's,${MSO_DME2_ENABLED},'${MSO_DME2_ENABLED}',g' \
-	-e 's,${MSO_POLLING_INTERVAL_MSECS},'${MSO_POLLING_INTERVAL_MSECS}',g' \
-	-e 's,${VID_TRUSTSTORE_FILE},'${VID_TRUSTSTORE_FILE}',g' \
-	-e 's/${VID_TRUSTSTORE_PASS}/'${VID_TRUSTSTORE_PASS}'/g' ${TEMPLATE_CONFIG_FILE} > ${FINAL_CONFIG_FILE} || {
-		echo "ERROR: Could not process template file ${TEMPLATE_CONFIG_FILE} into ${FINAL_CONFIG_FILE}"
-		exit 4
-	}
-
-echo "Localized ${FINAL_CONFIG_FILE} successfully."
-
-
diff --git a/epsdk-app-onap/src/main/swm/deinstall/postproc/post_proc b/epsdk-app-onap/src/main/swm/deinstall/postproc/post_proc
deleted file mode 100755
index 103d18d..0000000
--- a/epsdk-app-onap/src/main/swm/deinstall/postproc/post_proc
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-
-cd ../../common
-exec sh -x ./deinstall_postproc.sh
\ No newline at end of file
diff --git a/epsdk-app-onap/src/main/swm/deinstall/preproc/pre_proc b/epsdk-app-onap/src/main/swm/deinstall/preproc/pre_proc
deleted file mode 100755
index ce87ecf..0000000
--- a/epsdk-app-onap/src/main/swm/deinstall/preproc/pre_proc
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-
-cd ../../common
-exec sh -x ./deinstall_preproc.sh
\ No newline at end of file
diff --git a/epsdk-app-onap/src/main/swm/descriptor.xml b/epsdk-app-onap/src/main/swm/descriptor.xml
deleted file mode 100755
index 7c09ef3..0000000
--- a/epsdk-app-onap/src/main/swm/descriptor.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<descriptor version="1" concurrent="false" xmlns="http://aft.openecomp.org/swm/descriptor">
-    <platforms>
-		<platform os="Linux" osVersions="*" architecture="*" />
-    </platforms>
-    
-    <paths>
-        <path name="/opt/app/vid" type="d" user="vidadmin" group="vidadmin" permissions="755" recursive="true"/>
-    </paths>
-    
-    <actions>
-        <action type="DINST">
-            <proc stage="PRE" user="vidadmin" group="vidadmin"/>
-            <proc stage="POST" user="vidadmin" group="vidadmin"/>
-        </action>
-        <action type="INIT">
-            <proc stage="PRE" user="vidadmin" group="vidadmin"/>
-            <proc stage="POST" user="vidadmin" group="vidadmin"/>
-        </action>
-        <action type="INST">
-            <proc stage="PRE" user="vidadmin" group="vidadmin"/>
-            <proc stage="POST" user="vidadmin" group="vidadmin"/>
-        </action>
-        <action type="FALL">
-            <proc stage="PRE" user="vidadmin" group="vidadmin"/>
-            <proc stage="POST" user="vidadmin" group="vidadmin"/>
-        </action>
-    </actions>
-    
-    <dependencies>
-		<dependencyFilter componentName="org.openecomp.java:jdk8lin" versions="[1.8.0.77-02]" sequence="1"/>
-		<dependencyFilter componentName="org.openecomp.vid:tomcat" versions="[8.0.36-37,)" sequence="2"/>
-    </dependencies>
-</descriptor>
diff --git a/epsdk-app-onap/src/main/swm/fallback/postproc/post_proc b/epsdk-app-onap/src/main/swm/fallback/postproc/post_proc
deleted file mode 100755
index 96b4b06..0000000
--- a/epsdk-app-onap/src/main/swm/fallback/postproc/post_proc
+++ /dev/null
@@ -1 +0,0 @@
-#!/bin/sh
\ No newline at end of file
diff --git a/epsdk-app-onap/src/main/swm/fallback/preproc/pre_proc b/epsdk-app-onap/src/main/swm/fallback/preproc/pre_proc
deleted file mode 100755
index 96b4b06..0000000
--- a/epsdk-app-onap/src/main/swm/fallback/preproc/pre_proc
+++ /dev/null
@@ -1 +0,0 @@
-#!/bin/sh
\ No newline at end of file
diff --git a/epsdk-app-onap/src/main/swm/initinst/postproc/post_proc b/epsdk-app-onap/src/main/swm/initinst/postproc/post_proc
deleted file mode 100755
index a986928..0000000
--- a/epsdk-app-onap/src/main/swm/initinst/postproc/post_proc
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-
-DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-
-source ${DIR}/../../install/postproc/post_proc || {
-	echo "INITINST post_proc script failed"; exit 1
-}
diff --git a/epsdk-app-onap/src/main/swm/initinst/preproc/pre_proc b/epsdk-app-onap/src/main/swm/initinst/preproc/pre_proc
deleted file mode 100755
index 983d0c5..0000000
--- a/epsdk-app-onap/src/main/swm/initinst/preproc/pre_proc
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-
-DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-
-source "${DIR}/../../install/preproc/pre_proc" || {
-	echo "INITINST pre_proc script failed"; exit 1
-}
diff --git a/epsdk-app-onap/src/main/swm/install/postproc/post_proc b/epsdk-app-onap/src/main/swm/install/postproc/post_proc
deleted file mode 100755
index 370d44b..0000000
--- a/epsdk-app-onap/src/main/swm/install/postproc/post_proc
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/bin/bash
-
-DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-COMMON_SCRIPT=${DIR}/../../common/common.sh
-
-source "${COMMON_SCRIPT}" || {
-	echo "ERROR: Common script failed"
-	exit 1
-}
-
-mkdir -p "${TOMCAT_HOME}/temp"
-
-#Extract the WAR so it can be customized by the localization script
-mkdir -p ${ROOT_DIR}/war
-cp "${ROOT_DIR}/lib/vid.war" "${ROOT_DIR}/war/${VID_ENDPOINT_NAME}.war"
-cd "${ROOT_DIR}/war"
-${JAVA_HOME}/bin/jar -xf ${VID_ENDPOINT_NAME}.war
-rm ${ROOT_DIR}/war/${VID_ENDPOINT_NAME}.war
-
-LOCALIZE_SCRIPT=$(dirname "$AFTSWM_ACTIONHANDLER_SCRIPT")/../../common/localize.sh
-
-
-source "${LOCALIZE_SCRIPT}" || {
-	echo "ERROR: Localization script failed"
-	exit 2
-}
-
-#Create the customized WAR and deploy it to Tomcat
-mkdir -p "${ROOT_DIR}/deployed"
-cd "${ROOT_DIR}/war"
-${JAVA_HOME}/bin/jar -cvf "${ROOT_DIR}/deployed/${VID_ENDPOINT_NAME}.war" .
-cd
-rm -rf "${ROOT_DIR}/war"
-mv -f "${ROOT_DIR}/deployed/${VID_ENDPOINT_NAME}.war" "${TOMCAT_HOME}/webapps"
-
-if [ -f "${TOMCAT_HOME}/bin/startup.sh" ]; then
-	"${TOMCAT_HOME}/bin/startup.sh"
-fi
diff --git a/epsdk-app-onap/src/main/swm/install/preproc/pre_proc b/epsdk-app-onap/src/main/swm/install/preproc/pre_proc
deleted file mode 100755
index a09a9c4..0000000
--- a/epsdk-app-onap/src/main/swm/install/preproc/pre_proc
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/bash
-
-DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-COMMON_SCRIPT=${DIR}/../../common/common.sh
-
-source "${COMMON_SCRIPT}" || {
-	echo "ERROR: Common script failed"
-	exit 1
-}
-
-if [ -f "${TOMCAT_HOME}/bin/shutdown.sh" ]; then
-	"${TOMCAT_HOME}/bin/shutdown.sh"
-
-	if [ -d "${TOMCAT_HOME}/webapps/${VID_ENDPOINT_NAME}" ]; then
-		rm -r "${TOMCAT_HOME}/webapps/${VID_ENDPOINT_NAME}"
-	fi
-fi
-
diff --git a/epsdk-app-onap/src/main/swm/notes.txt b/epsdk-app-onap/src/main/swm/notes.txt
deleted file mode 100755
index f0a8fa9..0000000
--- a/epsdk-app-onap/src/main/swm/notes.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-This package will install the Virtual Infrastructure Deployment (VID) war to the local tomcat server.
-The Tomcat server is marked as a dependency of this package and will be installed automatically on the
-target server if it has not already been installed.  The current version of Tomcat used by VID
-is 8.0.36.  MariaDB is also necessary for VID and can be installed by whichever method you choose.
-
-The following are variables that can be set to customize your installation of VID:
-
-Variable			Default			Description
-
-ASDC_CLIENT_REST_AUTH		unset			Basic authentication header value (e.g. Basic asdfoijwelkjsg=)
-ASDC_CLIENT_REST_HOST		unset			Host where the SDC Catalog Service is running
-ASDC_CLIENT_REST_PORT		8080			Port where the SDC Catalog Service is running
-ASDC_CLIENT_TYPE		REST			Set to IN_MEMORY for testing, REST for connecting with an actual SDC Catalog Service
-
-MSO_DME2_CLIENT_READ_TIMEOUT	unset			Time in ms before DME2 MSO read requests timeout
-MSO_DME2_CLIENT_TIMEOUT		unset			Time in ms before DME2 MSO requests timeout
-MSO_DME2_ENABLED		unset			Whether the enable the MSO DME2 client or not
-MSO_DME2_SERVER_URL		unset			The server URL for connecting to the MSO service
-MSO_POLLING_INTERVAL_MSECS	10000			The interval at which to poll MSO for orchestration requests
-VID_MSO_PASS			unset			The password for connecting with the MSO service
-VID_MSO_SERVER_URL		unset			The server URL for connecting with the MSO service
-VID_MSO_USER			unset			The user name for connecting with the MSO service
-
-VID_LOG_DIR			${ROOT_DIR}/logs	The directory to store log files in 
-VID_LOG_LEVEL			INFO			The level at which to log (follows logback logging levels)
-VID_ECOMP_REDIRECT_URL		https://portal.openecomp.org/ecompportal/ecompportal/process_csp		See ECOMP SDK Documentation
-VID_ECOMP_REST_URL		https://portal.openecomp.org/ecompportal/auxapi		See ECOMP SDK Documentation
-VID_ENDPOINT_NAME		vid			http://{host}:{port}/{VID_ENDPOINT_NAME}
-
-VID_MYSQL_HOST			unset			The host where the VID MariaDB instance is running
-VID_MYSQL_MAXCONNECTIONS	5			The maximum connections to use to connect to the MariaDB instance
-VID_MYSQL_PORT			3306			The port where the VID MariaDB instance is running
-VID_MYSQL_DBNAME		vid_portal		The database name (i.e. CREATE DATABASE ${VID_MYSQL_DBNAME}
-VID_MYSQL_USER			vidadmin		The user to connect as to the MariaDB instance
-VID_MYSQL_PASS			unset			The password for the ${VID_MYSQL_USER} @ ${VID_MYSQL_HOST}
-
-VID_AAI_HOST			unset			The host where the A&AI service is running
-VID_AAI_PORT			8443			The port where the A&AI service is running
-VID_TRUSTSTORE_PASS		unset			The password for the VID truststore (A&AI client)
-VID_TRUSTSTORE_FILE		unset			The location on the file system of the truststore (A&AI client)
-AAI_TRUSTSTORE_FILENAME		tomcat_keystore		A file name
-AAI_TRUSTSTORE_PASSWD_X		(dev env creds)		A password
-AAI_KEYSTORE_FILENAME		aai-client-cert.p12	A file name
-AAI_KEYSTORE_PASSWD_X		(dev env creds)		A password
-
-VID_UEB_URL_LIST		ueb.openecomp.org		The hosts where UEB is running
-VID_UEB_CONSUMER_GROUP		VID			The UEB consumer group name to use
-VID_ECOMP_PORTAL_INBOX_NAME	ECOMP-PORTAL-INBOX-DEV-LOCAL		A UEB Topic to send messages to the ECOMP portal on
-VID_UEB_APP_KEY			sYH0NJnsKmJC1B2A			The UEB App Key (mandatory)
-VID_UEB_APP_SECRET		YOtknsT2wVFz9WISlSPDaAtd		The UEB App Secret
-VID_UEB_APP_MAILBOX_NAME	ECOMP-PORTAL-OUTBOX-90			A UEB Topic to listen for messages from the ECOMP portal on
-VID_UEB_LISTENERS_ENABLE	false			Enable the UEB listeners for the specified mailboxes (In 1610, this should always be false)
diff --git a/epsdk-app-onap/src/main/webapp/WEB-INF/conf/system.properties b/epsdk-app-onap/src/main/webapp/WEB-INF/conf/system.properties
index 7a6d5d9..86e1894 100755
--- a/epsdk-app-onap/src/main/webapp/WEB-INF/conf/system.properties
+++ b/epsdk-app-onap/src/main/webapp/WEB-INF/conf/system.properties
@@ -169,7 +169,6 @@
 vid.truststore.filename=/opt/app/vid/etc/vid_keystore.jks
 mso.dme2.client.timeout=30000
 mso.dme2.client.read.timeout=120000
-vid.truststore.filename=vid_keystore.jks
 vid.truststore.passwd.x=OBF:1wgg1wfq1uus1uui1x131x0r1x1v1x1j1uvo1uve1wg81wfi
 scheduler.create.new.vnf.change.instance=/v1/ChangeManagement/schedules/
 scheduler.get.time.slots=/v1/ChangeManagement/schedules/
diff --git a/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ds2/footer.jsp b/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ds2/footer.jsp
index 33bb38d..9cb6815 100755
--- a/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ds2/footer.jsp
+++ b/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ds2/footer.jsp
@@ -1,17 +1,34 @@
 <script src="./app/fusion/external/angular-1.5/angular.min.js"></script>
-<script src="app/fusion/external/ds2/js/b2b-angular/b2b-library.min.js"></script>
+<script src="./app/fusion/external/angular-1.5/angular-messages.js"></script>
+<script src="./app/fusion/external/angular-1.5/angular-touch.js"></script>
+<script src="./app/fusion/external/angular-1.5/angular-sanitize.js"></script>
+<script src="./app/fusion/external/angular-1.5/angular-route.min.js"></script>
+<script src="./app/fusion/external/angular-1.5/angular-cookies.min.js"></script>
 <link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/b2b-angular/b2b-angular.css"></style>
+<script src="app/fusion/external/ds2/js/b2b-angular/b2b-library.min.js"></script>
+<!-- b2b-column-switch-footer can only found in b2b-library.min.js -->
+
 
 <div style="position: relative; bottom: 0; left: 0; width: 100%">
-	<footer class="b2b-footer-wrapper" role="contentinfo"
-		aria-label="footer">
+	<footer class="b2b-footer-wrapper" role="contentinfo" 	aria-label="footer">
 		<div class="b2b-footer-container" b2b-column-switch-footer>
-			<!-- footer-link-items='footerItems' -->
-		<!-- 	<hr> -->
 			<div style="margin-top: -25px;" class="divider-bottom-footer">
-				<div class="span12 footerLogo">												
+				<div style="text-align: center;" class="span12 footerLogo">
+					<div class="span8 copyright-text">						
+						<a href="//www.att.com/gen/privacy-policy?pid=2587" target="_blank">&copy; 2017 AT&amp;T Intellectual Property.</a> All rights reserved. AT&T, the AT&T Globe logo and all other AT&T marks contained herein are trademarks of AT&T intellectual property and/or AT&T affiliated companies.
+					</div>
+					<div class="span3" style="margin-left:30px;">
+						<a href="welcome.htm" class="footer-logo"> 
+							<span class="footer-global">
+								<i class="icon-att-globe" >
+									<span class="hidden-spoken">A T &amp; T</span>
+								</i>
+							</span>							
+							<h2 class="logo-title" id="at&amp;t">AT&amp;T</h2>
+						</a>
+					</div>
 				</div>
 			</div>
 		</div>
 	</footer>
-</div> 
\ No newline at end of file
+</div>
\ No newline at end of file
diff --git a/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ds2/header.jsp b/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ds2/header.jsp
index 94213a2..483922f 100755
--- a/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ds2/header.jsp
+++ b/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ds2/header.jsp
@@ -1 +1,235 @@
-<div ds2-menu id="menuContainer" class="menu-container" ></div>
\ No newline at end of file
+<script src="./app/fusion/external/angular-1.5/angular.min.js"></script>
+<script src="./app/fusion/external/angular-1.5/angular-messages.js"></script>
+<script src="./app/fusion/external/angular-1.5/angular-touch.js"></script>
+<script src="./app/fusion/external/angular-1.5/angular-sanitize.js"></script>
+<script src="./app/fusion/external/angular-1.5/angular-route.min.js"></script>
+<script src="./app/fusion/external/angular-1.5/angular-cookies.min.js"></script>
+<script src="./app/fusion/external/ds2/js/b2b-angular/b2b-library.min.js"></script>
+<script src="./app/fusion/external/ds2/js/digital-ng-library/digital-design-library.js"></script>
+<script src="./app/fusion/scripts/DS2-services/leftMenuServiceDS2.js"></script>
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/b2b-angular/b2b-angular.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/b2b-angular/b2b-angular.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/extras/ds2-accordion.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/extras/ds2-bootstrap-datepicker.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/extras/ds2-cc-input-field.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/extras/ds2-tooltip.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/extras/x-tabs-pills.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-accordion.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-bootstrap-datepicker.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-c2c.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-cc-input-field.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-filmstrip.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-filters.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-legacynav-fix.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-marquee.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-pagination.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-popover.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-progressbar.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ds2-tooltip.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/global.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/digital-design-library.css">
+
+<link rel="stylesheet" type="text/css" href="./app/fusion/external/ds2/css/digital-ng-library/ionicons.css">
+<link rel="stylesheet" type="text/css" href="./app/fusion/styles/ecomp.css">
+<script>
+angular.module('att.abs.helper', []);
+angular.module('quantum', []);
+var appDS2=angular.module("abs", ["ngRoute", 'ngAnimate', 'ngTouch', 'ui.bootstrap', 'ngMessages', 'ngCookies', 'b2b.att.tpls', 'ddh.att.tpls', 'ddh.att.switches', 'b2b.att.footer', 'b2b.att.header', 'btorfs.multiselect']);
+</script>
+
+<script src="./app/fusion/scripts/DS2-services/leftMenuServiceDS2.js"></script>
+
+<script>
+appDS2.controller("leftMenuController", ['$scope', '$filter','$http','$timeout','$cookies','LeftMenuServiceDS2', function ($scope, $filter, $http, $timeout, $cookies, LeftMenuServiceDS2) {
+	$scope.menuData = [];
+	$scope.leftChildData=[];
+	$scope.leftParentData=[];
+	$scope.leftMenuItems = [];
+	$scope.app_name = "";
+	$scope.app_name_full;
+	LeftMenuServiceDS2.getLeftMenu().then(function(response){
+	var j = response; 
+		try{
+			if(j && j !== "null" && j!== "undefined"){
+				$scope.leftParentData = JSON.parse(j.data);
+  		    $scope.leftChildData = JSON.parse(j.data2);
+			}else{
+				throw "Get Left Menu respsone is not an object/is empty"; 
+			}  
+	    	try{
+	    		var leftChildItemList = $scope.leftChildData;
+          		var pageUrl = window.location.href.split('/')[window.location.href.split('/').length-1];
+         		var leftParentList =$scope.leftParentData;
+         		
+	    		for (var i = 0; i < leftParentList.length; i++) {
+	    			var parentItem = {};
+	    			parentItem.name = leftParentList[i].label;
+	    			if(parentItem.name == 'Home'){
+	    				parentItem.imageSrc = /*"icon-location-pinpoint"*/ "icon-building-home";
+	    			} else if(parentItem.name == 'Sample Pages'){
+	    				parentItem.imageSrc = "icon-documents-book";
+	    			} else if(parentItem.name == 'Reports'){
+	    				parentItem.imageSrc = "icon-misc-piechart";
+	    			} else if(parentItem.name == 'Profile'){
+	    				parentItem.imageSrc = "icon-people-oneperson";
+	    			} else if(parentItem.name == 'Admin'){
+	    				parentItem.imageSrc = "icon-content-star";
+	    			} else if(parentItem.name == 'Sample Pages'){
+	    				parentItem.imageSrc = "icon-content-searchchannels";
+	    			} else {
+	    				parentItem.imageSrc = "icon-building-door";
+	    			}            		    			
+	    			parentItem.menuItems = [];
+	    			for (var j = 0; j < leftChildItemList[i].length; j++) {
+	    				if(leftChildItemList[i][j].label != null && leftChildItemList[i][j].label.length > 0) {
+		    				var childItem = {};
+		    				childItem.name = leftChildItemList[i][j].label;
+		    				childItem.href = leftChildItemList[i][j].action;
+		    				parentItem.menuItems.push(childItem)
+	    				}
+		    		}
+	    			$scope.menuData.push(parentItem);
+	    		}
+	    		
+  			
+	    	//For Home, add href
+	    	$scope.menuData[0].href = leftParentList[0].action;
+	    		
+     		for (var i = 0; i < leftParentList.length; i++) {
+     			$scope.item = {
+     				parentLabel : leftParentList[i].label,
+     				parentAction : leftParentList[i].action,
+     				parentImageSrc : leftParentList[i].imageSrc,                 				
+     				open:pageUrl==leftParentList[i].action?true:false,
+     				childItemList : leftChildItemList[i]
+     			};
+     		};   
+  		}catch(err){
+  			console.log("error happened while trying to set left menu structure"+err);  					   
+  		}
+		}catch (e) {
+			console.log("error happened while trying to get left menu items"+e);
+			reloadPageOnce();
+			return;
+    }	       
+},function(error){
+	console.log("error happened while calling getLeftMenu"+error);
+});
+
+LeftMenuServiceDS2.getAppName().then(function(response){
+	var j = response; 
+		try{
+			if(j && j !== "null" && j!== "undefined"){
+				console.log("app name is " + $scope.app_name);
+				$scope.app_name_full = j.data;
+				var processed_app_name = j.data;
+				var n = processed_app_name.length;
+				if (n > 15) {
+					n = 15;
+				}
+				$scope.app_name = processed_app_name.substr(0, n);
+			}else{
+				throw "Get app_name respsone is not an object/is empty"; 
+			}  
+		}catch (e) {
+			console.log("error happened while trying to get app name "+e);
+			return;
+    }	       
+},function(error){
+	console.log("error happened while calling getAppName "+error);
+});
+
+$scope.adjustHeader=function() {
+	$scope.showHeader = ($cookies.show_app_header == undefined ? true : $cookies.show_app_header);
+	
+	if($scope.showHeader == true) {
+		$scope.drawer_margin_top = 50;
+		$scope.drawer_custom_top = 54;
+		$scope.toggle_drawer_top = 55;
+	}
+	else  {
+		
+		$scope.drawer_margin_	top = 40;
+		$scope.drawer_custom_top = 0;
+		$scope.toggle_drawer_top = 10;
+	}
+	
+	
+};
+
+$scope.adjustHLeftMenu = function (type){
+	$scope.showHeader = ($cookies.show_app_header == undefined ? true : $cookies.show_app_header);
+	
+	if($scope.showHeader == true) {
+		$scope.drawer_margin_top = 60;
+		$scope.drawer_custom_top = 54;
+		$scope.toggle_drawer_top = 55;
+	}
+	else  {
+		
+		$scope.drawer_margin_top = 50;
+		$scope.drawer_custom_top = 0;
+		$scope.toggle_drawer_top = 10;
+	}
+	if(type=='burgerIcon'){
+		return { "top": $scope.toggle_drawer_top+"px"};
+	}else if(type=='leftMenu'){
+		return { "margin-top": $scope.drawer_margin_top+"px"};
+	}else
+		return;
+}
+$scope.adjustHeader();
+$scope.drawerOpen = true;
+
+$scope.toggleDrawer = function() {
+	$scope.drawerOpen = !($scope.drawerOpen);
+	if ($scope.drawerOpen) {
+	// setCookie('drawerOpen','open',30);
+	$scope.arrowShow = true;
+
+
+	if (document.getElementById('fnMenueContent')!=null)
+	document.getElementById('fnMenueContent').style.marginLeft = "0px";
+	
+	if (document.getElementById('rightContentAdmin')!=null)
+			document.getElementById('rightContentAdmin').style.marginLeft = "210px"; 
+			
+		else if (document.getElementById('rightContentProfile')!=null)
+			document.getElementById('rightContentProfile').style.marginLeft = "210px";
+	} else {
+
+	$scope.arrowShow = false;
+
+	if (document.getElementById('fnMenueContent')!=null)
+	document.getElementById('fnMenueContent').style.marginLeft = "-150px";
+	
+	if (document.getElementById('rightContentAdmin')!=null) {
+				document.getElementById('rightContentAdmin').style.marginLeft = "50px";					
+			}
+			
+	else if (document.getElementById('rightContentProfile')!=null)
+		document.getElementById('rightContentProfile').style.marginLeft = "50px";
+	}
+	};
+	
+$timeout(function() {
+	//detectScrollEvent();
+    	}, 800);
+}]);
+</script>
+
+<style>
+#page-content{
+margin-top:-250px;
+}
+
+#page-content td, th {
+    padding: 0px;
+    border:none;
+}
+</style>
+<div ng-app="abs">
+	<div ng-controller = "leftMenuController">
+		<ddh-left-navigation menu-data="menuData"></ddh-left-navigation>
+	</div>
+</div>
\ No newline at end of file
diff --git a/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ebz/ebz_header.jsp b/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ebz/ebz_header.jsp
new file mode 100644
index 0000000..ad3201c
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/WEB-INF/fusion/jsp/ebz/ebz_header.jsp
@@ -0,0 +1,837 @@
+<%--
+  ================================================================================
+  eCOMP Portal SDK
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property
+  ================================================================================
+  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.
+  ================================================================================
+  --%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
+<%@ page isELIgnored="false"%>
+<%@ page import="org.openecomp.portalsdk.core.util.SystemProperties"%>
+<%@ page import="org.openecomp.portalsdk.core.onboarding.util.PortalApiProperties"%>
+<%@ page import="org.openecomp.portalsdk.core.onboarding.util.PortalApiConstants"%>
+<%@ page import="org.openecomp.portalsdk.core.domain.MenuData"%>
+<link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/ebz_header/header.css">
+<link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/ebz_header/portal_ebz_header.css">
+<link rel="stylesheet" type="text/css" href="app/fusion/external/ebz/sandbox/styles/style.css" >
+
+
+<%--<script src= "app/fusion/external/ebz/angular_js/angular.js"></script> --%>
+<script src="app/fusion/external/angular-1.4.8/angular.min.js"></script>
+<script src="app/fusion/external/angular-1.4.8/angular-route.min.js"></script>
+<script src="app/fusion/external/angular-1.4.8/angular-sanitize.min.js"></script>
+<script src="app/fusion/external/angular-1.4.8/angular-cookies.min.js"></script>
+<script src="app/fusion/external/ebz/angular_js/app.js"></script>
+<script src="app/fusion/external/ebz/angular_js/gestures.js"></script>
+<script src="static/js/jquery-1.10.2.js"></script>
+<script src="app/fusion/scripts/modalService.js"></script>
+<script src="static/js/jquery.mask.min.js" type="text/javascript"></script>
+<script src="static/js/jquery-ui.js" type="text/javascript"></script>
+<script src="app/fusion/external/ebz/sandbox/att-abs-tpls.js" type="text/javascript"></script>
+<script src="static/fusion/js/att_angular_gridster/ui-gridster-tpls.js"></script>
+<script src="static/fusion/js/att_angular_gridster/angular-gridster.js"></script>
+<script src= "app/fusion/external/ebz/angular_js/checklist-model.js"></script>
+<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/0.10.0/lodash.min.js"></script>
+<%--<script src="app/fusion/external/angular-ui/ui-bootstrap-tpls-1.1.2.min.js"></script>--%>
+<script src="app/fusion/external/angular-1.4.8/angular-touch.min.js"></script>
+<script src="app/fusion/external/angular-1.4.8/angular-animate.min.js"></script>
+<script src="app/fusion/external/angular-bootstrap/ui-bootstrap-tpls.min.js"></script>
+<script src="app/fusion/scripts/services/userInfoService.js"></script>
+<script src="app/fusion/scripts/services/leftMenuService.js"></script>
+
+
+<jsp:include page="/WEB-INF/fusion/jsp/ebz/loginSnippet.html" ></jsp:include> 
+
+<c:set var="UserName"	value="<%= session.getAttribute(\"fullName\")%>" />
+<c:set var="UserFirstName"	value="<%= session.getAttribute(\"first_name\")%>" />
+
+<% 
+	String contactUsLink = SystemProperties.getProperty(SystemProperties.CONTACT_US_LINK);
+	String redirectUrl = PortalApiProperties.getProperty(PortalApiConstants.ECOMP_REDIRECT_URL);
+	String portalUrl = redirectUrl.substring(0, redirectUrl.lastIndexOf('/')) + "/process_csp";
+	String getAccessLink = redirectUrl.substring(0, redirectUrl.lastIndexOf('/')) + "/get_access";	
+%>
+<c:set var="returnPortalUrl" value="<%=portalUrl%>" />
+<c:set var="contactUsLink" value="<%=contactUsLink%>" />
+<c:set var="getAccessLink" value="<%=getAccessLink%>" />
+<style>
+.att-drawer{
+	z-index:997 !important;
+}
+
+.secondaryMenuContainer{
+	z-index:1000;
+}
+.megamenu-tabs .megamenu__item {
+	padding: 0 0;
+}
+.megamenu-tabs .megamenu__item span {
+    font-size: 18px;
+}
+
+.submenu-tabs {
+   line-height:50px;
+}
+.submenu-tabs .sub__menu{
+	top:5px;
+}
+
+.top-megamenu .megamenu-tabs ul{
+	width:98%;
+	list-style: none;
+}
+
+</style>
+<%@include  file="/WEB-INF/fusion/jsp/ebz/loginSnippet.html" %>
+
+<div style="position: relative; z-index: 999;">
+	<div ng-controller="headerController">
+	
+		 <div class="headerContainer" id="headerContainer" ng-cloak  ng-show="{{showHeader && false}}">
+			<div id="megaMenuContainer" class="megaMenuContainer" style="margin-top: 0; overflow: visible;">
+				<div>
+					<!--for mega Menu-->
+					<!-- Mega Menu parent-tab directive with three models menu-items, active-sub-menu, active-menu -->
+					<div id="topMenu" class="top-megamenu" ng-mouseleave="activeClickSubMenu.x.active=false; activeClickMenu.x.active=false">
+						<div style="float:left;width:100%;"parent-tab menu-items="megaMenuDataObject" active-sub-menu='activeClickSubMenu.x' active-menu='activeClickMenu.x'>
+			                <div parentmenu-tabs mega-menu="true" menu-items="megaMenuDataObject" style="height:55px;">
+								<div style="float:left">
+									<li class="megamenu__item" style="line-height:55px;" onclick="returnToPortal()">
+										<img src="app/fusion/external/ebz/images/att_logo.png" class="ATTLogo"   ></span>
+<!-- 											<a id='returnPortal' class="primaryMenuOptionLink" style="font-weight: 400 !important; font-family: clearview_att_bold !important; font-size: 18px;">ECOMP</a>
+ -->										<strong	style="font-weight: 400 !important; font-family: clearview_att_bold !important; font-size: 18px;" id='returnPortal' >ECOMP Portal</strong>
+									</li>										
+									<div menu-tabs mega-menu="true" tab-name="item.text" menu-item="item" active-menu="activeClickMenu.x" 
+									ng-repeat="item in megaMenuDataObject" style="font-size: 18px;" ng-mousedown="loadFavorites()" >
+				                        <div parentmenu-tabs sub-menu="true" ng-show="activeClickMenu.x.active && item.active" menu-items="activeClickMenu.x.children">
+							<!-- Second level menu -->
+									<div>
+										<div menu-tabs sub-menu="true" tab-name="subItem.text" 
+											tab-url="subItem.url"  menu-item="subItem" 
+											ng-repeat="subItem in activeClickMenu.x.children | orderBy : 'column'" active-menu="activeClickSubMenu.x" 
+											sub-item-active="{{subItem.active}}" style="float:left;" aria-label="{{subItem.text}}"
+	                                         ng-mouseenter="submenuLevelAction(subItem.text,subItem.column)"
+	                                         ng-mouseleave="submenuLevelAction(subItem.text,subItem.column)"
+                                        	ng-click="submenuLevelAction(subItem.text,subItem.column)"  >
+                                                <i ng-if="subItem.text=='Favorites'" id="favorite-star"
+                                                   class="icon-star favorites-icon-active">
+                                                </i>
+										</div>
+	                                                                                 	
+			                                <div class="sub__menu" ng-mouseleave="activeClickSubMenu.x.active=false" >
+			                                	<ul ng-show="activeClickSubMenu.x.active"  role="menubar" class="columns">
+			               <!-- Third level menu -->					                                	
+				                                    <div menu-tabs menu-item="subItem" 
+				                                    class="columns-div"
+				                                    ng-repeat="subItem in activeClickSubMenu.x.children | orderBy : 'column'" 
+				                                    ng-show="activeClickSubMenu.x.active">
+
+	                                                    <i id="favorite-selector-third-level"
+	                                                       ng-show="isUrlFavorite(subItem.menuId)==false"
+	                                                       class="icon-star favorites-icon-inactive"
+	                                                       ng-if="subItem.url.length > 1">
+	                                                    </i>					                                    
+	                                                    <i id="favorite-selector-third-level"
+	                                                       ng-show="isUrlFavorite(subItem.menuId)"
+	                                                       class="icon-star favorites-icon-active"
+	                                                       ng-if="subItem.url.length > 1">
+	                                                    </i>					                                    
+														<span class="title" aria-label="{{subItem.text}}" 
+														ng-click="goToUrl(subItem)">{{subItem.text}}</span>
+							<!-- Fourth level menus -->	
+				                                        <div att-links-list="">
+                                                            <i id="favorite-selector-fourth-level"
+                                                               class="icon-star favorites-icon-inactive"
+                                                               ng-show="isUrlFavorite(tabValue.menuId)==false"
+                                                               ng-if="tabValue.url.length > 1">
+
+                                                            </i>
+                                                            <i id="favorite-selector-fourth-level"
+                                                               class="icon-star favorites-icon-active"
+                                                               ng-show="isUrlFavorite(tabValue.menuId)"
+                                                               ng-if="tabValue.url.length > 1">
+
+                                                            </i>
+				                                            <span role="menuitem" att-links-list-item="" 
+				                                            ng-repeat="tabValue in subItem.children" 
+				                                            ng-click="goToUrl(tabValue)" 
+				                                            att-accessibility-click="13,32" 
+				                                            ng-class="{'disabled': tabValue.disabled}">{{tabValue.text}}</span>
+				                                        </div>
+				                                        <hr ng-show="!$last"/>
+				                                        
+				                                    </div>
+				                                 </ul>
+			           <!-- Favorites level menu -->
+												<div class="favorites-window" ng-show='favoritesWindow' ng-mouseleave="hideFavoritesWindow()">
+													<div id="favorites-menu-items" ng-show="showFavorites">
+														<div ng-repeat="subItem in favoritesMenuItems" att-links-list="" style='display: inline'>
+																<i id="favorite-selector-favorites-list" class="icon-star favorites-icon-active">
+																</i>
+																<a id="favorites-list" aria-label="{{subItem.text}}"
+																   ng-click="goToUrl(subItem)" 
+																   style="margin-left: 3px; margin-right: 20px; text-decoration: none;  color: #666666;">
+																   {{subItem.text}}
+																</a>
+														</div>
+														<div>
+															<br>
+															<p style='font-weight: 400; font-family: clearview_att_bold !important;
+															font-size: 18px; text-align: center; background-color: lightgray;
+															width: 400px; margin-left: 25%; margin-right: 25%;'>
+																Manage favorites on ECOMP Portal.
+															</p>
+														</div>
+													</div>
+								  <!-- Favorites when empty -->
+														<div id="favorites-empty" ng-show='favoritesWindow' ng-show="emptyFavorites">
+			                                                <div id="favorites-empty" ng-show="emptyFavorites" class="favorites-window-empty">
+			                                                    <div>
+			                                                        <img src="app/fusion/external/ebz/images/no_favorites_star.png">
+			                                                        <p class='favoritesLargeText'>No Favorites</p>
+																	<p class='favoritesNormalText'>Manage favorites on ECOMP Portal.</p>
+			                                                    </div>
+			                                                </div>
+														</div>
+													</div>
+					                                
+				                                </div>
+				                            </div>
+				                        </div> 
+				                    </div >
+				                    <li class="megamenu__item" style="line-height:55px;" ng-if="loadMenufail">
+										<strong	style="font-weight: 400 !important; font-family: clearview_att_bold !important; font-size: 18px;" >Unable to load menus</strong>
+									</li>
+<!-- 										<li class="megamenu__item" style="width: 20%;">&nbsp;</li>
+ -->									</div>
+								<!--  Login Snippet-->
+								<div  style="float:right">
+									<li id="bcLoginSnippet" class="megamenu__item" style="width: 140px;" >
+										<div popover="loginSnippet.html"  aria-label="Login Snippet"	referby="loginSnippet" att-accessibility-click="13,32" popover-style="\" popover-placement="below" style="width: 200px;">
+											<div class="icon-user-small login-snippet-icon"></div>
+											<div class="login-snippet-text" style="display: inline-block; font-size:12px; margin-left:5px;overflow: hidden; max-height: 31px;   max-width:120px; padding-top: 0px; margin-top: 0px; white-space: nowrap;" ng-bind="userProfile.firstName"></div>
+										</div>
+									</li>
+									<li class="megamenu__item" style="width:120px;">&nbsp;</li>
+								</div>
+								
+							</div>		
+						</div>
+						<div style="clear: both"></div>
+					</div>
+					</div>
+				</div>
+			</div>
+		<div class="license-notification" id="license-notification">
+			<a href="javascript:void(0)" style="background-color:#bbb;" class="button button--small" tooltip="Please contact ECOMP Portal team to get the license" tooltip-placement="below" tooltip-style="light"  tooltip-popup-delay="500" >
+				<span style="">{{app_name_full}}</span>
+			</a>									
+		</div>
+		<div style="position: relative; color: black; top: 70px;">
+			<div ng-cloak>		
+				<span ng-style="adjustHLeftMenu('burgerIcon')" style="z-index:998; position:fixed; left:0%; font-size:35px; margin-left:10px;text-decoration:none;">
+					<a ng-click="toggleDrawer();isOpen = !isOpen" href="javascript:void(0);" class="arrow-icon-left" >
+					<span class="icon-hamburger"></span></a>	
+					<span ng-init="isOpen = true" ng-show="isOpen" style="font-size:16px; position:relative; top:-8px; left:-15px;">&nbsp&nbsp&nbsp {{app_name}}</span>
+				</span>
+				<div att-drawer drawer-slide="left" drawer-custom-top="{{drawer_custom_top}}px" drawer-size="200px" drawer-open="drawerOpen" drawer-custom-height="100%" >
+				    <div ng-style="adjustHLeftMenu('leftMenu')">
+					    <div class="attDrawer" style="margin-top:{{drawer_margin_top}}px;">   
+					    	<div style="margin-left:10px; margin-right:10px;">
+						    	<accordion close-others="true" css="att-accordion--no-box">
+				                    <accordion-group ng-repeat="parent in menuItems" heading="{{parent.parentLabel}}" child="{{parent.parentAction}}" parent-link="{{parent.parentAction}}" image-source="{{parent.parentImageSrc}}" child-length="{{parent.childItemList.length}}" is-open="parent.open">
+				                    	<div ng-repeat="subMenu in parent.childItemList" style="font-size:12px; margin-left:10px;">
+				                    		<a href="{{subMenu.action}}" style="font-size:12px; color:#666666;" >{{subMenu.label}}</a>
+				                    	</div>
+				                    </accordion-group>
+				                </accordion>
+							</div>						
+					    </div>
+				    </div>
+				</div>
+			</div>		
+		</div>
+	</div>
+</div>
+<script>    
+	function returnToPortal(){
+		window.location.href = "<c:out value='${returnPortalUrl}'/>";
+	}
+	detectScrollEvent = function() {
+		var footerOff = $('#footerContainer').offset().top;
+		var headOff = $('#headerContainer').offset().top;
+		var winHeight = $(window).height();
+		if ((footerOff - headOff) <= winHeight) {
+			$('.att-drawer').css({
+				"height" : footerOff - headOff - 55
+			});
+		} else {
+			$('.att-drawer').css({
+				"height" : "94vh"
+			});
+		}
+	}
+	$(window).scroll(function() {
+		if ($('.att-drawer').is(':visible')) {
+			detectScrollEvent();
+		}
+	});
+	app.controller("headerController", function($scope, $timeout, $log, $http, UserInfoService, $window, $cookies,LeftMenuService) {
+  		// $log.debug('HeaderController started');
+		$scope.jsonMenuData = [];
+		$scope.loadMenufail=false;
+		$scope.app_name = "";
+		$scope.app_name_full = "";
+		$scope.megaMenuDataObject =[];
+		$scope.activeClickSubMenu = {
+          		x: ''
+        };
+      	$scope.activeClickMenu = {
+      			x: ''
+      	};
+  		$scope.favoritesMenuItems = [];
+        $scope.favoriteItemsCount = 0;
+        $scope.showFavorites = false;
+        $scope.emptyFavorites = false;
+        $scope.favoritesWindow = false;
+        $scope.userProfile={
+    			firstName:'',
+    			lastName:'',
+    			fullName:'',
+    			email:''
+    	}
+      	/*Put user info into fields*/
+    	$scope.inputUserInfo = function(userInfo){
+    		if (typeof(userInfo) != "undefined" && userInfo!=null && userInfo!=''){
+    			if (typeof(userInfo.USER_FIRST_NAME) != "undefined" && userInfo.USER_FIRST_NAME!=null && userInfo.USER_FIRST_NAME!='')
+    				$scope.userProfile.firstName = userInfo.USER_FIRST_NAME;
+    			if (typeof(userInfo.USER_LAST_NAME) != "undefined" && userInfo.USER_LAST_NAME!=null && userInfo.USER_LAST_NAME!='')
+    				$scope.userProfile.lastName = userInfo.USER_LAST_NAME;
+    			if (typeof(userInfo.USER_EMAIL) != "undefined" && userInfo.USER_EMAIL!=null && userInfo.USER_EMAIL!='')  			
+    				$scope.userProfile.email = userInfo.USER_EMAIL;
+    		}		
+    	}
+      	 /*getting user info from session*/
+    	$scope.getUserNameFromSession = function(){
+    		UserInfoService.getFunctionalMenuStaticDetailSession()
+    	  	.then(function (res) {
+  		  		$scope.userProfile.firstName = res.firstName;
+  		  		$scope.redirectUrl = res.portalUrl;
+    	  	});
+        }
+      	$scope.getTopMenuStaticInfo=function() {
+    		var promise = UserInfoService.getFunctionalMenuStaticDetailShareContext();
+    		promise.then(
+				function(res) {   					
+					if(res==null || res==''){
+						$log.info('failed getting static User information');    
+						$scope.getUserNameFromSession();
+					}else{
+						$log.info('Received static User information');
+						var resData = res;						
+						$scope.inputUserInfo(resData);					
+						$scope.userProfile.fullName = $scope.userProfile.firstName+ ' '+ $scope.userProfile.lastName;					
+					}
+				},
+				function(err) {
+					$log.info('failed getting static User information');       				
+				}
+    		);
+  		}
+      			
+		var unflatten = function( array, parent, tree ){
+			tree = typeof tree !== 'undefined' ? tree : [];
+			parent = typeof parent !== 'undefined' ? parent : { menuId: null };
+			var children = _.filter( array, function(child){ return child.parentMenuId == parent.menuId; });
+		
+			if( !_.isEmpty( children )  ){
+				if( parent.menuId === null ){
+						tree = children;
+				}else{
+					parent['children'] = children
+				}
+				_.each( children, function( child ){ unflatten( array, child ) } );
+			}
+
+			return tree;
+		}
+		
+		var menuStructureConvert = function(menuItems) {
+			var megaMenuDataObjectTemp = [
+	                                 {
+	                                	 text: "ECOMP",
+	                                	 children:menuItems
+	                                 },
+	                                 {
+	                                	 text: "Help",
+	                                	 children: [{
+	                                		 text:"Contact Us",
+	                                		 url:"<c:out value='${contactUsLink}'/>"
+	                                	 },
+	                                	 {
+	                                		 text:"Get Access",
+	                                		 url:"<c:out value='${getAccessLink}'/>"
+	                                	 }]
+	                                 }
+	                                 ];
+			return megaMenuDataObjectTemp;
+		}; 
+   		
+		
+		/*Left Menu*/
+		LeftMenuService.getAppName().then(function(response){
+        		var j = response; 
+    	  		try{
+    	  			if(j && j !== "null" && j!== "undefined"){
+    	  				// console.log("app name is " + $scope.app_name);
+    	  				$scope.app_name_full = j.data;
+    	  				var processed_app_name = j.data;
+    	  				var indexOfLic = processed_app_name.indexOf('[');
+    	  				if(indexOfLic>-1) {
+    	  					if (jQuery('.license-notification')!=null)
+    	  						jQuery('.license-notification').css("display", "none"); 
+    	  				}
+    	  				var n = processed_app_name.length;
+    	  				if (n > 15) {
+    	  					n = 15;
+    	  				}
+    	  				if(n > indexOfLic && indexOfLic > 0) {
+    	  					n = indexOfLic;
+    	  				}
+    	  				$scope.app_name_full = $scope.app_name_full.substr(0, n);
+    	  				$scope.app_name = processed_app_name.substr(0, n);
+    	  				
+    	  			}else{
+    	  				throw "Get app_name response is not an object/is empty"; 
+    	  			}  
+    	  		}catch (e) {
+    	  			console.log("error happened while trying to get app name "+e);
+    	  			return;
+    	        }	       
+    		},function(error){
+    			console.log('getAppName failed', error);
+    		});
+
+		
+	    $scope.getTopMenuStaticInfo();      
+    	$scope.getMenu=function() {
+    		
+   		 $http({
+   		        method: "GET",
+   		        url: 'get_functional_menu',
+// TIMEOUT USED FOR LOCAL TESTING ONLY	      		        
+// 		        timeout: 100
+   		 }).success(function (response) {
+			if(response == '101: Timeout') {
+	  			$log.error('Timeout attempting to get_functional_menu');
+	  		// TIMEOUT USED FOR LOCAL TESTING ONLY	      		        
+//	  			$scope.createErrorMenu();
+	  			$scope.megaMenuDataObject = menuStructureConvert('');
+	  		}else {
+ 		   		$log.debug('get_functional_menu success: ' + response); 		   			   		
+				if(typeof response != 'undefined' && response.length!=0 && typeof response[0] != 'undefined' && typeof response[0].error!="undefined"){
+// createErrorMenu() USED FOR LOCAL TESTING ONLY
+//		  			$scope.createErrorMenu();
+					$scope.megaMenuDataObject = menuStructureConvert('');
+		 	   	//	$scope.loadMenufail=true;
+			 	}else{
+		 	   		$scope.jsonMenuData = unflatten( response );
+		 	   		$scope.megaMenuDataObject = menuStructureConvert($scope.jsonMenuData);
+	 	   		}
+			}
+		}).error(function (response){
+// createErrorMenu() USED FOR LOCAL TESTING ONLY	      		        
+//		  		$scope.createErrorMenu();
+
+	 	   		//$scope.loadMenufail=true;
+	 	   		$scope.megaMenuDataObject = menuStructureConvert('');
+		        $log.debug('REST API failed get_functional_menu...'+ response);
+		  });
+  		}
+    	$scope.adjustHLeftMenu = function (type){
+    		$scope.showHeader = ($cookies.show_app_header == undefined ? true : $cookies.show_app_header);
+    		
+    		if($scope.showHeader == true) {
+	    		$scope.drawer_margin_top = 60;
+	    		$scope.drawer_custom_top = 5;
+	    		$scope.toggle_drawer_top = 5;
+    		}
+    		else  {
+    			
+    			$scope.drawer_margin_top = 50;
+        		$scope.drawer_custom_top = 5;
+        		$scope.toggle_drawer_top = 5;
+    		}
+    		if(type=='burgerIcon'){
+    			return { "top": $scope.toggle_drawer_top+"px"};
+    		}else if(type=='leftMenu'){
+    			return { "margin-top": $scope.drawer_margin_top+"px"};
+    		}else
+    			return;
+    	}
+    	$scope.adjustHeader=function() {
+    		$scope.showHeader = ($cookies.show_app_header == undefined ? true : $cookies.show_app_header);
+    		
+    		if($scope.showHeader == true) {
+	    		$scope.drawer_margin_top = 50;
+	    		$scope.drawer_custom_top = 5;
+	    		$scope.toggle_drawer_top = 5;
+    		}
+    		else  {
+    			
+    			$scope.drawer_margin_top = 40;
+        		$scope.drawer_custom_top = 5;
+        		$scope.toggle_drawer_top = 5;
+    		}
+    		
+    		
+    	}
+    	
+    	
+		//$scope.getMenu();
+		$scope.adjustHeader();
+		
+
+		/* **************************************************************************/
+		/* Logic for the favorite menus is here */
+
+            $scope.loadFavorites = function () {
+                $log.debug('loadFavorites has happened.');
+                if ($scope.favoritesMenuItems == '') {
+                    $scope.generateFavoriteItems();
+                    $log.debug('loadFavorites is calling generateFavoriteItems()');
+                } else {
+                    $log.debug('loadFavorites is NOT calling generateFavoriteItems()');
+                }
+            }
+            
+            $scope.goToUrl = function (item) {
+                $log.info("goToUrl called")
+                $log.info(item);
+
+                var url = item.url;
+                var restrictedApp = item.restrictedApp;
+                $log.debug('Restricted app status is: ' + restrictedApp);
+                if (!url) {
+                    $log.info('No url found for this application, doing nothing..');
+                    return;
+                }
+                if (restrictedApp) {
+                    $window.open(url, '_blank');
+                } else {
+                    $window.open(url, '_self');
+                }
+
+            }
+            
+            $scope.submenuLevelAction = function(index, column) {
+                if ($scope.favoritesMenuItems == '') {
+                    $scope.generateFavoriteItems();
+                    $log.debug('submenuLevelAction is calling generateFavoriteItems()');
+                }
+                $log.debug('item hovered/clicked: ' + index + '; column = ' + column);
+                if (column == 2) {  // 2 is Design
+                    $scope.favoritesWindow = false;
+                    $scope.showFavorites = false;
+                    $scope.emptyFavorites = false;
+                }
+                if (index=='Favorites' && $scope.favoriteItemsCount != 0) {
+                    $log.debug('Showing Favorites window');
+                    $scope.favoritesWindow = true;
+                    $scope.showFavorites = true;
+                    $scope.emptyFavorites = false;
+                }
+                if (index=='Favorites' && $scope.favoriteItemsCount == 0) {
+                    $log.debug('Hiding Favorites window in favor of No Favorites Window');
+                    $scope.favoritesWindow = true;
+                    $scope.showFavorites = false;
+                    $scope.emptyFavorites = true;
+                }
+                if (column > 2) {
+                    $scope.favoritesWindow = false;
+                    $scope.showFavorites = false;
+                    $scope.emptyFavorites = false;
+                }
+            };
+            
+            $scope.hideFavoritesWindow = function() {
+                $log.debug('$scope.hideFavoritesWindow has been called');
+                $scope.showFavorites = false;
+                $scope.emptyFavorites = false;
+            }
+            
+            $scope.isUrlFavorite = function (menuId) {
+//                 $log.debug('array objects in menu favorites = ' + $scope.favoriteItemsCount + '; menuId=' + menuId);
+                var jsonMenu =  JSON.stringify($scope.favoritesMenuItems);
+                var isMenuFavorite =  jsonMenu.indexOf('menuId\":' + menuId);
+                if (isMenuFavorite==-1) {
+                    return false;
+                } else {
+                    return true;
+                }
+
+            }
+		            
+            $scope.generateFavoriteItems  = function() {
+            	$http({
+      		        method: "GET",
+      		        url: 'get_favorites',
+		// TIMEOUT USED FOR LOCAL TESTING ONLY	      		        
+//			      		        timeout: 100
+	      		    }).success(function (response) {
+				  		if (response == '101: Timeout') {
+						$log.error('Timeout attempting to get_favorites_menu');
+					} else {
+					 	if(typeof response != 'undefined' && response.length!=0 && typeof response[0] != 'undefined' && typeof response[0].error!="undefined"){
+						    $log.error('REST API failed get_favorites' + response);
+					 	   	}else{
+					 	   		$log.debug('get_favorites = ' + JSON.stringify(response));
+						 	   	$scope.favoritesMenuItems = response;
+		                        $scope.favoriteItemsCount = Object.keys($scope.favoritesMenuItems).length;
+		                        $log.info('number of favorite menus: ' + $scope.favoriteItemsCount);
+	                        }
+				  		}
+					}).error(function (response){
+					    $log.error('REST API failed get_favorites' + response);
+		//createFavoriteErrorMenu() USED FOR LOCAL TESTING ONLY	      		        
+//							$scope.createFavoriteErrorMenu();
+					});
+        	}
+		            
+		        	$scope.createFavoriteErrorMenu=function() {
+		                $scope.favoritesMenuItems = [
+// 		                                             {
+// 		                                         	    "menuId": "93",
+// 		                                         	    "text": "JSONLint",
+// 		                                         	    "url": "http://http://jsonlint.com"
+// 		                                         	  },
+// 		                                         	  {
+// 		                                         	    "menuId": "22",
+// 		                                         	    "text": "ECOMP Wasteland",
+// 		                                         	    "url": "https://ecomp.homer.att.com/ecompportal/applicationsHome"
+// 		                                         	  },
+// 		                                         	  {
+// 		                                         	    "menuId": "94",
+// 		                                         	    "text": "HROneStop",
+// 		                                         	    "url": "http://ebiz.sbc.com/hronestop"
+// 		                                         	  },
+// 		                                         	  {
+// 		                                         	    "menuId": "91",
+// 		                                         	    "text": "Andy and his Astrophotgraphy",
+// 		                                         	    "url": "https://ecomp.homer.att.com/ecompportal/applicationsHome"
+// 		                                         	  }
+		                                         	];
+		                $scope.favoriteItemsCount = Object.keys($scope.favoritesMenuItems).length;
+		                $log.info('number of favorite menus: ' + $scope.favoriteItemsCount);
+		        	}
+		            
+        	/* end of Favorite Menu code */
+	        /* **************************************************************************/
+
+        	
+	        /* **************************************************************************/
+        	// THIS IS USED FOR LOCAL TESTING ONLY
+	        /* **************************************************************************/
+
+			$scope.createErrorMenu=function() {
+    		$scope.jsonMenuData = [
+                                   {
+                               	    "menuId": 1,
+                               	    "column": 2,
+                               	    "text": "Design",
+                               	    "parentMenuId": null,
+                               	    "url": ""
+                               	  },
+                               	  {
+                               	    "menuId": 2,
+                               	    "column": 3,
+                               	    "text": "Infrastructure Ordering",
+                               	    "parentMenuId": null,
+                               	    "url": ""
+                               	  },
+                               	  {
+                               	    "menuId": 3,
+                               	    "column": 4,
+                               	    "text": "Service Creation",
+                               	    "parentMenuId": null,
+                               	    "url": ""
+                               	  },
+                               	  {
+                               	    "menuId": 4,
+                               	    "column": 5,
+                               	    "text": "Service Mgmt",
+                               	    "parentMenuId": null,
+                               	    "url": ""
+                               	  },
+                               	  {
+                               	    "menuId": 90,
+                               	    "column": 1,
+                               	    "text": "Google",
+                               	    "parentMenuId": 1,
+                               	    "url": "http://google.com"
+                               	  },
+                               	  {
+                               	    "menuId": 91,
+                               	    "column": 1,
+                               	    "text": "Mike Little's Coffee Cup",
+                               	    "parentMenuId": 2,
+                               	    "url": "http://coffee.com"
+                               	  },
+                               	  {
+                               	    "menuId": 92,
+                               	    "column": 2,
+                               	    "text": "Andy and his Astrophotgraphy",
+                               	    "parentMenuId": 3,
+                               	    "url": "http://nightskypix.com"
+                               	  },
+                               	  {
+                               	    "menuId": 93,
+                               	    "column": 1,
+                               	    "text": "JSONLint",
+                               	    "parentMenuId": 4,
+                               	    "url": "http://http://jsonlint.com"
+                               	  },
+                               	  {
+                               	    "menuId": 94,
+                               	    "column": 2,
+                               	    "text": "HROneStop",
+                               	    "parentMenuId": 4,
+                               	    "url": "http://ebiz.sbc.com/hronestop"
+                               	  },
+                               	  {
+                               	    "menuId": 95,
+                               	    "column": 2,
+                               	    "text": "4th Level App4a R16",
+                               	    "parentMenuId": 4,
+                               	    "url": "http://www.e-access.att.com/ecomp_portal_ist/ecompportal/widgets"
+                               	  },
+                               	  {
+                               	    "menuId": 96,
+                               	    "column": 3,
+                               	    "text": "3rd Level App1c R200",
+                               	    "parentMenuId": 4,
+                               	    "url": "http://app1c.com"
+                               	  },
+                               	  {
+                               	    "menuId": 97,
+                               	    "column": 1,
+                               	    "text": "3rd Level App4b R16",
+                               	    "parentMenuId": 5,
+                               	    "url": "http://app4b.com"
+                               	  },
+                               	  {
+                               	    "menuId": 98,
+                               	    "column": 2,
+                               	    "text": "3rd Level App2b R16",
+                               	    "parentMenuId": 5,
+                               	    "url": "http://app2b.com"
+                               	  },
+                               	  {
+                               	    "menuId": 99,
+                               	    "column": 1,
+                               	    "text": "Favorites",
+                               	    "parentMenuId": null,
+                               	    "url": ""
+                               	  }
+                               	];
+	  		$scope.jsonMenuData = unflatten( $scope.jsonMenuData );
+ 	   		$scope.megaMenuDataObject = menuStructureConvert($scope.jsonMenuData);
+//	  		$log.debug(JSON.stringify($scope.jsonMenuData));
+    	}
+		var childItemList="";
+		var parentList = "";
+		try{
+			childItemList = ${menu.childItemList};
+			parentList = ${menu.parentList};
+		}catch(err){
+			console.log("ebz_header: failed to get child/parent lists", err);
+		}
+		
+ 		var pageUrl = window.location.href.split('/')[window.location.href.split('/').length-1];
+		
+		$scope.menuItems = [];
+		for (var i = 0; i < parentList.length; i++) {
+			$scope.openCurrentMenu = false;
+		 if(pageUrl==parentList[i].action)
+				$scope.openCurrentMenu = true;
+			$scope.childItemList = childItemList[i];
+			for(chIndex in  $scope.childItemList){
+				if($scope.childItemList.length>0)
+					if($scope.childItemList[chIndex].action!=null){
+						if($scope.childItemList[chIndex].action==pageUrl)
+							$scope.openCurrentMenu = true;
+					}
+			}
+			$scope.item = {
+				parentLabel : parentList[i].label,
+				parentAction : parentList[i].action,
+				parentImageSrc : parentList[i].imageSrc,
+				open:$scope.openCurrentMenu,
+				childItemList : $scope.childItemList
+			}
+			$scope.menuItems.push($scope.item);
+		}
+		$scope.arrowShow = true;
+		$scope.drawerOpen = false;
+		$scope.subMenuContent = false;
+		$scope.toggleSubMenu = function() {
+			$scope.subMenuContent = !$scope.subMenuContent;
+		};
+
+		var drawerOpen = 'open';
+		if (drawerOpen == 'open') {
+			$scope.drawerOpen = true;
+			$scope.arrowShow = true;
+		} else {
+			$scope.arrowShow = false;
+		}
+		$scope.arrowShow = true;
+		$scope.drawerOpen = false;
+		$scope.toggleDrawer = function() {
+			$scope.drawerOpen = !($scope.drawerOpen);
+			if ($scope.drawerOpen) {
+				$scope.arrowShow = true;				
+				if (document.getElementById('mContent')!=null)
+					document.getElementById('mContent').style.marginLeft = "0px"; 			
+			} else {
+				$scope.arrowShow = false;
+				if (document.getElementById('mContent')!=null)
+					document.getElementById('mContent').style.marginLeft = "-150px";
+			}
+		};
+		//var drawerOpen = getCookie('drawerOpen');
+		if (drawerOpen == 'open') {
+			$scope.drawerOpen = true;
+			$scope.arrowShow = true;
+		} else {
+			$scope.arrowShow = false;
+		}
+		$timeout(function() {
+			detectScrollEvent();
+		}, 800);
+		
+	});
+	
+	app.filter("ellipsis", function(){
+	    return function(text, length){
+	        if (text) {
+	            var ellipsis = text.length > length ? "..." : "";
+	            return text.slice(0, length) + ellipsis;
+	        };
+	        return text;        
+	    }
+	});
+</script>
\ No newline at end of file
diff --git a/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/createnewserviceinstance.jsp b/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/createnewserviceinstance.jsp
new file mode 100644
index 0000000..fd2030e
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/createnewserviceinstance.jsp
@@ -0,0 +1,146 @@
+<script>
+app.controller('createNewSIController',['$scope','$http',function ($scope,$http) { 
+	
+    $scope.searchCategory = "";
+    $scope.searchString = "";
+ 	$scope.tableData=[];
+ 	$scope.displayData=[];
+ 	$scope.selectedSubscriber = $scope.tableData[0]; 
+    $scope.selectedServiceType = "Select Service Type";
+ 	function escapeRegExp(str) {
+ 		return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|\&]/g, " ");
+ 	}
+ 	$scope.serviceTypes=["Select Service Type", "uCPE-VMS", "SDN-L3-BONDING", "SDN-ETHERNET-INTERNET"];
+ 	
+ 	$scope.getSubscribers = function(refresh){
+ 
+ 		var refreshTxt = 'refresh_subscribers';
+ 		var getTxt = 'get_subscribers';
+ 		var selectedTxt = getTxt;
+ 		if (refresh)
+ 			selectedTxt = refreshTxt;
+		$http.get(selectedTxt).
+			then(function(response){
+				var data = JSON.parse(response.data.result);
+				$scope.tableData = data['customer'];
+				$scope.initSubscriberList();
+			})
+			.catch(function(data,status){
+			console.log("Error: " + status + " : " + data); 					
+			})
+			.finally(function() {
+				
+			});
+ 		
+ 	}
+ 
+
+ 	$scope.initSubscriberList = function () {
+ 		//$scope.selectedSubscriber = $scope.selectedSubscriber['subscriber-name'] || $scope.tableData[0]['subscriber-name'];
+ 		$scope.selectedSubscriber = 'Select Subscriber Name';
+ 	}
+ 	
+ 	$scope.initSrvcTypeList = function () {
+ 		$scope.selectedServiceType = $scope.serviceTypes[0];  
+ 	}
+
+ 	$scope.getSubscriberDetails = function(selectedSubscriber){
+		if (selectedSubscriber == 'Select Subscriber Name')
+			return;
+ 		$http.get('createsubscriber/' + encodeURIComponent(selectedSubscriber)).
+		then(function(response){
+		//	window.location.href = 'createsubscriberdetails.htm';
+		})
+		.catch(function(data,status){
+		console.log("Error: " + status + " : " + data); 					
+		})
+		.finally(function() {
+			
+		});
+	}
+	
+	$scope.disableSubmitBtn = function (subName, svcType) {
+		return (typeof subName === "undefined") && (svcType == 'Select Service Type');
+ 		//return (subName == 'Select Subscriber Name') && (svcType == 'Select Service Type');
+ 	}
+	
+    $scope.cancelCreateSI = function(selectedSubscriber){
+ 		
+		window.location.href = 'welcome.htm';
+		
+	}
+	
+ 	$scope.getSubscribers(false);
+ 	//$scope.initSubscriberList();
+ 	
+}]);
+
+
+</script>
+
+<div ng-controller="createNewSIController">
+     
+     <h1 class="heading1"><center>Create New Service Instance</center></h1>
+	
+
+<BR>
+ <table> <tr>
+   
+   <td width="5%" align="left">
+	<!--  <a ng-click="getSubscriberDetails(selectedSubscriber['global-customer-id']);" ng-disabled="disableSubmitBtn(selectedSubscriber['subscriber-name'], selectedServiceType);" ><img src="static/fusion/images/plus.png"></a>-->
+  <input type="image" ng-click="getSubscriberDetails(selectedSubscriber['global-customer-id']);" ng-disabled="disableSubmitBtn(selectedSubscriber['subscriber-name'], selectedServiceType);" src="static/fusion/images/plus.png"/>
+   </td>
+   
+	<td style="width:10%" align="left"><div class="fn-ebz-container">	
+		<label  class="fn-ebz-text-label">Subscriber:</label>
+		</div> </td>
+	<td style="width:30%"><div class="fn-ebz-container">
+		<select  ng-model="selectedSubscriber"  ng-options="resultdata['subscriber-name'] for resultdata in tableData" required>
+		<option value="">Select Subscriber Name</option>
+		</select>
+	</div></td>
+	 <td width="5%" align="left">
+		  <input type="image" ng-click="getSubscribers(true);" src="static/fusion/images/refresh.jpg"/>
+      </td>
+	
+	<td width="5%"> </td>
+<td style="width:10%" align="left">
+
+    
+	<div class="fn-ebz-container">	
+		<label  class="fn-ebz-text-label">Service Type:</label>
+	</div> </td>
+    <td style="width:32%"><div class="fn-ebz-container">
+		<select  ng-model="selectedServiceType"  ng-options="sType for sType in serviceTypes" ng-init="initSrvcTypeList();" ></select>
+	</div> </td>
+	
+	<td width="5%"> </td>
+	
+    </tr>
+    </table>
+ 
+	<center>
+		<button type="cancel" ng-click="cancelCreateSI();" att-button size="small">Cancel</button>
+	</center>
+	
+
+
+</div>
+<!--  Temporary solution for footer overlapping the men after talking to EComp SDK developer on 06/16/2016 -->
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+
+
diff --git a/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/searchexistingsi.jsp b/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/searchexistingsi.jsp
new file mode 100644
index 0000000..ca840e6
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/searchexistingsi.jsp
@@ -0,0 +1,81 @@
+<link rel="stylesheet" type="text/css" href="app/vid/styles/subscriberSearch.css" />
+
+<script src="app/vid/scripts/controller/VidApp.js"></script>
+<script src="app/vid/scripts/controller/subscriberSearch.js"></script>
+
+<script src="app/vid/scripts/controller/aaiSubscriberController.js"></script>
+<script src="app/vid/scripts/services/utilityService.js"></script>
+<script src="app/vid/scripts/angular-ui-tree.js"></script>
+
+<link rel="stylesheet" type="text/css" href="app/vid/styles/dialogs.css" />
+
+<script src="app/vid/test/testAaiData.js"></script>
+
+<script src="app/vid/scripts/controller/creationDialogController.js"></script>
+<script src="app/vid/scripts/controller/deleteResumeDialogController.js"></script>
+<script src="app/vid/scripts/controller/detailsDialogController.js"></script>
+<script src="app/vid/scripts/controller/statusDialogController.js"></script>
+<script src="app/vid/scripts/controller/msoCommitController.js"></script>
+
+<script src="app/vid/scripts/services/aaiService.js"></script>
+<script src="app/vid/scripts/services/asdcService.js"></script>
+<script src="app/vid/scripts/services/creationService.js"></script>
+<script src="app/vid/scripts/services/dataService.js"></script>
+<script src="app/vid/scripts/services/deleteResumeService.js"></script>
+<script src="app/vid/scripts/services/detailsService.js"></script>
+<script src="app/vid/scripts/services/statusService.js"></script>
+<script src="app/vid/scripts/services/componentService.js"></script>
+<script src="app/vid/scripts/services/msoService.js"></script>
+<script src="app/vid/scripts/services/propertyService.js"></script>
+<script src="app/vid/scripts/services/utilityService.js"></script>
+
+<script src="app/vid/scripts/directives/extensionsDirective.js"></script>
+<script src="app/vid/scripts/directives/parameterBlockDirective.js"></script>
+<script src="app/vid/scripts/directives/popupWindowDirective.js"></script>
+<script src="app/vid/scripts/directives/progressBarDirective.js"></script>
+
+<script src="app/vid/scripts/constants/componentConstants.js"></script>
+<script src="app/vid/scripts/constants/fieldConstants.js"></script>
+<script src="app/vid/scripts/constants/parameterConstants.js"></script>
+
+<link rel="stylesheet" type="text/css" href="app/vid/styles/aaiGetSubs.css" />
+<link rel="stylesheet" type="text/css" href="app/vid/styles/aaiSubDetails.css" />
+<link rel="stylesheet" type="text/css" href="app/vid/styles/angular-ui-tree.css" />
+<link rel="stylesheet" type="text/css" href="app/vid/styles/vidTree.css" />
+
+<%@ page import="org.openecomp.vid.mso.*"%>
+<%@ page import="org.openecomp.portalsdk.core.util.SystemProperties"%>
+<%
+	String properties = "{msoMaxPolls:" + SystemProperties.getProperty(MsoProperties.MSO_MAX_POLLS)
+			+ ",msoMaxPollingIntervalMsec:"
+			+ SystemProperties.getProperty(MsoProperties.MSO_POLLING_INTERVAL_MSECS) + "}";
+%>
+
+<div ng-controller="aaiSubscriberSearchController"
+	ng-init="init(<%=properties%>);" ng-cloak>
+
+
+ 
+	<div ng-view></div>
+	
+</div>
+
+<!--  Temporary solution for footer overlapping the men after talking to EComp SDK developer on 06/16/2016 -->
+
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+
+		
\ No newline at end of file
diff --git a/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/serviceModels.jsp b/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/serviceModels.jsp
index d0c36d4..88131c5 100755
--- a/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/serviceModels.jsp
+++ b/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/serviceModels.jsp
@@ -1,3 +1,4 @@
+<link rel="stylesheet" type="text/css" href="app/vid/external/bootstrap/css/bootstrap.min.css" />
 <link rel="stylesheet" type="text/css" href="app/vid/styles/aaiGetSubs.css" />
 <link rel="stylesheet" type="text/css" href="app/vid/styles/aaiSubDetails.css" />
 <link rel="stylesheet" type="text/css" href="app/vid/styles/aaiSubViewEdit.css" />
@@ -7,20 +8,22 @@
 <link rel="stylesheet" type="text/css" href="app/vid/styles/vidTree.css" />
 <link rel="stylesheet" type="text/css" href="app/vid/styles/dialogs.css" />
 <link rel="stylesheet" type="text/css" href="app/vid/styles/angularjs-datetime-picker.css"></link>
-<link rel="stylesheet" type="text/css" href="app/vid/external/bootstrap/css/bootstrap.min.css" />
 <link rel="stylesheet" type="text/css" href="app/vid/styles/common.css" />
+<link rel="stylesheet" type="text/css" href="app/vid/styles/messageViewer.css" />
 
 	
 	<script>
 	
 	var appDS2 = app;
 </script>
+
 	<script src="app/vid/scripts/controller/VidApp.js"></script>
 	
 <!-- Latest compiled and minified JavaScript -->
 
-<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+<script src="app/vid/external/bootstrap/js/bootstrap.min.js"></script>
 <script src="app/vid/external/multiselect/angular-bootstrap-multiselect.min.js"></script>
+<script src="app/vid/external/upload-file/ng-file-upload.min.js"></script>
 
 <script src="app/vid/scripts/angular-ui-tree.js"></script>
 
@@ -33,40 +36,56 @@
 <script src="app/vid/scripts/filters/date.filter.js"></script>
 <script src="app/vid/scripts/modals/change-management-manual-tasks-controller/change-management-manual-tasks.controller.js"></script>
 <script src="app/vid/scripts/modals/new-change-management/new-change-management.controller.js"></script>
-<script src="app/vid/scripts/modals/new-scheduler/new-scheduler.controller.js"></script>
+
+<script src="app/vid/scripts/modals/new-test-environment/new-test-environment.controller.js"></script>
+<script src="app/vid/scripts/modals/alert-modal/alert-modal.controller.js"></script>
 <script src="app/vid/scripts/controller/aaiSubscriberController.js"></script>
 <script src="app/vid/scripts/controller/creationDialogController.js"></script>
-<script src="app/vid/scripts/controller/deletionDialogController.js"></script>
+<script src="app/vid/scripts/controller/deleteResumeDialogController.js"></script>
 <script src="app/vid/scripts/controller/detailsDialogController.js"></script>
 <script src="app/vid/scripts/controller/statusDialogController.js"></script>
 <script src="app/vid/scripts/controller/InstantiationController.js"></script>
 <script src="app/vid/scripts/controller/msoCommitController.js"></script>
+<script src="app/vid/scripts/controller/pnfSearchAssociationController.js"></script>
 <script src="app/vid/scripts/controller/ServiceModelController.js"></script>
 <script src="app/vid/scripts/controller/previousVersionDialogController.js"></script>
 <script src="app/vid/scripts/controller/previousVersionContoller.js"></script>
+<script src="app/vid/scripts/controller/AddNetworkNodeController.js"></script>
 <script src="app/vid/scripts/controller/change-management.controller.js"></script>
+<script src="app/vid/scripts/controller/testEnvironmentsController.js"></script>
+<script src="app/vid/scripts/modals/attach-test-env-manifest/attach-test-env-manifest.controller.js"></script>
+<script src="app/vid/scripts/controller/ServiceProxyConfigController.js"></script>
 
 <script src="app/vid/scripts/directives/angularjs-datetime-picker.js"></script>
+<script src="app/vid/scripts/controller/msoCommitModalController.js"></script>
 
-
+<script src="app/vid/scripts/directives/messageViewer.js"></script>
 <script src="app/vid/scripts/directives/extensionsDirective.js"></script>
 <script src="app/vid/scripts/directives/parameterBlockDirective.js"></script>
 <script src="app/vid/scripts/directives/popupWindowDirective.js"></script>
 <script src="app/vid/scripts/directives/progressBarDirective.js"></script>
+<script src="app/vid/scripts/directives/serviceMetadata.js"></script>
+<script src="app/vid/scripts/directives/search.js"></script>
 <script src="app/vid/scripts/services/aaiService.js"></script>
 <script src="app/vid/scripts/services/schedulerService.js"></script>
 <script src="app/vid/scripts/services/asdcService.js"></script>
 <script src="app/vid/scripts/services/componentService.js"></script>
 <script src="app/vid/scripts/services/creationService.js"></script>
 <script src="app/vid/scripts/services/dataService.js"></script>
-<script src="app/vid/scripts/services/deletionService.js"></script>
+<script src="app/vid/scripts/services/deleteResumeService.js"></script>
 <script src="app/vid/scripts/services/detailsService.js"></script>
 <script src="app/vid/scripts/services/statusService.js"></script>
 <script src="app/vid/scripts/services/msoService.js"></script>
 <script src="app/vid/scripts/services/propertyService.js"></script>
 <script src="app/vid/scripts/services/utilityService.js"></script>
 <script src="app/vid/scripts/services/vnfService.js"></script>
+<script src="app/vid/scripts/services/pnfService.js"></script>
 <script src="app/vid/scripts/services/change-management.service.js"></script>
+<script src="app/vid/scripts/modals/cancel-pending-workflow/cancel-pending-workflow.controller.js"></script>
+<script src="app/vid/scripts/services/OwningEntityService.js"></script>
+<script src="app/vid/scripts/services/testEnvironmentsService.js"></script>
+
+
 
 <%@ page import="org.openecomp.vid.mso.*"%>
 <%@ page import="org.openecomp.portalsdk.core.util.SystemProperties"%>
@@ -81,18 +100,20 @@
 	<div ng-view></div>
 </div>
 <!--  Temporary solution for footer overlapping the men after talking to EComp SDK developer on 06/16/2016 -->
-<br>
-<br>
-<br>
-<br>
-<br>
-<br>
-<br>
-<br>
-<br>
-<br>
-<br>
-<br>
-<br>
-<br>
-<br>
+<div class="temporary-solution">
+	<br>
+	<br>
+	<br>
+	<br>
+	<br>
+	<br>
+	<br>
+	<br>
+	<br>
+	<br>
+	<br>
+	<br>
+	<br>
+	<br>
+	<br>
+</div>
diff --git a/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/subscriberdetails.jsp b/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/subscriberdetails.jsp
new file mode 100644
index 0000000..ca92b15
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/subscriberdetails.jsp
@@ -0,0 +1,184 @@
+<%@ include file="/WEB-INF/fusion/jsp/popup_modal.html" %>
+<div ng-controller="subscriberDetailsController">
+	<div>
+		<h1 class="heading1" style="margin-top:20px;">Selected Subscriber's Service Instance Details:</h1>
+		<div style="margin-top:30px">
+		 	<table att-table table-data="tableData">
+
+			    <thead  att-table-row type="header">
+					<tr>
+					    <th att-table-header key="viewSubDetails">View/Edit</th>
+						<th att-table-header key="global-customer-id">Global Customer ID</th>
+			            <th att-table-header key="subscriber-name">Subscriber Name</th>        
+			            <th att-table-header key="service-type">Service Type</th>    
+			            <th att-table-header key="service-instance-id">Service Instance ID</th>
+			        </tr>
+			    </thead>
+			    <tbody att-table-row type="body" row-repeat="disData in displayData">
+			        <tr>
+			        <td att-table-body>
+			         <div ng-controller="viewEditSubController">
+    	              <a href="#" ng-click="postsubscriberID(disData.subscriberName)" alt="View/Edit">
+                  	     View/Edit
+	                  </a>
+            	   </div>
+            	   </td>
+		            	<td att-table-body >{{disData.globalCustomerId}}</td>
+		            	<td att-table-body >{{disData.subscriberName}}</td>
+		            	<td att-table-body >{{disData.serviceType}}</td>
+		            	<td att-table-body >{{disData.serviceInstanceId}}</td>
+			        </tr>     
+			    </tbody>	  
+			</table> 
+		</div>
+	</div>	
+	<table><tr>
+	<td>
+	<div ng-controller="searchExistingSIController" align="left" >
+		<button type="submit" ng-click="cancelSubDetails();" att-button
+			btn-type="primary" size="small">Cancel</button>
+	</div>
+	</td></tr>
+	
+	</table>
+	
+</div>
+<!--  Temporary solution for footer overlapping the men after talking to EComp SDK developer on 06/25/2016 -->
+
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+		
+<script>
+app.controller("subscriberDetailsController", function ($scope,$http,modalService, $modal) { 
+	$scope.tableData=${model.customerInfo};
+	$scope.displayData= [];
+	$scope.subscriberData=[];
+	$scope.serviceInstanceData= new Array();
+	$scope.globalcustomerid = $scope.tableData['global-customer-id'];
+	$scope.subscriberName = $scope.tableData['subscriber-name'];
+	$scope.subscriberData = $scope.tableData['service-subscriptions'];
+	   
+	 $scope.setDisplaynoSTSI = function(){
+    	 $scope.displayData.push({
+				globalCustomerId : $scope.globalcustomerid,
+			    subscriberName   :  $scope.subscriberName,
+			    serviceType : "No Service Subscription Found",
+			    serviceInstanceId : "No Service Instance Found"
+			});
+     }
+	 
+	 $scope.setDisplaynoSI = function(servcType){
+    	 $scope.displayData.push({
+				globalCustomerId : $scope.globalcustomerid,
+			    subscriberName   :  $scope.subscriberName,
+			    serviceType : servcType,
+			    serviceInstanceId : "No Service Instance Found"
+			});
+     }
+	 
+	if ($scope.subscriberData != null)
+		{
+		    if ($scope.numberofSubscribers = $scope.subscriberData['service-subscription'] != null)
+		    	{
+					$scope.numberofSubscribers = $scope.subscriberData['service-subscription'].length;
+					if ($scope.numberofSubscribers > 0)
+						{
+						    var index = 0;
+							for(i=0; i < $scope.numberofSubscribers; i++) {
+								$scope.serviceInstanceData[i] = new Array();
+								var servicesubscription = $scope.subscriberData['service-subscription'][i]; 
+								$scope.serviceInstanceData[i] = servicesubscription['service-instances'];
+								if ($scope.serviceInstanceData[i] != null)
+									{
+									    if ($scope.serviceInstanceData[i]['service-instance'] != null)
+									    	{
+												var numberofserviceInstance = $scope.serviceInstanceData[i]['service-instance'].length;
+												if (numberofserviceInstance > 0)
+													{
+														for(j=0; j < numberofserviceInstance; j++)
+														{
+															$scope.displayData.push({
+																globalCustomerId : $scope.globalcustomerid,
+															    subscriberName   :  $scope.subscriberName,
+															    serviceType : servicesubscription['service-type'],
+															    serviceInstanceId : $scope.serviceInstanceData[i]['service-instance'][j]['service-instance-id']
+															});
+														}
+													}
+												else
+													{
+													   $scope.setDisplaynoSI(servicesubscription['service-type']);
+													}
+									    	}
+									    else
+										{
+									    	$scope.setDisplaynoSI(servicesubscription['service-type']);
+										}
+									}
+								else
+									{
+									   $scope.setDisplaynoSI(servicesubscription['service-type']);
+									}
+					        }
+						}
+					else
+						{
+						  $scope.setDisplaynoSTSI();
+						}
+		    	}
+		    else
+				{
+		    	   $scope.setDisplaynoSTSI();
+				}
+			}
+		else
+		{
+			 $scope.setDisplaynoSTSI();
+		}
+	
+	
+});
+
+app.controller('viewEditSubController',['$scope','$http',function ($scope,$http) { 
+	
+	$scope.postsubscriberID = function(subID){
+		   $.ajax({
+		            url: "vieweditsub/subedit?"+"subscriberID="+encodeURIComponent(subID),
+	                type : "POST",
+	                success:function (response){
+	                    window.location.href = 'instantiate.htm';
+	                },
+	                error:function( jqXHR, status,error ){
+	                	$("#errorInfo").show();
+	                }
+	                
+	        });
+		}
+	
+}]);
+
+app.controller('searchExistingSIController',['$scope','$http',function ($scope,$http) { 
+	
+	$scope.cancelSubDetails = function(selectedSubscriber){
+ 		
+		window.location.href = 'searchexistingsi.htm';
+		
+	}
+	
+}]);
+</script>
+
+    
diff --git a/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/testViewEdit.jsp b/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/testViewEdit.jsp
index 59c8a31..2c80222 100755
--- a/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/testViewEdit.jsp
+++ b/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/testViewEdit.jsp
@@ -7,7 +7,7 @@
 <link rel="stylesheet" type="text/css" href="app/vid/styles/dialogs.css" />
 
 <script src="app/vid/scripts/controller/creationDialogController.js"></script>
-<script src="app/vid/scripts/controller/deletionDialogController.js"></script>
+<script src="app/vid/scripts/controller/deleteResumeDialogController.js"></script>
 <script src="app/vid/scripts/controller/detailsDialogController.js"></script>
 <script src="app/vid/scripts/controller/statusDialogController.js"></script>
 <script src="app/vid/scripts/controller/msoCommitController.js"></script>
@@ -16,7 +16,7 @@
 <script src="app/vid/scripts/services/asdcService.js"></script>
 <script src="app/vid/scripts/services/creationService.js"></script>
 <script src="app/vid/scripts/services/dataService.js"></script>
-<script src="app/vid/scripts/services/deletionService.js"></script>
+<script src="app/vid/scripts/services/deleteResumeService.js"></script>
 <script src="app/vid/scripts/services/detailsService.js"></script>
 <script src="app/vid/scripts/services/statusService.js"></script>
 <script src="app/vid/scripts/services/componentService.js"></script>
@@ -54,7 +54,7 @@
 	<div popup-window class="popupContents" ngx-show="{{popup.isVisible}}"
 		ng-cloak>
 		<div ng-include="'app/vid/scripts/view-models/creationDialog.htm'"></div>
-		<div ng-include="'app/vid/scripts/view-models/deletionDialog.htm'"></div>
+		<div ng-include="'app/vid/scripts/view-models/deleteResumeDialog.htm'"></div>
 		<div ng-include="'app/vid/scripts/view-models/detailsDialog.htm'"
 			onload="autoStartTest();"></div>
 	</div>
diff --git a/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/welcome.jsp b/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/welcome.jsp
index ad5331d..b505909 100755
--- a/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/welcome.jsp
+++ b/epsdk-app-onap/src/main/webapp/WEB-INF/jsp/welcome.jsp
@@ -1,23 +1,27 @@
 <script src="app/vid/external/multiselect/angular-bootstrap-multiselect.min.js"></script>
+<script src="app/vid/external/upload-file/ng-file-upload.min.js"></script>
 <div>
-     <h1 class="heading1">ONAP</h1>
+     <h1 class="heading1">AT&T Domain 2.0 Network</h1>
      <br>
      <h1 class="heading1"><u>Welcome to VID</u></h1>
      <br>
    The Virtual Infrastructure Deployment (VID) application allows infrastructure service deployment operators 
    to instantiate service instances and their constituent parts for Distributed service models required by the 
-   ONAP service operations that manage them, such as Mobility Network Services, etc. 
-   The models are defined by ONAP component SDC. The service 
+   internal AT&T service operations organizations that manage them, such as Mobility Network Services, 
+   Netbond Services, or FlexReach Services. The models are defined by ECOMP component ASDC. The service 
    deployment operator selects the service operations owner and model that they wish to instantiate. After 
-   entry of appropriate data, the operator instructs VID to direct another ONAP component, MSO, to instantiate 
+   entry of appropriate data, the operator instructs VID to direct another ECOMP component, MSO, to instantiate 
    the selected service model. Once the service instance has been instantiated, the service operator can instruct 
    VID to direct MSO to instantiate the service instance's component VNFs, VF Modules, Networks and Volume Groups. 
    The VID user can also search for, and display, existing service instances and direct the instantiation of 
    subsequent instance components.
      <br><br>
-  
-    <h1 class="heading1"><a href="mailto:portal@lists.onap.org" target="_top">Contact Us</a></h1>
-    <a href="mailto:portal@lists.onap.org" target="_top">Please click here to contact us.</a>
+   <h1 class="heading1"><u>About VID</u></h1>
+    VID was originally developed for the October 2016 release by an integrated IT and Labs team, under the 
+      direction of Steve Smokowski and Vivian Pressley.
+      <br><br>
+    <h1 class="heading1"><a href="mailto:VID-Tier4@ist.att.com" target="_top">Contact Us</a></h1>
+    <a href="mailto:VID-Tier4@ist.att.com" target="_top">Please click here to contact us.</a>
 
 	
 
@@ -26,6 +30,7 @@
 
 
 </div>
+<!--  Temporary solution for footer overlapping the men after talking to EComp SDK developer on 06/16/2016 -->
 <br>
 <br>
 <br>
diff --git a/epsdk-app-onap/src/main/webapp/app/fusion/external/ebz/angular_js/app.js b/epsdk-app-onap/src/main/webapp/app/fusion/external/ebz/angular_js/app.js
index 59e2747..e5db518 100755
--- a/epsdk-app-onap/src/main/webapp/app/fusion/external/ebz/angular_js/app.js
+++ b/epsdk-app-onap/src/main/webapp/app/fusion/external/ebz/angular_js/app.js
@@ -1,5 +1,5 @@
 angular.module('att.abs.helper', []);
 angular.module('quantum', []);
 var app=angular.module("abs", ["att.abs", "att.abs.helper","modalServices", /*'ngAnimate','ngTouch',*/ 'ui.bootstrap',
-                               "att.gridster","checklist-model","ngRoute", "ngCookies", 'btorfs.multiselect']);
+                               "att.gridster","checklist-model","ngRoute", "ngCookies", 'btorfs.multiselect','ngFileUpload']);
 
diff --git a/epsdk-app-onap/src/main/webapp/app/vid/external/multiselect/angular-bootstrap-multiselect.min.js b/epsdk-app-onap/src/main/webapp/app/vid/external/multiselect/angular-bootstrap-multiselect.min.js
deleted file mode 100644
index b9be2c7..0000000
--- a/epsdk-app-onap/src/main/webapp/app/vid/external/multiselect/angular-bootstrap-multiselect.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(){"use strict";var a=angular.module("btorfs.multiselect",["btorfs.multiselect.templates"]);a.getRecursiveProperty=function(a,b){return b.split(".").reduce(function(a,b){return a?a[b]:null},a)},a.directive("multiselect",["$filter","$document","$log",function(b,c,d){return{restrict:"AE",scope:{options:"=",displayProp:"@",idProp:"@",searchLimit:"=?",selectionLimit:"=?",showSelectAll:"=?",showUnselectAll:"=?",showSearch:"=?",searchFilter:"=?",disabled:"=?ngDisabled",labels:"=?",showTooltip:"=?",placeholder:"@?"},require:"ngModel",templateUrl:"multiselect.html",link:function(b,e,f,g){b.selectionLimit=b.selectionLimit||0,b.searchLimit=b.searchLimit||25,b.searchFilter="",b.resolvedOptions=[],"function"!=typeof b.options&&(b.resolvedOptions=b.options),"undefined"!=typeof f.disabled&&(b.disabled=!0);var h=function(a){e[0].contains(a.target)||b.$apply(function(){b.open=!1})};c.on("click",h);var i=function(){g.$viewValue?(b.selectedOptions=b.resolvedOptions.filter(function(a){for(var c=b.getId(a),d=0;d<g.$viewValue.length;d++){var e=b.getId(g.$viewValue[d]);if(c===e)return!0}return!1}),b.unselectedOptions=b.resolvedOptions.filter(function(a){return b.selectedOptions.indexOf(a)<0})):(b.selectedOptions&&(b.selectedOptions=[]),b.unselectedOptions=b.resolvedOptions.slice())};b.toggleDropdown=function(){b.open=!b.open,b.resolvedOptions=b.options,i()},g.$render=function(){i()},g.$viewChangeListeners.push(function(){i()}),g.$isEmpty=function(a){return!a||0===a.length};var j=b.$watch("selectedOptions",function(){g.$setViewValue(angular.copy(b.selectedOptions))},!0);b.$on("$destroy",function(){c.off("click",h),j&&j()}),b.getButtonText=function(){if(b.selectedOptions&&1===b.selectedOptions.length)return b.getDisplay(b.selectedOptions[0]);if(b.selectedOptions&&b.selectedOptions.length>1){var a=angular.isDefined(b.selectedOptions)?b.selectedOptions.length:0;return 0===a?b.labels&&b.labels.select?b.labels.select:b.placeholder||"Select":a+" "+(b.labels&&b.labels.itemsSelected?b.labels.itemsSelected:"selected")}return b.labels&&b.labels.select?b.labels.select:b.placeholder||"Select"},b.selectAll=function(){b.selectedOptions=b.resolvedOptions.slice(),b.unselectedOptions=[]},b.unselectAll=function(){b.selectedOptions=[],b.unselectedOptions=b.resolvedOptions.slice()},b.toggleItem=function(a){"undefined"==typeof b.selectedOptions&&(b.selectedOptions=[]);var c=b.selectedOptions.indexOf(a),d=c!==-1;if(d)b.unselectedOptions.push(b.selectedOptions[c]),b.selectedOptions.splice(c,1);else if(!d&&(0===b.selectionLimit||b.selectedOptions.length<b.selectionLimit)){var e=b.unselectedOptions.indexOf(a);b.unselectedOptions.splice(e,1),b.selectedOptions.push(a)}},b.getId=function(c){return angular.isString(c)?c:angular.isObject(c)?b.idProp?a.getRecursiveProperty(c,b.idProp):(d.error("Multiselect: when using objects as model, a idProp value is mandatory."),""):c},b.getDisplay=function(c){return angular.isString(c)?c:angular.isObject(c)?b.displayProp?a.getRecursiveProperty(c,b.displayProp):(d.error("Multiselect: when using objects as model, a displayProp value is mandatory."),""):c},b.isSelected=function(a){if(!b.selectedOptions)return!1;for(var c=b.getId(a),d=0;d<b.selectedOptions.length;d++){var e=b.selectedOptions[d];if(b.getId(e)===c)return!0}return!1},b.updateOptions=function(){"function"==typeof b.options&&b.options().then(function(a){b.resolvedOptions=a,i()})},b.search=function(){var a=0;return function(c){if(a>b.searchLimit)return!1;var d=b.getDisplay(c);if(d){var e=d.toLowerCase().indexOf(b.searchFilter.toLowerCase())>-1;return e&&a++,e}}}}}}])}(),angular.module("btorfs.multiselect.templates",["multiselect.html"]),angular.module("multiselect.html",[]).run(["$templateCache",function(a){a.put("multiselect.html",'<div class="btn-group" style="width: 100%">\n    <button type="button" class="btn btn-default btn-block dropdown-toggle" ng-click="toggleDropdown()" ng-disabled="disabled" style="white-space: nowrap; overflow-x: hidden; text-overflow: ellipsis;">\n        {{getButtonText()}}&nbsp;<span class="caret"></span>\n    </button>\n    <ul class="dropdown-menu dropdown-menu-form"\n        ng-style="{display: open ? \'block\' : \'none\'}" style="width: 100%; overflow-x: auto">\n\n        <li ng-show="showSelectAll">\n            <a ng-click="selectAll()" href="">\n                <span class="glyphicon glyphicon-ok"></span> {{labels.selectAll || \'Select All\'}}\n            </a>\n        </li>\n        <li ng-show="showUnselectAll">\n            <a ng-click="unselectAll()" href="">\n                <span class="glyphicon glyphicon-remove"></span> {{labels.unselectAll || \'Unselect All\'}}\n            </a>\n        </li>\n        <li ng-show="(showSelectAll || showUnselectAll)"\n            class="divider">\n        </li>\n\n        <li role="presentation" ng-repeat="option in selectedOptions" class="active">\n            <a class="item-selected" href="" title="{{showTooltip ? getDisplay(option) : \'\'}}" ng-click="toggleItem(option); $event.stopPropagation()" style="overflow-x: auto">\n                <span class="glyphicon glyphicon-remove"></span>\n                {{getDisplay(option)}}\n            </a>\n        </li>\n        <li ng-show="selectedOptions.length > 0" class="divider"></li>\n\n        <li ng-show="showSearch">\n            <div class="dropdown-header">\n                <input type="text" class="form-control input-sm" style="width: 100%;"\n                       ng-model="searchFilter" placeholder="{{labels.search || \'Search...\'}}" ng-change="updateOptions()"/>\n            </div>\n        </li>\n\n        <li ng-show="showSearch" class="divider"></li>\n        <li role="presentation" ng-repeat="option in unselectedOptions | filter:search() | limitTo: searchLimit"\n            ng-if="!isSelected(option)"\n            ng-class="{disabled : selectionLimit && selectedOptions.length >= selectionLimit}">\n            <a class="item-unselected" href="" title="{{showTooltip ? getDisplay(option) : \'\'}}" ng-click="toggleItem(option); $event.stopPropagation()" style="overflow-x: auto">\n                {{getDisplay(option)}}\n            </a>\n        </li>\n\n        <li class="divider" ng-show="selectionLimit > 1"></li>\n        <li role="presentation" ng-show="selectionLimit > 1">\n            <a>{{selectedOptions.length || 0}} / {{selectionLimit}} {{labels.itemsSelected || \'selected\'}}</a>\n        </li>\n\n    </ul>\n</div>\n')}]);
\ No newline at end of file
