diff --git a/scripts/releaselor/releaselor.rb b/scripts/releaselor/releaselor.rb
index b3f2016..3ba1043 100755
--- a/scripts/releaselor/releaselor.rb
+++ b/scripts/releaselor/releaselor.rb
@@ -22,25 +22,25 @@
 if File.exist?(File.expand_path(args[:repository_map]))
   paths = Hash.new
   IO.foreach(File.expand_path(args[:repository_map])) do |line|
-    paths[$1.strip] = $2.strip if line =~ /([^=]*)=(.*)/
+	paths[$1.strip] = $2.strip if line =~ /([^=]*)=(.*)/
   end
 else
   paths = {
-    'eclipse-mirror' => 'eclipse-mirror',
-    'util' => 'util',
-    'test' => 'test',
-    'medic' => 'medic',
-    'artifact-repository' => 'artifact-repository',
-    'nano' => 'nano',
-    'kernel' => 'kernel',
-    'kernel-tools' => 'kernel-tools',
-    'gemini-web' => 'gemini-web',
-    'web' => 'web',
-    'snaps' => 'snaps',
-    'apps' => 'apps',
-    'documentation' => 'documentation',
-    'web-server' => 'web-server',
-    'jetty-server' => 'jetty-server'
+	'eclipse-mirror' => 'eclipse-mirror',
+	'util' => 'util',
+	'test' => 'test',
+	'medic' => 'medic',
+	'nano' => 'nano',
+	'artifact-repository' => 'artifact-repository',
+	'kernel' => 'kernel',
+	'kernel-tools' => 'kernel-tools',
+	'gemini-web' => 'gemini-web',
+	'web' => 'web',
+	'snaps' => 'snaps',
+	'apps' => 'apps',
+	'documentation' => 'documentation',
+	'web-server' => 'web-server',
+	'jetty-server' => 'jetty-server'
   }
 end
 
@@ -49,88 +49,89 @@
 default_targets = 'clean clean-integration test publish-ivy publish-maven'
 
 
-if args[:product_release] == 'full-product' 
+if args[:product_release] == 'full-product'
 
   ALL_REPOS = [
-    Repository.new(virgo_eclipse_repo_root,  'eclipse-mirror',          paths['eclipse-mirror'],        'org.eclipse.virgo.eclipse-mirror', bundle_version, release_from_branch,        'clean'),
-    Repository.new(virgo_eclipse_repo_root,  'util',                    paths['util'],                  'org.eclipse.virgo.util',           bundle_version, release_from_branch,        default_targets),
-    Repository.new(virgo_eclipse_repo_root,  'test',                    paths['test'],                  'org.eclipse.virgo.test',           bundle_version, release_from_branch,        default_targets),
-    Repository.new(virgo_eclipse_repo_root,  'medic',                   paths['medic'],                 'org.eclipse.virgo.medic',          bundle_version, release_from_branch,        default_targets),
-    Repository.new(virgo_eclipse_repo_root,  'artifact-repository',     paths['artifact-repository'],   'org.eclipse.virgo.repository',     bundle_version, release_from_branch,        default_targets),
-    Repository.new(virgo_eclipse_repo_root,  'nano',                    paths['nano'],                  'org.eclipse.virgo.nano',           bundle_version, release_from_branch,        'clean clean-integration test package publish-ivy publish-maven publish-multiple-nano-packages-build publish-updatesite-build publish-multiple-nano-packages-download'),
-    Repository.new(virgo_eclipse_repo_root,  'kernel',                  paths['kernel'],                'org.eclipse.virgo.kernel',         bundle_version, release_from_branch,        'clean clean-integration test package smoke-test publish-ivy publish-maven publish-package-build publish-updatesite-build publish-package-download'),
-    Repository.new(virgo_eclipse_repo_root,  'kernel-tools',            paths['kernel-tools'],          'org.eclipse.virgo.kernel-tools',   bundle_version, release_from_branch,        default_targets),
-    Repository.new(gemini_eclipse_repo_root, 'gemini-web-container',    paths['gemini-web'],            'org.eclipse.gemini.web',           gemini_version, gemini_release_from_branch, 'clean clean-integration test doc package publish-ivy publish-maven'), 
-    Repository.new(virgo_eclipse_repo_root,  'web',                     paths['web'],                   'org.eclipse.virgo.web',            bundle_version, release_from_branch,        default_targets),
-    Repository.new(virgo_eclipse_repo_root,  'snaps',                   paths['snaps'],                 'org.eclipse.virgo.snaps',          bundle_version, release_from_branch,        'clean clean-integration test package publish-ivy publish-maven publish-package-build publish-package-download'),
-    Repository.new(virgo_eclipse_repo_root,  'apps',                    paths['apps'],                  'org.eclipse.virgo.apps',           bundle_version, release_from_branch,        default_targets),
-    Repository.new(virgo_eclipse_repo_root,  'documentation',           paths['documentation'],         'org.eclipse.virgo.documentation',  bundle_version, release_from_branch,        'clean clean-integration doc-html package publish-ivy publish-package-download'),
-    Repository.new(virgo_eclipse_repo_root,  'web-server',              paths['web-server'],            'org.eclipse.virgo.web-server',     bundle_version, release_from_branch,        'clean clean-integration test package smoke-test publish-ivy publish-maven publish-package-build publish-updatesite-build publish-package-download'),
-    Repository.new(virgo_eclipse_repo_root,  'jetty-server',            paths['jetty-server'],          'org.eclipse.virgo.jetty-server',   bundle_version, release_from_branch,        'clean clean-integration test package smoke-test publish-ivy publish-package-build publish-updatesite-build publish-package-download publish-updatesite-download')
+	Repository.new(virgo_eclipse_repo_root,	 'eclipse-mirror',			paths['eclipse-mirror'],		'org.eclipse.virgo.eclipse-mirror', bundle_version, release_from_branch,		'clean'),
+	Repository.new(virgo_eclipse_repo_root,	 'util',					paths['util'],					'org.eclipse.virgo.util',			bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root,	 'test',					paths['test'],					'org.eclipse.virgo.test',			bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root,	 'medic',					paths['medic'],					'org.eclipse.virgo.medic',			bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root,	 'nano',					paths['nano'],					'org.eclipse.virgo.nano',			bundle_version, release_from_branch,		'clean clean-integration test package publish-ivy publish-maven publish-multiple-nano-packages-build publish-updatesite-build publish-multiple-nano-packages-download'),
+	Repository.new(virgo_eclipse_repo_root,	 'artifact-repository',		paths['artifact-repository'],	'org.eclipse.virgo.repository',		bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root,	 'kernel',					paths['kernel'],				'org.eclipse.virgo.kernel',			bundle_version, release_from_branch,		'clean clean-integration test package smoke-test publish-ivy publish-maven publish-package-build publish-updatesite-build publish-package-download'),
+	Repository.new(virgo_eclipse_repo_root,	 'kernel-tools',			paths['kernel-tools'],			'org.eclipse.virgo.kernel-tools',	bundle_version, release_from_branch,		default_targets),
+	Repository.new(gemini_eclipse_repo_root, 'gemini-web-container',	paths['gemini-web'],			'org.eclipse.gemini.web',			gemini_version, gemini_release_from_branch, 'clean clean-integration test doc package publish-ivy publish-maven'),
+	Repository.new(virgo_eclipse_repo_root,	 'web',						paths['web'],					'org.eclipse.virgo.web',			bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root,	 'snaps',					paths['snaps'],					'org.eclipse.virgo.snaps',			bundle_version, release_from_branch,		'clean clean-integration test package publish-ivy publish-maven publish-package-build publish-package-download'),
+	Repository.new(virgo_eclipse_repo_root,	 'apps',					paths['apps'],					'org.eclipse.virgo.apps',			bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root,	 'documentation',			paths['documentation'],			'org.eclipse.virgo.documentation',	bundle_version, release_from_branch,		'clean clean-integration doc-html package publish-ivy publish-package-download'),
+	Repository.new(virgo_eclipse_repo_root,	 'web-server',				paths['web-server'],			'org.eclipse.virgo.web-server',		bundle_version, release_from_branch,		'clean clean-integration test package smoke-test publish-ivy publish-maven publish-package-build publish-updatesite-build publish-package-download'),
+	Repository.new(virgo_eclipse_repo_root,	 'jetty-server',			paths['jetty-server'],			'org.eclipse.virgo.jetty-server',	bundle_version, release_from_branch,		'clean clean-integration test package smoke-test publish-ivy publish-package-build publish-updatesite-build publish-package-download publish-updatesite-download')
   ]
 
