[571063] Capture preferences encodes dollar literal one time too often
diff --git a/plugins/org.eclipse.oomph.setup.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.oomph.setup.core/META-INF/MANIFEST.MF
index 4f9ca1f..eb06d71 100644
--- a/plugins/org.eclipse.oomph.setup.core/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.oomph.setup.core/META-INF/MANIFEST.MF
@@ -33,7 +33,7 @@
  org.eclipse.equinox.security;bundle-version="[1.0.0,2.0.0)",
  org.eclipse.oomph.base.edit;bundle-version="[1.13.0,2.0.0)",
  org.eclipse.oomph.p2.core;bundle-version="[1.17.0,2.0.0)",
- org.eclipse.oomph.setup;bundle-version="[1.18.0,2.0.0)";visibility:=reexport,
+ org.eclipse.oomph.setup;bundle-version="[1.19.0,2.0.0)";visibility:=reexport,
  org.eclipse.oomph.setup.p2;bundle-version="[1.16.0,2.0.0)",
  org.eclipse.oomph.preferences;bundle-version="[1.12.0,2.0.0)",
  org.eclipse.core.net;bundle-version="[1.2.0,2.0.0)"
diff --git a/plugins/org.eclipse.oomph.setup.editor/META-INF/MANIFEST.MF b/plugins/org.eclipse.oomph.setup.editor/META-INF/MANIFEST.MF
index 83401bf..f582425 100644
--- a/plugins/org.eclipse.oomph.setup.editor/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.oomph.setup.editor/META-INF/MANIFEST.MF
@@ -2,13 +2,13 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.oomph.setup.editor;singleton:=true
-Bundle-Version: 1.18.0.qualifier
+Bundle-Version: 1.19.0.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.oomph.setup.presentation.SetupEditorPlugin$Implementation
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Export-Package: org.eclipse.oomph.setup.editor;version="1.18.0";x-internal:=true,
+Export-Package: org.eclipse.oomph.setup.editor;version="1.19.0";x-internal:=true,
  org.eclipse.oomph.setup.presentation;version="1.5.0";x-internal:=true,
  org.eclipse.oomph.setup.presentation.handlers;version="1.5.0";x-internal:=true,
  org.eclipse.oomph.setup.presentation.templates;version="1.5.0";x-internal:=true
@@ -20,7 +20,7 @@
  org.eclipse.oomph.resources.edit;bundle-version="[1.11.0,2.0.0)";visibility:=reexport,
  org.eclipse.oomph.preferences;bundle-version="[1.12.0,2.0.0)",
  org.eclipse.oomph.setup.edit;bundle-version="[1.15.0,2.0.0)";visibility:=reexport,
- org.eclipse.oomph.setup.ui;bundle-version="[1.18.0,2.0.0)",
+ org.eclipse.oomph.setup.ui;bundle-version="[1.20.0,2.0.0)",
  org.eclipse.oomph.setup.sync;bundle-version="[1.13.0,2.0.0)",
  org.eclipse.oomph.workingsets.edit;bundle-version="[1.11.0,2.0.0)";visibility:=reexport,
  org.eclipse.oomph.workingsets.editor;bundle-version="[1.12.0,2.0.0)",
@@ -32,6 +32,6 @@
  org.eclipse.oomph.base.edit;bundle-version="[1.13.0,2.0.0)";visibility:=reexport,
  org.eclipse.oomph.setup.p2.edit;bundle-version="[1.13.0,2.0.0)",
  org.eclipse.oomph.p2.edit;bundle-version="[1.14.0,2.0.0)";visibility:=reexport,
- org.eclipse.oomph.p2.ui;bundle-version="[1.14.0,2.0.0)"
+ org.eclipse.oomph.p2.ui;bundle-version="[1.15.0,2.0.0)"
 Bundle-ActivationPolicy: lazy
 Automatic-Module-Name: org.eclipse.oomph.setup.editor
diff --git a/plugins/org.eclipse.oomph.setup.editor/pom.xml b/plugins/org.eclipse.oomph.setup.editor/pom.xml
index daf18d6..66a6b2d 100644
--- a/plugins/org.eclipse.oomph.setup.editor/pom.xml
+++ b/plugins/org.eclipse.oomph.setup.editor/pom.xml
@@ -20,7 +20,7 @@
   </parent>
   <groupId>org.eclipse.oomph</groupId>
   <artifactId>org.eclipse.oomph.setup.editor</artifactId>
