Index: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/Corpus.java
===================================================================
--- tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/Corpus.java	(revision 619)
+++ tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/Corpus.java	(revision 620)
@@ -789,10 +789,10 @@
 
 	/**
 	 * Get the ordered Structural unit properties (by name)
-	 * @return
+	 * @return all the StructuralUnitProperty ordered by name
 	 * @throws CqiClientException
 	 */
-	public Collection<? extends Property> getOrderedStructuralUnitProperties()
+	public Collection<StructuralUnitProperty> getOrderedStructuralUnitProperties()
 			throws CqiClientException {
 		List<StructuralUnitProperty> properties = new ArrayList<StructuralUnitProperty>();
 		for (StructuralUnit su : this.getOrderedStructuralUnits())
Index: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/ReferencePattern.java
===================================================================
--- tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/ReferencePattern.java	(revision 619)
+++ tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/ReferencePattern.java	(revision 620)
@@ -199,4 +199,11 @@
 		}
 		return StringUtils.join(names, "\t"); //$NON-NLS-1$
 	}
+
+	public Corpus getCorpus() {
+		if (properties.size() == 0) {
+			return null;
+		}
+		return properties.get(0).getCorpus();
+	}
 }
Index: tmp/org.txm.core/src/java/org/txm/core/results/TXMResult.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/core/results/TXMResult.java	(revision 619)
+++ tmp/org.txm.core/src/java/org/txm/core/results/TXMResult.java	(revision 620)
@@ -159,9 +159,9 @@
 
 	/**
 	 * Returns all the member fields of the class instance.
-	 * @return
+	 * @return the list of declared fields
 	 */