-elsif args[:product_release] == 'kernel' 
+elsif args[:product_release] == 'kernel'
 
   ALL_REPOS = [
-    Repository.new(virgo_eclipse_repo_root, 'eclipse-mirror',      paths['eclipse-mirror'],      'org.eclipse.virgo.eclipse-mirror',  bundle_version, release_from_branch, 'clean'),
-    Repository.new(virgo_eclipse_repo_root, 'util',                paths['util'],                'org.eclipse.virgo.util',            bundle_version, release_from_branch, default_targets),
-    Repository.new(virgo_eclipse_repo_root, 'test',                paths['test'],                'org.eclipse.virgo.test',            bundle_version, release_from_branch, default_targets),
-    Repository.new(virgo_eclipse_repo_root, 'medic',               paths['medic'],               'org.eclipse.virgo.medic',           bundle_version, release_from_branch, default_targets),
-    Repository.new(virgo_eclipse_repo_root, 'artifact-repository', paths['artifact-repository'], 'org.eclipse.virgo.repository',      bundle_version, release_from_branch, default_targets),
-    Repository.new(virgo_eclipse_repo_root,  'nano',               paths['nano'],                'org.eclipse.virgo.nano',            bundle_version, release_from_branch,        'clean clean-integration test package publish-ivy publish-maven publish-multiple-nano-packages-build publish-updatesite-build publish-multiple-nano-packages-download'),
-    Repository.new(virgo_eclipse_repo_root, 'kernel',              paths['kernel'],              'org.eclipse.virgo.kernel',          bundle_version, release_from_branch, 'clean clean-integration test package smoke-test publish-ivy publish-maven publish-package-build publish-updatesite-build publish-package-download'),
-    Repository.new(virgo_eclipse_repo_root, 'kernel-tools',        paths['kernel-tools'],        'org.eclipse.virgo.kernel-tools',    bundle_version, release_from_branch, default_targets)
+	Repository.new(virgo_eclipse_repo_root, 'eclipse-mirror',			paths['eclipse-mirror'],		'org.eclipse.virgo.eclipse-mirror',	bundle_version, release_from_branch,		'clean'),
+	Repository.new(virgo_eclipse_repo_root, 'util',						paths['util'],					'org.eclipse.virgo.util',			bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root, 'test',						paths['test'],					'org.eclipse.virgo.test',			bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root, 'medic',					paths['medic'],					'org.eclipse.virgo.medic',			bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root,	 'nano',					paths['nano'],					'org.eclipse.virgo.nano',			bundle_version, release_from_branch,		'clean clean-integration test package publish-ivy publish-maven publish-multiple-nano-packages-build publish-updatesite-build publish-multiple-nano-packages-download'),
+	Repository.new(virgo_eclipse_repo_root, 'artifact-repository',		paths['artifact-repository'],	'org.eclipse.virgo.repository',		bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root, 'kernel',					paths['kernel'],				'org.eclipse.virgo.kernel',			bundle_version, release_from_branch,		'clean clean-integration test package smoke-test publish-ivy publish-maven publish-package-build publish-updatesite-build publish-package-download'),
+	Repository.new(virgo_eclipse_repo_root, 'kernel-tools',				paths['kernel-tools'],			'org.eclipse.virgo.kernel-tools',	bundle_version, release_from_branch,		default_targets)
   ]
 