-  <version>1.18.0-SNAPSHOT</version>
+  <version>1.19.0-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 
   <build>
diff --git a/plugins/org.eclipse.oomph.setup.editor/src/org/eclipse/oomph/setup/presentation/PreferenceCaptureDialog.java b/plugins/org.eclipse.oomph.setup.editor/src/org/eclipse/oomph/setup/presentation/PreferenceCaptureDialog.java
index 8bd120f..a1bc4e7 100644
--- a/plugins/org.eclipse.oomph.setup.editor/src/org/eclipse/oomph/setup/presentation/PreferenceCaptureDialog.java
+++ b/plugins/org.eclipse.oomph.setup.editor/src/org/eclipse/oomph/setup/presentation/PreferenceCaptureDialog.java
@@ -19,6 +19,8 @@
 import org.eclipse.oomph.setup.PreferenceTask;
 import org.eclipse.oomph.setup.SetupTask;
 import org.eclipse.oomph.setup.ui.recorder.RecorderTransaction;
+import org.eclipse.oomph.setup.util.SetupUtil;
+import org.eclipse.oomph.setup.util.StringExpander;
 import org.eclipse.oomph.util.IORuntimeException;
 import org.eclipse.oomph.util.Pair;
 import org.eclipse.oomph.util.PropertiesUtil;
@@ -405,7 +407,30 @@
     for (Object object : included)
     {
       PreferenceTask preferenceTask = (PreferenceTask)object;
-      result.put(PreferencesFactory.eINSTANCE.createURI(preferenceTask.getKey()), new Pair<String, String>(null, preferenceTask.getValue()));
+      new StringExpander()
+      {
+        @Override
+        protected String resolve(String key)
+        {
+          return null;
+        }
+
+        @Override
+        protected boolean isUnexpanded(String key)
+        {
+          return false;
+        }
+
+        @Override
+        protected String filter(String value, String filterName)
+        {
+          return null;
+        }
+      };
+
+      String escapedValue = preferenceTask.getValue();
+      String actualValue = SetupUtil.descape(escapedValue);
+      result.put(PreferencesFactory.eINSTANCE.createURI(preferenceTask.getKey()), new Pair<String, String>(null, actualValue));
     }
 
     return result;
diff --git a/plugins/org.eclipse.oomph.setup.installer/META-INF/MANIFEST.MF b/plugins/org.eclipse.oomph.setup.installer/META-INF/MANIFEST.MF
index 558b927..3d3018d 100644
--- a/plugins/org.eclipse.oomph.setup.installer/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.oomph.setup.installer/META-INF/MANIFEST.MF
@@ -10,7 +10,7 @@
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.emf.ecore.xmi;bundle-version="[2.10.0,3.0.0)",
  org.eclipse.emf.edit.ui;bundle-version="[2.10.0,3.0.0)",
- org.eclipse.oomph.setup;bundle-version="[1.18.0,2.0.0)",
+ org.eclipse.oomph.setup;bundle-version="[1.19.0,2.0.0)",
  org.eclipse.oomph.setup.edit;bundle-version="[1.15.0,2.0.0)",
  org.eclipse.oomph.setup.ui;bundle-version="[1.20.0,2.0.0)",
  org.eclipse.equinox.p2.operations;bundle-version="[2.0.0,3.0.0)",
diff --git a/plugins/org.eclipse.oomph.setup.jdt/META-INF/MANIFEST.MF b/plugins/org.eclipse.oomph.setup.jdt/META-INF/MANIFEST.MF
index 9f32f87..8a01c85 100644
--- a/plugins/org.eclipse.oomph.setup.jdt/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.oomph.setup.jdt/META-INF/MANIFEST.MF
@@ -12,7 +12,7 @@
  org.eclipse.oomph.setup.jdt.util;version="1.17.0";x-internal:=true
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.emf.ecore;bundle-version="[2.10.0,3.0.0)";visibility:=reexport,
- org.eclipse.oomph.setup;bundle-version="[1.18.0,2.0.0)";visibility:=reexport,
+ org.eclipse.oomph.setup;bundle-version="[1.19.0,2.0.0)";visibility:=reexport,
  org.eclipse.jdt.launching;bundle-version="[3.6.0,4.0.0)"
 Bundle-ActivationPolicy: lazy
 Automatic-Module-Name: org.eclipse.oomph.setup.jdt
