Index: tmp/org.txm.utils/src/org/txm/utils/BiHashMap.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/BiHashMap.java	(revision 1267)
+++ tmp/org.txm.utils/src/org/txm/utils/BiHashMap.java	(revision 1268)
@@ -1,5 +1,7 @@
 package org.txm.utils;
 
+import java.util.HashMap;
+import java.util.Properties;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -12,11 +14,23 @@
  * @param <ValueType>
  */
 public class BiHashMap<KeyType, ValueType>{
+	
     private ConcurrentHashMap<KeyType, ValueType> keyToValueMap = new ConcurrentHashMap<KeyType, ValueType>();
     private ConcurrentHashMap<ValueType, KeyType> valueToKeyMap = new ConcurrentHashMap<ValueType, KeyType>();
 
+    public BiHashMap() {
+   
+    }
+    
+    public BiHashMap(Properties props) {
+    	  for (Object k : props.keySet()) {
+    		  put((KeyType)k, (ValueType)props.get(k));
+    	  }
+    }
+    
     synchronized public void put(KeyType key, ValueType value){
         keyToValueMap.put(key, value);
+        //FIXME clash because values are not unique
         valueToKeyMap.put(value, key);
     }
 
Index: tmp/org.txm.utils/src/org/txm/utils/io/IOUtils.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/io/IOUtils.java	(revision 1267)
+++ tmp/org.txm.utils/src/org/txm/utils/io/IOUtils.java	(revision 1268)
@@ -54,6 +54,37 @@
 		return matches;
 	}
 	
+	public static ArrayList<String> find(File file, String pattern) throws IOException {
+		return find(file, UTF8, pattern, false);
+	}
+	
+	public static ArrayList<String> find(File file, String pattern, boolean normalizeSeparators) throws IOException {
+		return findWithGroup(file, UTF8, pattern, normalizeSeparators);
+	}
+	
+	public static ArrayList<String> find(File file, String encoding, String pattern) throws IOException {
+		return find(file, encoding, pattern, false);
+	}
+	
+	public static ArrayList<String> find(File file, String encoding, String pattern, boolean normalizeSeparators) throws IOException {
+		ArrayList<String> matches = new ArrayList<String>();
+		String text = IOUtils.getText(file, encoding);
+		//System.out.println(text);
+		if (normalizeSeparators) {
+			text = text.replaceAll("\\s", " ");
+			text = text.replaceAll("\\t", " ");
+			text = text.replaceAll("\\n", " ");
+			text = text.replaceAll("[ ]+", " ");
+		}
+		
+		Pattern test = Pattern.compile(pattern);
+		Matcher m = test.matcher(text);
+		while (m.find()) {
+			matches.add(m.group());
+		}
+		return matches;
+	}
+	
 	public static BufferedReader getReader(File file) throws UnsupportedEncodingException, FileNotFoundException {
 		return getReader(file, UTF8);
 	}
Index: tmp/org.txm.translate.rcp/src/org/txm/rcp/translate/devtools/ImportFromOneFile.java
===================================================================
--- tmp/org.txm.translate.rcp/src/org/txm/rcp/translate/devtools/ImportFromOneFile.java	(revision 1267)
+++ tmp/org.txm.translate.rcp/src/org/txm/rcp/translate/devtools/ImportFromOneFile.java	(revision 1268)
@@ -69,8 +69,8 @@
 			total_update += update;
 		}
 		
-		for (File project : h.keySet()) {
-			//h.get(project).saveChanges();
+		for (PluginMessages messages : h.values()) {
+			//messages.saveChanges();
 		}
 		
 		if (total_update == 0) {
Index: tmp/org.txm.translate.rcp/src/org/txm/rcp/translate/i18n/PluginMessages.java
===================================================================
--- tmp/org.txm.translate.rcp/src/org/txm/rcp/translate/i18n/PluginMessages.java	(revision 1267)
+++ tmp/org.txm.translate.rcp/src/org/txm/rcp/translate/i18n/PluginMessages.java	(revision 1268)
@@ -89,7 +89,7 @@
 	 * plugin.xml file -> contains eventually keys
 	 */
 	protected File pluginXMLFile;
-	
+
 	public File getPluginXMLFile() {
 		return pluginXMLFile;
 	}
@@ -106,12 +106,12 @@
 	 * the OSGI-INF/l10n/bundle[_lang].properties OSGI message keys
 	 */
 	TreeSet<String> osgiKeys = new TreeSet<String>();
-	
+
 	/**
 	 * The OSGI messages stored by properties file
 	 */
 	TreeMap<File, BiHashMap<String, String>> osgiLangs = new TreeMap<File, BiHashMap<String, String>>();
-	
+
 	/**
 	 * Stores the key modifications for further saves in the source files
 	 */
@@ -145,7 +145,7 @@
 		if (!messagesPackageDir.exists()) {
 			messagesPackageDir = new File(projectDirectory2, "src/java/"+projectDirectory2.getName().replaceAll("\\.", "/")+"/messages");
 		}
-		
+
 		if (!messagesPackageDir.exists()) {
 			messagesPackageDir = new File(projectDirectory2, "src/main/java/"+projectDirectory2.getName().replaceAll("\\.", "/")+"/messages");
 		}
@@ -233,12 +233,12 @@
 
 		//this.createKeysGlobalREGEX();
 		this.createUsedKeysFilesIndex();
-		
+
 		// try loading OSGI messages 
 		if (pluginXMLFile.exists()) {
 			ArrayList<String> result = IOUtils.findWithGroup(pluginXMLFile, "\"%([^\"]+)\"");
 			osgiKeys.addAll(result);
-			
+
 			File osgiInf = new File(projectDirectory, "OSGI-INF/l10n");
 			if (osgiInf.exists()) {
 				for (File propFile : osgiInf.listFiles()) {
