Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/cmdparameters/TXMResultParametersView.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/cmdparameters/TXMResultParametersView.java	(revision 3025)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/cmdparameters/TXMResultParametersView.java	(revision 3026)
@@ -57,6 +57,7 @@
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.part.EditorPart;
 import org.eclipse.ui.part.ViewPart;
+import org.txm.core.results.BeanParameters;
 import org.txm.core.results.Parameter;
 import org.txm.core.results.TXMResult;
 import org.txm.rcp.IImageKeys;
@@ -135,15 +136,7 @@
 		TXMEditor reditor = (TXMEditor) editor;
 		final TXMResult result = reditor.getResult();
 		
-		List<Field> allfields = result.getAllFields();
-		List<Field> fields = new ArrayList<>();
-		for (Field f : allfields) {
-			Parameter parameter = f.getAnnotation(Parameter.class);
-			if (parameter == null) {
-				continue;
-			}
-			fields.add(f);
-		}
+		List<Field> fields = BeanParameters.getAllFields(result);
 		
 		Collections.sort(fields, new Comparator<Field>() {
 			
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/UISection.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/UISection.java	(revision 3025)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/UISection.java	(revision 3026)
@@ -23,7 +23,7 @@
 	private Text referencePatternText;
 	
 	public UISection(FormToolkit toolkit2, ScrolledForm form2, Composite parent, int style) {
-		super(toolkit2, form2, parent, style);
+		super(toolkit2, form2, parent, style, "commands");
 		
 		this.section.setText(TXMUIMessages.commands);
 		TableWrapLayout layout = new TableWrapLayout();
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/InfosSection.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/InfosSection.java	(revision 3025)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/InfosSection.java	(revision 3026)
@@ -23,13 +23,14 @@
 public class InfosSection extends ImportEditorSection {
 	
 	private static final int SECTION_SIZE = 2;
-//	Label corpusNameLabel; // color change if the corpus name is malformed
+	
+	// Label corpusNameLabel; // color change if the corpus name is malformed
 	private Text descText;
 	
 	public InfosSection(FormToolkit toolkit2, ScrolledForm form2, Composite parent, int style) {
-		super(toolkit2, form2, parent, style);
+		super(toolkit2, form2, parent, style, "infos");
 		
-		//this = toolkit.createSection(form.getBody(), ExpandableComposite.TITLE_BAR|ExpandableComposite.TWISTIE);
+		// this = toolkit.createSection(form.getBody(), ExpandableComposite.TITLE_BAR|ExpandableComposite.TWISTIE);
 		this.section.setText(TXMUIMessages.description);
 		section.setExpanded(true);
 		
@@ -37,12 +38,15 @@
 		this.section.setLayout(layout);
 		this.section.setLayoutData(getSectionGridData(SECTION_SIZE));
 		this.section.setEnabled(false);
-
+		
 		this.section.addExpansionListener(new ExpansionAdapter() {
+			
 			@Override
-			public void expansionStateChanged(ExpansionEvent e) {form.layout(true);}
+			public void expansionStateChanged(ExpansionEvent e) {
+				form.layout(true);
+			}
 		});
-
+		
 		Composite sectionClient = toolkit.createComposite(this.section);
 		TableWrapData gdatac = new TableWrapData();
 		gdatac.colspan = 2;
@@ -52,50 +56,50 @@
 		slayout.numColumns = 1;
 		sectionClient.setLayout(slayout);
 		this.section.setClient(sectionClient);
-
-//		corpusNameLabel = toolkit.createLabel(sectionClient, TXMUIMessages.corpusNameOnlyCapsAndNoDigitAtBeginning, SWT.WRAP);
-//		TableWrapData gdata = new TableWrapData();
-//		corpusNameLabel.setLayoutData(gdata);
-//
+		
+		// corpusNameLabel = toolkit.createLabel(sectionClient, TXMUIMessages.corpusNameOnlyCapsAndNoDigitAtBeginning, SWT.WRAP);
+		// TableWrapData gdata = new TableWrapData();
+		// corpusNameLabel.setLayoutData(gdata);
+		//
 		Label label = toolkit.createLabel(sectionClient, TXMUIMessages.completeNameAuthorDateLicenseComment, SWT.WRAP);
 		TableWrapData gdata = new TableWrapData();
 		label.setLayoutData(gdata);
-
+		
 		descText = toolkit.createText(sectionClient, "", SWT.BORDER | SWT.MULTI | SWT.V_SCROLL); //$NON-NLS-1$
 		gdata = new TableWrapData(TableWrapData.FILL, TableWrapData.FILL);
 		gdata.heightHint = 50;
-
+		
 		descText.setLayoutData(gdata);
 	}
-
+	
 	@Override
 	public void update(Project project) {
-		section.setText(NLS.bind(TXMUIMessages.descriptionOfTheP0CorpusP1, project.getName(), project.getSrcdir())); //$NON-NLS-1$
+		section.setText(NLS.bind(TXMUIMessages.descriptionOfTheP0CorpusP1, project.getName(), project.getSrcdir()));
 		
-		String descContent = project.getDescription(); //$NON-NLS-1$
+		String descContent = project.getDescription();
 		descContent = descContent.replace("<pre><br/>", ""); //$NON-NLS-1$ //$NON-NLS-2$
 		descContent = descContent.replace("</pre>", ""); //$NON-NLS-1$ //$NON-NLS-2$
 		descContent = descContent.replace("<br/>", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
 		
-		//System.out.println("LOAD DESC WITH: '"+descContent+"'");
-		descText.setText(descContent); //$NON-NLS-1$
+		// System.out.println("LOAD DESC WITH: '"+descContent+"'");
+		descText.setText(descContent);
 	}
-
+	
 	@Override
 	public boolean save(Project project) {
-		project.setDescription("<pre><br/>"+descText.getText().replace("\n", "<br/>")+"</pre>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+		project.setDescription("<pre><br/>" + descText.getText().replace("\n", "<br/>") + "</pre>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 		
 		return true;
 	}
-
+	
 	@Override
 	public boolean checkFields() {
-//		corpusNameLabel.setBackground(corpusNameLabel.getParent().getBackground());
+		// corpusNameLabel.setBackground(corpusNameLabel.getParent().getBackground());
 		return true;
 	}
-
+	
 	@Override
 	public int getSectionSize() {
 		return SECTION_SIZE;
 	}
-}
\ No newline at end of file
+}
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/FrontXSLSection.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/FrontXSLSection.java	(revision 3025)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/FrontXSLSection.java	(revision 3026)
@@ -39,56 +39,63 @@
 	private static final String ID = "org.txm.rcp.editors.imports.CorpusPage.xslt"; //$NON-NLS-1$
 	
 	private static final int SECTION_SIZE = 2;
+	
 	File xsltfile;
+	
 	Text xsltfileValue;
-
-	String[] xsltparams;//{"val1",1,"val2",2}
+	
+	String[] xsltparams;// {"val1",1,"val2",2}
+	
 	TableViewer xsltParamsViewer;
 	
 	public FrontXSLSection(FormToolkit toolkit2, ScrolledForm form2, Composite parent, int style) {
-		super(toolkit2, form2, parent, style);
-
+		super(toolkit2, form2, parent, style, "xslt");
+		
 		this.section.setText(TXMUIMessages.frontXSL);
 		TableWrapLayout layout = new TableWrapLayout();
 		layout.makeColumnsEqualWidth = true;
 		this.section.setLayout(layout);
 		this.section.setLayoutData(getSectionGridData(SECTION_SIZE));
 		this.section.setEnabled(false);
-
+		
 		this.section.addExpansionListener(new ExpansionAdapter() {
+			
 			@Override
-			public void expansionStateChanged(ExpansionEvent e) {form.layout(true);}
+			public void expansionStateChanged(ExpansionEvent e) {
+				form.layout(true);
+			}
 		});
-
-		//filesection.setDescription("Select how to find source files");
+		
+		// filesection.setDescription("Select how to find source files");
 		Composite sectionClient = toolkit.createComposite(this.section);
 		TableWrapLayout slayout = new TableWrapLayout();
 		slayout.makeColumnsEqualWidth = false;
 		slayout.numColumns = 4;
 		sectionClient.setLayout(slayout);
 		this.section.setClient(sectionClient);
-
-
+		
+		
 		xsltfileValue = toolkit.createText(sectionClient, "", SWT.BORDER); //$NON-NLS-1$
 		TableWrapData gdata = getTextGridData();
 		xsltfileValue.setLayoutData(gdata);
-
+		
 		Button browseXSLTButton = toolkit.createButton(sectionClient, "...", SWT.PUSH); //$NON-NLS-1$
 		browseXSLTButton.setLayoutData(getButtonLayoutData());
 		browseXSLTButton.addSelectionListener(new SelectionListener() {
+			
 			@Override
-			public void widgetDefaultSelected(SelectionEvent e) {
-			}
-
+			public void widgetDefaultSelected(SelectionEvent e) {}
+			
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				FileDialog dialog = new FileDialog(form.getShell(), SWT.OPEN);
-				String[] extensions = {"*.xsl"}; //$NON-NLS-1$
+				String[] extensions = { "*.xsl" }; //$NON-NLS-1$
 				dialog.setFilterExtensions(extensions);
 				if (LastOpened.getFile(ID) != null) {
 					dialog.setFilterPath(LastOpened.getFolder(ID));
 					dialog.setFileName(LastOpened.getFile(ID));
-				} else {
+				}
+				else {
 					dialog.setFilterPath(Toolbox.getTxmHomePath());
 				}
 				if (dialog.open() != null) {
@@ -98,37 +105,37 @@
 				}
 			}
 		});
-
+		
 		Button editXSLTButton = toolkit.createButton(sectionClient, TXMUIMessages.editXSLStylesheet, SWT.PUSH);
 		editXSLTButton.setLayoutData(getButtonLayoutData());
 		editXSLTButton.addSelectionListener(new SelectionListener() {
+			
 			@Override
-			public void widgetDefaultSelected(SelectionEvent e) {
-			}
-
+			public void widgetDefaultSelected(SelectionEvent e) {}
+			
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				if (xsltfile != null && xsltfile.exists() && xsltfile.isFile()) {
 					EditFile.openfile(xsltfile.getAbsolutePath());
 				}
 			}
-		});	
-
+		});
+		
 		Label l = toolkit.createLabel(sectionClient, ""); // empty cell //$NON-NLS-1$
 		l.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.MIDDLE));
-
+		
 		Button addButton = toolkit.createButton(sectionClient, TXMUIMessages.addAXsltParameter, SWT.PUSH);
 		addButton.setLayoutData(getButtonLayoutData());
 		addButton.addSelectionListener(new SelectionListener() {
+			
 			@Override
-			public void widgetDefaultSelected(SelectionEvent e) {
-			}
-
+			public void widgetDefaultSelected(SelectionEvent e) {}
+			
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				if (project == null) return;
 				
-				LinkedHashMap<String, String> values = new LinkedHashMap<String, String>();
+				LinkedHashMap<String, String> values = new LinkedHashMap<>();
 				values.put("name", ""); //$NON-NLS-1$ //$NON-NLS-2$
 				values.put("value", "");			 //$NON-NLS-1$ //$NON-NLS-2$
 				MultipleValueDialog dlg = new MultipleValueDialog(form.getShell(), TXMUIMessages.addAXsltParameter, values);
@@ -137,16 +144,16 @@
 				}
 			}
 		});