-elsif args[:product_release] == 'web-server' 
-  
+elsif args[:product_release] == 'web-server'
+
   ALL_REPOS = [
-    Repository.new(virgo_eclipse_repo_root, 'eclipse-mirror',     paths['eclipse-mirror'],       'org.eclipse.virgo.eclipse-mirror',  bundle_version, release_from_branch, 'clean'),
-    Repository.new(virgo_eclipse_repo_root, 'web',                 paths['web'],                 'org.eclipse.virgo.web',             bundle_version, release_from_branch, default_targets),
-    Repository.new(virgo_eclipse_repo_root, 'snaps',               paths['snaps'],               'org.eclipse.virgo.snaps',           bundle_version, release_from_branch, 'clean clean-integration test package publish-ivy publish-maven publish-package-build publish-package-download'),
-    Repository.new(virgo_eclipse_repo_root, 'apps',                paths['apps'],                'org.eclipse.virgo.apps',            bundle_version, release_from_branch, default_targets),
-    Repository.new(virgo_eclipse_repo_root, 'documentation',       paths['documentation'],       'org.eclipse.virgo.documentation',   bundle_version, release_from_branch, 'clean clean-integration doc-html package publish-ivy publish-package-download'),
-    Repository.new(virgo_eclipse_repo_root, 'web-server',          paths['web-server'],          'org.eclipse.virgo.web-server',      bundle_version, release_from_branch, 'clean clean-integration test package smoke-test publish-ivy publish-maven publish-package-build publish-updatesite-build publish-package-download'),
-    Repository.new(virgo_eclipse_repo_root, 'jetty-server',        paths['jetty-server'],        'org.eclipse.virgo.jetty-server',    bundle_version, release_from_branch, 'clean clean-integration test package smoke-test publish-ivy publish-package-build publish-updatesite-build publish-package-download publish-updatesite-download')
+	Repository.new(virgo_eclipse_repo_root, 'eclipse-mirror',			paths['eclipse-mirror'],		'org.eclipse.virgo.eclipse-mirror',	bundle_version, release_from_branch,		'clean'),
+	Repository.new(virgo_eclipse_repo_root, 'web',						paths['web'],					'org.eclipse.virgo.web',			bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root, 'snaps',					paths['snaps'],					'org.eclipse.virgo.snaps',			bundle_version, release_from_branch,		'clean clean-integration test package publish-ivy publish-maven publish-package-build publish-package-download'),
+	Repository.new(virgo_eclipse_repo_root, 'apps',						paths['apps'],					'org.eclipse.virgo.apps',			bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root, 'documentation',			paths['documentation'],			'org.eclipse.virgo.documentation',	bundle_version, release_from_branch,		'clean clean-integration doc-html package publish-ivy publish-package-download'),
+	Repository.new(virgo_eclipse_repo_root, 'web-server',				paths['web-server'],			'org.eclipse.virgo.web-server',		bundle_version, release_from_branch,		'clean clean-integration test package smoke-test publish-ivy publish-maven publish-package-build publish-updatesite-build publish-package-download'),
+	Repository.new(virgo_eclipse_repo_root, 'jetty-server',				paths['jetty-server'],			'org.eclipse.virgo.jetty-server',	bundle_version, release_from_branch,		'clean clean-integration test package smoke-test publish-ivy publish-package-build publish-updatesite-build publish-package-download publish-updatesite-download')
   ]
