diff --git a/scripts/Unix/postgres-setup-lite.sh b/scripts/Unix/postgres-setup-lite.sh
new file mode 100755
index 0000000..ec2cba6
--- /dev/null
+++ b/scripts/Unix/postgres-setup-lite.sh
@@ -0,0 +1,136 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.
+#
+
+#!/usr/bin/env bash
+
+githubAccount=$1
+
+# REM create core folder
+mkdir -p core
+cd core
+
+get_modules() {
+  for module in $@
+  do
+    git clone https://github.com/$githubAccount/$module.git -b develop
+    cd $module
+    git remote add upstream https://github.com/apache/$module.git
+    # For some reason permission gets denied
+    chmod +x gradlew
+    ./gradlew publishToMavenLocal
+    cd ..
+  done
+}
+
+get_modules fineract-cn-lang fineract-cn-api fineract-cn-async fineract-cn-cassandra fineract-cn-postgresql fineract-cn-command
+
+# REM clone fineract-cn-test FINCN-114
+git clone https://github.com/$githubAccount/fineract-cn-test.git -b FINCN-114
+cd fineract-cn-test
+git remote add upstream https://github.com/apache/fineract-cn-test.git
+chmod +x gradlew
+./gradlew publishToMavenLocal
+cd ..
+
+# Return to start folder
+cd ..
+
+# REM create tools folder
+mkdir tools
+cd tools
+
+# REM initialize fineract-cn-crypto
+git clone https://github.com/$githubAccount/fineract-cn-crypto.git -b develop
+cd fineract-cn-crypto
+git remote add upstream https://github.com/apache/fineract-cn-crypto.git
+chmod +x gradlew
+./gradlew publishToMavenLocal
+cd ..
+
+# exit tools directory
+cd ..
+
+get_modules fineract-cn-anubis fineract-cn-identity fineract-cn-permitted-feign-client
+
+# REM clone fineract-cn-provisioner FINCN-129
+git clone https://github.com/$githubAccount/fineract-cn-provisioner.git -b FINCN-129
+cd fineract-cn-provisioner
+git remote add upstream https://github.com/apache/fineract-cn-provisioner.git
+chmod +x gradlew
+./gradlew publishToMavenLocal
+cd ..
+
+# REM clone fineract-cn-rhythm FINCN-115
+git clone https://github.com/$githubAccount/fineract-cn-rhythm.git -b FINCN-115
+cd fineract-cn-rhythm
+git remote add upstream https://github.com/apache/fineract-cn-rhythm.git
+chmod +x gradlew
+./gradlew publishToMavenLocal
+cd ..
+
+# REM clone fineract-cn-template FINCN-120
+git clone https://github.com/$githubAccount/fineract-cn-template.git -b FINCN-120
+cd fineract-cn-template
+git remote add upstream https://github.com/apache/fineract-cn-template.git
+chmod +x gradlew
+./gradlew publishToMavenLocal
+cd ..
+
+# REM clone fineract-cn-office FINCN-117
+git clone https://github.com/$githubAccount/fineract-cn-office.git -b FINCN-117
+cd fineract-cn-office
+git remote add upstream https://github.com/apache/fineract-cn-office.git
+chmod +x gradlew
+./gradlew publishToMavenLocal
+cd ..
+
+# REM clone fineract-cn-customer FINCN-116
+git clone https://github.com/$githubAccount/fineract-cn-customer.git -b FINCN-116
+cd fineract-cn-customer
+git remote add upstream https://github.com/apache/fineract-cn-customer.git
+chmod +x gradlew
+./gradlew publishToMavenLocal
+cd ..
+
+mkdir integration-tests
+cd integration-tests
+
+# REM clone fineract-cn-service-starter FINCN-140
+git clone https://github.com/$githubAccount/fineract-cn-service-starter.git -b FINCN-140
+cd fineract-cn-service-starter
+git remote add upstream https://github.com/apache/fineract-cn-service-starter.git
+chmod +x gradlew
+./gradlew publishToMavenLocal
+cd ..
+
+# REM clone fineract-cn-demo-server FINCN-141
+git clone https://github.com/$githubAccount/fineract-cn-demo-server.git -b FINCN-141
+cd fineract-cn-demo-server
+git remote add upstream https://github.com/apache/fineract-cn-demo-server.git
+chmod +x gradlew
+./gradlew publishToMavenLocal
+cd ..
+
+# REM initialize Web App
+git clone https://github.com/$githubAccount/fineract-cn-fims-web-app.git
+cd fineract-cn-fims-web-app
+git remote add upstream https://github.com/apache/fineract-cn-fims-web-app.git
+npm i
+
+cd ..
diff --git a/src/main/java/org/apache/fineract/cn/dev/ServiceRunner.java b/src/main/java/org/apache/fineract/cn/dev/ServiceRunner.java
index 357ea83..78698b0 100644
--- a/src/main/java/org/apache/fineract/cn/dev/ServiceRunner.java
+++ b/src/main/java/org/apache/fineract/cn/dev/ServiceRunner.java
@@ -18,8 +18,18 @@
  */
 package org.apache.fineract.cn.dev;
 