-
+		
 		Button removeButton = toolkit.createButton(sectionClient, TXMUIMessages.deleteParameter, SWT.PUSH);
 		TableWrapData td = getButtonLayoutData();
 		td.colspan = 3;
 		removeButton.setLayoutData(td);
 		removeButton.addSelectionListener(new SelectionListener() {
+			
 			@Override
-			public void widgetDefaultSelected(SelectionEvent e) {
-			}
-
+			public void widgetDefaultSelected(SelectionEvent e) {}
+			
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				if (project == null) return;
@@ -159,12 +166,12 @@
 				}
 			}
 		});
-
-		//		l = toolkit.createLabel(sectionClient, ""); // empty cell
-		//		l.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.MIDDLE));
-		//		l = toolkit.createLabel(sectionClient, ""); // empty cell
-		//		l.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.MIDDLE));
-
+		
+		// l = toolkit.createLabel(sectionClient, ""); // empty cell
+		// l.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.MIDDLE));
+		// l = toolkit.createLabel(sectionClient, ""); // empty cell
+		// l.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.MIDDLE));
+		
 		Table table = toolkit.createTable(sectionClient, SWT.FULL_SELECTION | SWT.MULTI | SWT.V_SCROLL | SWT.VIRTUAL);
 		xsltParamsViewer = new TableViewer(table);
 		xsltParamsViewer.getTable().addKeyListener(new TableKeyListener(xsltParamsViewer));
@@ -175,8 +182,8 @@
 		xsltParamsViewer.setContentProvider(new HashMapContentProvider());
 		xsltParamsViewer.getTable().setHeaderVisible(true);
 		xsltParamsViewer.getTable().setLinesVisible(true);
-
-		String[] cols = {"name", "value"}; //$NON-NLS-1$ //$NON-NLS-2$
+		
+		String[] cols = { "name", "value" }; //$NON-NLS-1$ //$NON-NLS-2$
 		for (String col : cols) {
 			TableViewerColumn columnViewer = new TableViewerColumn(xsltParamsViewer, SWT.NONE);
 			TableColumn column = columnViewer.getColumn();
@@ -185,7 +192,7 @@
 			columnViewer.setLabelProvider(new HashMapLabelProvider(col));
 		}
 	}
-
+	
 	@Override
 	public void update(Project project) {
 		if (this.section.isDisposed()) return;
@@ -197,26 +204,26 @@
 			xsltfileValue.setText(filepath);
 			xsltfile = new File(filepath);
 		}
-
+		
 		xsltParamsViewer.getTable().getParent().layout();
-		xsltParamsViewer.setInput(project.getXsltParameters()); //$NON-NLS-1$
+		xsltParamsViewer.setInput(project.getXsltParameters());
 	}
-
+	
 	@Override
 	public boolean save(Project project) {
 		if (xsltfileValue != null && !xsltfileValue.isDisposed())
-			project.setXslt(xsltfileValue.getText()); //$NON-NLS-1$
-
+			project.setXslt(xsltfileValue.getText());
+		
 		return true;
 	}
-
+	
 	@Override
 	public boolean checkFields() {
 		return true;
 	}
-
+	
 	@Override
 	public int getSectionSize() {
 		return SECTION_SIZE;
 	}
-}
\ No newline at end of file
+}
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/ImportEditorSection.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/ImportEditorSection.java	(revision 3025)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/ImportEditorSection.java	(revision 3026)
@@ -1,81 +1,139 @@
 package org.txm.rcp.editors.imports.sections;
 
+import java.lang.reflect.Field;
+
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.forms.widgets.ScrolledForm;
 import org.eclipse.ui.forms.widgets.Section;
 import org.eclipse.ui.forms.widgets.TableWrapData;
+import org.txm.core.results.BeanParameters;
+import org.txm.core.results.Parameter;
 import org.txm.objects.Project;
