diff --git a/components/org.apache.stratos.manager/META-INF/persistence b/components/org.apache.stratos.manager/META-INF/persistence
new file mode 100644
index 0000000000..339782b4e4
--- /dev/null
+++ b/components/org.apache.stratos.manager/META-INF/persistence
@@ -0,0 +1,20 @@
+
+
+
+
+ org.apache.openjpa.persistence.PersistenceProviderImpl
+
+ org.apache.stratos.messaging.domain.application.signup.ApplicationSignUp
+ org.apache.stratos.messaging.domain.application.signup.ArtifactRepository
+ org.apache.stratos.messaging.domain.application.signup.DomainMapping
+ org.apache.stratos.messaging.domain.topology.Cluster
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/org.apache.stratos.manager/src/main/database/ER-MODEL.mwb b/components/org.apache.stratos.manager/src/main/database/ER-MODEL.mwb
new file mode 100644
index 0000000000..1cd2055a60
Binary files /dev/null and b/components/org.apache.stratos.manager/src/main/database/ER-MODEL.mwb differ
diff --git a/components/org.apache.stratos.manager/src/main/database/Stratos-dbScript b/components/org.apache.stratos.manager/src/main/database/Stratos-dbScript
new file mode 100644
index 0000000000..961bee7d8b
--- /dev/null
+++ b/components/org.apache.stratos.manager/src/main/database/Stratos-dbScript
@@ -0,0 +1,91 @@
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
+
+CREATE SCHEMA IF NOT EXISTS `StratosManager` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
+USE `StratosManager` ;
+
+-- -----------------------------------------------------
+-- Table `StratosManager`.`Cluster`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `StratosManager`.`Cluster` (
+ `clusterId` VARCHAR(255) NULL,
+ `serviceName` VARCHAR(255) NULL,
+ `autoscalePolicyName` VARCHAR(255) NULL,
+ `deploymentPolicyName` VARCHAR(255) NULL,
+ `hostNames` VARCHAR(255) NULL,
+ `tenantRange` VARCHAR(45) NULL,
+ `isLbCluster` TINYINT(1) NULL,
+ `isKubernetesCluster` TINYINT(1) NULL,
+ `appId` VARCHAR(45) NULL,
+ PRIMARY KEY (`clusterId`))
+ENGINE = InnoDB;
+
+
+-- -----------------------------------------------------
+-- Table `StratosManager`.`ArtifactRepository`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `StratosManager`.`ArtifactRepository` (
+ `alias` VARCHAR(255) NOT NULL,
+ `isPrivateRepo` TINYINT(1) NULL,
+ `repoUserName` VARCHAR(255) NULL,
+ `repoPassword` VARCHAR(255) NULL,
+ `repoURL` VARCHAR(255) NULL,
+ `catridgeType` VARCHAR(255) NULL,
+ PRIMARY KEY (`alias`))
+ENGINE = InnoDB;
+
+
+-- -----------------------------------------------------
+-- Table `StratosManager`.`ApplicationSignUp`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `StratosManager`.`ApplicationSignUp` (
+ `applicationId` VARCHAR(255) NOT NULL,
+ `tenantId` INT NOT NULL,
+ `Cluster_clusterId` VARCHAR(255) NOT NULL,
+ `ArtifactRepository_alias` VARCHAR(255) NOT NULL,
+ PRIMARY KEY (`applicationId`, `tenantId`),
+ INDEX `fk_ApplicationSignUp_Cluster_idx` (`Cluster_clusterId` ASC),
+ INDEX `fk_ApplicationSignUp_ArtifactRepository1_idx` (`ArtifactRepository_alias` ASC),
+ CONSTRAINT `fk_ApplicationSignUp_Cluster`
+ FOREIGN KEY (`Cluster_clusterId`)
+ REFERENCES `StratosManager`.`Cluster` (`clusterId`)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION,
+ CONSTRAINT `fk_ApplicationSignUp_ArtifactRepository1`
+ FOREIGN KEY (`ArtifactRepository_alias`)
+ REFERENCES `StratosManager`.`ArtifactRepository` (`alias`)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION)
+ENGINE = InnoDB;
+
+
+-- -----------------------------------------------------
+-- Table `StratosManager`.`DomainMapping`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `StratosManager`.`DomainMapping` (
+ `domainName` VARCHAR(255) NOT NULL,
+ `serviceName` VARCHAR(255) NULL,
+ `contextPath` VARCHAR(255) NULL,
+ `ApplicationSignUp_applicationId` VARCHAR(255) NOT NULL,
+ `ApplicationSignUp_tenantId` INT NOT NULL,
+ `Cluster_clusterId` VARCHAR(255) NOT NULL,
+ PRIMARY KEY (`domainName`, `ApplicationSignUp_tenantId`, `ApplicationSignUp_applicationId`),
+ INDEX `fk_DomainMapping_ApplicationSignUp1_idx` (`ApplicationSignUp_applicationId` ASC, `ApplicationSignUp_tenantId` ASC),
+ INDEX `fk_DomainMapping_Cluster1_idx` (`Cluster_clusterId` ASC),
+ CONSTRAINT `fk_DomainMapping_ApplicationSignUp1`
+ FOREIGN KEY (`ApplicationSignUp_applicationId` , `ApplicationSignUp_tenantId`)
+ REFERENCES `StratosManager`.`ApplicationSignUp` (`applicationId` , `tenantId`)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION,
+ CONSTRAINT `fk_DomainMapping_Cluster1`
+ FOREIGN KEY (`Cluster_clusterId`)
+ REFERENCES `StratosManager`.`Cluster` (`clusterId`)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION)
+ENGINE = InnoDB;
+
+
+SET SQL_MODE=@OLD_SQL_MODE;
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/Persistence/PersistenceManager.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/Persistence/PersistenceManager.java
new file mode 100644
index 0000000000..ac81fa82a5
--- /dev/null
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/Persistence/PersistenceManager.java
@@ -0,0 +1,259 @@
+package org.apache.stratos.manager.Persistence;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.persistence.*;
+
+import java.util.*;
+/**
+ * Created by aarthy on 7/27/15.
+ */
+public class PersistenceManager {
+
+ private static final Log log;
+
+ static {
+ log = LogFactory.getLog(PersistenceManager.class);
+ }
+
+ private EntityManagerFactory entitymanagerFactory = Persistence.createEntityManagerFactory("PersistenceUnit");
+
+ private static final PersistenceManager instance = new PersistenceManager();
+
+ EntityManager entityManager = null;
+
+
+ public static PersistenceManager getInstance() {
+ return instance;
+ }
+
+
+ /**
+ * Add object to persist
+ * @param object
+ * @throws PersistenceException
+ */
+ public void add(Object object)
+ {
+ System.out.printf("entered");
+
+ System.out.printf("true");
+ try {
+ entityManager = this.entitymanagerFactory.createEntityManager();
+ entityManager.getTransaction().begin();
+ entityManager.persist(object);
+ entityManager.flush();
+ entityManager.getTransaction().commit();
+ String msg="Added Successfully";
+ log.info(msg);
+ }
+ catch (PersistenceException e)
+ {
+ String msg="Error while adding";
+ log.error(msg);
+ }
+
+ }
+
+
+ /**
+ * remove object by primary key
+ * @param object
+ * @param primaryKey
+ * @throws PersistenceException
+ */
+
+ public void remove(Object object,Object primaryKey)
+ {
+ try {
+ entityManager = this.entitymanagerFactory.createEntityManager();
+ entityManager.getTransaction().begin();
+ Object found=entityManager.find(object.getClass(), primaryKey);
+ if(found!=null) {
+ entityManager.remove(found);
+ entityManager.getTransaction().commit();
+ String msg = "Deleted sucessfully";
+ log.info(msg);
+ }
+ else
+ {
+ String msg ="Object does not exists";
+ log.error(msg);
+ }
+ }
+ catch (PersistenceException e)
+ {
+
+ String msg="Error while Deleting";
+ log.error(msg);
+ }
+
+ }
+
+ /**
+ * retrieve an object by primary key
+ * @param object
+ * @param primaryKey
+ * @return
+ */
+
+ public Object retrieve(Object object,Object primaryKey)
+ {
+ Object found=null;
+ try{
+
+ entityManager=this.entitymanagerFactory.createEntityManager();
+ entityManager.getTransaction().begin();
+ found= entityManager.find(found.getClass(), primaryKey);
+ if(found!=null)
+ log.info("Object Found");
+ else
+ log.error("Object not Found");
+ return found;
+
+ }
+ catch (PersistenceException e)
+ {
+
+ String msg="Error while retrieving";
+ log.error(msg);
+ return found;
+ }
+
+ }
+
+ /**
+ *
+ * @param tableName
+ * @return
+ */
+
+
+ public List retrieveAll(String tableName)
+ {
+ List objectList=new ArrayList