-import ch.vorburger.mariadb4j.DB;
-import ch.vorburger.mariadb4j.DBConfigurationBuilder;
+import static org.apache.fineract.cn.accounting.api.v1.EventConstants.POST_ACCOUNT;
+import static org.apache.fineract.cn.accounting.api.v1.EventConstants.POST_LEDGER;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Scanner;
+import java.util.concurrent.TimeUnit;
+
+import com.opentable.db.postgres.embedded.EmbeddedPostgres;
 import org.apache.fineract.cn.accounting.api.v1.client.LedgerManager;
 import org.apache.fineract.cn.accounting.importer.AccountImporter;
 import org.apache.fineract.cn.accounting.importer.LedgerImporter;
@@ -47,7 +57,7 @@
 import org.apache.fineract.cn.identity.api.v1.events.ApplicationSignatureEvent;
 import org.apache.fineract.cn.identity.api.v1.events.EventConstants;
 import org.apache.fineract.cn.lang.AutoTenantContext;
-import org.apache.fineract.cn.mariadb.util.MariaDBConstants;
+import org.apache.fineract.cn.postgresql.util.PostgreSQLConstants;
 import org.apache.fineract.cn.notification.api.v1.client.NotificationManager;
 import org.apache.fineract.cn.office.api.v1.client.OrganizationManager;
 import org.apache.fineract.cn.payroll.api.v1.client.PayrollManager;
@@ -90,17 +100,7 @@
 import org.springframework.test.context.junit4.SpringRunner;
 import org.springframework.util.Base64Utils;
 
-import java.io.IOException;
-import java.net.URL;
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Scanner;
-import java.util.concurrent.TimeUnit;
-
-import static org.apache.fineract.cn.accounting.api.v1.EventConstants.POST_ACCOUNT;
-import static org.apache.fineract.cn.accounting.api.v1.EventConstants.POST_LEDGER;
 
 @SuppressWarnings("SpringAutowiredFieldsWarningInspection")
 @RunWith(SpringRunner.class)
@@ -131,7 +131,7 @@
   private static Microservice<GroupManager> groupManager;
   private static Microservice<NotificationManager> notificationManager;
 
-  private static DB embeddedMariaDb;
+  private static EmbeddedPostgres embeddedPostgres;
 
   private static final String CUSTOM_PROP_PREFIX = "custom.";
   private boolean runInDebug;
@@ -199,13 +199,8 @@
     if (!this.isPersistent) {
       // start embedded Cassandra
       EmbeddedCassandraServerHelper.startEmbeddedCassandra(TimeUnit.SECONDS.toMillis(30L));
-      // start embedded MariaDB
-      ServiceRunner.embeddedMariaDb = DB.newEmbeddedDB(
-          DBConfigurationBuilder.newBuilder()
-              .setPort(3306)
-              .build()
-      );
-      ServiceRunner.embeddedMariaDb.start();
+      // start embedded PostgreSQL
+      ServiceRunner.embeddedPostgres = embeddedPostgres.builder().setPort(5432).start();
     }
 
     ExtraProperties generalProperties = new ExtraProperties();
@@ -291,7 +286,7 @@
     ServiceRunner.identityManager.kill();
 
     if (!isPersistent) {
-      ServiceRunner.embeddedMariaDb.stop();
+      ServiceRunner.embeddedPostgres.close();
       EmbeddedCassandraServerHelper.cleanEmbeddedCassandra();
     }
   }
@@ -728,16 +723,16 @@
       properties.setProperty(CassandraConnectorConstants.CLUSTER_PASSWORD_PROP, this.environment.getProperty(CassandraConnectorConstants.CLUSTER_PASSWORD_PROP));
     }
 