-  
-elsif args[:product_release] == 'virgo' 
-  
+
+elsif args[:product_release] == 'virgo'
+
   ALL_REPOS = [
-    Repository.new(virgo_eclipse_repo_root, 'eclipse-mirror',      paths['eclipse-mirror'],      'org.eclipse.virgo.eclipse-mirror',  bundle_version, release_from_branch, 'clean'),
-    Repository.new(virgo_eclipse_repo_root, 'util',                paths['util'],                'org.eclipse.virgo.util',            bundle_version, release_from_branch, default_targets),
-    Repository.new(virgo_eclipse_repo_root, 'test',                paths['test'],                'org.eclipse.virgo.test',            bundle_version, release_from_branch, default_targets),
-    Repository.new(virgo_eclipse_repo_root, 'medic',               paths['medic'],               'org.eclipse.virgo.medic',           bundle_version, release_from_branch, default_targets),
-    Repository.new(virgo_eclipse_repo_root, 'artifact-repository', paths['artifact-repository'], 'org.eclipse.virgo.repository',      bundle_version, release_from_branch, default_targets),
-    Repository.new(virgo_eclipse_repo_root,  'nano',               paths['nano'],                'org.eclipse.virgo.nano',            bundle_version, release_from_branch,        'clean clean-integration test package publish-ivy publish-maven publish-multiple-nano-packages-build publish-updatesite-build publish-multiple-nano-packages-download'),
-    Repository.new(virgo_eclipse_repo_root, 'kernel',              paths['kernel'],              'org.eclipse.virgo.kernel',          bundle_version, release_from_branch, 'clean clean-integration test package smoke-test publish-ivy publish-maven publish-package-build publish-updatesite-build publish-package-download'),
-    Repository.new(virgo_eclipse_repo_root, 'kernel-tools',        paths['kernel-tools'],        'org.eclipse.virgo.kernel-tools',    bundle_version, release_from_branch, default_targets),
-    Repository.new(virgo_eclipse_repo_root, 'web',                 paths['web'],                 'org.eclipse.virgo.web',             bundle_version, release_from_branch, default_targets),
-    Repository.new(virgo_eclipse_repo_root, 'snaps',               paths['snaps'],               'org.eclipse.virgo.snaps',           bundle_version, release_from_branch, 'clean clean-integration test package publish-ivy publish-maven publish-package-build publish-package-download'),
-    Repository.new(virgo_eclipse_repo_root, 'apps',                paths['apps'],                'org.eclipse.virgo.apps',            bundle_version, release_from_branch, default_targets),
-    Repository.new(virgo_eclipse_repo_root, 'documentation',       paths['documentation'],       'org.eclipse.virgo.documentation',   bundle_version, release_from_branch, 'clean clean-integration doc-html package publish-ivy publish-package-download'),
-    Repository.new(virgo_eclipse_repo_root, 'web-server',          paths['web-server'],          'org.eclipse.virgo.web-server',      bundle_version, release_from_branch, 'clean clean-integration test package smoke-test publish-ivy publish-maven publish-package-build publish-updatesite-build publish-package-download'),
-    Repository.new(virgo_eclipse_repo_root, 'jetty-server',        paths['jetty-server'],        'org.eclipse.virgo.jetty-server',    bundle_version, release_from_branch, 'clean clean-integration test package smoke-test publish-ivy publish-package-build publish-updatesite-build publish-package-download publish-updatesite-download')
+	Repository.new(virgo_eclipse_repo_root, 'eclipse-mirror',			paths['eclipse-mirror'],		'org.eclipse.virgo.eclipse-mirror',	bundle_version, release_from_branch,		'clean'),
+	Repository.new(virgo_eclipse_repo_root, 'util',						paths['util'],					'org.eclipse.virgo.util',			bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root, 'test',						paths['test'],					'org.eclipse.virgo.test',			bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root, 'medic',					paths['medic'],					'org.eclipse.virgo.medic',			bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root,	 'nano',					paths['nano'],					'org.eclipse.virgo.nano',			bundle_version, release_from_branch,		'clean clean-integration test package publish-ivy publish-maven publish-multiple-nano-packages-build publish-updatesite-build publish-multiple-nano-packages-download'),
+	Repository.new(virgo_eclipse_repo_root, 'artifact-repository',		paths['artifact-repository'],	'org.eclipse.virgo.repository',		bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root, 'kernel',					paths['kernel'],				'org.eclipse.virgo.kernel',			bundle_version, release_from_branch,		'clean clean-integration test package smoke-test publish-ivy publish-maven publish-package-build publish-updatesite-build publish-package-download'),
+	Repository.new(virgo_eclipse_repo_root, 'kernel-tools',				paths['kernel-tools'],			'org.eclipse.virgo.kernel-tools',	bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root, 'web',						paths['web'],					'org.eclipse.virgo.web',			bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root, 'snaps',					paths['snaps'],					'org.eclipse.virgo.snaps',			bundle_version, release_from_branch,		'clean clean-integration test package publish-ivy publish-maven publish-package-build publish-package-download'),
+	Repository.new(virgo_eclipse_repo_root, 'apps',						paths['apps'],					'org.eclipse.virgo.apps',			bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root, 'documentation',			paths['documentation'],			'org.eclipse.virgo.documentation',	bundle_version, release_from_branch,		'clean clean-integration doc-html package publish-ivy publish-package-download'),
+	Repository.new(virgo_eclipse_repo_root, 'web-server',				paths['web-server'],			'org.eclipse.virgo.web-server',		bundle_version, release_from_branch,		'clean clean-integration test package smoke-test publish-ivy publish-maven publish-package-build publish-updatesite-build publish-package-download'),
+	Repository.new(virgo_eclipse_repo_root, 'jetty-server',				paths['jetty-server'],			'org.eclipse.virgo.jetty-server',	bundle_version, release_from_branch,		'clean clean-integration test package smoke-test publish-ivy publish-package-build publish-updatesite-build publish-package-download publish-updatesite-download')
   ]
 
 else
 