diff --git a/plugins/org.eclipse.oomph.setup/META-INF/MANIFEST.MF b/plugins/org.eclipse.oomph.setup/META-INF/MANIFEST.MF
index 4555486..0f9bb5c 100644
--- a/plugins/org.eclipse.oomph.setup/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.oomph.setup/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-SymbolicName: org.eclipse.oomph.setup;singleton:=true
-Bundle-Version: 1.18.0.qualifier
+Bundle-Version: 1.19.0.qualifier
 Bundle-ClassPath: .
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
@@ -16,10 +16,10 @@
  org.eclipse.emf.ecore;bundle-version="[2.10.0,3.0.0)";visibility:=reexport
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-ActivationPolicy: lazy
-Export-Package: org.eclipse.oomph.internal.setup;version="1.18.0";x-internal:=true,
- org.eclipse.oomph.setup;version="1.18.0";x-internal:=true,
- org.eclipse.oomph.setup.impl;version="1.18.0";x-internal:=true,
- org.eclipse.oomph.setup.log;version="1.18.0";x-internal:=true,
- org.eclipse.oomph.setup.util;version="1.18.0";x-internal:=true
+Export-Package: org.eclipse.oomph.internal.setup;version="1.19.0";x-internal:=true,
+ org.eclipse.oomph.setup;version="1.19.0";x-internal:=true,
+ org.eclipse.oomph.setup.impl;version="1.19.0";x-internal:=true,
+ org.eclipse.oomph.setup.log;version="1.19.0";x-internal:=true,
+ org.eclipse.oomph.setup.util;version="1.19.0";x-internal:=true
 Bundle-Activator: org.eclipse.oomph.internal.setup.SetupPlugin$Implementation
 Automatic-Module-Name: org.eclipse.oomph.setup
diff --git a/plugins/org.eclipse.oomph.setup/pom.xml b/plugins/org.eclipse.oomph.setup/pom.xml
index 6425882..ccfafdd 100644
--- a/plugins/org.eclipse.oomph.setup/pom.xml
+++ b/plugins/org.eclipse.oomph.setup/pom.xml
@@ -20,7 +20,7 @@
   </parent>
   <groupId>org.eclipse.oomph</groupId>
   <artifactId>org.eclipse.oomph.setup</artifactId>
-  <version>1.18.0-SNAPSHOT</version>
+  <version>1.19.0-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 
   <build>
diff --git a/plugins/org.eclipse.oomph.setup/src/org/eclipse/oomph/setup/util/SetupUtil.java b/plugins/org.eclipse.oomph.setup/src/org/eclipse/oomph/setup/util/SetupUtil.java
index da82453..95d2571 100644
--- a/plugins/org.eclipse.oomph.setup/src/org/eclipse/oomph/setup/util/SetupUtil.java
+++ b/plugins/org.eclipse.oomph.setup/src/org/eclipse/oomph/setup/util/SetupUtil.java
@@ -87,6 +87,31 @@
     return result.toString();
   }
 
+  public static String descape(String string)
+  {
+    return new StringExpander()
+    {
+
+      @Override
+      protected String resolve(String key)
+      {
+        return CONTROL_CHARACTER_VALUES.containsKey(key) ? CONTROL_CHARACTER_VALUES.get(key) : key;
+      }
+
+      @Override
+      protected boolean isUnexpanded(String key)
+      {
+        return !CONTROL_CHARACTER_VALUES.containsKey(key);
+      }
+
+      @Override
+      protected String filter(String value, String filterName)
+      {
+        return value;
+      }
+    }.expandString(string);
+  }
+
   public static Set<String> getResolvingTargetDefinitions(SetupTaskContext context)
   {
     @SuppressWarnings("unchecked")