-	protected List<Field> getAllFields()	{
+	public List<Field> getAllFields()	{
 
 		List<Field> fields = new ArrayList<Field>();
 		Class<?> clazz = this.getClass();
Index: tmp/org.txm.concordance.core/src/org/txm/concordance/core/functions/Concordance.java
===================================================================
--- tmp/org.txm.concordance.core/src/org/txm/concordance/core/functions/Concordance.java	(revision 619)
+++ tmp/org.txm.concordance.core/src/org/txm/concordance/core/functions/Concordance.java	(revision 620)
@@ -304,13 +304,13 @@
 			buf
 			.append("\tKeyword View property: " + this.getKeywordViewProperties() + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
 			buf
-			.append("\right Context View property: " + this.getRightViewProperties() + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+			.append("\tRight Context View property: " + this.getRightViewProperties() + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
 			buf
 			.append("\tLeft Context Sort property: " + this.getLeftAnalysisProperties() + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
 			buf
 			.append("\tKeyword Sort property: " + this.getKeywordAnalysisProperties() + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
 			buf
-			.append("\right Context Sort property: " + this.getRightAnalysisProperties() + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+			.append("\tRight Context Sort property: " + this.getRightAnalysisProperties() + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
 			buf.append("\tReference View Pattern: " + this.getRefViewPattern() + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
 			buf.append("\tReference Sort Pattern: " + this.getRefAnalysePattern() + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
 			return buf.toString();
Index: tmp/org.txm.concordance.rcp/src/org/txm/concordance/rcp/editors/ConcordanceEditor.java
===================================================================
--- tmp/org.txm.concordance.rcp/src/org/txm/concordance/rcp/editors/ConcordanceEditor.java	(revision 619)
+++ tmp/org.txm.concordance.rcp/src/org/txm/concordance/rcp/editors/ConcordanceEditor.java	(revision 620)
@@ -980,7 +980,7 @@
 		propsArea.addValueChangeListener(new Listener() {
 			@Override
 			public void handleEvent(Event event) {
-				concordance.setKeywordViewProperties(propsArea.getProperties());
+				concordance.setKeywordViewProperties(propsArea.getSelectedProperties());
 				refreshViewProperties();
 //				if (!TXMPreferences.getBoolean(RCPPreferences.AUTO_UPDATE_EDITOR, RCPPreferences.PREFERENCES_NODE)) {
 //					try {
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditorPart.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditorPart.java	(revision 619)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditorPart.java	(revision 620)
@@ -160,9 +160,10 @@
 			
 			this.__createPartControl(parent); // essentially for the ChartEditor
 			this._createPartControl(parent); // child editor create its parameters and display widgets
+			//TODO this._lol_createPartControl(parent); // essentially for the LolEditor
+			//TODO this._omgiforgotthisonealso_createPartControl(parent); // essentially for the OMGIForgotThisOneAlsoEditor
 			
 			
-			
 			if (!this.getResultData().isDirty()) {
 				this.topToolBar.setComputingParametersVisible(false);
 			}
@@ -380,10 +381,10 @@
 	}
 
 	/**
-	 * Internal method to mutualize compute editor creation
+	 * Internal method to mutualise compute editor creation
 	 * 
 	 * @param result
-	 * @param update
+	 * @param update force the editor to update its result parameters
 	 * @param editor
 	 * @param chartsComponentsProvider
 	 * @param resetView
@@ -405,10 +406,8 @@
 				try {
 					JobsTimer.start();
 
-
 					currentEditor = editor;
 
-
 					// FIXME: define if we update here the result from the editor fields
 					if (currentEditor != null)	{
 						this.syncExec(new Runnable() {
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/widget/PropertiesSelector.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/widget/PropertiesSelector.java	(revision 619)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/widget/PropertiesSelector.java	(revision 620)
@@ -36,6 +36,7 @@
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
@@ -57,10 +58,10 @@
 	Corpus corpus;
 	
 	/** The properties. */
-	List<P> properties;
+	final List<P> selectedProperties = new ArrayList<P>();
 	
 	/** The availableprops. */
-	List<P> availableprops;
+	final List<P> availableProperties = new ArrayList<P>();
 	
 	/** The maxprops. */
 	int maxprops = -1;
@@ -86,6 +87,7 @@
 	public PropertiesSelector(Composite parent, int style) {
 		super(parent, style);
 
+		this.setLayout(new GridLayout(3, false));
 		// = properties
 		propLabel = new Label(this, SWT.NONE);
 		propLabel.setText(RCPMessages.PropertiesSelector_1);
@@ -136,7 +138,7 @@
 		String previous = propertiesLabel.getText();
 		StringBuffer buffer = new StringBuffer();
 		boolean first = true;
-		for (Property p : properties) {
+		for (Property p : selectedProperties) {
 			if (first) {
 				first = false;
 			} else {
@@ -168,9 +170,9 @@
 	 * Show editor dialog.
 	 */
 	public void showEditorDialog() {
-		if (availableprops == null) return;
-		new ViewPropertySelectionDialog(this.getShell(), availableprops,
-				properties, maxprops).open();
+		if (availableProperties == null) return;
+		new ViewPropertySelectionDialog(this.getShell(), availableProperties,
+				selectedProperties, maxprops).open();
 	}
 
 	/**
@@ -180,33 +182,22 @@
 	 */
 	public void setCorpus(Corpus corpus) {
 		this.corpus = corpus;
-		this.properties = new ArrayList<P>();
 		if (corpus == null)
 			return;
+		
+		availableProperties.clear();
+		selectedProperties.clear();
 		try {
-			availableprops = new ArrayList<P>();
-			availableprops.addAll((Collection<? extends P>) corpus.getOrderedProperties());
+			availableProperties.addAll((Collection<? extends P>) corpus.getOrderedProperties());
 			//availableprops.addAll(corpus.getStructuralUnitProperties());
 			
-			for (int i = 0; i < availableprops.size(); i++) {
+			for (int i = 0; i < availableProperties.size(); i++) {
 				// remove TXM internal properties
-				if (availableprops.get(i).getName().equals("id")) { //$NON-NLS-1$
-					availableprops.remove(i);
+				if (availableProperties.get(i).getName().equals("id")) { //$NON-NLS-1$
+					availableProperties.remove(i);
 					i--;
 				}
 			}
-
-			if (availableprops.size() > 0) {
-				this.properties = new ArrayList<P>();
-				for (int i = 0 ; i < availableprops.size() ; i++) {
-					if (availableprops.get(i).getName().equals("word")) { //$NON-NLS-1$
-						properties.add(availableprops.get(i));
-						availableprops.remove(i);
-						refresh();
-						break;
-					}
-				}
-			}
 		} catch (CqiClientException e) {
 			Log.severe(NLS.bind(RCPMessages.PropertiesSelector_0, e.getMessage()));
 		}
@@ -217,8 +208,8 @@
 	 *
 	 * @return the properties
 	 */
-	public List<P> getProperties() {
-		return this.properties;
+	public List<P> getSelectedProperties() {
+		return this.selectedProperties;
 	}
 	
 	/**
@@ -227,21 +218,38 @@
 	 * @return the Available properties
 	 */
 	public List<P> getAvailableProperties() {
-		return this.availableprops;
+		return this.availableProperties;
 	}
 
 	/**
 	 * Sets the properties.
 	 *
-	 * @param available the available
-	 * @param selected the selected
+	 * @param available the available properties
+	 * @param selected the selected properties
 	 */
 	public void setProperties(List<P> available, List<P> selected) {
 		// System.out.println("initialize prop selector with: "+available+" and "+selected);
-		availableprops = available;
-		this.properties = selected;
+		availableProperties.clear();
+		selectedProperties.clear();
+		availableProperties.addAll(available);
+		this.selectedProperties.addAll(selected);
 		refresh();
 	}
+	
+	/**
+	 * Sets the properties.
+	 *
+	 * @param available the available
+	 * @param selected a selected value
+	 */
+	public void setProperties(List<P> available, P selected) {
+		// System.out.println("initialize prop selector with: "+available+" and "+selected);
+		availableProperties.clear();
+		selectedProperties.clear();
+		if (available != null) availableProperties.addAll(available);
+		if (selected != null) this.selectedProperties.add(selected);
+		refresh();
+	}
 
 	/**
 	 * Sets the text.
@@ -253,6 +261,17 @@
 		propLabel.update();
 	}
 
+	/**
+	 * reset available and selected properties
+	 */
+	public void clearSelected() {
+		availableProperties.addAll(selectedProperties);
+		selectedProperties.clear();
+	}
+	
+	/**
+	 * reset available and selected properties
+	 */
 	public void clear() {
 		setText(""); //$NON-NLS-1$
 		setProperties(new ArrayList<P>(), new ArrayList<P>());
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/cmdparameters/ParametersView.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/cmdparameters/ParametersView.java	(revision 619)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/cmdparameters/ParametersView.java	(revision 620)
@@ -27,29 +27,71 @@
 //
 package org.txm.rcp.views.cmdparameters;
 
+import java.io.File;
+import java.lang.reflect.Array;
+import java.lang.reflect.Field;
+import java.lang.reflect.GenericArrayType;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.FileDialog;
 import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Spinner;
+import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.IPartListener;
 import org.eclipse.ui.IPartService;
+import org.eclipse.ui.IPropertyListener;
 import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.part.EditorPart;
 import org.eclipse.ui.part.ViewPart;
+import org.txm.core.results.Parameter;
 import org.txm.core.results.TXMResult;
+import org.txm.rcp.IImageKeys;
 import org.txm.rcp.editors.TXMEditorPart;
+import org.txm.rcp.swt.widget.PropertiesSelector;
+import org.txm.rcp.swt.widget.QueryWidget;
+import org.txm.rcp.swt.widget.StructuralUnitsGroup;
+import org.txm.searchengine.cqp.ReferencePattern;
+import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
+import org.txm.searchengine.cqp.corpus.Corpus;
+import org.txm.searchengine.cqp.corpus.Property;
+import org.txm.searchengine.cqp.corpus.StructuralUnitProperty;
+import org.txm.searchengine.cqp.corpus.WordProperty;
 //import org.txm.rcp.editors.referencer.ReferencerEditor;
+import org.txm.searchengine.cqp.corpus.query.Query;
 
+import sun.reflect.generics.reflectiveObjects.TypeVariableImpl;
+
 /**
  * Alternative display of the TXMEditor form fields
  * 
  * @author mdecorde.
  */
-public class ParametersView extends ViewPart implements IPartListener {
+public class ParametersView extends ViewPart implements IPartListener, IPropertyListener {
 
-	Browser currentEditorLabel;
-
 	/** The ID. */
 	public static String ID = ParametersView.class.getName(); //$NON-NLS-1$
 
@@ -71,128 +113,525 @@
 	 * Refresh.
 	 */
 	public static void refresh() {
-		
+
 	}
 
-	EditorPart desactivated, activated, broughtToTop, closed, opened;
+	TXMEditorPart<? extends TXMResult> activated;
+	private Composite panel;
+	private ScrolledComposite scrollC;
+	private Button recompute;
 
-	public void updateEditorParameters() {
+	public void updateEditorParameters() throws Exception {
 
 		EditorPart editor = activated;
-		if (editor == null) editor = broughtToTop;
-		if (editor == null) editor = opened;
 
-		if (editor == null) currentEditorLabel.setText("No editor selected.");
+		for (Control c : panel.getChildren()) {
+			c.dispose();
+		}
 
-		if (editor instanceof TXMEditorPart) {
-			TXMEditorPart reditor = (TXMEditorPart)editor;
-			StringBuffer buffer = new StringBuffer();
-			
-			TXMResult result = reditor.getResultData();
-			buffer.append("<h4>"+result.getClass().getSimpleName()+" details</h4>");
-			buffer.append("<p><ul>");
-			buffer.append("<li>Result: <br/>" + result.toString() + "</li>\n");
-			buffer.append("<li>UUID: <br/>" + result.getUUID() + "</li>\n");
-			buffer.append("<li>Simple name: <br/>" + result.getSimpleName() + "</li>\n");
-			buffer.append("<li>Name: <br/>" + result.getName() + "</li>\n");
-			buffer.append("<li>Valid filename: <br/>" + result.getValidFileName() + "</li>\n");
-			buffer.append("<li>Compute details: <br/>" + result.getDetails() + "</li>\n\n");
-			buffer.append("</ul></p>");
+		if (editor == null) {
+			new Label(panel, SWT.NONE).setText("No editor selected.");
+			recompute.setEnabled(false);
+			return;
+		}
 
-			try {
-				// Command preferences
-				buffer.append(result.htmlDumpPreferences());
-				
-				// Object parameters
-				buffer.append(result.htmlDumpParameters());
-				
-				// Object parameters
-				buffer.append(result.htmlDumpLastParameters());
-				
+		if (!(editor instanceof TXMEditorPart)) {
+			new Label(panel, SWT.NONE).setText("Editor is not a TXMPartEditor: " + editor);
+			return;
+		}
+		recompute.setEnabled(true);
+		TXMEditorPart reditor = (TXMEditorPart) editor;
+		final TXMResult result = reditor.getResultData();
+
+		List<Field> allfields = result.getAllFields();
+		List<Field> fields = new ArrayList<Field>();
+		for (Field f : allfields) {
+			Parameter parameter = f.getAnnotation(Parameter.class);
+			if (parameter == null) {
+				continue;
 			}
-			catch (Exception e) {
-				System.out.println("Error: "+e);
-				e.printStackTrace();
+			fields.add(f);
+		}
+
+		Collections.sort(fields, new Comparator<Field>() {
+
+			@Override
+			public int compare(Field o1, Field o2) {
+				Parameter parameter1 = o1.getAnnotation(Parameter.class);
+				Parameter parameter2 = o2.getAnnotation(Parameter.class);
+
+				if (parameter1.type() == parameter2.type()) {
+					return o1.getName().compareTo(o2.getName());
+				} else {
+					return parameter1.type() - parameter2.type();
+				}
 			}
+		});
+
+		for (final Field f : fields) {
+			Parameter parameter = f.getAnnotation(Parameter.class);
+			if (parameter == null) {
+				continue;
+			}
+
+			String name;
+			if (!parameter.key().isEmpty()) {
+				name = parameter.key();
+			} else {
+				name = f.getName();
+			}
+			Class<?> clazz = f.getType();
+			f.setAccessible(true);
+			final Object value = f.get(result);
+
+			new Label(panel, SWT.NONE).setText(name);
+			clazz.equals(Integer.class);
+			Control c = null;
+			if (clazz.equals(Integer.class)) {
+				final Spinner sp = new Spinner(panel, SWT.BORDER);
+				if (value != null) {
+					sp.setSelection((Integer) value);
+				}
+				sp.addSelectionListener(new SelectionListener() {
+
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						try {
+							f.set(result, sp.getSelection());
+							if (activated != null && !activated.getParametersGroupsComposite().isDisposed()) {
+								activated.compute(false);
+							}
+						} catch (Exception e1) {
+							// TODO Auto-generated catch block
+							e1.printStackTrace();
+						}
+					}
+
+					@Override
+					public void widgetDefaultSelected(SelectionEvent e) {
+					}
+				});
+				c = sp;
+			} else if (clazz.equals(String.class)) {
+				final Text t = new Text(panel, SWT.BORDER);
+				if (value != null) {
+					t.setText(value.toString());
+				}
+				t.addKeyListener(new org.eclipse.swt.events.KeyListener() {
+
+					@Override
+					public void keyReleased(org.eclipse.swt.events.KeyEvent e) {
+						try {
+							f.set(result, t.getText());
+							if (activated != null && !activated.getParametersGroupsComposite().isDisposed()) {
+								activated.compute(false);
+							}
+						} catch (Exception e1) {
+							// TODO Auto-generated catch block
+							e1.printStackTrace();
+						}
+					}
+
+					@Override
+					public void keyPressed(org.eclipse.swt.events.KeyEvent e) {
+						// TODO Auto-generated method stub
+
+					}
+				});
+				c = t;
+			} else if (clazz.equals(Float.class)) {
+				final Spinner sp = new Spinner(panel, SWT.BORDER);
+				sp.setSelection((int) ((Float) value * 2));
+				sp.addSelectionListener(new SelectionListener() {
+
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						try {
+							f.set(result, sp.getSelection());
+							if (activated != null && !activated.getParametersGroupsComposite().isDisposed()) {
+								activated.compute(false);
+							}
+						} catch (Exception e1) {
+							e1.printStackTrace();
+						}
+					}
+
+					@Override
+					public void widgetDefaultSelected(SelectionEvent e) {
+					}
+				});
+				c = sp;
+				((Spinner) c).setDigits(2);
+			} else if (clazz.equals(Query.class)) {
+				final QueryWidget qw = new QueryWidget(panel, SWT.NONE);
+				if (value != null) {
+					qw.setText(((Query) value).getQueryString());
+				}
+				qw.addSelectionListener(new SelectionListener() {
+
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						try {
+							f.set(result, qw.getQuery());
+							if (activated != null && !activated.getParametersGroupsComposite().isDisposed()) {
+								activated.compute(false);
+							}
+						} catch (Exception e1) {
+							// TODO Auto-generated catch block
+							e1.printStackTrace();
+						}
+					}
+
+					@Override
+					public void widgetDefaultSelected(SelectionEvent e) {
+					}
+				});
+				qw.addKeyListener(new org.eclipse.swt.events.KeyListener() {
+
+					@Override
+					public void keyReleased(org.eclipse.swt.events.KeyEvent e) {
+						if (e.keyCode != SWT.KEYPAD_CR && e.keyCode != SWT.CR) {
+							return;
+						}
+						try {
+							f.set(result, qw.getQuery());
+							if (activated != null && !activated.getParametersGroupsComposite().isDisposed()) {
+								activated.compute(false);
+							}
+						} catch (Exception e1) {
+							// TODO Auto-generated catch block
+							e1.printStackTrace();
+						}
+					}
+
+					@Override
+					public void keyPressed(org.eclipse.swt.events.KeyEvent e) {
+					}
+				});
+				c = qw;
+			} else if (clazz.equals(File.class)) {
+				final Button b = new Button(panel, SWT.PUSH);
+				if (value != null) {
+					b.setText(value.toString());
+
+				}
+
+				b.addSelectionListener(new SelectionListener() {
+
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						File file = (File) value;
+						if (file.isDirectory()) {
+							DirectoryDialog dialog = new DirectoryDialog(panel.getDisplay().getActiveShell());
+							dialog.setText("Choose directory");
+							dialog.setFilterPath(file.getAbsolutePath());
+							String path = dialog.open();
+							if (path != null) {
+								try {
+									f.set(result, path);
+									b.setText(path);
+									if (activated != null && !activated.getParametersGroupsComposite().isDisposed()) {
+										activated.compute(false);
+									}
+								} catch (IllegalArgumentException e1) {
+									// TODO Auto-generated catch block
+									e1.printStackTrace();
+								} catch (IllegalAccessException e1) {
+									// TODO Auto-generated catch block
+									e1.printStackTrace();
+								}
+							}
+						} else {
+							FileDialog dialog = new FileDialog(panel.getDisplay().getActiveShell());
+							dialog.setText("Choose directory");
+							dialog.setFilterPath(file.getAbsolutePath());
+							String path = dialog.open();
+							if (path != null) {
+								try {
+									f.set(result, path);
+									b.setText(path);
+									if (activated != null && !activated.getParametersGroupsComposite().isDisposed()) {
+										activated.compute(false);
+									}
+								} catch (IllegalArgumentException e1) {
+									// TODO Auto-generated catch block
+									e1.printStackTrace();
+								} catch (IllegalAccessException e1) {
+									// TODO Auto-generated catch block
+									e1.printStackTrace();
+								}
+							}
+						}
+					}
+
+					@Override
+					public void widgetDefaultSelected(SelectionEvent e) {
+					}
+				});
+			} else if (clazz.equals(List.class)) {
+				List list = (List) value;
+				if (list.isEmpty()) {
+					Label l3 = new Label(panel, SWT.NONE);
+					l3.setText("no value");
+					c = l3;
+				} else {
+					Object first = list.get(0);
+					if (first instanceof WordProperty) {
+						c = createWordPropertyField(f, result, list);
+					} else if (first instanceof StructuralUnitProperty) {
+						c = createStructuralUnitPropertyField(f, result, list);
+					}
+				}
+				// } else if (value instanceof StructuralUnit) {
+			} else if (clazz.equals(WordProperty.class)) {
+				ArrayList<WordProperty> selected = new ArrayList<WordProperty>();
+				selected.add((WordProperty) value);
+				c = createWordPropertyField(f, result, selected);
+				// } else if (value instanceof StructuralUnit) {
+				// Label l2 = new Label(panel,
+				// SWT.NONE).setText("="+value.toString());
+			} else if (clazz.equals(StructuralUnitProperty.class)) {
+				ArrayList<StructuralUnitProperty> selected = new ArrayList<StructuralUnitProperty>();
+				selected.add((StructuralUnitProperty) value);
+				c = createWordPropertyField(f, result, selected);
+				// } else if (value instanceof ReferencePattern) {
+				// c = new Label(panel, SWT.NONE).setText("="+value.toString());
+			} else if (clazz.equals(ReferencePattern.class)) {
+				c = createReferencePatternField(f, result, (ReferencePattern)value);
+				// } else if (value instanceof ReferencePattern) {
+				// c = new Label(panel, SWT.NONE).setText("="+value.toString());
+			} else {
+				Label l2 = new Label(panel, SWT.NONE);
+				if (value != null) {
+					TypeVariable<?>[] pp = value.getClass().getTypeParameters();
+					l2.setText("" + value);
+				}
+				c = l2;
+			}
+			// if (c != null)
+			c.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).create());
+		}
+		scrollC.setContent(panel);
+		scrollC.setMinSize(panel.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+		scrollC.setExpandHorizontal(true);
+		scrollC.setExpandVertical(true);
+		scrollC.layout(true);
+	}
+
+	private Control createReferencePatternField(final Field f, final TXMResult result, ReferencePattern value) throws Exception {
+		final List<Property> selected = new ArrayList<Property>();
+		selected.addAll(value.getProperties());
+		Corpus corpus = value.getCorpus();
+		PropertiesSelector<Property> selector = new PropertiesSelector<Property>(panel, SWT.NONE);
+		if (corpus != null) {
+			List<Property> availables = new ArrayList<Property>();
+			availables.addAll(corpus.getOrderedProperties());
+			availables.addAll(corpus.getOrderedStructuralUnitProperties());
+			availables.remove(value);
 			
-			
-			currentEditorLabel.setText(buffer.toString());
-		} else {
-			currentEditorLabel.setText("Editor is not a TXMPartEditor: "+editor);
+			selector.setProperties(availables, selected);
 		}
-		//		StringBuffer buffer = new StringBuffer();
-		//		if (activated != null)
-		//			buffer.append("\neditor activated: "+activated.getTitle());
-		//		if (broughtToTop != null)
-		//			buffer.append("\neditor on top: "+broughtToTop.getTitle());
-		//		if (closed != null)
-		//			buffer.append("\neditor closed: "+closed.getTitle());
-		//		if (desactivated != null)
-		//			buffer.append("\neditor desactivated: "+desactivated.getTitle());
-		//		if (opened != null)
-		//			buffer.append("\neditor opened: "+opened.getTitle());
-		//		if (editor instanceof ConcordanceEditor) {
-		//			currentEditorLabel.setText("Concordances "+editor.getTitle()+":\n\tquery\n\tproperty\n\tsort\n\t...");
-		//		} else if (editor instanceof IndexEditor) {
-		//			currentEditorLabel.setText("Index "+editor.getTitle()+":\n\tquery\n\tproperty\n\tsort\n\t...");
-		//		} else if (editor instanceof CooccurrencesEditor) {
-		//			currentEditorLabel.setText("Cooccurences "+editor.getTitle()+":\n\tquery\n\tproperty\n\tsort\n\t...");
-		////		} else if (editor instanceof CAEditor) {
-		//			currentEditorLabel.setText("CaEditor "+editor.getTitle()+":\n\tquery\n\tproperty\n\tsort\n\t...");
-		//		} else if (editor instanceof ReferencerEditor) {
-		//			currentEditorLabel.setText("References "+editor.getTitle()+":\n\tquery\n\tproperty\n\tsort\n\t...");
-		//		}
+		selector.addSelectionListener(new SelectionListener() {
+
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				if (activated != null && !activated.getParametersGroupsComposite().isDisposed()) {
+					ReferencePattern p = new ReferencePattern(selected);
+					try {
+						f.set(result, p);
+					} catch (IllegalArgumentException e1) {
+						// TODO Auto-generated catch block
+						e1.printStackTrace();
+					} catch (IllegalAccessException e1) {
+						// TODO Auto-generated catch block
+						e1.printStackTrace();
+					}
+					activated.compute(false);
+				}
+			}
+
+			@Override
+			public void widgetDefaultSelected(SelectionEvent e) { }
+		});
+		//		selector.setLayoutData(layoutData);
+		return selector;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+	protected PropertiesSelector<WordProperty> createWordPropertyField(final Field f, final TXMResult result, final List selected) throws CqiClientException {
+
+		Object value = selected.get(0);
+		Corpus corpus = ((WordProperty) value).getCorpus();
+		List<WordProperty> availables = corpus.getOrderedProperties();
+		availables.remove(value);
+		PropertiesSelector<WordProperty> selector = new PropertiesSelector<WordProperty>(panel, SWT.NONE);
+		selector.setProperties(availables, selected);
+		selector.addSelectionListener(new SelectionListener() {
+
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				if (activated != null && !activated.getParametersGroupsComposite().isDisposed()) {
+					try {
+						f.set(result, selected);
+					} catch (Exception e1) {
+						// TODO Auto-generated catch block
+						e1.printStackTrace();
+					}
+					activated.compute(false);
+				}
+			}
+
+			@Override
+			public void widgetDefaultSelected(SelectionEvent e) { }
+		});
+		//		selector.setLayoutData(layoutData);
+		return selector;
+	}
+
+	private PropertiesSelector<StructuralUnitProperty> createStructuralUnitPropertyField(final Field f, final TXMResult result, final List selected) throws CqiClientException {
+		Object value = selected.get(0);
+		Corpus corpus = ((StructuralUnitProperty) value).getCorpus();
+		ArrayList<StructuralUnitProperty> availables = new ArrayList<StructuralUnitProperty>();
+		availables.addAll(corpus.getOrderedStructuralUnitProperties());
+		availables.remove(value);
+		PropertiesSelector<StructuralUnitProperty> selector = new PropertiesSelector<StructuralUnitProperty>(panel, SWT.NONE);
+		selector.setProperties(availables, selected);
+		selector.addSelectionListener(new SelectionListener() {
+
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				if (activated != null && !activated.getParametersGroupsComposite().isDisposed()) {
+					try {
+						f.set(result, selected);
+					} catch (Exception e1) {
+						// TODO Auto-generated catch block
+						e1.printStackTrace();
+					}
+					activated.compute(false);
+				}
+			}
+
+			@Override
+			public void widgetDefaultSelected(SelectionEvent e) { }
+		});
+		return selector;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets
+	 * .Composite)
 	 */
 	@Override
 	public void createPartControl(Composite parent) {
-		System.out.println("createPartControl: "+parent);
-		currentEditorLabel = new Browser(parent, SWT.NONE);
-		updateEditorParameters();
+
+		parent.setLayout(new GridLayout(1, true));
+
+		recompute = new Button(parent, SWT.PUSH);
+		recompute.setImage(IImageKeys.getImage(IImageKeys.START));
+		recompute.addSelectionListener(new SelectionListener() {
+
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				if (activated != null && !activated.getParametersGroupsComposite().isDisposed()) {
+					activated.compute(false);
+				}
+			}
+
+			@Override
+			public void widgetDefaultSelected(SelectionEvent e) { }
+		});
+		recompute.setLayoutData(GridDataFactory.fillDefaults().align(GridData.BEGINNING, GridData.BEGINNING).grab(false, false).create());
+		recompute.setEnabled(false);
+
+		scrollC = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
+		scrollC.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
+
+		panel = new Composite(scrollC, SWT.NONE);
+		panel.setLayout(new GridLayout(2, true));
+
+		try {
+			updateEditorParameters();
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
 	}
 
 	@Override
 	public void partActivated(IWorkbenchPart part) {
-		System.out.println("partActivated: "+part);
-		if (part instanceof EditorPart)
-			activated = (EditorPart)part;
-		updateEditorParameters();
+		if (part == null)
+			return;
+		// System.out.println("partActivated: "+part);
+		if (part instanceof TXMEditorPart)
+			activated = (TXMEditorPart) part;
+		if (activated == null)
+			return;
+		activated.addPropertyListener(this);
+		recompute.setEnabled(true);
+		// activated.addPartPropertyListener(this);
+		try {
+			updateEditorParameters();
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
 	}
 
 	@Override
 	public void partBroughtToTop(IWorkbenchPart part) {
-		System.out.println("partBroughtToTop: "+part);
-		if (part instanceof EditorPart)
-			broughtToTop = (EditorPart)part;
-		//updateLabel();
+		if (part == null)
+			return;
 	}
 
 	@Override
 	public void partClosed(IWorkbenchPart part) {
-		System.out.println("partClosed: "+part);
-		if (part instanceof EditorPart) {
-			closed = (EditorPart)part;
+		if (part == null)
+			return;
+		if (part == activated) {
+			activated = null;
+			try {
+				updateEditorParameters();
+			} catch (Exception e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
 		}
-		updateEditorParameters();
 	}
 
 	@Override
 	public void partDeactivated(IWorkbenchPart part) {
-		System.out.println("partDeactivated: "+part);
-		if (part instanceof EditorPart)
-			desactivated = (EditorPart)part;
-		//updateLabel();
+		if (part == null)
+			return;
+		// System.out.println("partDeactivated: "+part);
+		//		if (part instanceof TXMEditorPart)
+		//			activated = null;
+		//		try {
+		//			updateEditorParameters();
+		//		} catch (Exception e) {
+		//			// TODO Auto-generated catch block
+		//			e.printStackTrace();
+		//		}
 	}
 
 	@Override
+	public void propertyChanged(Object source, int propId) {
+		// System.out.println("Editor property changed: "+propId);
+		if (propId == EditorPart.PROP_DIRTY) {
+			try {
+				updateEditorParameters();
+			} catch (Exception e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		}
+	}
+
+	@Override
 	public void partOpened(IWorkbenchPart part) {
-		System.out.println("partOpened: "+part);
-		if (part instanceof EditorPart)
-			opened = (EditorPart)part;
-		//updateLabel();
+		if (part == null)
+			return;
 	}
 
 	@Override
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/SummaryView.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/SummaryView.java	(revision 619)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/SummaryView.java	(revision 620)
@@ -261,7 +261,7 @@
 		//System.out.println("Set properties "+availables+", "+selectorSelectedProps);
 		this.propsArea.setProperties(availables, selectorSelectedProps);
 		//init default props
-		selectedProps = propsArea.getProperties();
+		selectedProps = propsArea.getSelectedProperties();
 
 		if (tv.getContentProvider() != null)
 			tv.setInput(null);
Index: tmp/org.txm.internalview.rcp/src/org/txm/internal/rcp/editors/InternalViewEditor.java
===================================================================
--- tmp/org.txm.internalview.rcp/src/org/txm/internal/rcp/editors/InternalViewEditor.java	(revision 619)
+++ tmp/org.txm.internalview.rcp/src/org/txm/internal/rcp/editors/InternalViewEditor.java	(revision 620)
@@ -221,7 +221,7 @@
 		propSelector.addSelectionListener(new SelectionListener() {
 			@Override
 			public void widgetSelected(SelectionEvent e) {
-				internalView.setParameters(propSelector.getProperties(), null, null, null);
+				internalView.setParameters(propSelector.getSelectedProperties(), null, null, null);
 				compute(true);
 			}
 
@@ -237,7 +237,7 @@
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				ArrayList<StructuralUnitProperty> supList = new ArrayList<StructuralUnitProperty>();
-				for (Property property : structSelector.getProperties()) if (property instanceof StructuralUnitProperty) supList.add((StructuralUnitProperty) property);
+				for (Property property : structSelector.getSelectedProperties()) if (property instanceof StructuralUnitProperty) supList.add((StructuralUnitProperty) property);
 				internalView.setStructuralUnitProperties(supList);
 				try {
 					lines = internalView.getCurrentPage();
@@ -661,9 +661,9 @@
 	@Override
 	public void updateResultFromEditor() {
 		final StructuralUnit struct = internalView.getAvailableStructs().get(this.structCombo.getSelectionIndex());
-		final  List<Property> properties = propSelector.getProperties();
+		final  List<Property> properties = propSelector.getSelectedProperties();
 		final List<StructuralUnitProperty> supList = new ArrayList<StructuralUnitProperty>();
-		List<StructuralUnitProperty> pList = structSelector.getProperties();
+		List<StructuralUnitProperty> pList = structSelector.getSelectedProperties();
 		for (Property property : pList) if (property instanceof StructuralUnitProperty) supList.add((StructuralUnitProperty) property);
 		
 		Integer currentPage = internalView.getCurrentSegmentNo();
Index: tmp/org.txm.referencer.rcp/src/org/txm/rcp/editors/referencer/ReferencerEditor.java
===================================================================
--- tmp/org.txm.referencer.rcp/src/org/txm/rcp/editors/referencer/ReferencerEditor.java	(revision 619)
+++ tmp/org.txm.referencer.rcp/src/org/txm/rcp/editors/referencer/ReferencerEditor.java	(revision 620)
@@ -270,7 +270,7 @@
 		propsArea.addSelectionListener(new SelectionListener() {
 			@Override
 			public void widgetSelected(SelectionEvent e) {
-				referencer.setProperty(propsArea.getProperties().get(0));
+				referencer.setProperty(propsArea.getSelectedProperties().get(0));
 				compute(true);
 			}
 			
@@ -309,7 +309,7 @@
 		patternArea.addSelectionListener(new SelectionListener() {
 			@Override
 			public void widgetSelected(SelectionEvent e) {
-				referencer.setPattern(patternArea.getProperties());
+				referencer.setPattern(patternArea.getSelectedProperties());
 				compute(true);
 			}
 			
@@ -628,8 +628,8 @@
 	@Override
 	public void updateResultFromEditor() {
 		final Query query = querywidget.getQuery();
-		final List<Property> queryprops = propsArea.getProperties();
-		final List<StructuralUnitProperty> refs = patternArea.getProperties();
+		final List<Property> queryprops = propsArea.getSelectedProperties();
+		final List<StructuralUnitProperty> refs = patternArea.getSelectedProperties();
 		boolean hierarchicSort = TXMPreferences.getBoolean(RCPPreferences.SORTBYFREQ, RCPPreferences.PREFERENCES_NODE);
 		
 		referencer.setParameters(query, queryprops.get(0), refs, hierarchicSort);
Index: tmp/org.txm.index.rcp/src/org/txm/index/rcp/editors/IndexEditor.java
===================================================================
--- tmp/org.txm.index.rcp/src/org/txm/index/rcp/editors/IndexEditor.java	(revision 619)
+++ tmp/org.txm.index.rcp/src/org/txm/index/rcp/editors/IndexEditor.java	(revision 620)
@@ -195,7 +195,7 @@
 		final Integer fMax = Integer.parseInt(fMaxSpinner.getText());
 		final Integer tMax = Integer.parseInt(this.vMaxSpinner.getText());
 		final Integer nLines = Integer.parseInt(this.nLinesPerPageSpinner.getText());
-		final List<Property> properties = propsArea.getProperties();
+		final List<Property> properties = propsArea.getSelectedProperties();
 		
 		index.setNLinesPerPage(nLinesPerPageSpinner.getSelection());
 		index.setVMax(vMaxSpinner.getSelection());
Index: tmp/org.txm.cooccurrence.rcp/src/org/txm/cooccurrence/rcp/editors/CooccurrencesEditor.java
===================================================================
--- tmp/org.txm.cooccurrence.rcp/src/org/txm/cooccurrence/rcp/editors/CooccurrencesEditor.java	(revision 619)
+++ tmp/org.txm.cooccurrence.rcp/src/org/txm/cooccurrence/rcp/editors/CooccurrencesEditor.java	(revision 620)
@@ -599,7 +599,7 @@
 
 		TXMParameters parameters = new TXMParameters();
 		parameters.put(CooccurrencePreferences.QUERY, this.queryWidget.getQueryString());
-		parameters.put(CooccurrencePreferences.PROPERTIES, new ArrayList<Property>(this.propsArea.getProperties()));
+		parameters.put(CooccurrencePreferences.PROPERTIES, new ArrayList<Property>(this.propsArea.getSelectedProperties()));
 		parameters.put(CooccurrencePreferences.STRUCTURE_LIMIT, this.empantPanel.getStruct());
 		parameters.put(CooccurrencePreferences.MAX_LEFT, this.empantPanel.getMaxLeft() + 1);
 		parameters.put(CooccurrencePreferences.MIN_LEFT, this.empantPanel.getMinLeft() + 1);
