diff --git a/README.md b/README.md
new file mode 100644
index 000000000..d8295838f
--- /dev/null
+++ b/README.md
@@ -0,0 +1,16 @@
+# FrontlineSMS v2
+## What is FrontlineSMS v2?
+[FrontlineSMS](http://www.frontlinesms.com) is desktop/cloud based software created to lower barriers to positive social change using mobile technology. Its second version is built as a [Grails](http://grails.org/) app, which can either run stand-alone as a desktop app, or be bundled as the 'frontlinesms-core-multitenant' plugin that forms the core of [FrontlineCloud](http://cloud.frontlinesms.com).
+
+## Repository layout
+In the plugins folder, you will find:
+- *frontlinesms-core*, the Grails core codebase for FrontlineSMS v2
+- *radio*, the Grails codebase for [FrontlineSMS:Radio](http://www.frontlinesms.com/technologies/beta-products/), which uses frontlinesms-core as a plugin
+
+This repository is updated on every public release of FrontlineSMS v2.
+
+## Useful reading
+- Overviews of [FrontlineSMS](http://www.frontlinesms.com/technologies/frontlinesms-overview/) and [FrontlineCloud](http://www.frontlinesms.com/technologies/frontlinecloud-overview/)
+- [Grails documentation](https://grails.org/)
+- [FrontlineSMS developers google group](https://groups.google.com/forum/#!forum/frontlinesms-developers)
+-Just testing
\ No newline at end of file
diff --git a/application.properties b/application.properties
deleted file mode 100644
index 463abff39..000000000
--- a/application.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-#Grails Metadata file
-#Tue Feb 28 10:58:01 EAT 2012
-app.grails.version=1.3.7
-app.name=frontlinesms2
-app.servlet.version=2.4
-app.version=0.b1-SNAPSHOT
-plugins.code-coverage=1.2
-plugins.codenarc=0.15
-plugins.csv=0.3.1
-plugins.export=1.0
-plugins.hibernate=1.3.7
-plugins.jquery=1.6.1.1
-plugins.jquery-ui=1.8.11
-plugins.quartz=0.4.2
-plugins.routing=1.1.2-frontlinesms
-plugins.tomcat=1.3.7
-plugins.webxml=1.4.1
diff --git a/grails-app/conf/BootStrap.groovy b/grails-app/conf/BootStrap.groovy
deleted file mode 100644
index 311ed86d2..000000000
--- a/grails-app/conf/BootStrap.groovy
+++ /dev/null
@@ -1,24 +0,0 @@
-import grails.util.Environment
-class BootStrap {
- def grailsApplication
-
- def init = { servletContext ->
-
- switch(Environment.current) {
- case Environment.TEST:
- break
-
- case Environment.DEVELOPMENT:
- //DB Viewer
- //org.hsqldb.util.DatabaseManager.main()
- // do custom init for dev here
- if(System.properties['radio.plugin']) {
- grailsApplication.config.frontlinesms2.plugin = "radio"
- }
- break
- }
- }
-
- def destroy = {
- }
-}
diff --git a/grails-app/conf/BuildConfig.groovy b/grails-app/conf/BuildConfig.groovy
deleted file mode 100644
index b7b7942d7..000000000
--- a/grails-app/conf/BuildConfig.groovy
+++ /dev/null
@@ -1,89 +0,0 @@
-grails.project.class.dir = "target/classes"
-grails.project.test.class.dir = "target/test-classes"
-grails.project.test.reports.dir = "target/test-reports"
-//grails.project.war.file = "target/${appName}-${appVersion}.war"
-
-if(Boolean.parseBoolean(System.properties['radio.plugin'])) {
- println "Loading radio plugin"
- grails.plugin.location.radio = "plugins/radio"
-} else {
- println "Loading core plugin"
- grails.plugin.location.core = "plugins/core"
-}
-
-
-grails.project.dependency.resolution = {
- // Everything with a version that ends with -SNAPSHOT is changing
-// chainResolver.changingPattern = '.*-SNAPSHOT' // This causes all snapshot dependencies to be looked for in remote repos
- if(Boolean.parseBoolean(System.properties['snapshots'])) {
- chainResolver.changingPattern = '.*-SNAPSHOT' // This causes all snapshot dependencies to be looked for in remote repos
- }
-
- // inherit Grails' default dependencies
- inherits("global") {
- // uncomment to disable ehcache
- // excludes 'ehcache'
- }
- log "warn" // log level of Ivy resolver, either 'error', 'warn', 'info', 'debug' or 'verbose'
- repositories {
- grailsHome()
-
- // uncomment the below to enable remote dependency resolution
- // from public Maven repositories
- mavenLocal()
- mavenCentral()
- //mavenRepo "http://snapshots.repository.codehaus.org"
- //mavenRepo "http://repository.codehaus.org"
- //mavenRepo "http://download.java.net/maven/2/"
- //mavenRepo "http://repository.jboss.com/maven2/"
- mavenRepo "http://dev.frontlinesms.com/m2repo/"
- mavenRepo "https://nexus.codehaus.org/content/repositories/snapshots/"
-
- grailsPlugins()
- grailsCentral()
-
- if(Boolean.parseBoolean(System.properties['snapshots'])) {
- // from https://github.com/alkemist/grails-snapshot-dependencies-fix
- // Register the new JAR
- def classLoader = getClass().classLoader
- classLoader.addURL(new File(baseFile, "lib/grails-snapshot-dependencies-fix-0.1.jar").toURL())
- // Get a hold of the class for the new resolver
- def snapshotResolverClass = classLoader.loadClass("grails.resolver.SnapshotAwareM2Resolver")
- // Define a new resolver that is snapshot aware
- resolver(snapshotResolverClass.newInstance(name: "spock-snapshots", root: "http://m2repo.spockframework.org/snapshots"))
- }
- }
- dependencies {
- // specify dependencies here under either 'build', 'compile', 'runtime', 'test' or 'provided' scopes eg.
-
- // SHOULD BE AVAILABLE ONLY IN DEV SCOPE
- compile ('net.frontlinesms.test:hayescommandset-test:0.0.4') {
- changing = true
- } // doesn't seem to cause problems if it's here, but should really only be included for dev scope
-
- // COMPILE
- compile 'net.frontlinesms.core:camel-smslib:0.0.2'
- compile 'org.apache.camel:camel-mail:2.5.0'
- compile 'net.frontlinesms.core:serial:1.0.1'
- compile 'net.frontlinesms.core:at-modem-detector:0.1'
- runtime 'org.rxtx:rxtx:2.1.7'
- runtime 'javax.comm:comm:2.0.3'
- }
-}
-
-coverage {
- xml = true
- enabledByDefault = false
-}
-
-codenarc.reports = {
- MyXmlReport('xml') {
- outputFile = 'target/test-reports/CodeNarcReport.xml'
- title = 'FrontlineSMS2 CodeNarc Report (xml)'
- }
-
- MyHtmlReport('html') {
- outputFile = 'target/test-reports/CodeNarcReport.html'
- title = 'FrontlineSMS2 CodeNarc Report (html)'
- }
-}
diff --git a/grails-app/conf/Config.groovy b/grails-app/conf/Config.groovy
deleted file mode 100644
index 80aac16e9..000000000
--- a/grails-app/conf/Config.groovy
+++ /dev/null
@@ -1,108 +0,0 @@
-// locations to search for config files that get merged into the main config
-// config files can either be Java properties files or ConfigSlurper scripts
-
-// grails.config.locations = [ "classpath:${appName}-config.properties",
-// "classpath:${appName}-config.groovy",
-// "file:${userHome}/.grails/${appName}-config.properties",
-// "file:${userHome}/.grails/${appName}-config.groovy"]
-
-// if(System.properties["${appName}.config.location"]) {
-// grails.config.locations << "file:" + System.properties["${appName}.config.location"]
-// }
-
-grails.project.groupId = appName // change this to alter the default package name and Maven publishing destination
-grails.mime.file.extensions = true // enables the parsing of file extensions from URLs into the request format
-grails.mime.use.accept.header = false
-grails.mime.types = [ html: ['text/html','application/xhtml+xml'],
- xml: ['text/xml', 'application/xml'],
- text: 'text/plain',
- js: 'text/javascript',
- rss: 'application/rss+xml',
- atom: 'application/atom+xml',
- css: 'text/css',
- csv: 'text/csv',
- pdf: 'application/pdf',
- all: '*/*',
- json: ['application/json','text/json'],
- form: 'application/x-www-form-urlencoded',
- multipartForm: 'multipart/form-data'
- ]
-
-// URL Mapping Cache Max Size, defaults to 5000
-//grails.urlmapping.cache.maxsize = 1000
-
-// The default codec used to encode data with ${}
-grails.views.default.codec = "none" // none, html, base64
-grails.views.gsp.encoding = "UTF-8"
-grails.converters.encoding = "UTF-8"
-// enable Sitemesh preprocessing of GSP pages
-grails.views.gsp.sitemesh.preprocess = true
-// scaffolding templates configuration
-grails.scaffolding.templates.domainSuffix = 'Instance'
-
-// jquery plugin
-grails.views.javascript.library = "jquery"
-
-//fronlinesms2 plugin
-frontlinesms2.plugin = "core"
-
-// pagination
-grails.views.pagination.max = 50
-
-// Set to false to use the new Grails 1.2 JSONBuilder in the render method
-grails.json.legacy.builder = false
-// enabled native2ascii conversion of i18n properties files
-grails.enable.native2ascii = true
-// whether to install the java.util.logging bridge for sl4j. Disable for AppEngine!
-grails.logging.jul.usebridge = true
-// packages to include in Spring bean scanning
-grails.spring.bean.packages = []
-
-// request parameters to mask when logging exceptions
-grails.exceptionresolver.params.exclude = ['password']
-
-// set per-environment serverURL stem for creating absolute links
-environments {
- production {
- grails.serverURL = "http://www.changeme.com"
- }
- development {
- grails.serverURL = "http://localhost:8080/${appName}"
- }
- test {
- grails.serverURL = "http://localhost:8080/${appName}"
- }
-}
-
-// log4j configuration
-log4j = {
- // Example of changing the log pattern for the default console
- // appender:
- //
- appenders {
- // console name:'stdout', layout:pattern(conversionPattern: '%c{2} %m%n')
- rollingFile name:'trace-file', file:"${System.properties.'user.home'}/.frontlinesms2/frontlinesms2-trace.log"
- }
-
- root {
- trace 'trace-file'
- additivity = true
- }
-
- error 'org.codehaus.groovy.grails.web.servlet', // controllers
- 'org.codehaus.groovy.grails.web.pages', // GSP
- 'org.codehaus.groovy.grails.web.sitemesh', // layouts
- 'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
- 'org.codehaus.groovy.grails.web.mapping', // URL mapping
- 'org.codehaus.groovy.grails.commons', // core / classloading
- 'org.codehaus.groovy.grails.plugins', // plugins
- 'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
- 'org.springframework',
- 'org.hibernate',
- 'net.sf.ehcache.hibernate'
-
- warn 'org.mortbay.log'
-
- info 'serial',
- 'org.apache.camel'
-}
diff --git a/grails-app/conf/DataSource.groovy b/grails-app/conf/DataSource.groovy
deleted file mode 100644
index 85308b9f5..000000000
--- a/grails-app/conf/DataSource.groovy
+++ /dev/null
@@ -1,47 +0,0 @@
-dataSource {
- pooled = true
- driverClassName = "org.hsqldb.jdbcDriver"
- username = "sa"
- password = ""
-}
-// environment specific settings
-hibernate {
- cache.use_second_level_cache = true
- cache.use_query_cache = true
- cache.provider_class = 'net.sf.ehcache.hibernate.EhCacheProvider'
-}
-
-
-environments {
- development {
- dataSource {
- dbCreate = "create-drop" // one of 'create', 'create-drop','update'
- url = "jdbc:hsqldb:mem:devDB"
- }
- }
-
- test {
- dataSource {
- dbCreate = "update"
- url = "jdbc:hsqldb:mem:testDb"
- }
- hibernate {
- cache.use_second_level_cache = false
- cache.use_query_cache = false
- }
- }
- production {
- dataSource {
- dbCreate = "update"
- url = "jdbc:hsqldb:file:${System.properties.'user.home'}/.frontlinesms2/prodDb;shutdown=true"
- }
-
- }
-
- standalone {
- dataSource {
- dbCreate = "update"
- url = "jdbc:hsqldb:file:standalone;shutdown=true"
- }
- }
-}
diff --git a/grails-app/conf/UrlMappings.groovy b/grails-app/conf/UrlMappings.groovy
deleted file mode 100644
index aa8afc164..000000000
--- a/grails-app/conf/UrlMappings.groovy
+++ /dev/null
@@ -1,11 +0,0 @@
-class UrlMappings {
- static mappings = {
- "/"(controller:'message')
- "/$controller/$action?/$id?"{
- constraints {
- // apply constraints here
- }
- }
- "500"(view:'/error')
- }
-}
diff --git a/grails-app/conf/spring/resources.groovy b/grails-app/conf/spring/resources.groovy
deleted file mode 100644
index fa950068b..000000000
--- a/grails-app/conf/spring/resources.groovy
+++ /dev/null
@@ -1,3 +0,0 @@
-// Place your Spring DSL code here
-beans = {
-}
diff --git a/grails-app/views/_css.gsp b/grails-app/views/_css.gsp
deleted file mode 100644
index 777777795..000000000
--- a/grails-app/views/_css.gsp
+++ /dev/null
@@ -1,16 +0,0 @@
-