diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f9d7cba
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,16 @@
+.gradle
+.idea
+build/
+target/
+
+# Ignore Gradle GUI config
+gradle-app.setting
+
+# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
+!gradle-wrapper.jar
+
+*.iml
+
+*.log
+
+*.toDelete
diff --git a/HEADER b/HEADER
new file mode 100644
index 0000000..4b2eadf
--- /dev/null
+++ b/HEADER
@@ -0,0 +1,13 @@
+Copyright ${year} ${name}.
+
+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.
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..8dada3e
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright {yyyy} {name of copyright owner}
+
+   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.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5e13ef5
--- /dev/null
+++ b/README.md
@@ -0,0 +1,38 @@
+# Mifos I/O default setup
+
+[![Join the chat at https://gitter.im/mifos-initiative/mifos.io](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/mifos-initiative/mifos.io?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+
+This project provides resources which can be used to create a default setup for microservices in a Mifos I/O deployment. It is dependent on the apis and importers of those microservices.
+
+## Abstract
+Mifos I/O is an application framework for digital financial services, a system to support nationwide and cross-national financial transactions and help to level and speed the creation of an inclusive, interconnected digital economy for every nation in the world.
+
+## Steps needed to create a default setup for a new microservice 
+
+1.  Create a module with the same name as the microservice.  Add it to settings.gradle, and build.gradle of the composite build.
+
+2.  Place the csv files in subfolder of main/resources
+    
+3.  Change build.gradle of your module to reference the importer of your microservice in compileTest 
+
+4.  Write a test which checks the format of your csv files to prevent data corruption.  See accounting/ImportTest for an example of how to do this.
+
+## Versioning
+The version numbers follow the [Semantic Versioning](http://semver.org/) scheme.
+
+In addition to MAJOR.MINOR.PATCH the following postfixes are used to indicate the development state.
+
+* BUILD-SNAPSHOT - A release currently in development. 
+* M - A _milestone_ release include specific sets of functions and are released as soon as the functionality is complete.
+* RC - A _release candidate_ is a version with potential to be a final product, considered _code complete_.
+* RELEASE - _General availability_ indicates that this release is the best available version and is recommended for all usage.
+
+The versioning layout is {MAJOR}.{MINOR}.{PATCH}-{INDICATOR}[.{PATCH}]. Only milestones and release candidates can  have patch versions. Some examples:
+
+1.2.3-BUILD-SNAPSHOT  
+1.3.5-M.1  
+1.5.7-RC.2  
+2.0.0-RELEASE
+
+## License
+See [LICENSE](LICENSE) file.
diff --git a/accounting/build.gradle b/accounting/build.gradle
new file mode 100644
index 0000000..43ee376
--- /dev/null
+++ b/accounting/build.gradle
@@ -0,0 +1,37 @@
+buildscript {
+    ext {
+        springBootVersion = '1.4.1.RELEASE'
+    }
+
+    repositories {
+        jcenter()
+    }
+
+    dependencies {
+        classpath ("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
+    }
+}
+
+plugins {
+    id "com.github.hierynomus.license" version "0.13.1"
+}
+
+apply from: '../shared.gradle'
+
+dependencies {
+    testCompile(
+            [group: 'org.hibernate', name: 'hibernate-validator', version: versions.validator],
+            [group: 'io.mifos.accounting', name: 'importer', version: versions.accounting],
+    )
+}
+
+publishing {
+    publications {
+        service(MavenPublication) {
+            from components.java
+            groupId project.group
+            artifactId project.name
+            version project.version
+        }
+    }
+}
diff --git a/accounting/settings.gradle b/accounting/settings.gradle
new file mode 100644
index 0000000..7b83788
--- /dev/null
+++ b/accounting/settings.gradle
@@ -0,0 +1 @@
+rootProject.name = 'accounting'
diff --git a/accounting/src/main/resources/standardChartOfAccounts/accounts.csv b/accounting/src/main/resources/standardChartOfAccounts/accounts.csv
new file mode 100644
index 0000000..d2ac4bd
--- /dev/null
+++ b/accounting/src/main/resources/standardChartOfAccounts/accounts.csv
@@ -0,0 +1,79 @@
+parentIdentifier,identifier,name
+1100,1101,"Interest on Business Loans"
+1100,1102,"Interest on Agriculture Loans"
+1100,1103,"Interest on Consumer Loans"
+1100,1104,"Interest on Savings Secured"
+1100,1105,"Interest on Other Member Loans"
+1100,1120,"Interest on Lines of Credit"
+1100,1121,"Interest on Credit Cards"
+1100,1140,"Interest on Real Estate Loans"
+1100,1190,"Interest Refunds"
+1200,1210,"Income from Government Investments"
+1200,1220,"Income from Govenment Agency Securities"
+1200,1230,"Income from Savings/Deposits/Certificates"
+1200,1290,"Income from Other Investments"
+1300,1310,"Loan Origination Fees"
+1300,1311,"Loan Late Payment Fee"
+1300,1320,"Loan Refinance Fee"
+1300,1390,"Other Loan Fee"
+2800,2820,"Collection Expenses"
+2800,2830,"Recording Fees—Chattel Lien Insurance"
+2800,2840,"Credit Reports"
+2800,2850,"Refunds—Real Estate Service Charges"
+2800,2860,"Credit Card Program Expenses"
+2800,2870,"Service Fees on Loans Purchased"
+2800,2890,"Other Loan Servicing Expenses"
+3000,3010,"Provision for Loan Losses—Consumer Loans"
+3000,3020,"Provision for Loan Losses—Lines of Credit"
+3000,3030,"Provision for Loan Losses—Real Estate Loans"
+3000,3040,"Provision for Loan Losses—Other Loans"
+3000,3090,"Other Provision for Losses"
+3100,3110,"Saving Insurance"
+3100,3120,"Life Savings Insurance"
+3100,3130,"Borrowers' Insurance"
+3100,3190,"Other Members' Insurance"
+3800,3801,"Share Dividend"
+3800,3810,"Regular Saving Interest"
+3800,3820,"Checking Interest"
+3800,3830,"Club Account Interest"
+3800,3840,"Saving Certificate Interest"
+3800,3890,"Other Interest Expense"
+7000,7011,"Commercial Loans"
+7000,7012,"Agriculture Loans"
+7000,7013,"Consumer Loans"
+7000,7014,"Other Member Loans"
+7000,7015,"Home Equity Loans"
+7000,7021,"Lines of Credit to Members—Credit Cards"
+7000,7022,"Lines of Credit—Cash Advances in Process"
+7000,7023,"Net Origination Fees (Costs)—Lines of Credit"
+7000,7024,"Net Commitment Fees (Costs)—Lines of Credit"
+7000,7031,"Net Origination Fees (Costs)"
+7000,7070,"Loans—Collateral in Process of Liquidation"
+7300,7310,"Bank account one"
+7300,7311,"Bank account two"
+7300,7312,"Petty Cash"
+7300,7351,"Vault Cash"
+7300,7352,"Teller One"
+7300,7353,"Teller Two"
+7300,7353,"Teller Three"
+7800,7810,"Accrued Interest on Loans"
+7800,7820,"Accrued Income on Investments"
+7800,7830,"Accrued Credit Card Income"
+7800,7890,"Other Accrued Income"
+8200,8201,"Dividends Payable on Shares"
+8200,8202,"Interest Payable on Savings"
+8200,8203,"Interest Payable on Club Accounts"
+8200,8207,"Interest Payable on Other Accounts"
+8400,8410,"VAT Taxes payable"
+8400,8420,"Withholding taxes payable"
+8400,8490,"Other Taxes Payable"
+8500,8540,"Accrued Dividends Payable"
+8500,8550,"Accrued Interest Payable"
+8500,8590,"Other Accrued Expenses"
+9000,9010,"Share Account"
+9000,9020,"Savings"
+9000,9030,"Club Accounts"
+9000,9040,"Other Savings"
+9300,9310,"Regular Reserves"
+9300,9320,"Special Reserve for Losses"
+9300,9330,"Other Reserves"
\ No newline at end of file
diff --git a/accounting/src/main/resources/standardChartOfAccounts/ledgers.csv b/accounting/src/main/resources/standardChartOfAccounts/ledgers.csv
new file mode 100644
index 0000000..ec641d7
--- /dev/null
+++ b/accounting/src/main/resources/standardChartOfAccounts/ledgers.csv
@@ -0,0 +1,53 @@
+parentIdentifier,identifier,description,type,show
+,1000,"Income",REVENUE,true
+1000,1100,"Income from Loans",REVENUE,true
+1000,1200,"Investment Income",REVENUE,true
+1000,1300,"Fees and Charges",REVENUE,true
+1000,1400,"Gain (Loss) on Sale of Loans",REVENUE,true
+1000,1500,"Miscellaneouse Income",REVENUE,true
+1000,1600,"Service Income on Loans",REVENUE,true
+1000,1700,"Trading Profits & Losses",REVENUE,true
+,2000,"Expenses",EXPENSE,true
+2000,2100,"Employee Compensation",EXPENSE,true
+2000,2200,"Employee Benefits",EXPENSE,true
+2000,2300,"Travel and Conference Expenses",EXPENSE,true
+2000,2400,"Association Dues",EXPENSE,true
+2000,2500,"Office Occupancy Expenses",EXPENSE,true
+2000,2600,"Office Operations Expenses",EXPENSE,true
+2000,2700,"Educational and Promotional Expenses",EXPENSE,true
+2000,2800,"Loan Servicing Expenses",EXPENSE,true
+2000,2900,"Professional and Outside Services",EXPENSE,true
+2000,3000,"Provision for Loan Losses",EXPENSE,true
+2000,3100,"Member Insurance",EXPENSE,true
+2000,3220,"Federal Operating Fee",EXPENSE,true
+2000,3300,"Cash Over and Short",EXPENSE,true
+2000,3400,"Interest on Borrowed Money",EXPENSE,true
+2000,3550,"Annual Meeting Expenses",EXPENSE,true
+2000,3700,"Miscellaneous Operating Expenses",EXPENSE,true
+2000,3800,"Interest (Dividend) Expense",EXPENSE,true
+,7000,"Assets",ASSET,true
+7000,7010,"Loans to Members",ASSET,true
+7000,7020,"Lines of Credit to Members",ASSET,true
+7000,7030,"Real Estate Loans",ASSET,true
+7000,7100,"Other Loans",ASSET,true
+7000,7200,"Other Receivables",ASSET,true
+7000,7300,"Cash Accounts",ASSET,true
+7000,7350,"Change Fund",ASSET,true
+7000,7400,"Investments",ASSET,true
+7000,7420,"Federal Agency Securities",ASSET,true
+7000,7500,"Investments—Investment Allowance",ASSET,true
+7000,7600,"Prepaid Expenses and Deferred Charges",ASSET,true
+7000,7700,"Fixed Assets",ASSET,true
+7000,7800,"Accrued Income",ASSET,true
+7000,7900,"Other Assets",ASSET,true
+,8000,"Accounts Payable",LIABILITY,true
+8000,8100,"Accounts Payable",LIABILITY,true
+8000,8200,"Interest Payable",LIABILITY,true
+8000,8400,"Taxes Payable",LIABILITY,true
+8000,8500,"Accrued Expenses",LIABILITY,true
+,9000,"Equity",EQUITY,true
+9000,9100,"Member Savings",EQUITY,true
+9000,9300,"Reserves",EQUITY,true
+9000,9400,"Undivided Earnings",EQUITY,true
+9000,9550,"Donated Equity",EQUITY,true
+9000,9560,"Net Income (Loss)",EQUITY,true
\ No newline at end of file
diff --git a/accounting/src/test/java/io/mifos/ImportTest.java b/accounting/src/test/java/io/mifos/ImportTest.java
new file mode 100644
index 0000000..8abc162
--- /dev/null
+++ b/accounting/src/test/java/io/mifos/ImportTest.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2017 The Mifos Initiative.
+ *
+ * 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 io.mifos;
+
+import io.mifos.accounting.api.v1.client.LedgerManager;
+import io.mifos.accounting.api.v1.domain.Account;
+import io.mifos.accounting.api.v1.domain.Ledger;
+import io.mifos.accounting.importer.AccountImporter;
+import io.mifos.accounting.importer.LedgerImporter;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Matchers;
+import org.mockito.Mockito;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+import org.slf4j.Logger;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import javax.validation.ConstraintViolation;
+import javax.validation.Validation;
+import javax.validation.Validator;
+import javax.validation.ValidatorFactory;
+import java.io.IOException;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author Myrle Krantz
+ */
+@RunWith(SpringRunner.class)
+public class ImportTest {
+  private Map<String, Ledger> createdLedgers = new HashMap<>();
+
+  @MockBean
+  LedgerManager ledgerManagerMock;
+
+  @MockBean
+  Logger loggerMock;
+
+  @Test
+  public void testStandardChartOfAccountsIsCorrectlyFormatted() throws IOException {
+    final LedgerImporter ledgerImporter = new LedgerImporter(ledgerManagerMock, loggerMock);
+    final URL ledgersUrl = ClassLoader.getSystemResource("standardChartOfAccounts/ledgers.csv");
+    Assert.assertNotNull(ledgersUrl);
+    ledgerImporter.importCSV(ledgersUrl);
+
+    final AccountImporter accountImporter = new AccountImporter(ledgerManagerMock, loggerMock);
+    final URL accountsUrl = ClassLoader.getSystemResource("standardChartOfAccounts/accounts.csv");
+    Assert.assertNotNull(accountsUrl);
+    accountImporter.importCSV(accountsUrl);
+  }
+
+  @Before
+  public void prepare() {
+    Mockito.doAnswer(new CollectCreatedLedgers(0)).when(ledgerManagerMock).createLedger(Matchers.any());
+    Mockito.doAnswer(new CollectCreatedLedgers(1)).when(ledgerManagerMock).addSubLedger(Matchers.any(), Matchers.any());
+    Mockito.doAnswer(new ReturnLedgers()).when(ledgerManagerMock).findLedger(Matchers.any());
+    Mockito.doAnswer(new ValidateArgument<>(0, Account.class)).when(ledgerManagerMock).createAccount(Matchers.any());
+  }
+
+  class CollectCreatedLedgers implements Answer {
+    private final int indexOfLedger;
+
+    CollectCreatedLedgers(int indexOfLedger) {
+      this.indexOfLedger = indexOfLedger;
+    }
+
+    @Override
+    public Void answer(InvocationOnMock invocation) throws Throwable {
+      final Ledger ledger = invocation.getArgumentAt(indexOfLedger, Ledger.class);
+
+      final ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
+      Validator validator = factory.getValidator();
+      final Set<ConstraintViolation<Ledger>> errors = validator.validate(ledger);
+      if (errors.size() > 0)
+        Assert.fail("Creation was requested for an invalid ledger.");
+
+      createdLedgers.put(ledger.getIdentifier(), ledger);
+      return null;
+    }
+  }
+
+  class ReturnLedgers implements Answer {
+    @Override
+    public Ledger answer(InvocationOnMock invocation) throws Throwable {
+      final String ledgerIdentifier = invocation.getArgumentAt(0, String.class);
+      return createdLedgers.get(ledgerIdentifier);
+    }
+  }
+
+  class ValidateArgument<T> implements Answer {
+    private final int indexOfArgument;
+    private final Class<T> thingyClass;
+
+    ValidateArgument(final int indexOfArgument, final Class<T> thingyClass) {
+      this.indexOfArgument = indexOfArgument;
+      this.thingyClass = thingyClass;
+    }
+
+    @Override
+    public Void answer(InvocationOnMock invocation) throws Throwable {
+      final T thingy = invocation.getArgumentAt(indexOfArgument, thingyClass);
+
+      final ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
+      Validator validator = factory.getValidator();
+      final Set<ConstraintViolation<T>> errors = validator.validate(thingy);
+      if (errors.size() > 0)
+        Assert.fail("Creation was requested for an invalid thingy.");
+
+      return null;
+    }
+  }
+}
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..8050379
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,15 @@
+group 'io.mifos'
+
+task publishAccountingToMavenLocal {
+    dependsOn gradle.includedBuild('accounting').task(':publishToMavenLocal')
+}
+
+task publishToMavenLocal {
+    group 'all'
+    dependsOn publishAccountingToMavenLocal
+}
+
+task licenseFormat {
+    group 'all'
+    dependsOn gradle.includedBuild('accounting').task(':licenseFormat')
+}
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..400f155
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..2888922
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Fri Mar 17 17:54:20 CET 2017
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-bin.zip
diff --git a/gradlew b/gradlew
new file mode 100755
index 0000000..4453cce
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+    echo "$*"
+}
+
+die ( ) {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+  NONSTOP* )
+    nonstop=true
+    ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+    JAVACMD=`cygpath --unix "$JAVACMD"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Escape application args
+save ( ) {
+    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+    echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+  cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..e95643d
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..bb59698
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,4 @@
+rootProject.name = 'default-setup'
+
+includeBuild 'accounting'
+
diff --git a/shared.gradle b/shared.gradle
new file mode 100644
index 0000000..ec86251
--- /dev/null
+++ b/shared.gradle
@@ -0,0 +1,58 @@
+group 'io.mifos.default-setup'
+version '0.1.0-BUILD-SNAPSHOT'
+
+ext.versions = [
+        accounting : '0.1.0-BUILD-SNAPSHOT',
+        validator : '5.3.0.Final'
+]
+
+apply plugin: 'java'
+apply plugin: 'idea'
+apply plugin: 'maven-publish'
+apply plugin: 'io.spring.dependency-management'
+
+tasks.withType(JavaCompile) {
+    sourceCompatibility = JavaVersion.VERSION_1_8
+    targetCompatibility = JavaVersion.VERSION_1_8
+}
+
+repositories {
+    jcenter()
+    mavenLocal()
+}
+
+dependencyManagement {
+    imports {
+        mavenBom 'io.spring.platform:platform-bom:Athens-RELEASE'
+    }
+}
+
+// override certain dependency provided by Spring platform using newer releases
+
+dependencies {
+    compile(
+            [group: 'com.google.code.findbugs', name: 'jsr305']
+    )
+
+    testCompile(
+            [group: 'org.springframework.boot', name: 'spring-boot-starter-test']
+    )
+}
+
+jar {
+    from sourceSets.main.allSource
+    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
+}
+
+license {
+    header rootProject.file('../HEADER')
+    strictCheck true
+    mapping {
+        java = 'SLASHSTAR_STYLE'
+        xml = 'XML_STYLE'
+        yml = 'SCRIPT_STYLE'
+        yaml = 'SCRIPT_STYLE'
+    }
+    ext.year = Calendar.getInstance().get(Calendar.YEAR)
+    ext.name = 'The Mifos Initiative'
+}