-    ALL_REPOS = [
-      Repository.new(virgo_eclipse_repo_root, 'eclipse-mirror',      paths['eclipse-mirror'],       'org.eclipse.virgo.eclipse-mirror', bundle_version, release_from_branch, 'clean'),
-      Repository.new(virgo_eclipse_repo_root, 'util',                paths['util'],                 'org.eclipse.virgo.util',           bundle_version, release_from_branch, default_targets),
-      Repository.new(virgo_eclipse_repo_root, 'test',                paths['test'],                 'org.eclipse.virgo.test',           bundle_version, release_from_branch, default_targets),
-      Repository.new(virgo_eclipse_repo_root, 'medic',               paths['medic'],                'org.eclipse.virgo.medic',          bundle_version, release_from_branch, default_targets),
-      Repository.new(virgo_eclipse_repo_root, 'artifact-repository', paths['artifact-repository'],  'org.eclipse.virgo.repository',     bundle_version, release_from_branch, default_targets),
-      Repository.new(virgo_eclipse_repo_root,  'nano',               paths['nano'],                 'org.eclipse.virgo.nano',           bundle_version, release_from_branch, 'clean clean-integration test package publish-ivy publish-maven publish-multiple-nano-packages-build publish-updatesite-build publish-multiple-nano-packages-download'),
-      Repository.new(virgo_eclipse_repo_root, 'kernel',              paths['kernel'],               'org.eclipse.virgo.kernel',         bundle_version, release_from_branch, 'clean clean-integration test package smoke-test publish-ivy publish-maven publish-package-build publish-updatesite-build publish-package-download'),
-      Repository.new(virgo_eclipse_repo_root, 'kernel-tools',        paths['kernel-tools'],         'org.eclipse.virgo.kernel-tools',   bundle_version, release_from_branch, default_targets),
-      Repository.new(virgo_eclipse_repo_root, 'web',                 paths['web'],                  'org.eclipse.virgo.web',            bundle_version, release_from_branch, default_targets),
-      Repository.new(virgo_eclipse_repo_root, 'snaps',               paths['snaps'],                'org.eclipse.virgo.snaps',          bundle_version, release_from_branch, 'clean clean-integration test package publish-ivy publish-maven publish-package-build publish-package-download'),
-      Repository.new(virgo_eclipse_repo_root, 'apps',                paths['apps'],                 'org.eclipse.virgo.apps',           bundle_version, release_from_branch, default_targets),
-      Repository.new(virgo_eclipse_repo_root, 'documentation',       paths['documentation'],        'org.eclipse.virgo.documentation',  bundle_version, release_from_branch, 'clean clean-integration doc-html package publish-ivy publish-package-download'),
-      Repository.new(virgo_eclipse_repo_root, 'web-server',          paths['web-server'],           'org.eclipse.virgo.web-server',     bundle_version, release_from_branch, 'clean clean-integration test package smoke-test publish-ivy publish-maven publish-package-build publish-updatesite-build publish-package-download'),
-      Repository.new(virgo_eclipse_repo_root, 'jetty-server',        paths['jetty-server'],         'org.eclipse.virgo.jetty-server',   bundle_version, release_from_branch, 'clean clean-integration test package smoke-test publish-ivy publish-package-build publish-updatesite-build publish-package-download publish-updatesite-download')
-    ]
+  ALL_REPOS = [
+	Repository.new(virgo_eclipse_repo_root, 'eclipse-mirror',		paths['eclipse-mirror'],		'org.eclipse.virgo.eclipse-mirror',		bundle_version, release_from_branch,		'clean'),
+	Repository.new(virgo_eclipse_repo_root, 'util',					paths['util'],					'org.eclipse.virgo.util',				bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root, 'test',					paths['test'],					'org.eclipse.virgo.test',				bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root, 'medic',				paths['medic'],					'org.eclipse.virgo.medic',				bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root, 'artifact-repository',	paths['artifact-repository'],	'org.eclipse.virgo.repository',			bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root,	 'nano',				paths['nano'],					'org.eclipse.virgo.nano',				bundle_version, release_from_branch,		 'clean clean-integration test package publish-ivy publish-maven publish-multiple-nano-packages-build publish-updatesite-build publish-multiple-nano-packages-download'),
+	Repository.new(virgo_eclipse_repo_root, 'artifact-repository',	paths['artifact-repository'],	'org.eclipse.virgo.repository',			bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root, 'kernel',				paths['kernel'],				'org.eclipse.virgo.kernel',				bundle_version, release_from_branch,		'clean clean-integration test package smoke-test publish-ivy publish-maven publish-package-build publish-updatesite-build publish-package-download'),
+	Repository.new(virgo_eclipse_repo_root, 'kernel-tools',			paths['kernel-tools'],			'org.eclipse.virgo.kernel-tools',		bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root, 'web',					paths['web'],					'org.eclipse.virgo.web',				bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root, 'snaps',				paths['snaps'],					'org.eclipse.virgo.snaps',				bundle_version, release_from_branch,		'clean clean-integration test package publish-ivy publish-maven publish-package-build publish-package-download'),
+	Repository.new(virgo_eclipse_repo_root, 'apps',					paths['apps'],					'org.eclipse.virgo.apps',				bundle_version, release_from_branch,		default_targets),
+	Repository.new(virgo_eclipse_repo_root, 'documentation',		paths['documentation'],			'org.eclipse.virgo.documentation',		bundle_version, release_from_branch,		'clean clean-integration doc-html package publish-ivy publish-package-download'),
+	Repository.new(virgo_eclipse_repo_root, 'web-server',			paths['web-server'],			'org.eclipse.virgo.web-server',			bundle_version, release_from_branch,		'clean clean-integration test package smoke-test publish-ivy publish-maven publish-package-build publish-updatesite-build publish-package-download'),
+	Repository.new(virgo_eclipse_repo_root, 'jetty-server',			paths['jetty-server'],			'org.eclipse.virgo.jetty-server',		bundle_version, release_from_branch,		'clean clean-integration test package smoke-test publish-ivy publish-package-build publish-updatesite-build publish-package-download publish-updatesite-download')
+  ]
 
 end
 
