diff --git a/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/chain/jdk/TeaJdkLibBuildElementFactory.java b/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/chain/jdk/TeaJdkLibBuildElementFactory.java
index 2b479dc..99deb2a 100644
--- a/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/chain/jdk/TeaJdkLibBuildElementFactory.java
+++ b/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/chain/jdk/TeaJdkLibBuildElementFactory.java
@@ -28,10 +28,10 @@
 	public Collection<TeaBuildElement> createElements(TeaBuildChain chain, IProject prj) {
 		PluginData data = new PluginData(prj);
 		ParameterValue pv = data.getManifestHeader("Build-JdkLib");
-		if(pv != null) {
-			String libName = pv.value;
+		if (pv != null) {
+			String libName = pv.getValue();
 			String path = pv.getStringParameter("path");
-			
+
 			return Collections.singletonList(new TeaJdkLibBuildElement(prj, libName, path));
 		}
 		return null;
diff --git a/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/model/BundleData.java b/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/model/BundleData.java
index d3551b4..e56891b 100644
--- a/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/model/BundleData.java
+++ b/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/model/BundleData.java
@@ -102,7 +102,7 @@
 		if (manifest != null) {
 			ParameterValue symName = manifest.getSymbolicName();
 			if (symName != null) {
-				bundleName = symName.value;
+				bundleName = symName.getValue();
 				if (projectName != null && !bundleName.equals(projectName)) {
 					Activator.log(IStatus.WARNING,
 							"Missmatch of names: projectName=" + projectName + "  bundleName=" + bundleName, null);
diff --git a/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/model/ManifestHolder.java b/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/model/ManifestHolder.java
index 5777018..04c9a3c 100644
--- a/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/model/ManifestHolder.java
+++ b/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/model/ManifestHolder.java
@@ -115,7 +115,7 @@
 		if (pv == null) {
 			return null;
 		}
-		return pv.value;
+		return pv.getValue();
 	}
 
 	private boolean getBoolean(String name) {
@@ -268,7 +268,7 @@
 	 */
 	boolean getNeedUnpack() {
 		ParameterValue value = firstValue("Eclipse-BundleShape");
-		if (value != null && value.value != null && value.value.equals("dir")) {
+		if (value != null && value.getValue() != null && value.getValue().equals("dir")) {
 			return true;
 		}
 
diff --git a/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/model/ParameterValue.java b/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/model/ParameterValue.java
index fd7ed6e..0f8ea8b 100644
--- a/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/model/ParameterValue.java
+++ b/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/model/ParameterValue.java
@@ -37,7 +37,7 @@
 		private static final Param EMPTY = new Param("", "");
 	}
 
-	public String value;
+	private String value;
 	private final Map<String, Param> parameters;
 
 	ParameterValue(String fullString) {
@@ -137,6 +137,14 @@
 		return param.value;
 	}
 
+	public String getValue() {
+		return value;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+
 	public void write(Writer ps) throws IOException {
 		ps.write(value);
 		for (Map.Entry<String, Param> entry : parameters.entrySet()) {
diff --git a/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/model/PluginBuild.java b/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/model/PluginBuild.java
index bdafa39..c798edf 100644
--- a/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/model/PluginBuild.java
+++ b/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/model/PluginBuild.java
@@ -117,17 +117,17 @@
 		mavenDependencies = new TreeSet<>();
 
 		for (ParameterValue pv : data.getDependencies()) {
-			addSourceDependency(ws, pv.value);
+			addSourceDependency(ws, pv.getValue());
 		}
 
 		for (ParameterValue pv : data.getMavenDependencies()) {
-			addMavenDependency(ws, pv.value);
+			addMavenDependency(ws, pv.getValue());
 		}
 
 		// check fragments
 		ParameterValue fragmentHost = data.getFragmentHost();
 		if (fragmentHost != null) {
-			PluginBuild host = addSourceDependency(ws, fragmentHost.value);
+			PluginBuild host = addSourceDependency(ws, fragmentHost.getValue());
 			if (host != null) {
 				host.fragments.add(this);
 			} else {
diff --git a/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/model/PluginData.java b/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/model/PluginData.java
index 61a6f59..615efc9 100644
--- a/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/model/PluginData.java
+++ b/org.eclipse.tea.library.build/src/org/eclipse/tea/library/build/model/PluginData.java
@@ -220,7 +220,7 @@
 
 	public final String getBuddyPolicy() {
 		ParameterValue buddyPolicy = manifest.getBuddyPolicy();
-		return buddyPolicy == null ? null : buddyPolicy.value;
+		return buddyPolicy == null ? null : buddyPolicy.getValue();
 	}
 
 	public final ParameterValue[] getBuddyRegistrations() {
@@ -324,7 +324,7 @@
 		}
 
 		for (ParameterValue val : exports) {
-			if (!val.value.equals(id)) {
+			if (!val.getValue().equals(id)) {
 				continue;
 			}
 
@@ -368,7 +368,7 @@
 	private Map<String, String> getExternalizeClasspath() {
 		Map<String, String> result = new TreeMap<>();
 		for (ParameterValue v : getManifestHeaderList("Externalize-ClassPath")) {
-			String from = v.value;
+			String from = v.getValue();
 			String to = v.getStringParameter("map");
 
 			result.put(from, to);
@@ -384,7 +384,7 @@
 	private Map<String, String> getWamasExternalizeClasspath() {
 		Map<String, String> result = new TreeMap<>();
 		for (ParameterValue v : getManifestHeaderList("WAMAS-Externalize-ClassPath")) {
-			String from = v.value;
+			String from = v.getValue();
 			String to = v.getStringParameter("map");
 
 			result.put(from, to);
@@ -397,7 +397,7 @@
 		if (pv == null) {
 			return null;
 		}
-		return pv.value;
+		return pv.getValue();
 	}
 
 	/**
@@ -454,7 +454,7 @@
 		ParameterValue[] nc = temp.getNativeCode();
 		if (prefix != null && nc.length > 0) {
 			for (int i = 0; i < nc.length; ++i) {
-				nc[i].value = prefix + nc[i].value;
+				nc[i].setValue(prefix + nc[i].getValue());
 			}
 		}
 