-    if (this.environment.containsProperty(ServiceRunner.CUSTOM_PROP_PREFIX + MariaDBConstants.MARIADB_HOST_PROP)) {
-      properties.setProperty(MariaDBConstants.MARIADB_HOST_PROP, this.environment.getProperty(ServiceRunner.CUSTOM_PROP_PREFIX + MariaDBConstants.MARIADB_HOST_PROP));
+    if (this.environment.containsProperty(ServiceRunner.CUSTOM_PROP_PREFIX + PostgreSQLConstants.POSTGRESQL_HOST_PROP)) {
+      properties.setProperty(PostgreSQLConstants.POSTGRESQL_HOST_PROP, this.environment.getProperty(ServiceRunner.CUSTOM_PROP_PREFIX + PostgreSQLConstants.POSTGRESQL_HOST_PROP));
     }
 
-    if (this.environment.containsProperty(ServiceRunner.CUSTOM_PROP_PREFIX + MariaDBConstants.MARIADB_USER_PROP)) {
-      properties.setProperty(MariaDBConstants.MARIADB_USER_PROP, this.environment.getProperty(ServiceRunner.CUSTOM_PROP_PREFIX + MariaDBConstants.MARIADB_USER_PROP));
+    if (this.environment.containsProperty(ServiceRunner.CUSTOM_PROP_PREFIX + PostgreSQLConstants.POSTGRESQL_USER_PROP)) {
+      properties.setProperty(PostgreSQLConstants.POSTGRESQL_USER_PROP, this.environment.getProperty(ServiceRunner.CUSTOM_PROP_PREFIX + PostgreSQLConstants.POSTGRESQL_USER_PROP));
     }
 
-    if (this.environment.containsProperty(ServiceRunner.CUSTOM_PROP_PREFIX + MariaDBConstants.MARIADB_PASSWORD_PROP)) {
-      properties.setProperty(MariaDBConstants.MARIADB_PASSWORD_PROP, this.environment.getProperty(ServiceRunner.CUSTOM_PROP_PREFIX + MariaDBConstants.MARIADB_PASSWORD_PROP));
+    if (this.environment.containsProperty(ServiceRunner.CUSTOM_PROP_PREFIX + PostgreSQLConstants.POSTGRESQL_PASSWORD_PROP)) {
+      properties.setProperty(PostgreSQLConstants.POSTGRESQL_PASSWORD_PROP, this.environment.getProperty(ServiceRunner.CUSTOM_PROP_PREFIX + PostgreSQLConstants.POSTGRESQL_PASSWORD_PROP));
     }
   }
 }
\ No newline at end of file
diff --git a/src/main/java/org/apache/fineract/cn/dev/TenantBuilder.java b/src/main/java/org/apache/fineract/cn/dev/TenantBuilder.java
index a934053..d761ae3 100644
--- a/src/main/java/org/apache/fineract/cn/dev/TenantBuilder.java
+++ b/src/main/java/org/apache/fineract/cn/dev/TenantBuilder.java
@@ -19,7 +19,7 @@
 package org.apache.fineract.cn.dev;
 
 import org.apache.fineract.cn.cassandra.util.CassandraConnectorConstants;
-import org.apache.fineract.cn.mariadb.util.MariaDBConstants;
+import org.apache.fineract.cn.postgresql.util.PostgreSQLConstants;
 import org.apache.fineract.cn.test.env.TestEnvironment;
 import org.apache.fineract.cn.provisioner.api.v1.domain.CassandraConnectionInfo;
 import org.apache.fineract.cn.provisioner.api.v1.domain.DatabaseConnectionInfo;
@@ -40,12 +40,12 @@
 
     final DatabaseConnectionInfo databaseConnectionInfo = new DatabaseConnectionInfo();
 
-    databaseConnectionInfo.setDriverClass("org.mariadb.jdbc.Driver");
+    databaseConnectionInfo.setDriverClass(PostgreSQLConstants.POSTGRESQL_DRIVER_CLASS_DEFAULT);
     databaseConnectionInfo.setDatabaseName(databaseName);
-    databaseConnectionInfo.setHost(testEnvironment.getProperty(MariaDBConstants.MARIADB_HOST_PROP));
-    databaseConnectionInfo.setPort(testEnvironment.getProperty(MariaDBConstants.MARIADB_PORT_PROP));
-    databaseConnectionInfo.setUser(testEnvironment.getProperty(MariaDBConstants.MARIADB_USER_PROP));
-    databaseConnectionInfo.setPassword(testEnvironment.getProperty(MariaDBConstants.MARIADB_PASSWORD_PROP));
+    databaseConnectionInfo.setHost(testEnvironment.getProperty(PostgreSQLConstants.POSTGRESQL_HOST_PROP));
+    databaseConnectionInfo.setPort(testEnvironment.getProperty(PostgreSQLConstants.POSTGRESQL_PORT_PROP));
+    databaseConnectionInfo.setUser(testEnvironment.getProperty(PostgreSQLConstants.POSTGRESQL_USER_PROP));
+    databaseConnectionInfo.setPassword(testEnvironment.getProperty(PostgreSQLConstants.POSTGRESQL_PASSWORD_PROP));
     tenant.setDatabaseConnectionInfo(databaseConnectionInfo);
 
     final CassandraConnectionInfo cassandraConnectionInfo = new CassandraConnectionInfo();