@@ -142,63 +143,63 @@
 begin
 
   ALL_REPOS.each do |repo|
-    puts 'Releasing ' + repo.name
-    puts '  checkout with "' + repo.clone_command + '"' if DRY_RUN
-    console.set_title(SCRIPT_NAME, "#{repo.name} Checkout")
-    repo.checkout(true)
-    if DRY_RUN
-      puts "  Create Release branch " + args[:version] + ", " + args[:build_stamp] + ", " + args[:release_type]
-      puts "    using versions: "
-      accumulate_versions.sort.each {|keyval| puts "      " + keyval[0] + " = " + keyval[1]}
-      if !args[:build_version].nil?
-        puts '  updating Virgo Build to \'' + args[:build_version] + '\''
-      end
-      puts "  Building " + repo.name
-      puts "  Create tag " + repo.bundle_version
-      puts "  Update Master branch " + args[:new_version]
-    else
-      console.set_title(SCRIPT_NAME, "#{repo.name} Create release branch")
-      if repo.name == 'gemini-web-container'
-        repo.create_release_branch(args[:gemini_version], args[:gemini_build_stamp], args[:gemini_release_type], accumulate_versions)
-      else
-        repo.create_release_branch(args[:version], args[:build_stamp], args[:release_type], accumulate_versions)
-      end
-      if !args[:build_version].nil?
-        console.set_title(SCRIPT_NAME, "#{repo.name} Update Virgo build")
-        repo.update_virgo_build(args[:build_version])
-      end
-      console.set_title(SCRIPT_NAME, "#{repo.name} Build")
-      repo.build(args[:remote_user], log_file)
-      console.set_title(SCRIPT_NAME, "#{repo.name} Create tag")
-      repo.create_tag
-      console.set_title(SCRIPT_NAME, "#{repo.name} Update master branch")
-      if repo.name == 'gemini-web-container'
-        repo.update_master_branch(args[:gemini_new_version], accumulate_versions)
-      else
-        repo.update_master_branch(args[:new_version], accumulate_versions)
-      end
-    end
-    accumulate_versions = (repo.versions).merge(accumulate_versions)
+	puts 'Releasing ' + repo.name
+	puts '    checkout with "' + repo.clone_command + '"' if DRY_RUN
+	console.set_title(SCRIPT_NAME, "#{repo.name} Checkout")
+	repo.checkout(true)
+	if DRY_RUN
+	  puts "  Create Release branch " + args[:version] + ", " + args[:build_stamp] + ", " + args[:release_type]
+	  puts "	using versions: "
+	  accumulate_versions.sort.each {|keyval| puts "	  " + keyval[0] + " = " + keyval[1]}
+	  if !args[:build_version].nil?
+		puts '	updating Virgo Build to \'' + args[:build_version] + '\''
+	  end
+	  puts "  Building " + repo.name
+	  puts "  Create tag " + repo.bundle_version
+	  puts "  Update Master branch " + args[:new_version]
+	else
+	  console.set_title(SCRIPT_NAME, "#{repo.name} Create release branch")
+	  if repo.name == 'gemini-web-container'
+		repo.create_release_branch(args[:gemini_version], args[:gemini_build_stamp], args[:gemini_release_type], accumulate_versions)
+	  else
+		repo.create_release_branch(args[:version], args[:build_stamp], args[:release_type], accumulate_versions)
+	  end
+	  if !args[:build_version].nil?
+		console.set_title(SCRIPT_NAME, "#{repo.name} Update Virgo build")
+		repo.update_virgo_build(args[:build_version])
+	  end
+	  console.set_title(SCRIPT_NAME, "#{repo.name} Build")
+	  repo.build(args[:remote_user], log_file)
+	  console.set_title(SCRIPT_NAME, "#{repo.name} Create tag")
+	  repo.create_tag
+	  console.set_title(SCRIPT_NAME, "#{repo.name} Update master branch")
+	  if repo.name == 'gemini-web-container'
+		repo.update_master_branch(args[:gemini_new_version], accumulate_versions)
+	  else
+		repo.update_master_branch(args[:new_version], accumulate_versions)
+	  end
+	end
+	accumulate_versions = (repo.versions).merge(accumulate_versions)
   end
 
   console.set_title(SCRIPT_NAME, "Push?")
 
   if !DRY_RUN
-    puts 'Execution Time: ' + Time.at(Time.new - start_time).utc.strftime('%R:%S')
-    puts ''
+	puts 'Execution Time: ' + Time.at(Time.new - start_time).utc.strftime('%R:%S')
+	puts ''
 
-    print 'Do you want to push? (y/n) '
-    commit_ok = STDIN.gets.chomp
-    if commit_ok =~ /y.*/
-      ALL_REPOS.each do |repo|
-        console.set_title(SCRIPT_NAME, "#{repo.name} Push")
-        if repo.name == 'gemini-web-container'
-          repo.push(args[:gemini_new_version])
-        else
-          repo.push(args[:new_version])
-        end
-      end
-    end
+	print 'Do you want to push? (y/n) '
+	commit_ok = STDIN.gets.chomp
+	if commit_ok =~ /y.*/
+	  ALL_REPOS.each do |repo|
+		console.set_title(SCRIPT_NAME, "#{repo.name} Push")
+		if repo.name == 'gemini-web-container'
+		  repo.push(args[:gemini_new_version])
+		else
+		  repo.push(args[:new_version])
+		end
+	  end
+	end
   end
 
   console.clear_title