+import org.txm.rcp.editors.TXMEditor;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
 
 public abstract class ImportEditorSection {
 	
-	protected Section section;
-	protected FormToolkit toolkit;
-	protected ScrolledForm form;
+	public static TableWrapData getButtonLayoutData() {
+		TableWrapData td = new TableWrapData(TableWrapData.LEFT, TableWrapData.MIDDLE);
+		return td;
+	}
 	
-	protected Project project;
-	
-	public ImportEditorSection(FormToolkit toolkit, ScrolledForm form, Composite parent, int style) {
-		section = toolkit.createSection(parent, style);
-		this.toolkit = toolkit;
-		this.form = form;
+	public static TableWrapData getLabelGridData() {
+		TableWrapData gdata = new TableWrapData(TableWrapData.FILL, TableWrapData.MIDDLE);
+		return gdata;
 	}
 	
-	/**
-	 * Update the section widgets with the Project import parameters
-	 * @param project
-	 */
-	public abstract void update(Project project);
-	
-	/**
-	 * Check if all necessary parameters are set
-	 * @param project
-	 */
-	public abstract boolean checkFields();
-	
-	/**
-	 * Update the Project import parameters using the section widgets values
-	 * @param project
-	 */
-	public abstract boolean save(Project params);
-	
-	public abstract int getSectionSize(); // 1 2 3, it depends the number of element inserted in the form
-	
 	public static TableWrapData getLongTextGridData() {
 		TableWrapData gdata = new TableWrapData(TableWrapData.FILL, TableWrapData.MIDDLE);
 		gdata.maxWidth = 200;
 		return gdata;
 	}
-
+	
 	public static TableWrapData getSectionGridData(int size) {
 		TableWrapData td = new TableWrapData(TableWrapData.FILL);
 		td.colspan = size;
 		return td;
 	}
-
+	
 	public static TableWrapData getTextGridData() {
 		TableWrapData gdata = new TableWrapData(TableWrapData.FILL, TableWrapData.MIDDLE);
 		gdata.maxWidth = 150;
 		return gdata;
 	}
 	
-	public static TableWrapData getButtonLayoutData() {
-		TableWrapData td = new TableWrapData(TableWrapData.LEFT, TableWrapData.MIDDLE);
-		return td;
-	}
+	protected ScrolledForm form;
 	
-	public static TableWrapData getLabelGridData() {
-		TableWrapData gdata = new TableWrapData(TableWrapData.FILL, TableWrapData.MIDDLE);
-		return gdata;
+	protected Project project;
+	
+	protected Section section;
+	
+	protected FormToolkit toolkit;
+	
+	private String name;
+	
+	/**
+	 * @param toolkit
+	 * @param form
+	 * @param parent
+	 * @param style
+	 * @param name the section name must not be nulled and will be used to read the import.xml file
+	 */
+	public ImportEditorSection(FormToolkit toolkit, ScrolledForm form, Composite parent, int style, String name) {
+		
+		if (name == null) throw new IllegalArgumentException("Section name must not be null or empty.");
+		
+		section = toolkit.createSection(parent, style);
+		this.toolkit = toolkit;
+		this.form = form;
+		this.name = name;
 	}
 	
+	/**
+	 * Check if all necessary parameters are set
+	 * 
+	 * @param project
+	 * @return true if all necessary parameters are set
+	 */
+	public abstract boolean checkFields();
+	
+	public abstract int getSectionSize(); // 1 2 3, it depends the number of element inserted in the form
+	
 	public boolean isDisposed() {
 		if (section != null) return section.isDisposed();
 		return true;
 	}
 	
+	/**
+	 * Update the Project import parameters using the section widgets values
+	 * 
+	 * @param project
+	 * @deprecated interface write parameters in a import.xml
+	 */
+	@Deprecated
+	public abstract boolean save(Project params);
+	
+	/**
+	 * write interface parameters to a XML DOM
+	 * 
+	 * @param xmlFile
+	 */
+	public boolean save(Document document) {
+		NodeList sectionList = document.getElementsByTagName("section");
+		Element sectionElement = null;
+		for (int i = 0; i < sectionList.getLength(); i++) {
+			if (name.equals(sectionList.item(i).getAttributes().getNamedItem("name").getNodeValue())) {
+				sectionElement = (Element) sectionList.item(i);
+			}
+		}
+		if (sectionElement == null) {
+			sectionElement = document.createElement("section");
+			sectionElement.setAttribute("name", name);
+		}
+		
+		for (Field f : BeanParameters.getAllFields(this)) {
+			Parameter p = f.getAnnotation(Parameter.class);
+			// TXMEditor.getValueForWidget(f);
+		}
+		
+		return false;
+		
+	}
+	
 	public void setEnabled(boolean b) {
 		if (section != null) section.setEnabled(b);
 	}
+	
+	/**
+	 * Update the section widgets with the Project import parameters
+	 * 
+	 * @param project
+	 * @deprecated interface is now loaded from a import.xml file
+	 */
+	@Deprecated
+	public abstract void update(Project project);
 }
 
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/LangSection.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/LangSection.java	(revision 3025)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/LangSection.java	(revision 3026)
@@ -37,7 +37,7 @@
 	Combo langcombo;
 	
 	public LangSection(FormToolkit toolkit2, ScrolledForm form2, Composite parent, int style) {
-		super(toolkit2, form2, parent, style);
+		super(toolkit2, form2, parent, style, "lang");
 		
 		this.section.setText(TXMUIMessages.mainLanguage);
 		TableWrapLayout layout = new TableWrapLayout();
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/TextualPlansSection.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/TextualPlansSection.java	(revision 3025)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/TextualPlansSection.java	(revision 3026)
@@ -15,16 +15,20 @@
 import org.w3c.dom.Element;
 
 public class TextualPlansSection extends ImportEditorSection {
-
+	
 	private static final int SECTION_SIZE = 1;
+	
 	private Text outsideTextElementsText;
+	
 	private Text outsideTextElementsToEditText;
+	
 	private Text noteElementsText;
+	
 	private Text milestoneElementsText;
-
+	
 	public TextualPlansSection(FormToolkit toolkit2, ScrolledForm form2, Composite parent, int style) {
-		super(toolkit2, form2, parent, style);
-
+		super(toolkit2, form2, parent, style, "textualplans");
+		
 		this.section.setText(TXMUIMessages.textualPlanes);
 		TableWrapLayout layout = new TableWrapLayout();
 		layout.makeColumnsEqualWidth = true;
@@ -32,50 +36,53 @@
 		this.section.setLayoutData(getSectionGridData(SECTION_SIZE));
 		this.section.setEnabled(false);
 		this.section.addExpansionListener(new ExpansionAdapter() {
+			
 			@Override
-			public void expansionStateChanged(ExpansionEvent e) {form.layout(true);}
+			public void expansionStateChanged(ExpansionEvent e) {
+				form.layout(true);
+			}
 		});
-
+		
 		Composite sectionClient = toolkit.createComposite(this.section);
 		TableWrapLayout slayout = new TableWrapLayout();
 		slayout.makeColumnsEqualWidth = false;
 		slayout.numColumns = 2;
 		sectionClient.setLayout(slayout);
 		this.section.setClient(sectionClient);
-
+		
 		Label tmpLabel = toolkit.createLabel(sectionClient, TXMUIMessages.outsidetext);
 		tmpLabel.setToolTipText(TXMUIMessages.listOfTagsEncodingTheOutsidetextNoStructureOrWordContentIndexedNoStructureOrWordContentEditedInTXM);
 		tmpLabel.setLayoutData(getLabelGridData());
-
+		
 		outsideTextElementsText = toolkit.createText(sectionClient, "teiHeader", SWT.BORDER); //$NON-NLS-1$
 		TableWrapData gdata = getTextGridData();
 		outsideTextElementsText.setLayoutData(gdata);
-
+		
 		Label tmpLabel2 = toolkit.createLabel(sectionClient, TXMUIMessages.outsidetextToedit);
 		tmpLabel2.setToolTipText(TXMUIMessages.listOfTagsEncodingTheOutsidetextToEditNoStructureOrWordContentIndexedStructureAndWordContentEditedInTXM);
 		tmpLabel2.setLayoutData(getLabelGridData());
-
+		
 		outsideTextElementsToEditText = toolkit.createText(sectionClient, "", SWT.BORDER); //$NON-NLS-1$
 		gdata = getTextGridData();
 		outsideTextElementsToEditText.setLayoutData(gdata);
-
+		
 		Label tmpLabel3 = toolkit.createLabel(sectionClient, "Note elements");
 		tmpLabel3.setToolTipText("Note elements that encodes ponctual notes");
 		tmpLabel3.setLayoutData(getLabelGridData());
-
+		
 		noteElementsText = toolkit.createText(sectionClient, "note", SWT.BORDER); //$NON-NLS-1$
 		gdata = getTextGridData();
 		noteElementsText.setLayoutData(gdata);
-
+		
 		Label tmpLabel4 = toolkit.createLabel(sectionClient, TXMUIMessages.milestoneElements);
 		tmpLabel4.setToolTipText(TXMUIMessages.listOfMilestoneElementsSeparatedByComma);
 		tmpLabel4.setLayoutData(getLabelGridData());
-
+		
 		milestoneElementsText = toolkit.createText(sectionClient, "", SWT.BORDER); //$NON-NLS-1$
 		gdata = getTextGridData();
 		milestoneElementsText.setLayoutData(gdata);
 	}
-
+	
 	@Override
 	public void update(Project project) {
 		if (this.section != null && !section.isDisposed()) {
@@ -85,32 +92,32 @@
 			milestoneElementsText.setText(project.getTextualPlan("MileStones"));
 		}
 	}
-
+	
 	@Override
 	public boolean save(Project project) {
 		if (this.section != null && !section.isDisposed()) {
-
+			
 			project.setTextualPlan("OutSideTextTags", outsideTextElementsText.getText().trim());
-
+			
 			project.setTextualPlan("OutSideTextTagsAndKeepContent", outsideTextElementsToEditText.getText().trim());
-
+			
 			project.setTextualPlan("Note", noteElementsText.getText());
-
+			
 			project.setTextualPlan("MileStones", milestoneElementsText.getText().trim());
-
+			
 			return true;
 		}
-
+		
 		return true;
 	}
-
+	
 	@Override
 	public boolean checkFields() {
 		return true;
 	}
-
+	
 	@Override
 	public int getSectionSize() {
 		return SECTION_SIZE;
 	}
-}
\ No newline at end of file
+}
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/EncodingSection.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/EncodingSection.java	(revision 3025)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/EncodingSection.java	(revision 3026)
@@ -22,13 +22,17 @@
 public class EncodingSection extends ImportEditorSection {
 	
 	private static final int SECTION_SIZE = 1;
+	
 	Composite sectionClient;
+	
 	Button btnGuessEncoding;
+	
 	Button btnSelectEncoding;
+	
 	Combo encodingCombo;
 	
 	public EncodingSection(FormToolkit toolkit2, ScrolledForm form2, Composite parent, int style) {
-		super(toolkit2, form2, parent, style);
+		super(toolkit2, form2, parent, style, "encoding");
 		
 		this.section.setText(TXMUIMessages.sourceCharactersEncoding);
 		TableWrapLayout layout = new TableWrapLayout();
@@ -37,36 +41,40 @@
 		this.section.setLayout(layout);
 		this.section.setLayoutData(getSectionGridData(SECTION_SIZE));
 		this.section.setEnabled(false);
-
+		
 		this.section.addExpansionListener(new ExpansionAdapter() {
+			
 			@Override
-			public void expansionStateChanged(ExpansionEvent e) {form.layout(true);}
+			public void expansionStateChanged(ExpansionEvent e) {
+				form.layout(true);
+			}
 		});
-
-		//filesection.setDescription("Select how to find source files");
+		
+		// filesection.setDescription("Select how to find source files");
 		sectionClient = toolkit.createComposite(this.section);
 		TableWrapLayout slayout = new TableWrapLayout();
 		slayout.numColumns = 2;
 		sectionClient.setLayout(slayout);
 		this.section.setClient(sectionClient);
-
+		
 		btnGuessEncoding = toolkit.createButton(sectionClient, "", SWT.RADIO); //$NON-NLS-1$
 		TableWrapData td = getButtonLayoutData();
 		btnGuessEncoding.setLayoutData(td);
 		btnGuessEncoding.setText(TXMUIMessages.guessColon);
 		toolkit.createLabel(sectionClient, ""); //$NON-NLS-1$
-
+		
 		btnSelectEncoding = toolkit.createButton(sectionClient, "", SWT.RADIO); //$NON-NLS-1$
 		btnSelectEncoding.setLayoutData(getButtonLayoutData());
 		btnSelectEncoding.setText(TXMUIMessages.selectColon);
-
+		
 		encodingCombo = new Combo(sectionClient, SWT.BORDER);
 		TableWrapData gdata = getTextGridData();
 		encodingCombo.setLayoutData(gdata);
 		encodingCombo.addSelectionListener(new SelectionListener() {
+			
 			@Override
-			public void widgetDefaultSelected(SelectionEvent e) { }
-
+			public void widgetDefaultSelected(SelectionEvent e) {}
+			
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				btnSelectEncoding.setSelection(true);
@@ -76,32 +84,35 @@
 		encodingCombo.removeAll();
 		encodingCombo.setToolTipText("Source files encoding code (only the most used are shown)");
 	}
-
-	String[] commonCharsets = {"UTF-8","Windows-1252", "MacOSX", "x-MacRoman", "ISO-8859-1","Windows-1251","UTF-16", "UTF-32", "GB2312","EUC-KR","GBK","ISO-8859-2","EUC-JP","Windows-1250","ISO-8859-15","Big5","Windows-1256","ISO-8859-9"};
 	
+	String[] commonCharsets = { "UTF-8", "Windows-1252", "MacOSX", "x-MacRoman", "ISO-8859-1", "Windows-1251", "UTF-16", "UTF-32", "GB2312", "EUC-KR", "GBK", "ISO-8859-2", "EUC-JP", "Windows-1250",
+			"ISO-8859-15", "Big5", "Windows-1256", "ISO-8859-9" };
+	
 	@Override
 	public void update(Project project) {
 		if (this.section.isDisposed()) return;
 		if (project == null) return;
-		//fill combo and select default encoding
-
-		String dencoding = project.getEncoding(); //$NON-NLS-1$
+		// fill combo and select default encoding
+		
+		String dencoding = project.getEncoding();
 		String defaultEncoding = System.getProperty("file.encoding"); //$NON-NLS-1$
 		if ("??".equals(dencoding)) { //$NON-NLS-1$
 			btnSelectEncoding.setSelection(false);
 			btnGuessEncoding.setSelection(true);
-		} else if (dencoding == null) {
+		}
+		else if (dencoding == null) {
 			btnSelectEncoding.setSelection(true);
-		} else {
+		}
+		else {
 			btnSelectEncoding.setSelection(true);
 			defaultEncoding = dencoding;
 		}
-
-		//SortedMap<String, Charset> charsets = Charset.availableCharsets();
-//		String[] charsets = new String[charsets.size()];
-//		int icharset = 0;
-//		for (String k : charsets.keySet()) items[icharset++] = k;
-		ArrayList<String> availables = new ArrayList<String>();
+		
+		// SortedMap<String, Charset> charsets = Charset.availableCharsets();
+		// String[] charsets = new String[charsets.size()];
+		// int icharset = 0;
+		// for (String k : charsets.keySet()) items[icharset++] = k;
+		ArrayList<String> availables = new ArrayList<>();
 		for (String s : commonCharsets) {
 			if (Charset.isSupported(s)) {
 				availables.add(s);
@@ -110,44 +121,45 @@
 		encodingCombo.setItems(availables.toArray(new String[availables.size()]));
 		
 		String[] data = encodingCombo.getItems();
-		for (int i = 0 ; i < data.length ; i++) {
+		for (int i = 0; i < data.length; i++) {
 			String encoding = data[i];
-			if (encoding.equals(defaultEncoding)) { 
+			if (encoding.equals(defaultEncoding)) {
 				encodingCombo.select(i);
 				break;
 			}
 		}
 		encodingCombo.setText(defaultEncoding);
 	}
-
+	
 	@Override
 	public boolean save(Project project) {
 		if (this.section == null) return true;
 		
 		String encoding = project.getEncoding();
 		if (!this.section.isDisposed()) {
-			//ENCODING
-			if (btnGuessEncoding != null && btnGuessEncoding.getSelection()) {	
+			// ENCODING
+			if (btnGuessEncoding != null && btnGuessEncoding.getSelection()) {
 				encoding = "??"; //$NON-NLS-1$
-			} else if (encodingCombo != null) {
+			}
+			else if (encodingCombo != null) {
 				encoding = encodingCombo.getText();
 			}
-
+			
 			if (encoding == null || encoding.length() == 0)
 				encoding = System.getProperty("file.encoding"); //$NON-NLS-1$
-
-			project.setEncoding(encoding); //$NON-NLS-1$
+			
+			project.setEncoding(encoding);
 		}
 		return true;
 	}
-
+	
 	@Override
 	public boolean checkFields() {
 		return true;
 	}
-
+	
 	@Override
 	public int getSectionSize() {
 		return SECTION_SIZE;
 	}
-}
\ No newline at end of file
+}
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/FontSection.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/FontSection.java	(revision 3025)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/FontSection.java	(revision 3026)
@@ -24,7 +24,7 @@
 	Combo fontCombo;
 	
 	public FontSection(FormToolkit toolkit2, ScrolledForm form2, Composite parent, int style) {
-		super(toolkit2, form2, parent, style);
+		super(toolkit2, form2, parent, style, "font");
 		
 		this.section.setText(TXMUIMessages.displayFont);
 		TableWrapLayout layout = new TableWrapLayout();
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/TRSSection.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/TRSSection.java	(revision 3025)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/TRSSection.java	(revision 3026)
@@ -23,6 +23,12 @@
 	
 	Button displayLocutorsButton;
 	
+	Button indexInterviewerButton;
+	
+	Button createPagesForSectionsButton;
+	
+	Button indexTranscriberMetadataButton;
+	
 	/**
 	 * 
 	 * @param toolkit2
@@ -35,7 +41,7 @@
 	 */
 	public TRSSection(FormToolkit toolkit2, ScrolledForm form2, Composite parent, int style) {
 		
-		super(toolkit2, form2, parent, style);
+		super(toolkit2, form2, parent, style, "transcription");
 		
 		this.section.setText(TXMUIMessages.TRSSection_0);
 		TableWrapLayout layout = new TableWrapLayout();
@@ -65,6 +71,24 @@
 		TableWrapData gdata2 = getButtonLayoutData();
 		gdata2.colspan = 4; // one line
 		displayLocutorsButton.setLayoutData(gdata2);
+		
+		// build text edition or not button
+		indexInterviewerButton = toolkit.createButton(sectionClient, "Index interviewer speech", SWT.CHECK);
+		gdata2 = getButtonLayoutData();
+		gdata2.colspan = 4; // one line
+		indexInterviewerButton.setLayoutData(gdata2);
+		
+		// build text edition or not button
+		createPagesForSectionsButton = toolkit.createButton(sectionClient, "Create pages for sections", SWT.CHECK);
+		gdata2 = getButtonLayoutData();
+		gdata2.colspan = 4; // one line
+		createPagesForSectionsButton.setLayoutData(gdata2);
+		
+		// build text edition or not button
+		indexTranscriberMetadataButton = toolkit.createButton(sectionClient, "Index Transcriber transcription metadata", SWT.CHECK);
+		gdata2 = getButtonLayoutData();
+		gdata2.colspan = 4; // one line
+		indexTranscriberMetadataButton.setLayoutData(gdata2);
 	}
 	
 	@Override
@@ -74,6 +98,9 @@
 		
 		IEclipsePreferences customNode = project.getImportParameters();
 		displayLocutorsButton.setSelection(customNode.getBoolean("display_locutors", true)); //$NON-NLS-1$
+		indexInterviewerButton.setSelection(customNode.getBoolean("indexInterviewer", true)); //$NON-NLS-1$
+		createPagesForSectionsButton.setSelection(customNode.getBoolean("create_section_pages", true)); //$NON-NLS-1$
+		indexTranscriberMetadataButton.setSelection(customNode.getBoolean("ignoreTranscriberMetadata", true)); //$NON-NLS-1$
 	}
 	
 	@Override
@@ -82,6 +109,9 @@
 			
 			IEclipsePreferences customNode = project.getImportParameters();
 			customNode.putBoolean("display_locutors", displayLocutorsButton.getSelection()); //$NON-NLS-1$
+			customNode.putBoolean("indexInterviewer", indexInterviewerButton.getSelection()); //$NON-NLS-1$
+			customNode.putBoolean("create_section_pages", createPagesForSectionsButton.getSelection()); //$NON-NLS-1$
+			customNode.putBoolean("ignoreTranscriberMetadata", indexTranscriberMetadataButton.getSelection()); //$NON-NLS-1$
 		}
 		return true;
 	}
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/TokenizerSection.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/TokenizerSection.java	(revision 3025)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/TokenizerSection.java	(revision 3026)
@@ -51,7 +51,7 @@
 	private HashMap<String, Boolean> moduleParams;
 	
 	public TokenizerSection(FormToolkit toolkit2, ScrolledForm form2, Composite parent, int style, HashMap<String, Boolean> moduleParams) {
-		super(toolkit2, form2, parent, style);
+		super(toolkit2, form2, parent, style, "tokenizer");
 		this.moduleParams = moduleParams;
 		this.section.setText(TXMUIMessages.lexicalSegmentation);
 		TableWrapLayout layout = new TableWrapLayout();
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/EditionSection.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/EditionSection.java	(revision 3025)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/EditionSection.java	(revision 3026)
@@ -59,7 +59,7 @@
 	 * @param scriptName temporary parameter to detect if import module is xtzLoader.groovy
 	 */
 	public EditionSection(FormToolkit toolkit2, ScrolledForm form2, Composite parent, int style, HashMap<String, Boolean> moduleParams, String scriptName) {
-		super(toolkit2, form2, parent, style);
+		super(toolkit2, form2, parent, style, "edition");
 		
 		this.section.setText(TXMUIMessages.editions);
 		TableWrapLayout layout = new TableWrapLayout();
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/OptionsSection.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/OptionsSection.java	(revision 3025)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/imports/sections/OptionsSection.java	(revision 3026)
@@ -12,14 +12,15 @@
 import org.txm.objects.Project;
 
 public class OptionsSection extends ImportEditorSection {
-
+	
 	private static final int SECTION_SIZE = 1;
+	
 	private Button cleanButton;
-//	private Button multithreadButton;
-
+	// private Button multithreadButton;
+	
 	public OptionsSection(FormToolkit toolkit2, ScrolledForm form2, Composite parent, int style) {
-		super(toolkit2, form2, parent, style);
-
+		super(toolkit2, form2, parent, style, "misc");
+		
 		this.section.setText("Options");
 		TableWrapLayout layout = new TableWrapLayout();
 		layout.makeColumnsEqualWidth = true;
@@ -27,58 +28,61 @@
 		this.section.setLayoutData(getSectionGridData(SECTION_SIZE));
 		this.section.setEnabled(false);
 		this.section.addExpansionListener(new ExpansionAdapter() {
+			
 			@Override
-			public void expansionStateChanged(ExpansionEvent e) {form.layout(true);}
+			public void expansionStateChanged(ExpansionEvent e) {
+				form.layout(true);
+			}
 		});
-
+		
 		Composite sectionClient = toolkit.createComposite(this.section);
 		TableWrapLayout slayout = new TableWrapLayout();
 		slayout.makeColumnsEqualWidth = false;
 		slayout.numColumns = 2;
 		sectionClient.setLayout(slayout);
 		this.section.setClient(sectionClient);
-
+		
 		cleanButton = toolkit.createButton(sectionClient, "Remove temporary directories", SWT.CHECK);
 		TableWrapData gdata = getTextGridData();
 		gdata.grabHorizontal = true;
 		gdata.colspan = 2;
 		cleanButton.setLayoutData(gdata);
 		
-//		multithreadButton = toolkit.createButton(sectionClient, "Experimental multi-threading import", SWT.CHECK);
-//		gdata = getTextGridData();
-//		gdata.colspan = 2;
-//		gdata.grabHorizontal = true;
-//		multithreadButton.setLayoutData(gdata);
+		// multithreadButton = toolkit.createButton(sectionClient, "Experimental multi-threading import", SWT.CHECK);
+		// gdata = getTextGridData();
+		// gdata.colspan = 2;
+		// gdata.grabHorizontal = true;
+		// multithreadButton.setLayoutData(gdata);
 	}
-
+	
 	@Override
 	public void update(Project project) {
 		cleanButton.setSelection(project.getCleanAfterBuild());
-//		
-////		value = (String) params.getKeyValueParameters().get(ImportKeys.MULTITHREAD);
-////		if (value == null) value = "false";
-////		multithreadButton.setSelection(Boolean.parseBoolean(value));
+		//
+		//// value = (String) params.getKeyValueParameters().get(ImportKeys.MULTITHREAD);
+		//// if (value == null) value = "false";
+		//// multithreadButton.setSelection(Boolean.parseBoolean(value));
 	}
-
+	
 	@Override
 	public boolean save(Project project) {
 		if (this.section != null && !section.isDisposed()) {
-//			
+			//
 			project.setCleanAfterBuild(cleanButton.getSelection());
-//			
-////			value = Boolean.toString(multithreadButton.getSelection());
-////			params.getKeyValueParameters().put(ImportKeys.MULTITHREAD, value);
-//			return true;
+			//
+			//// value = Boolean.toString(multithreadButton.getSelection());
+			//// params.getKeyValueParameters().put(ImportKeys.MULTITHREAD, value);
+			// return true;
 		}
-
+		
 		return true;
 	}
-
+	
 	@Override
 	public boolean checkFields() {
 		return true;
 	}
-
+	
 	@Override
 	public int getSectionSize() {
 		return SECTION_SIZE;
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditor.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditor.java	(revision 3025)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditor.java	(revision 3026)
@@ -7,6 +7,7 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Set;
 
@@ -62,6 +63,7 @@
 import org.eclipse.ui.part.EditorPart;
 import org.txm.core.messages.TXMCoreMessages;
 import org.txm.core.preferences.TBXPreferences;
+import org.txm.core.results.BeanParameters;
 import org.txm.core.results.Parameter;
 import org.txm.core.results.TXMResult;
 import org.txm.rcp.JobsTimer;
@@ -1288,7 +1290,7 @@
 	 */
 	public void autoUpdateEditorFieldsFromResult(boolean update) {
 		
-		List<Field> fields = this.getAllParameterFields();
+		List<Field> fields = BeanParameters.getAllFields(this);
 		
 		for (Field f : fields) {
 			Parameter parameter = f.getAnnotation(Parameter.class);
@@ -1297,7 +1299,7 @@
 			}
 			
 			Object object = null;
-			Object value = null;
+			Object value = null;// getWidgetValue();
 			
 			try {
 				f.setAccessible(true);
@@ -1442,9 +1444,11 @@
 	@SuppressWarnings("unchecked")
 	public void autoUpdateResultFromEditorParameters() {
 		
-		List<Field> fields = this.getAllParameterFields();
-		
-		for (Field f : fields) {
+		// List<Field> fields = BeanParameters.getAllFields(this);
+		LinkedHashMap<String, Field> fields = BeanParameters.getFieldsPerName(this);
+		for (String key : fields.keySet()) {
+			Field f = fields.get(key);
+			
 			Parameter parameter = f.getAnnotation(Parameter.class);
 			if (parameter == null || parameter.key().isEmpty()) {
 				continue;
@@ -1490,7 +1494,7 @@
 					}
 				}
 				else if (object instanceof ReferencePatternSelector) {
-					Field resultField = this.getResult().getField(parameter.key());
+					Field resultField = BeanParameters.getField(this.getResult(), parameter.key());
 					if (resultField != null) {
 						if (resultField.getType().isAssignableFrom(ReferencePattern.class)) {
 							ReferencePatternSelector selector = (ReferencePatternSelector) object;
@@ -1500,7 +1504,7 @@
 					}
 				}
 				else if (object instanceof PropertiesSelector) {
-					Field resultField = this.getResult().getField(parameter.key());
+					Field resultField = BeanParameters.getField(this.getResult(), parameter.key());
 					if (resultField != null) {
 						// multiple
 						if (resultField.getType().isAssignableFrom(List.class)) {
@@ -1552,27 +1556,7 @@
 		}
 	}
 	
-	
 	/**
-	 * Returns all the member fields of the class instance.
-	 * 
-	 * @return
-	 */
-	protected List<Field> getAllParameterFields() {
-		
-		List<Field> fields = new ArrayList<>();
-		Class<?> clazz = this.getClass();
-		while (clazz != Object.class) {
-			fields.addAll(Arrays.asList(clazz.getDeclaredFields()));
-			clazz = clazz.getSuperclass();
-		}
-		
-		return fields;
-		
-	}
-	
-	
-	/**
 	 * Deletes the TXM result.
 	 * 
 	 * @return true if the deletion was successful otherwise false
@@ -1953,4 +1937,235 @@
 		return parent;
 	}
 	
+	public static Object getValueForWidget(Object bean, Field f, Field targetedField) {
+		Parameter parameter = f.getAnnotation(Parameter.class);
+		if (parameter == null || parameter.key().isEmpty()) {
+			return null;
+		}
+		
+		try {
+			f.setAccessible(true);
+			Object object = f.get(bean);
+			if (object == null) {
+				// FIXME what about a parametrized member which is not a widget ?
+				return null; // the parameterized member variable is not set
+			}
+			Object value = null;
+			if (object instanceof ToolItem) {
+				value = ((ToolItem) object).getSelection();
+			}
+			else if (object instanceof FloatSpinner) {
+				value = ((FloatSpinner) object).getSelectionAsFloat();
+			}
+			else if (object instanceof Spinner) {
+				value = ((Spinner) object).getSelection();
+			}
+			else if (object instanceof Text) {
+				value = ((Text) object).getText();
+			}
+			else if (object instanceof StyledText) {
+				value = ((StyledText) object).getText();
+			}
+			else if (object instanceof Button) {
+				value = ((Button) object).getSelection();
+			}
+			else if (object instanceof Viewer) {
+				
+				IStructuredSelection selection = ((IStructuredSelection) ((Viewer) object).getSelection());
+				
+				// Multi-selection
+				if (SWT.MULTI == (((Viewer) object).getControl().getStyle() & SWT.MULTI)) {
+					value = selection.toList();
+				}
+				// Single selection
+				else {
+					value = selection.getFirstElement();
+				}
+			}
+			else if (object instanceof ReferencePatternSelector) {
+				if (targetedField != null) {
+					if (targetedField.getType().isAssignableFrom(ReferencePattern.class)) {
+						ReferencePatternSelector selector = (ReferencePatternSelector) object;
+						ReferencePattern ref = new ReferencePattern(selector.getSelectedProperties(), selector.getPattern());
+						value = ref;
+					}
+				}
+			}
+			else if (object instanceof PropertiesSelector) {
+				if (targetedField != null) {
+					// multiple
+					if (targetedField.getType().isAssignableFrom(List.class)) {
+						value = new ArrayList<>(((PropertiesSelector<Property>) object).getSelectedProperties());
+						// need to copy the list otherwise the properties selector modify the result itself through reference
+					}
+					else if (targetedField.getType().isAssignableFrom(ReferencePattern.class)) {
+						value = new ReferencePattern(((PropertiesSelector<Property>) object).getSelectedProperties());
+					}
+					// single
+					else {
+						value = ((PropertiesSelector<Property>) object).getSelectedProperties().get(0);
+					}
+				}
+			}
+			else if (object instanceof NewNavigationWidget) {
+				value = ((NewNavigationWidget) object).getCurrentPosition();
+			}
+			else if (object instanceof AssistedChoiceQueryWidget) {
+				value = ((AssistedChoiceQueryWidget) object).getQuery();
+			}
+			else if (object instanceof AssistedQueryWidget) {
+				value = ((AssistedQueryWidget) object).getQuery();
+			}
+			else if (object instanceof QueryWidget) {
+				value = ((QueryWidget) object).getQuery();
+			}
+			else {
+				value = object;
+			}
+			
+			// FIXME: need to extend this list of managed Widgets if needed
+			
+			// propagate to all parents
+			// this.getResult().setParameter(parameter.key(), value, true);
+		}
+		catch (IllegalArgumentException e) {
+			Log.severe("TXMEditor.autoUpdateResultFromEditorParameters(): Error with field " + parameter.key()); //$NON-NLS-1$
+			e.printStackTrace();
+		}
+		catch (IllegalAccessException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static void setValueForWidget(Object bean, Field f, Object value) {
+		
+		if (value == null) {
+			// System.out.println("Warning: "+this.getPartName()+" result "+this.getResult()+" "+parameter.key()+" is not initialized.");
+			return; // not initialized
+		}
+		
+		Parameter parameter = f.getAnnotation(Parameter.class);
+		Object object = null;
+		
+		try {
+			f.setAccessible(true);
+			object = f.get(bean);
+			
+			if (object instanceof ToolItem) {
+				((ToolItem) object).setSelection((Boolean) value);
+			}
+			else if (object instanceof FloatSpinner) {
+				
+				((FloatSpinner) object).setData(BaseAbstractComputeListener.IGNORE_EVENT, true);
+				
+				if (value instanceof Double) {
+					((FloatSpinner) object).setSelection((Double) value);
+				}
+				else {
+					((FloatSpinner) object).setSelection((Float) value);
+				}
+				
+				((FloatSpinner) object).setData(BaseAbstractComputeListener.IGNORE_EVENT, false);
+			}
+			else if (object instanceof Spinner) {
+				((Spinner) object).setData(BaseAbstractComputeListener.IGNORE_EVENT, true);
+				((Spinner) object).setSelection((Integer) value);
+				((Spinner) object).setData(BaseAbstractComputeListener.IGNORE_EVENT, false);
+			}
+			else if (object instanceof Text) {
+				((Text) object).setText(String.valueOf(value));
+			}
+			else if (object instanceof StyledText) {
+				((StyledText) object).setText(String.valueOf(value));
+			}
+			else if (object instanceof Button) {
+				((Button) object).setSelection((Boolean) value);
+			}
+			else if (object instanceof Viewer) {
+				if (value != null) {
+					// FIXME: SJ: fire a new selection changed event leading to a cyclic recursion...
+					// FIXME: SJ: became useless? since there is now a test above on !this.getResult().hasParameterChanged(parameter.key(), this.lastComputingParameters)
+					((Viewer) object).setData(BaseAbstractComputeListener.IGNORE_EVENT, true);
+					if (value instanceof StructuredSelection) { // no need to create a new StructuredSelection
+						((Viewer) object).setSelection((StructuredSelection) value, true);
+					}
+					else {
+						((Viewer) object).setSelection(new StructuredSelection(value), true);
+					}
+					((Viewer) object).setData(BaseAbstractComputeListener.IGNORE_EVENT, false);
+				}
+			}
+			else if (object instanceof ReferencePatternSelector) {
+				if (value instanceof ReferencePattern) {
+					ReferencePattern ref = (ReferencePattern) value;
+					ReferencePatternSelector selector = (ReferencePatternSelector) object;
+					selector.setSelectedProperties(ref.getProperties());
+					selector.setPattern(ref.getPattern());
+				}
+			}
+			else if (object instanceof PropertiesSelector) {
+				// multiple
+				if (value instanceof List || value instanceof ArrayList) {
+					((PropertiesSelector) object).setSelectedProperties((List) value);
+				}
+				else if (value instanceof ReferencePattern) {
+					((PropertiesSelector) object).setSelectedProperties(((ReferencePattern) value).getProperties());
+				}
+				// single
+				else {
+					((PropertiesSelector) object).setSelectedProperty((Property) value);
+				}
+			}
+			else if (object instanceof NewNavigationWidget) {
+				((NewNavigationWidget) object).setCurrentPosition((Integer) value);
+			}
+			else if (object instanceof AssistedChoiceQueryWidget) {
+				if (!((IQuery) value).getQueryString().isEmpty()) {
+					((AssistedChoiceQueryWidget) object).setText(((IQuery) value).getQueryString());
+					((AssistedChoiceQueryWidget) object).setSearchEngine(((IQuery) value).getSearchEngine());
+				}
+			}
+			else if (object instanceof AssistedQueryWidget) {
+				if (!((CQLQuery) value).getQueryString().isEmpty()) {
+					((AssistedQueryWidget) object).setText(((CQLQuery) value).getQueryString());
+				}
+			}
+			else if (object instanceof QueryWidget) {
+				if (!((CQLQuery) value).getQueryString().isEmpty()) {
+					((QueryWidget) object).setText(((CQLQuery) value).getQueryString());
+				}
+			}
+			else {
+				try {
+					f.set(bean, value);
+				}
+				catch (Exception e) {
+					Log.fine(TXMCoreMessages.bind("Warning: can't assignate new value={0} to editor member={1} which have current value={2}.", value, f, object));
+				}
+			}
+			
+			// Log
+			if (object != null) {
+				String message = "TXMEditor.autoUpdateEditorFieldsFromResult(): " + bean.getClass().getSimpleName() + ": setting editor parameter " + parameter.key() + " = " + value; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				if (value != null) {
+					message += " (" + value.getClass() + " to object " + object + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				}
+				Log.finest(message);
+			}
+			
+			// FIXME: SJ: need to extend this list of managed Widgets if needed
+		}
+		catch (Exception e) {
+			// TODO Auto-generated catch block
+			if (object != null) {
+				e.printStackTrace();
+			}
+		}
+	}
 }
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/dialog/UsernamePasswordDialog.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/dialog/UsernamePasswordDialog.java	(revision 3025)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/dialog/UsernamePasswordDialog.java	(revision 3026)
@@ -1,15 +1,5 @@
 package org.txm.rcp.swt.dialog;
-/*
-SWT/JFace in Action
-GUI Design with Eclipse 3.0
-Matthew Scarpino, Stephen Holder, Stanford Ng, and Laurent Mihalkovic
 
-ISBN: 1932394273
-
-Publisher: Manning
- */
-
-
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.osgi.util.NLS;
@@ -23,15 +13,34 @@
 import org.eclipse.swt.widgets.Text;
 import org.txm.rcp.messages.TXMUIMessages;
 
+/**
+ * SWT/JFace in Action
+ * GUI Design with Eclipse 3.0
+ * Matthew Scarpino, Stephen Holder, Stanford Ng, and Laurent Mihalkovic
+ * 
+ * ISBN: 1932394273
+ * 
+ * Publisher: Manning
+ * 
+ * MD: modified for TXM needs
+ *
+ */
 public class UsernamePasswordDialog extends Dialog {
+	
 	private static final int RESET_ID = IDialogConstants.NO_TO_ALL_ID + 1;
-
+	
 	private Text usernameField;
+	
 	private Text passwordField;
+	
 	boolean must[];
-	String user  = null, password = null;
+	
+	String user = null, password = null;
+	
 	String address;
+	
 	String details;
+	
 	String title;
 	
 	public UsernamePasswordDialog(Shell parentShell, boolean must[], String kr_name) {
@@ -40,7 +49,8 @@
 		this.address = kr_name;
 	}
 	
-	/* (non-Javadoc)
+	/*
+	 * (non-Javadoc)
 	 * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
 	 */
 	@Override
@@ -51,32 +61,33 @@
 			title = NLS.bind(TXMUIMessages.loginToP0, address);
 		}
 		newShell.setText(title);
-		int l = Math.max(title.length()*10, 500);
+		int l = Math.max(title.length() * 10, 500);
 		newShell.setSize(l, 200);
 	}
 	
 	@Override
 	protected boolean isResizable() {
-	    return true;
+		return true;
 	}
-
+	
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite comp = (Composite) super.createDialogArea(parent);
-
+		
 		GridLayout layout = (GridLayout) comp.getLayout();
 		layout.numColumns = 2;
 		
 		if (details != null) {
 			Label detailsLabel = new Label(comp, SWT.RIGHT);
 			detailsLabel.setText(details);
-			GridData gdata = new GridData(GridData.BEGINNING, GridData.BEGINNING, true, true, 2,1);
+			GridData gdata = new GridData(GridData.BEGINNING, GridData.BEGINNING, true, true, 2, 1);
 			detailsLabel.setLayoutData(gdata);
 		}
-
+		
 		if (must[0]) {
 			Label usernameLabel = new Label(comp, SWT.RIGHT);
 			usernameLabel.setText(TXMUIMessages.login);
-
+			
 			usernameField = new Text(comp, SWT.SINGLE);
 			GridData data = new GridData(GridData.FILL_HORIZONTAL);
 			usernameField.setLayoutData(data);
@@ -88,20 +99,22 @@
 		if (must[1]) {
 			Label passwordLabel = new Label(comp, SWT.RIGHT);
 			passwordLabel.setText(TXMUIMessages.password);
-
+			
 			passwordField = new Text(comp, SWT.SINGLE | SWT.PASSWORD);
 			GridData data = new GridData(GridData.FILL_HORIZONTAL);
 			passwordField.setLayoutData(data);
 		}
 		return comp;
 	}
-
+	
+	@Override
 	protected void createButtonsForButtonBar(Composite parent) {
 		super.createButtonsForButtonBar(parent);
 		createButton(parent, RESET_ID, TXMUIMessages.resetAll, false);
 		this.getButton(OK).setText(TXMUIMessages.connect);
 	}
-
+	
+	@Override
 	protected void buttonPressed(int buttonId) {
 		if (buttonId == RESET_ID) {
 			if (must[0]) {
@@ -110,31 +123,35 @@
 			if (must[1]) {
 				passwordField.setText("");
 			}
-		} else {
+		}
+		else {
 			if (must[0]) {
 				user = usernameField.getText();
-			} else {
+			}
+			else {
 				user = null;
 			}
 			if (must[1]) {
-				password= passwordField.getText();
-			} else {
+				password = passwordField.getText();
+			}
+			else {
 				password = null;
 			}
 			super.buttonPressed(buttonId);
 		}
 	}
-
+	
 	public String getUser() {
 		return user;
 	}
-
+	
 	public String getPassword() {
 		return password;
 	}
-
+	
 	/**
 	 * must be called before opening the dialog
+	 * 
 	 * @param user
 	 */
 	public void setUsername(String user) {
@@ -143,6 +160,7 @@
 	
 	/**
 	 * must be called before opening the dialog
+	 * 
 	 * @param user
 	 */
 	public void setDetails(String defails) {
@@ -151,6 +169,7 @@
 	
 	/**
 	 * must be called before opening the dialog
+	 * 
 	 * @param user
 	 */
 	public void setTitle(String title) {
Index: tmp/org.txm.backtomedia.rcp/src/org/txm/backtomedia/commands/function/BackToMedia.java
===================================================================
--- tmp/org.txm.backtomedia.rcp/src/org/txm/backtomedia/commands/function/BackToMedia.java	(revision 3025)
+++ tmp/org.txm.backtomedia.rcp/src/org/txm/backtomedia/commands/function/BackToMedia.java	(revision 3026)
@@ -39,6 +39,7 @@
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
 import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.window.Window;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IWorkbenchPart;
@@ -393,7 +394,7 @@
 	 * @param sEndTime String in "sec.msec" or "hh:mm:ss" format
 	 * @param editor
 	 * @param shell
-	 * @return
+	 * @return the media editor or null if an error occurred
 	 */
 	public static Object backToMedia(CQPCorpus corpus, String textid, String sStartTime, String sEndTime, IWorkbenchPart editor, Shell shell) {
 		
@@ -411,7 +412,6 @@
 		String media_index = commandPreferences.get(BackToMediaPreferences.MEDIA_INDEX_NODE, alternative);
 		
 		try {
-			
 			Log.fine(MessagesMP.BackToMedia_7 + textid);
 			
 			File binDir = corpus.getProject().getProjectDirectory();
@@ -448,13 +448,13 @@
 						dialog.setUsername(secured_media_login);
 						dialog.setTitle("You must authenticate to access the media file");
 						dialog.setDetails(NLS.bind(TXMUIMessages.loginToP0, new URL(media_directory).getHost()));
-						if (dialog.open() == dialog.OK) {
+						if (dialog.open() == Window.OK) {
 							System.setProperty(BackToMediaPreferences.MEDIA_AUTH_LOGIN, dialog.getUser());
 							System.setProperty(BackToMediaPreferences.MEDIA_AUTH_PASSWORD, dialog.getPassword());
 						}
 						else {
-							System.setProperty(BackToMediaPreferences.MEDIA_AUTH_LOGIN, "");
-							System.setProperty(BackToMediaPreferences.MEDIA_AUTH_PASSWORD, "");
+							// System.setProperty(BackToMediaPreferences.MEDIA_AUTH_LOGIN, "");
+							// System.setProperty(BackToMediaPreferences.MEDIA_AUTH_PASSWORD, "");
 							return null;
 						}
 					}
@@ -559,7 +559,7 @@
 			if (path != null) {
 				vlcEditor.setPartName(textid);
 			}
-			return null;
+			return vlcEditor;
 			
 		}
 		catch (Exception e2) {
Index: tmp/org.txm.annotation.rcp/src/org/txm/annotation/rcp/editors/imports/sections/AnnotationSection.java
===================================================================
--- tmp/org.txm.annotation.rcp/src/org/txm/annotation/rcp/editors/imports/sections/AnnotationSection.java	(revision 3025)
+++ tmp/org.txm.annotation.rcp/src/org/txm/annotation/rcp/editors/imports/sections/AnnotationSection.java	(revision 3026)
@@ -18,60 +18,64 @@
 public class AnnotationSection extends ImportEditorSection {
 	
 	private static final int SECTION_SIZE = 1;
+	
 	public static final String DEFAULTNAMESUFFIX = "KR";
 	
 	Text nameText;
 	
 	public AnnotationSection(FormToolkit toolkit2, ScrolledForm form2, Composite parent, int style) {
-		super(toolkit2, form2, parent, style);
-
+		super(toolkit2, form2, parent, style, "annotation");
+		
 		this.section.setText("Annotation");
 		TableWrapLayout layout = new TableWrapLayout();
 		layout.makeColumnsEqualWidth = true;
 		this.section.setLayout(layout);
 		this.section.setLayoutData(getSectionGridData(SECTION_SIZE));
 		this.section.setEnabled(false);
-
+		
 		this.section.addExpansionListener(new ExpansionAdapter() {
+			
 			@Override
-			public void expansionStateChanged(ExpansionEvent e) {form.layout(true);}
+			public void expansionStateChanged(ExpansionEvent e) {
+				form.layout(true);
+			}
 		});
-
-		//filesection.setDescription("Select how to find source files");
+		
+		// filesection.setDescription("Select how to find source files");
 		Composite sectionClient = toolkit.createComposite(this.section);
 		TableWrapLayout slayout = new TableWrapLayout();
 		slayout.makeColumnsEqualWidth = false;
 		slayout.numColumns = 2;
 		sectionClient.setLayout(slayout);
 		this.section.setClient(sectionClient);
-
+		
 		Label l = toolkit.createLabel(sectionClient, "Knowledge repository name", SWT.WRAP);
 		l.setLayoutData(new TableWrapData(TableWrapData.LEFT, TableWrapData.MIDDLE));
-
+		
 		nameText = new Text(sectionClient, SWT.BORDER);
 	}
-
+	
 	@Override
 	public void update(Project project) {
 		if (this.section.isDisposed()) return;
 		if (project == null) return;
 	}
-
+	
 	@Override
 	public boolean save(Project project) {
 		if (!this.section.isDisposed()) {
 			String value = nameText.getText();
-						
+			
 			return true;
 		}
 		return false;
 	}
-
+	
 	@Override
 	public boolean checkFields() {
 		return true;
 	}
-
+	
 	@Override
 	public int getSectionSize() {
 		return SECTION_SIZE;
Index: tmp/org.txm.annotation.kr.rcp/src/org/txm/annotation/kr/rcp/editors/imports/sections/AnnotationSection.java
===================================================================
--- tmp/org.txm.annotation.kr.rcp/src/org/txm/annotation/kr/rcp/editors/imports/sections/AnnotationSection.java	(revision 3025)
+++ tmp/org.txm.annotation.kr.rcp/src/org/txm/annotation/kr/rcp/editors/imports/sections/AnnotationSection.java	(revision 3026)
@@ -19,68 +19,72 @@
 public class AnnotationSection extends ImportEditorSection {
 	
 	private static final int SECTION_SIZE = 1;
+	
 	public static final String DEFAULTNAMESUFFIX = "KR";
 	
 	Text nameText;
 	
 	public AnnotationSection(FormToolkit toolkit2, ScrolledForm form2, Composite parent, int style) {
-		super(toolkit2, form2, parent, style);
-
+		super(toolkit2, form2, parent, style, "annotation");
+		
 		this.section.setText("Annotation");
 		TableWrapLayout layout = new TableWrapLayout();
 		layout.makeColumnsEqualWidth = true;
 		this.section.setLayout(layout);
 		this.section.setLayoutData(getSectionGridData(SECTION_SIZE));
 		this.section.setEnabled(false);
-
+		
 		this.section.addExpansionListener(new ExpansionAdapter() {
+			
 			@Override
-			public void expansionStateChanged(ExpansionEvent e) {form.layout(true);}
+			public void expansionStateChanged(ExpansionEvent e) {
+				form.layout(true);
+			}
 		});
-
-		//filesection.setDescription("Select how to find source files");
+		
+		// filesection.setDescription("Select how to find source files");
 		Composite sectionClient = toolkit.createComposite(this.section);
 		TableWrapLayout slayout = new TableWrapLayout();
 		slayout.makeColumnsEqualWidth = false;
 		slayout.numColumns = 2;
 		sectionClient.setLayout(slayout);
 		this.section.setClient(sectionClient);
-
+		
 		Label l = toolkit.createLabel(sectionClient, "Knowledge repository name", SWT.WRAP);
 		l.setLayoutData(new TableWrapData(TableWrapData.LEFT, TableWrapData.MIDDLE));
-
+		
 		nameText = new Text(sectionClient, SWT.BORDER);
 	}
-
+	
 	@Override
 	public void update(Project project) {
 		if (this.section.isDisposed()) return;
 		if (project == null) return;
 		
-//		List<String> values = KRAnnotationEngine.getKnowledgeRepositoryNames(project);
-//		
-//		String value = project.getName()+DEFAULTNAMESUFFIX;
-//		if (values.size() > 0) {
-//			value = values.get(0);
-//		}
-//		nameText.setText(value);
+		// List<String> values = KRAnnotationEngine.getKnowledgeRepositoryNames(project);
+		//
+		// String value = project.getName()+DEFAULTNAMESUFFIX;
+		// if (values.size() > 0) {
+		// value = values.get(0);
+		// }
+		// nameText.setText(value);
 	}
-
+	
 	@Override
 	public boolean save(Project project) {
 		if (!this.section.isDisposed()) {
 			String value = nameText.getText();
-						
+			
 			return true;
 		}
 		return false;
 	}
-
+	
 	@Override
 	public boolean checkFields() {
 		return true;
 	}
-
+	
 	@Override
 	public int getSectionSize() {
 		return SECTION_SIZE;
Index: tmp/org.txm.groovy.core/src/groovy/org/txm/macro/transcription/SegmentTRSInSectionFromMarkerMacro.groovy
===================================================================
--- tmp/org.txm.groovy.core/src/groovy/org/txm/macro/transcription/SegmentTRSInSectionFromMarkerMacro.groovy	(revision 0)
+++ tmp/org.txm.groovy.core/src/groovy/org/txm/macro/transcription/SegmentTRSInSectionFromMarkerMacro.groovy	(revision 3026)
@@ -0,0 +1,138 @@
+package org.txm.macro.transcription
+
+import java.nio.charset.Charset
+
+import java.time.LocalTime
+import java.time.format.DateTimeFormatter
+import org.txm.utils.*
+import org.txm.utils.logger.*
+
+@Field @Option(name="trsDirectory", usage="Dossier qui contient les fichiers TRS", widget="Folder", required=true, def="")
+File trsDirectory;
+
+@Field @Option(name="newSectionMarker", usage="The marker, spaces included", widget="String", required=true, def=" *#")
+def newSectionMarker
+
+if (!ParametersDialog.open(this)) return;
+
+if (!trsDirectory.exists()) {
+	println "$trsDirectory not found"
+	return
+}
+
+File outputDirectory = new File(trsDirectory, "out")
+println "Writing result to $outputDirectory..."
+
+dateTimeFormatter = DateTimeFormatter.ISO_LOCAL_TIME
+def strTotime(def str) {
+	if (str.lastIndexOf(":") == -1) {
+		return null
+	}
+	
+	bonusFrame = Integer.parseInt(str.substring(str.lastIndexOf(":")+1))
+	//if (str.contains("135475")) println "ERROR $str in $infos -> $bonusFrame"
+	if (bonusFrame > 25) {
+		bonusFrame=0;
+	}
+	totalFrame = str.substring(0, str.lastIndexOf(":"))
+	
+	LocalTime time1 = LocalTime.parse(totalFrame, dateTimeFormatter)
+	totalFrame = (time1.getHour()*60*60) + (time1.getMinute()*60) + time1.getSecond()
+	
+	def ret = totalFrame + (bonusFrame/25)
+	return ret
+}
+
+try {
+	def trsFiles = trsDirectory.list(new FilenameFilter() { public boolean accept(File dir, String name) { return name.toLowerCase().endsWith(".trs"); } });
+	
+	if (trsFiles.size() == 0) {
+		println "No TRS file to process in $trsDirectory"
+		return;
+	}
+	
+	ConsoleProgressBar cpb = new ConsoleProgressBar(sectionGroupsToInsert.keySet().size())
+	for (File trsFile : trsFiles) {
+		cpb.tick()
+
+		// Open input file
+		def slurper = new groovy.util.XmlParser(false, true, true);
+		slurper.setFeature("http://apache.org/xml/features/disallow-doctype-decl", false) // allow DTD declaration
+		slurper.setProperty("http://javax.xml.XMLConstants/property/accessExternalDTD", "all"); // allow to read DTD from local file
+		def trs = slurper.parse(trsFile.toURI().toString())
+		def trsEpisodes = trs.Episode // 1
+		if (trsEpisodes.size() > 1) {
+			println "Error: multiple Episode node in $trsFile"
+			continue
+		}
+		def trsEpisode = trsEpisodes[0]
+		def trsSections =  trs.Episode.Section // 1
+		if (trsSections.size() > 1) {
+			println "multiple Section node in $trsFile"
+			continue
+		}
+		def trsSection = trsSections[0]
+		
+		def turns = trsSection.Turn
+		def newSections = []
+		def iSection = 0;
+		def currentSection = null
+		def currentNode = null
+		
+		for (def turn : turns) {
+			def start = Float.parseFloat(turn.@startTime)
+			def end = Float.parseFloat(turn.@endTime)
+			
+			def found = null
+			for (int i = iSection ; i < sections.size() ; i++) {
+				if (end < sections[i][0]) { // Turn is before section
+					
+				} else if (sections[i][1] < start) { // Turn is before section
+					
+				} else {
+					found = sections[i]
+					iSection = i
+					break // stop searching and set iSection to accelerate next search
+				}
+			}
+			
+			if (found == null) {
+				if (currentSection != null || currentNode == null) {
+					currentNode = new Node(trsEpisode, "Section", ["type":"Sujet non synchronisé", "startTime":turn.@startTime, "endTime":"", "synchronized":"false"] )
+					currentSection = null;
+				}
+			} else {
+				if (found != currentSection) {
+					if (currentNode != null && currentNode.@synchronized == "false") {
+						def tmp = currentNode.Turn
+						currentNode.@endTime = tmp[-1].@endTime
+					}
+					
+					currentSection = found
+					currentNode = new Node(trsEpisode, "Section", currentSection[2])
+				}
+			}
+			trsSection.remove(turn)
+			currentNode.append(turn)
+		}
+		
+		//remove the initial section
+		trsEpisode.remove(trsSection)
+		
+		outputDirectory.mkdir()
+		File outfile = new File(outputDirectory, trsFile.getName())
+		outfile.withWriter("UTF-8") { writer ->
+			writer.write('<?xml version="1.0" encoding="UTF-8"?>\n<!DOCTYPE Trans SYSTEM "trans-14.dtd">\n')
+			def printer = new groovy.util.XmlNodePrinter(new PrintWriter(writer))
+			printer.setPreserveWhitespace(true)
+			printer.print(trs)
+		}
+	}
+	cpb.done()
+	reader.close()
+	println "Done."
+	
+} catch(Exception e) {
+	println "Error: "+e
+	Log.printStackTrace(e)
+}
Index: tmp/org.txm.groovy.core/src/groovy/org/txm/scripts/importer/transcriber/pager.groovy
===================================================================
--- tmp/org.txm.groovy.core/src/groovy/org/txm/scripts/importer/transcriber/pager.groovy	(revision 3025)
+++ tmp/org.txm.groovy.core/src/groovy/org/txm/scripts/importer/transcriber/pager.groovy	(revision 3026)
@@ -76,6 +76,7 @@
 	boolean firstWord = true
 	
 	boolean paginate = true
+	boolean paginateSections = true
 	boolean enableCollapsibles = false;
 	boolean displayLocutors = true;
 	
@@ -173,6 +174,7 @@
 		this.txtname = txtname;
 		this.wordmax = project.getEditionDefinition("default").getWordsPerPage();
 		this.paginate = project.getEditionDefinition("default").getPaginateEdition()
+		this.paginateSections = project.getImportParameters().getBoolean("create_section_pages", true)
 		this.enableCollapsibles = project.getEditionDefinition("default").getEnableCollapsibleMetadata();
 		this.displayLocutors = project.getImportParameters().getBoolean("display_locutors", true);
 		
@@ -422,7 +424,7 @@
 							writer.writeAttribute("id", ""+nbBreak);
 							writer.writeCharacters("\n");
 						
-							if (paginate) {
+							if (paginate && paginateSections) {
 								pages << new File(defaultDir, "${txtname}_${nbBreak}.html")
 								indexes << wordid
 							}
Index: tmp/org.txm.groovy.core/src/groovy/org/txm/scripts/importer/transcriber/transcriberLoader.groovy
===================================================================
--- tmp/org.txm.groovy.core/src/groovy/org/txm/scripts/importer/transcriber/transcriberLoader.groovy	(revision 3025)
+++ tmp/org.txm.groovy.core/src/groovy/org/txm/scripts/importer/transcriber/transcriberLoader.groovy	(revision 3026)
@@ -129,37 +129,11 @@
 		}
 	}
 }
-File propertyFile = new File(srcDir, "import.properties")//default
-Properties props = new Properties();
-//String[] metadatasToKeep;
-if (propertyFile.exists() && propertyFile.canRead()) {
-	FileInputStream input = new FileInputStream(propertyFile);
-	props.load(input);
-	input.close();
-
-	if (props.getProperty("indexInterviewer") != null)
-		indexInterviewer = Boolean.parseBoolean(props.get("indexInterviewer").toString());
-	if (props.getProperty("ignoreTranscriberMetadata") != null)
-		ignoreTranscriberMetadata = Boolean.parseBoolean(props.get("ignoreTranscriberMetadata").toString());
-//	if (props.getProperty("metadataList") != null)
-//		metadatasToKeep = props.get("metadataList").toString().split("|");
-//	if (props.getProperty("csvHeaderNumber") != null)
-//		csvHeaderNumber = props.get("csvHeaderNumber").toString().split("|");
-	//if (props.getProperty("includeComments") != null)
-	//	includeComments = props.get("includeComments").toString();
-
-	println "import properties: "
-	println " indexInterviewer: "+indexInterviewer
-	println " ignoreTranscriberMetadata: "+ignoreTranscriberMetadata
-//	println " metadataToKeep: "+metadatasToKeep
-//	println " ignored csvHeaderSize: "+csvHeaderNumber
-	//println " includeComments: "+includeComments
-}
 
-
+// retrieve import specifiq parameters
+indexInterviewer = project.getImportParameters().getBoolean("indexInterviewer", true)
+ignoreTranscriberMetadata = project.getImportParameters().getBoolean("ignoreTranscriberMetadata", true)
 
-
-
 try {
 	if (!update) {
 		// Apply XSL
Index: tmp/org.txm.core/src/java/org/txm/importer/ImportFileManager.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/importer/ImportFileManager.java	(revision 0)
+++ tmp/org.txm.core/src/java/org/txm/importer/ImportFileManager.java	(revision 3026)
@@ -0,0 +1,210 @@
+package org.txm.importer;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.LinkedHashMap;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.txm.utils.logger.Log;
+import org.txm.utils.xml.DomUtils;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+/**
+ * Read and save a import parameter file
+ * 
+ * The file is read to fill the ImportFormEditor > CorpusPage widgets
+ * 
+ * @author mdecorde
+ *
+ */
+public class ImportFileManager {
+	
+	Document doc;
+	
+	File importFile;
+	
+	/**
+	 * one map per import section
+	 */
+	LinkedHashMap<String, LinkedHashMap<String, String>> sections = new LinkedHashMap<>();
+	
+	public ImportFileManager(File importFile) {
+		this.importFile = importFile;
+	}
+	
+	public LinkedHashMap<String, LinkedHashMap<String, String>> getSections() {
+		return sections;
+	}
+	
+	public LinkedHashMap<String, String> getSection(String name) {
+		if (name == null) return null;
+		return sections.get(name);
+	}
+	
+	public String load() {
+		try {
+			doc = DomUtils.load(importFile);
+			
+			String name = doc.getDocumentElement().getLocalName();
+			if (!"import".equals(name)) {
+				return "Not a  import parameter file: " + importFile;
+			}
+			String version = doc.getDocumentElement().getAttribute("version");
+			if ("0.7.9".equals(version)) {
+				loadFrom079();
+			}
+			else if ("0.8.2".equals(version)) {
+				genericLoad();
+			}
+			else {
+				return "Wrong import parameter file version: " + importFile + ": " + version;
+			}
+			return "";
+		}
+		catch (ParserConfigurationException | SAXException | IOException e) {
+			e.printStackTrace();
+			return e.getMessage();
+		}
+	}
+	
+	/**
+	 * simple reading of all section parameters are stored in a section element with parameter elements (@key + text)
+	 */
+	private void genericLoad() {
+		sections.clear();
+		
+		NodeList sectionList = doc.getElementsByTagName("section");
+		for (int i = 0; i < sectionList.getLength(); i++) {
+			Element section = (Element) sectionList.item(i);
+			String name = section.getAttribute("name");
+			if (name == null || name.length() == 0) {
+				Log.warning("Load import 0.8.2 parameters: section with no name");
+				continue;
+			}
+			if (sections.containsKey(name)) {
+				Log.warning("Load import 0.8.2 parameters: duplicated section with name:" + name);
+				continue;
+			}
+			
+			LinkedHashMap<String, String> sectionParameters = new LinkedHashMap<>();
+			sections.put(name, sectionParameters);
+			NodeList parameterList = doc.getElementsByTagName("parameter");
+			for (int j = 0; j < parameterList.getLength(); j++) {
+				Element parameter = (Element) parameterList.item(j);
+				String name2 = parameter.getAttribute("name");
+				if (name2 == null || name2.length() == 0) {
+					Log.warning("Load import 0.8.2 parameters: parameter with no name in section: " + name);
+					continue;
+				}
+				if (sectionParameters.containsKey(name2)) {
+					Log.warning("Load import 0.8.2 parameters: duplicated parameter with name:" + name2 + " in section: " + name);
+					continue;
+				}
+				
+				sectionParameters.put(name2, parameter.getTextContent());
+			}
+		}
+	}
+	
+	private void loadFrom079() {
+		sections.clear();
+		
+		Element corporaElement = (Element) doc.getElementsByTagName("corpora").item(0);
+		Element corpusElement = (Element) corporaElement.getElementsByTagName("corpus").item(0);
+		Element tokenizerElement = (Element) corpusElement.getElementsByTagName("tokenizer").item(0);
+		Element pattributesElement = (Element) corpusElement.getElementsByTagName("pattributes").item(0);
+		Element sattributesElement = (Element) corpusElement.getElementsByTagName("sattributes").item(0);
+		Element uisElement = (Element) corpusElement.getElementsByTagName("uis").item(0);
+		Element editionsElement = (Element) corpusElement.getElementsByTagName("editions").item(0);
+		Element queriesElement = (Element) corpusElement.getElementsByTagName("queries").item(0);
+		Element preBuildElement = (Element) corpusElement.getElementsByTagName("preBuild").item(0);
+		Element xsltElement = (Element) corpusElement.getElementsByTagName("xslt").item(0);
+		
+		LinkedHashMap<String, String> section = new LinkedHashMap<>();
+		section.put("src", corporaElement.getAttribute("rootDir"));
+		section.put("desc", corporaElement.getAttribute("desc"));
+		section.put("script", corporaElement.getAttribute("script"));
+		section.put("date", corporaElement.getAttribute("date"));
+		section.put("author", corporaElement.getAttribute("author"));
+		section.put("author", corpusElement.getAttribute("name"));
+		sections.put("src", section);
+		
+		section = new LinkedHashMap<>();
+		section.put("annotate", corpusElement.getAttribute("annotate"));
+		section.put("selected_lang", corpusElement.getAttribute("lang"));
+		sections.put("lang", section);
+		
+		section = new LinkedHashMap<>();
+		section.put("word_element", corpusElement.getAttribute("annotate"));
+		section.put("tokenize", "" + (tokenizerElement.getAttribute("skip") != "true"));
+		NodeList paramList = tokenizerElement.getElementsByTagName("param");
+		for (int p = 0; p < paramList.getLength(); p++) {
+			String pn = paramList.item(p).getAttributes().getNamedItem("name").getNodeValue();
+			if (pn.equals("whitespaces")) {
+				section.put("whitespaces", paramList.item(p).getTextContent());
+			}
+			else if (pn.equals("regPunct")) {
+				section.put("regPunct", paramList.item(p).getTextContent());
+			}
+			else if (pn.equals("punct_strong")) {
+				section.put("punct_strong", paramList.item(p).getTextContent());
+			}
+			else if (pn.equals("regElision")) {
+				section.put("regElision", paramList.item(p).getTextContent());
+			}
+		}
+		sections.put("tokenizer", section);
+		
+		section = new LinkedHashMap<>();
+		section.put("font", corpusElement.getAttribute("font"));
+		sections.put("font", section);
+		
+		section = new LinkedHashMap<>();
+		NodeList editionList = editionsElement.getElementsByTagName("edition");
+		for (int e = 0; e < editionList.getLength(); e++) {
+			Element editionElement = (Element) editionList.item(e);
+			if ("default".equals(editionElement.getAttribute("name"))) {
+				section.put("build_default", editionElement.getAttribute("build_edition"));
+				section.put("page_break_tag", editionElement.getAttribute("page_break_tag"));
+				section.put("words_per_page", editionElement.getAttribute("words_per_page"));
+			}
+			else if ("facs".equals(editionElement.getAttribute("name"))) {
+				section.put("build_facs", editionElement.getAttribute("build_edition"));
+			}
+		}
+		section.put("default", editionsElement.getAttribute("default"));
+		sections.put("editions", section);
+		
+		section = new LinkedHashMap<>();
+		sections.put("commands", section);
+		
+		section = new LinkedHashMap<>();
+		sections.put("commands", section);
+		
+		section = new LinkedHashMap<>();
+		sections.put("textualplans", section);
+		
+		section = new LinkedHashMap<>();
+		sections.put("options", section);
+	}
+	
+	public String save() {
+		try {
+			if (doc == null) {
+				return "Import parameter not loaded";
+			}
+			DomUtils.save(doc, importFile);
+			return "";
+		}
+		catch (UnsupportedEncodingException | FileNotFoundException e) {
+			e.printStackTrace();
+			return e.getMessage();
+		}
+	}
+}

Property changes on: tmp/org.txm.core/src/java/org/txm/importer/ImportFileManager.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

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 3025)
+++ tmp/org.txm.core/src/java/org/txm/core/results/TXMResult.java	(revision 3026)
@@ -458,7 +458,7 @@
 	 */
 	public Object getParameter(String key, boolean propagateToParent) {
 		try {
-			Field field = this.getField(key);
+			Field field = BeanParameters.getField(this, key);
 			if (field != null) {
 				field.setAccessible(true);
 				return field.get(this);
@@ -473,49 +473,7 @@
 		return null;
 	}
 	
-	
 	/**
-	 * Gets a member field according to its key.
-	 * 
-	 * @param key
-	 * @return the field if exists otherwise null
-	 */
-	public Field getField(String key) {
-		
-		Field field = null;
-		
-		List<Field> fields = this.getAllFields();
-		
-		for (Field f : fields) {
-			Parameter parameter = f.getAnnotation(Parameter.class);
-			if (parameter != null && parameter.key().equals(key)) {
-				field = f;
-				break;
-			}
-		}
-		
-		return field;
-	}
-	
-	/**
-	 * Returns all the member fields of the class instance (from all inherited classes).
-	 * 
-	 * @return the list of declared fields
-	 */
-	public List<Field> getAllFields() {
-		
-		List<Field> fields = new ArrayList<>();
-		Class<?> clazz = this.getClass();
-		
-		while (clazz != Object.class) {
-			fields.addAll(Arrays.asList(clazz.getDeclaredFields()));
-			clazz = clazz.getSuperclass();
-		}
-		
-		return fields;
-	}
-	
-	/**
 	 * Stores the parameters of the specified types used for last computing in the specified HashMap.
 	 * 
 	 * @param parameterTypes
@@ -524,7 +482,7 @@
 	 */
 	protected void updateLastParameters(ArrayList<Integer> parametersTypes, HashMap<String, Object> lastParameters) throws Exception {
 		
-		List<Field> fields = this.getAllFields();
+		List<Field> fields = BeanParameters.getAllFields(this);
 		
 		for (Field f : fields) {
 			Parameter parameter = f.getAnnotation(Parameter.class);
@@ -588,7 +546,7 @@
 	 * @throws Exception
 	 */
 	protected void clearLastParameters(int parameterType) {
-		List<Field> fields = this.getAllFields();
+		List<Field> fields = BeanParameters.getAllFields(this);
 		
 		for (Field f : fields) {
 			Parameter parameter = f.getAnnotation(Parameter.class);
@@ -684,7 +642,7 @@
 		
 		boolean hasParameterChanged = false;
 		
-		List<Field> fields = this.getAllFields();
+		List<Field> fields = BeanParameters.getAllFields(this);
 		
 		for (Field f : fields) {
 			Parameter parameter = f.getAnnotation(Parameter.class);
@@ -770,7 +728,7 @@
 		
 		str.append("Parameters (type = " + parametersType + " / " + Parameter.types[parametersType] + ")\n"); //$NON-NLS-1$
 		
-		List<Field> fields = this.getAllFields();
+		List<Field> fields = BeanParameters.getAllFields(this);
 		
 		for (Field f : fields) {
 			Parameter parameter = f.getAnnotation(Parameter.class);
@@ -1126,7 +1084,7 @@
 			this.lazyName = this.getSimpleName();
 		}
 		
-		List<Field> fields = this.getAllFields();
+		List<Field> fields = BeanParameters.getAllFields(this);
 		
 		for (Field f : fields) {
 			Parameter parameter = f.getAnnotation(Parameter.class);
@@ -1240,7 +1198,7 @@
 	 */
 	protected boolean autoLoadParametersFromAnnotations(int parameterType) throws Exception {
 		
-		List<Field> fields = this.getAllFields();
+		List<Field> fields = BeanParameters.getAllFields(this);
 		
 		for (Field f : fields) {
 			
@@ -1355,21 +1313,8 @@
 	 */
 	public boolean setParameter(String key, Object value, boolean propagateToParent) throws Exception {
 		
-		List<Field> fields = this.getAllFields();
+		Field targetField = BeanParameters.getField(this, key);
 		
-		Field targetField = null;
-		
-		for (Field f : fields) {
-			Parameter parameter = f.getAnnotation(Parameter.class);
-			if (parameter == null) {
-				continue;
-			}
-			if (!parameter.key().isEmpty() && parameter.key().equals(key)) {
-				targetField = f;
-				break;
-			}
-		}
-		
 		if (targetField != null) {
 			targetField.setAccessible(true);
 			targetField.set(this, value);
Index: tmp/org.txm.core/src/java/org/txm/core/results/BeanParameters.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/core/results/BeanParameters.java	(revision 0)
+++ tmp/org.txm.core/src/java/org/txm/core/results/BeanParameters.java	(revision 3026)
@@ -0,0 +1,90 @@
+package org.txm.core.results;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+/**
+ * Utility class to read/write values to a bean
+ * 
+ * @author mdecorde
+ *
+ */
+public class BeanParameters {
+	
+	/**
+	 * Gets a member field according to its key.
+	 * 
+	 * Avoid calling multiple times this method and use getAllFields
+	 * 
+	 * @param key
+	 * @return the field if exists otherwise null
+	 */
+	public static Field getField(Object bean, String key) {
+		if (bean == null) throw new IllegalArgumentException("Object must not be null");
+		if (key == null) throw new IllegalArgumentException("Parameter key must not be null");
+		
+		Field field = null;
+		
+		List<Field> fields = getAllFields(bean);
+		
+		for (Field f : fields) {
+			Parameter parameter = f.getAnnotation(Parameter.class);
+			if (parameter != null && parameter.key().equals(key)) {
+				field = f;
+				break;
+			}
+		}
+		
+		return field;
+	}
+	
+	/**
+	 * Returns all the member fields of the class instance (from all inherited classes).
+	 * 
+	 * @return the list of declared fields with a Parameter annotation
+	 */
+	public static LinkedHashMap<String, Field> getFieldsPerName(Object bean) {
+		LinkedHashMap<String, Field> ret = new LinkedHashMap<>();
+		for (Field f : getAllFields(bean)) {
+			Parameter p = f.getAnnotation(Parameter.class);
+			ret.put(p.key(), f);
+		}
+		return ret;
+	}
+	
+	/**
+	 * Returns all the member fields of the class instance (from all inherited classes).
+	 * 
+	 * @return the list of declared fields with a Parameter annotation
+	 */
+	public static List<Field> getAllFields(Object bean) {
+		if (bean == null) throw new IllegalArgumentException("Object must not be null");
+		
+		List<Field> fields = new ArrayList<>();
+		Class<?> clazz = bean.getClass();
+		
+		while (clazz != Object.class) {
+			
+			for (Field f : Arrays.asList(clazz.getDeclaredFields())) {
+				Parameter parameter = f.getAnnotation(Parameter.class);
+				if (parameter == null) {
+					continue;
+				}
+				String key = parameter.key();
+				if (key.isEmpty()) {
+					continue; // no preference key defined
+				}
+				
+				f.setAccessible(true);
+				fields.add(f);
+			}
+			
+			clazz = clazz.getSuperclass();
+		}
+		
+		return fields;
+	}
+}

Property changes on: tmp/org.txm.core/src/java/org/txm/core/results/BeanParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