diff --git a/scripts/ripplor/ripplor.rb b/scripts/ripplor/ripplor.rb
index 38f52b9..5e03d95 100755
--- a/scripts/ripplor/ripplor.rb
+++ b/scripts/ripplor/ripplor.rb
@@ -15,24 +15,24 @@
 if File.exist?(File.expand_path(args[:repository_map]))
   paths = Hash.new
   IO.foreach(File.expand_path(args[:repository_map])) do |line|
-    paths[$1.strip] = $2.strip if line =~ /([^=]*)=(.*)/
+	paths[$1.strip] = $2.strip if line =~ /([^=]*)=(.*)/
   end
 else
   paths = {
-    'eclipse-mirror' => 'eclipse-mirror',
-    'util' => 'util',
-    'test' => 'test',
-    'medic' => 'medic',
-    'artifact-repository' => 'artifact-repository',
-    'nano' => 'nano',
-    'kernel' => 'kernel',
-    'kernel-tools' => 'kernel-tools',
-    'web' => 'web',
-    'snaps' => 'snaps',
-    'apps' => 'apps',
-    'documentation' => 'documentation',
-    'web-server' => 'web-server',
-    'jetty-server' => 'jetty-server'
+	'eclipse-mirror' => 'eclipse-mirror',
+	'util' => 'util',
+	'test' => 'test',
+	'medic' => 'medic',
+	'nano' => 'nano',
+	'artifact-repository' => 'artifact-repository',
+	'kernel' => 'kernel',
+	'kernel-tools' => 'kernel-tools',
+	'web' => 'web',
+	'snaps' => 'snaps',
+	'apps' => 'apps',
+	'documentation' => 'documentation',
+	'web-server' => 'web-server',
+	'jetty-server' => 'jetty-server'
   }
 end
 
@@ -40,28 +40,28 @@
 ripple_branch = args[:branch_name]
 
 ALL_REPOS = [
-    Repository.new(eclipse_repo_root, 'eclipse-mirror',     paths['eclipse-mirror'],     'org.eclipse.virgo.eclipse-mirror',     nil, ripple_branch, 'clean'),
-  Repository.new(eclipse_repo_root, 'util',                paths['util'],                'org.eclipse.virgo.util',          nil, ripple_branch),
-  Repository.new(eclipse_repo_root, 'test',                paths['test'],                'org.eclipse.virgo.test',          nil, ripple_branch),
-  Repository.new(eclipse_repo_root, 'medic',               paths['medic'],               'org.eclipse.virgo.medic',         nil, ripple_branch),
-  Repository.new(eclipse_repo_root, 'artifact-repository', paths['artifact-repository'], 'org.eclipse.virgo.repository',    nil, ripple_branch),
-  Repository.new(eclipse_repo_root, 'nano',                paths['nano'],                'org.eclipse.virgo.nano',          nil, ripple_branch, 'clean clean-integration test package publish-ivy publish-multiple-nano-packages-build publish-updatesite-build'),
-  Repository.new(eclipse_repo_root, 'kernel',              paths['kernel'],              'org.eclipse.virgo.kernel',        nil, ripple_branch, 'clean clean-integration test package smoke-test publish-ivy publish-package-build publish-updatesite-build'),
-  Repository.new(eclipse_repo_root, 'kernel-tools',        paths['kernel-tools'],        'org.eclipse.virgo.kernel-tools',  nil, ripple_branch),
-  Repository.new(eclipse_repo_root, 'web',                 paths['web'],                 'org.eclipse.virgo.web',           nil, ripple_branch),
-  Repository.new(eclipse_repo_root, 'snaps',               paths['snaps'],               'org.eclipse.virgo.snaps',         nil, ripple_branch, 'clean clean-integration test package publish-ivy publish-package-build'),
-  Repository.new(eclipse_repo_root, 'apps',                paths['apps'],                'org.eclipse.virgo.apps',          nil, ripple_branch),
-  Repository.new(eclipse_repo_root, 'documentation',       paths['documentation'],       'org.eclipse.virgo.documentation', nil, ripple_branch, 'clean clean-integration doc-html publish-ivy'),
-  Repository.new(eclipse_repo_root, 'web-server',          paths['web-server'],          'org.eclipse.virgo.web-server',    nil, ripple_branch, 'clean clean-integration test package smoke-test publish-ivy publish-package-build publish-updatesite-build'),
-  Repository.new(eclipse_repo_root, 'jetty-server',        paths['jetty-server'],        'org.eclipse.virgo.jetty-server',  nil, ripple_branch, 'clean clean-integration test package smoke-test publish-ivy publish-package-build publish-updatesite-build')
+	Repository.new(eclipse_repo_root, 'eclipse-mirror',		paths['eclipse-mirror'],		'org.eclipse.virgo.eclipse-mirror',		nil, ripple_branch, 'clean'),
+  Repository.new(eclipse_repo_root, 'util',					paths['util'],					'org.eclipse.virgo.util',				nil, ripple_branch),
+  Repository.new(eclipse_repo_root, 'test',					paths['test'],					'org.eclipse.virgo.test',				nil, ripple_branch),
+  Repository.new(eclipse_repo_root, 'medic',				paths['medic'],					'org.eclipse.virgo.medic',				nil, ripple_branch),
+  Repository.new(eclipse_repo_root, 'nano',					paths['nano'],					'org.eclipse.virgo.nano',				nil, ripple_branch, 'clean clean-integration test package publish-ivy publish-multiple-nano-packages-build publish-updatesite-build'),
+  Repository.new(eclipse_repo_root, 'artifact-repository',	paths['artifact-repository'],	'org.eclipse.virgo.repository',			nil, ripple_branch),
+  Repository.new(eclipse_repo_root, 'kernel',				paths['kernel'],				'org.eclipse.virgo.kernel',				nil, ripple_branch, 'clean clean-integration test package smoke-test publish-ivy publish-package-build publish-updatesite-build'),
+  Repository.new(eclipse_repo_root, 'kernel-tools',			paths['kernel-tools'],			'org.eclipse.virgo.kernel-tools',		nil, ripple_branch),
+  Repository.new(eclipse_repo_root, 'web',					paths['web'],					'org.eclipse.virgo.web',				nil, ripple_branch),
+  Repository.new(eclipse_repo_root, 'snaps',				paths['snaps'],					'org.eclipse.virgo.snaps',				nil, ripple_branch, 'clean clean-integration test package publish-ivy publish-package-build'),
+  Repository.new(eclipse_repo_root, 'apps',					paths['apps'],					'org.eclipse.virgo.apps',				nil, ripple_branch),
+  Repository.new(eclipse_repo_root, 'documentation',		paths['documentation'],			'org.eclipse.virgo.documentation',		nil, ripple_branch, 'clean clean-integration doc-html publish-ivy'),
+  Repository.new(eclipse_repo_root, 'web-server',			paths['web-server'],			'org.eclipse.virgo.web-server',			nil, ripple_branch, 'clean clean-integration test package smoke-test publish-ivy publish-package-build publish-updatesite-build'),
+  Repository.new(eclipse_repo_root, 'jetty-server',			paths['jetty-server'],			'org.eclipse.virgo.jetty-server',		nil, ripple_branch, 'clean clean-integration test package smoke-test publish-ivy publish-package-build publish-updatesite-build')
 ]
 
 repos = Array.new
 repo_found = false
 ALL_REPOS.each do |repo|
   if repo_found || repo.name == args[:start_repo]
-    repos << repo
-    repo_found = true
+	repos << repo
+	repo_found = true
   end
 end
 
@@ -71,7 +71,7 @@
 versions = Hash.new
 if !args[:version].nil?
   args[:version].split(",").each do |v|
-    versions[$1.strip] = $2.strip if v =~ /(.*):(.*)/
+	versions[$1.strip] = $2.strip if v =~ /(.*):(.*)/
   end
 end
 
@@ -80,35 +80,35 @@
 begin
 
   repos.each do |repo|
-    puts 'Rippling ' + repo.name
-    puts '  checkout with "' + repo.clone_command + '"' if DRY_RUN
-    console.set_title(SCRIPT_NAME, "#{repo.name} Checkout")
-    repo.checkout if !DRY_RUN
-    puts '  update_versions ...' if DRY_RUN
-    console.set_title(SCRIPT_NAME, "#{repo.name} Update")
-    repo.update_versions(versions) if !DRY_RUN
-    if !args[:build_version].nil?
-      repo.update_virgo_build(args[:build_version]) if !DRY_RUN
-    end
-    puts '  build with user: ' + args[:remote_user] + ' and TARGETS: ' + repo.targets if DRY_RUN
-    console.set_title(SCRIPT_NAME, "#{repo.name} Build")
-    repo.build(args[:remote_user], log_file) if !DRY_RUN
-    versions.merge!(repo.versions) if !DRY_RUN
+	puts 'Rippling ' + repo.name
+	puts '	checkout with "' + repo.clone_command + '"' if DRY_RUN
+	console.set_title(SCRIPT_NAME, "#{repo.name} Checkout")
+	repo.checkout if !DRY_RUN
+	puts '	update_versions ...' if DRY_RUN
+	console.set_title(SCRIPT_NAME, "#{repo.name} Update")
+	repo.update_versions(versions) if !DRY_RUN
+	if !args[:build_version].nil?
+	  repo.update_virgo_build(args[:build_version]) if !DRY_RUN
+	end
+	puts '	build with user: ' + args[:remote_user] + ' and TARGETS: ' + repo.targets if DRY_RUN
+	console.set_title(SCRIPT_NAME, "#{repo.name} Build")
+	repo.build(args[:remote_user], log_file) if !DRY_RUN
+	versions.merge!(repo.versions) if !DRY_RUN
   end
 
   console.set_title(SCRIPT_NAME, "Push?")
 
   if !DRY_RUN
-    puts 'Execution Time: ' + Time.at(Time.new - start_time).utc.strftime('%R:%S')
+	puts 'Execution Time: ' + Time.at(Time.new - start_time).utc.strftime('%R:%S')
 
-    print 'Do you want to push? (y/n) '
-    commit_ok = STDIN.gets.chomp
-    if commit_ok =~ /y.*/
-      repos.each do |repo|
-        console.set_title(SCRIPT_NAME, "#{repo.name} Push")
-        repo.push
-      end
-    end
+	print 'Do you want to push? (y/n) '
+	commit_ok = STDIN.gets.chomp
+	if commit_ok =~ /y.*/
+	  repos.each do |repo|
+		console.set_title(SCRIPT_NAME, "#{repo.name} Push")
+		repo.push
+	  end
+	end
   end
 
   console.clear_title
