Index: tmp/org.txm.analec.rcp/src/org/txm/annotation/urs/toolbar/UnitToolbar.java
===================================================================
--- tmp/org.txm.analec.rcp/src/org/txm/annotation/urs/toolbar/UnitToolbar.java	(revision 2393)
+++ tmp/org.txm.analec.rcp/src/org/txm/annotation/urs/toolbar/UnitToolbar.java	(revision 2394)
@@ -303,8 +303,9 @@
 				//					}
 				//				}
 
-				if (ids != null && typeCombo.getSelectionIndex() > 0 && typeCombo.getEnabled())
+				if (ids != null && typeCombo.getSelectionIndex() > 0 && typeCombo.getEnabled()) {
 					createButton.setEnabled(true); // there is a text selection in the browser
+				}
 			}
 
 			@Override
@@ -360,10 +361,11 @@
 
 						testIfAwordSpanIsSelected(ids);				
 
-						panel.expandSelectionTo(ids);
+						//panel.expandSelectionTo(ids);
 						return;
 					}
 				}
+				
 				if (e.button != 1) {
 					if (debug) System.out.println(" NO LEFT"); //$NON-NLS-1$
 					//System.out.println("not a left click");
Index: tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/EditionPanel.java
===================================================================
--- tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/EditionPanel.java	(revision 2393)
+++ tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/EditionPanel.java	(revision 2394)
@@ -23,6 +23,8 @@
 import org.eclipse.swt.browser.ProgressListener;
 import org.eclipse.swt.events.MenuEvent;
 import org.eclipse.swt.events.MenuListener;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.widgets.Composite;
@@ -42,8 +44,8 @@
 import org.txm.utils.logger.Log;
 
 public class EditionPanel extends BrowserViewer implements ISelectionProvider {
-
-
+	
+	
 	private ProgressListener progresslistener;
 	//	private List<String> wordids;
 	//	private List<String> lineids;
@@ -54,11 +56,11 @@
 	protected SynopticEditionEditor synopticEditionEditor;
 	private ISelectionProvider selProvider;
 	private MenuManager menuManager;
-
+	
 	private HashSet<int[]> highlightedAreas = null;
-
+	
 	//HashMap<String, ArrayList<RGBA>> highlightedColorSpans = new HashMap<String, ArrayList<RGBA>>(); // background color
-
+	
 	HashMap<String, ArrayList<RGBA>> highlightedColorPerWordIDS = new HashMap<String, ArrayList<RGBA>>(); // background color
 	public static final String STYLE_NORMAL = "normal"; //$NON-NLS-1$
 	public static final String STYLE_ITALIC = "italic"; //$NON-NLS-1$
@@ -82,7 +84,7 @@
 	public static final String VARIANT_SMALLCAPS = "small-caps"; //$NON-NLS-1$
 	HashMap<String, String> fontVariantPerWordIDS = new HashMap<String, String>();
 	String focusedWordID = null;
-
+	
 	public static final String highlightscript = "try { var elt = document.getElementById(\"%s\");" + //$NON-NLS-1$ //$NON-NLS-2$
 			"elt.style.backgroundColor=\"rgb(%s,%s,%s)\";" + //$NON-NLS-1$
 			//"elt.style.paddingLeft=\"3px\";" + //$NON-NLS-1$
@@ -97,124 +99,125 @@
 	public static final String variantscriptRuleFast = "sheet.insertRule(\"#%s {font-variant:%s;}\", 0);"; //$NON-NLS-1$
 	public static final String famillyscriptRuleFast = "sheet.insertRule(\"#%s {font-familly:%s;}\", 0);"; //$NON-NLS-1$
 	public static final String weightscriptRuleFast = "sheet.insertRule(\"#%s {font-weight:%s;}\", 0);"; //$NON-NLS-1$
-
+	
 	public static final String highlightscriptRule = "sheet.insertRule(\"span[id=\\\"%s\\\"] {background-color:rgba(%s,%s,%s,%s); }\", 0);"; //$NON-NLS-1$
-
+	
 	public static final String clearhighlightscript = "try { var elt = document.getElementById(\"%s\"); elt.style.backgroundColor=\"white\";elt.style.fontWeight=\"\";" + //$NON-NLS-1$
 			"} catch (e) { };"; //$NON-NLS-1$
-
+	
 	public String functions = 
 			""//"alert(\"loading functions\");" //$NON-NLS-1$
-					+"\nfunction getNodeText(node) {" //$NON-NLS-1$
-					+"\n	if (typeof node == 'string') return node;" //$NON-NLS-1$
-					+"\n	else if (typeof  node.innerText != 'undefined') return node.innerText;" //$NON-NLS-1$
-					+"\n	else if (typeof  node.InnerText != 'undefined') return node.InnerText;" //$NON-NLS-1$
-					+"\n	else if (typeof  node.textContent != 'undefined') return node.textContent;" //$NON-NLS-1$
-					+"\n	else return null;" //$NON-NLS-1$
-					+"\n}" //$NON-NLS-1$
-					+"\nfunction txmGetParent(node) {" //$NON-NLS-1$
-					+"\n	if (typeof  node.parentNode != 'undefined') return node.parentNode;" //$NON-NLS-1$
-					+"\n	else return null;" //$NON-NLS-1$
-					+"\n}" //$NON-NLS-1$
-					+"\nfunction txmGetChildren(node) {" //$NON-NLS-1$
-					+"\n	if (typeof node == 'string') return 'STRING HTML';" //$NON-NLS-1$
-					+"\n	else if (typeof  node.children != 'undefined') return node.children;" //$NON-NLS-1$
-					+"\n	else if (typeof  node.ChildNodes != 'undefined') return node.ChildNodes;" //$NON-NLS-1$
-					+"\n	else if (typeof  node.childNodes != 'undefined') return node.childNodes;" //$NON-NLS-1$
-					+"\n	else return null;" //$NON-NLS-1$
-					+"\n}" //$NON-NLS-1$
-					+"\nfunction txmGetSelection() {" //$NON-NLS-1$
-					+"\n	if (typeof window.getSelection != 'undefined') {return window.getSelection();}" //$NON-NLS-1$
-					+"\n	else if (typeof document.selection != 'undefined') { return document.selection;}" //$NON-NLS-1$
-					+"\n	else return 'NO SELECTION';" //$NON-NLS-1$
-					+"\n}" //$NON-NLS-1$
-					+"\nfunction txmGetRangeSize(selection) {" //$NON-NLS-1$
-					+"\n	if (typeof selection.rangeCount != 'undefined') {return selection.rangeCount;}" //$NON-NLS-1$
-					+"\n	else if (typeof selection.createRangeCollection != 'undefined') { return selection.createRangeCollection().length();} // IE5 has no multiple selection" //$NON-NLS-1$
-					+"\n}" //$NON-NLS-1$
-					+"\nfunction txmGetRange(selection, i) {" //$NON-NLS-1$
-					+"\n	if (typeof selection.getRangeAt != 'undefined') {return selection.getRangeAt(i);}" //$NON-NLS-1$
-					+"\n	else if (typeof selection.createRangeCollection != 'undefined') {return selection.createRangeCollection().item(i);}" // IE > IE5  //$NON-NLS-1$
-					+"\n	else if (typeof selection.createRange != 'undefined') { return selection.createRange();} // IE5 has no multiple selection" //$NON-NLS-1$
-					+"\n	else return 'NO RANGE';" //$NON-NLS-1$
-					+"\n}" //$NON-NLS-1$
-					+"\nfunction txmGetParentElementRange(range) {" //$NON-NLS-1$
-					+"\n	if (typeof range.parentElement != 'undefined') {return range.parentElement();}" //$NON-NLS-1$
-					+"\n	else if (typeof range.startContainer != 'undefined') { return range.startContainer.parentNode;}" //$NON-NLS-1$
-					+"\n	else return 'NO PARENT';" //$NON-NLS-1$
-					+"\n}" //$NON-NLS-1$
-					+"\nfunction txmGetFragment(range) {" //$NON-NLS-1$
-					+"\n	if (typeof range.cloneContents != 'undefined') { return range.cloneContents();}" //$NON-NLS-1$
-					+"\n	else if (typeof range.htmlText != 'undefined') {var node = document.createElement('sel'); node.innerHTML = range.htmlText; 		return node;" //$NON-NLS-1$
-					+"\n	} else return 'NO FRAG';" //$NON-NLS-1$
-					+"\n}" //$NON-NLS-1$
-					+"\nfunction txmGetTagName(node) {" //$NON-NLS-1$
-					+"\n	if (typeof node.tagName != 'undefined') {return node.tagName;}" //$NON-NLS-1$
-					+"\n	else if (typeof node.nodeName != 'undefined') { return node.nodeName;}" //$NON-NLS-1$
-					+"\n	else if (typeof node.name != 'undefined') { return node.name;}" //$NON-NLS-1$
-					+"\n	else return 'NO TAGNAME';" //$NON-NLS-1$
-					+"\n}" //$NON-NLS-1$
-					+"\nfunction findSpans(children, all) {" //$NON-NLS-1$
-					+"\n    for (var i = 0 ; i < children.length ; i++) {" //$NON-NLS-1$
-					+"\n    	var node = children.item(i);" //$NON-NLS-1$
-					+"\n		if (node.nodeType == 1) {" //$NON-NLS-1$
-					+"\n    	var id = node.getAttribute('id');" //$NON-NLS-1$
-					+"\n       		if (node.tagName == 'SPAN' && id != null && id.indexOf('w_') == 0 && getNodeText(node).length > 0) {" //$NON-NLS-1$
-					+"\n            	if (id != null) all.push(id);" //$NON-NLS-1$
-					+"\n        	} else {" //$NON-NLS-1$
-					+"\n        		findSpans(txmGetChildren(node), all)" //$NON-NLS-1$
-					+"\n        	}" //$NON-NLS-1$
-					+"\n		}" //$NON-NLS-1$
-					+"\n	}" //$NON-NLS-1$
-					+"\n}" //$NON-NLS-1$
-					+"\nfunction findIdsInString(str, all) {" //$NON-NLS-1$
-					+"\n    for (var i = 0 ; i < children.length ; i++) {" //$NON-NLS-1$
-					+"\n    	var node = children.item(i);" //$NON-NLS-1$
-					+"\n		if (node.nodeType == 1) {" //$NON-NLS-1$
-					+"\n    	var id = node.getAttribute('id');" //$NON-NLS-1$
-					+"\n       		if (node.tagName == 'SPAN' && id != null && id.indexOf('w_') == 0 && getNodeText(node).length > 0) {" //$NON-NLS-1$
-					+"\n            	if (id != null) all.push(id);" //$NON-NLS-1$
-					+"\n        	} else {" //$NON-NLS-1$
-					+"\n        		findSpans(txmGetChildren(node), all)" //$NON-NLS-1$
-					+"\n        	}" //$NON-NLS-1$
-					+"\n		}" //$NON-NLS-1$
-					+"\n	}" //$NON-NLS-1$
-					+"\n}" //$NON-NLS-1$
-					+"\nfunction get_type(thing){if(thing===null)return \"[object Null]\";  return Object.prototype.toString.call(thing);}\n" //$NON-NLS-1$
-					+"\nfunction getDetailedObject(inputObject) { var detailedObject = {}; var properties; \n   do {        properties = Object.getOwnPropertyNames( inputObject );        for (var o in properties) {detailedObject[properties[o]] = inputObject[properties[o]];}} while ( inputObject = Object.getPrototypeOf(inputObject) );return detailedObject;}\n" //$NON-NLS-1$
-					+"\nvar sheet = null;" //$NON-NLS-1$
-					+"\ntry{" //$NON-NLS-1$
-					+"\n	var style = document.createElement(\"style\");" //$NON-NLS-1$
-					+"\n	try { style.appendChild(document.createTextNode(\"\")); } catch (e) {};"//webkit hack //$NON-NLS-1$
-					+"\n	document.body.appendChild(style);" //$NON-NLS-1$
-					+"\n	sheet = style.sheet;" //$NON-NLS-1$
-					+"\n} catch(e) {sheet='error'}" //$NON-NLS-1$
-					+"\ntry{" //$NON-NLS-1$
-					+"\n" // define scrollIntoViewIfNeeded if absent //$NON-NLS-1$
-					+"\nif (!Element.prototype.scrollIntoViewIfNeeded) {" //$NON-NLS-1$
-					+"\n	Element.prototype.scrollIntoViewIfNeeded = function (centerIfNeeded) {" //$NON-NLS-1$
-					+"\n		centerIfNeeded = arguments.length === 0 ? true : !!centerIfNeeded;" //$NON-NLS-1$
-					+"\n		var parent = this.parentNode," //$NON-NLS-1$
-					+"\n		parentComputedStyle = window.getComputedStyle(parent, null)," //$NON-NLS-1$
-					+"\n		parentBorderTopWidth = parseInt(parentComputedStyle.getPropertyValue('border-top-width'))," //$NON-NLS-1$
-					+"\n		parentBorderLeftWidth = parseInt(parentComputedStyle.getPropertyValue('border-left-width'))," //$NON-NLS-1$
-					+"\n		overTop = this.offsetTop - parent.offsetTop < parent.scrollTop," //$NON-NLS-1$
-					+"\n		overBottom = (this.offsetTop - parent.offsetTop + this.clientHeight - parentBorderTopWidth) > (parent.scrollTop + parent.clientHeight)," //$NON-NLS-1$
-					+"\n		overLeft = this.offsetLeft - parent.offsetLeft < parent.scrollLeft," //$NON-NLS-1$
-					+"\n		overRight = (this.offsetLeft - parent.offsetLeft + this.clientWidth - parentBorderLeftWidth) > (parent.scrollLeft + parent.clientWidth)," //$NON-NLS-1$
-					+"\n		alignWithTop = overTop && !overBottom;" //$NON-NLS-1$
-					+"\n		if ((overTop || overBottom) && centerIfNeeded) {" //$NON-NLS-1$
-					+"\n			parent.scrollTop = this.offsetTop - parent.offsetTop - parent.clientHeight / 2 - parentBorderTopWidth + this.clientHeight / 2;" //$NON-NLS-1$
-					+"\n		}" //$NON-NLS-1$
-					+"\n		if ((overLeft || overRight) && centerIfNeeded) {" //$NON-NLS-1$
-					+"\n			parent.scrollLeft = this.offsetLeft - parent.offsetLeft - parent.clientWidth / 2 - parentBorderLeftWidth + this.clientWidth / 2;" //$NON-NLS-1$
-					+"\n		}" //$NON-NLS-1$
-					+"\n		if ((overTop || overBottom || overLeft || overRight) && !centerIfNeeded) {" //$NON-NLS-1$
-					+"\n			this.scrollIntoView(alignWithTop);" //$NON-NLS-1$
-					+"\n		}" //$NON-NLS-1$
-					+"\n	};" //$NON-NLS-1$
-					+"\n}" //$NON-NLS-1$
-					+"\n} catch(e) {Element.prototype.scrollIntoViewIfNeeded = Element.prototype.scrollIntoView}"; //$NON-NLS-1$
+			+"\nfunction getNodeText(node) {" //$NON-NLS-1$
+			+"\n	if (typeof node == 'string') return node;" //$NON-NLS-1$
+			+"\n	else if (typeof  node.innerText != 'undefined') return node.innerText;" //$NON-NLS-1$
+			+"\n	else if (typeof  node.InnerText != 'undefined') return node.InnerText;" //$NON-NLS-1$
+			+"\n	else if (typeof  node.textContent != 'undefined') return node.textContent;" //$NON-NLS-1$
+			+"\n	else return null;" //$NON-NLS-1$
+			+"\n}" //$NON-NLS-1$
+			+"\nfunction txmGetParent(node) {" //$NON-NLS-1$
+			+"\n	if (typeof  node.parentNode != 'undefined') return node.parentNode;" //$NON-NLS-1$
+			+"\n	else return null;" //$NON-NLS-1$
+			+"\n}" //$NON-NLS-1$
+			+"\nfunction txmGetChildren(node) {" //$NON-NLS-1$
+			+"\n	if (typeof node == 'string') return 'STRING HTML';" //$NON-NLS-1$
+			+"\n	else if (typeof  node.children != 'undefined') return node.children;" //$NON-NLS-1$
+			+"\n	else if (typeof  node.ChildNodes != 'undefined') return node.ChildNodes;" //$NON-NLS-1$
+			+"\n	else if (typeof  node.childNodes != 'undefined') return node.childNodes;" //$NON-NLS-1$
+			+"\n	else return null;" //$NON-NLS-1$
+			+"\n}" //$NON-NLS-1$
+			+"\nfunction txmGetSelection() {" //$NON-NLS-1$
+			+"\n	if (typeof window.getSelection != 'undefined') {return window.getSelection();}" //$NON-NLS-1$
+			+"\n	else if (typeof document.selection != 'undefined') { return document.selection;}" //$NON-NLS-1$
+			+"\n	else return 'NO SELECTION';" //$NON-NLS-1$
+			+"\n}" //$NON-NLS-1$
+			+"\nfunction txmGetRangeSize(selection) {" //$NON-NLS-1$
+			+"\n	if (typeof selection.rangeCount != 'undefined') {return selection.rangeCount;}" //$NON-NLS-1$
+			+"\n	else if (typeof selection.createRangeCollection != 'undefined') { return selection.createRangeCollection().length();} // IE5 has no multiple selection" //$NON-NLS-1$
+			+"\n}" //$NON-NLS-1$
+			+"\nfunction txmGetRange(selection, i) {" //$NON-NLS-1$
+			+"\n	if (typeof selection.getRangeAt != 'undefined') {return selection.getRangeAt(i);}" //$NON-NLS-1$
+			+"\n	else if (typeof selection.createRangeCollection != 'undefined') {return selection.createRangeCollection().item(i);}" // IE > IE5  //$NON-NLS-1$
+			+"\n	else if (typeof selection.createRange != 'undefined') { return selection.createRange();} // IE5 has no multiple selection" //$NON-NLS-1$
+			+"\n	else return 'NO RANGE';" //$NON-NLS-1$
+			+"\n}" //$NON-NLS-1$
+			+"\nfunction txmGetParentElementRange(range) {" //$NON-NLS-1$
+			+"\n	if (typeof range.parentElement != 'undefined') {return range.parentElement();}" //$NON-NLS-1$
+			+"\n	else if (typeof range.startContainer != 'undefined') { return range.startContainer.parentNode;}" //$NON-NLS-1$
+			+"\n	else return 'NO PARENT';" //$NON-NLS-1$
+			+"\n}" //$NON-NLS-1$
+			+"\nfunction txmGetFragment(range) {" //$NON-NLS-1$
+			+"\n	if (typeof range.cloneContents != 'undefined') { return range.cloneContents();}" //$NON-NLS-1$
+			+"\n	else if (typeof range.htmlText != 'undefined') {var node = document.createElement('sel'); node.innerHTML = range.htmlText; 		return node;" //$NON-NLS-1$
+			+"\n	} else return 'NO FRAG';" //$NON-NLS-1$
+			+"\n}" //$NON-NLS-1$
+			+"\nfunction txmGetTagName(node) {" //$NON-NLS-1$
+			+"\n	if (typeof node.tagName != 'undefined') {return node.tagName;}" //$NON-NLS-1$
+			+"\n	else if (typeof node.nodeName != 'undefined') { return node.nodeName;}" //$NON-NLS-1$
+			+"\n	else if (typeof node.name != 'undefined') { return node.name;}" //$NON-NLS-1$
+			+"\n	else return 'NO TAGNAME';" //$NON-NLS-1$
+			+"\n}" //$NON-NLS-1$
+			+"\nfunction findSpans(children, all) {" //$NON-NLS-1$
+			+"\n    for (var i = 0 ; i < children.length ; i++) {" //$NON-NLS-1$
+			+"\n    	var node = children.item(i);" //$NON-NLS-1$
+			+"\n		if (node.nodeType == 1) {" //$NON-NLS-1$
+			+"\n    	var id = node.getAttribute('id');" //$NON-NLS-1$
+			+"\n       		if (node.tagName == 'SPAN' && id != null && id.indexOf('w_') == 0 && getNodeText(node).length > 0) {" //$NON-NLS-1$
+			+"\n            	if (id != null) all.push(id);" //$NON-NLS-1$
+			+"\n        	} else {" //$NON-NLS-1$
+			+"\n        		findSpans(txmGetChildren(node), all)" //$NON-NLS-1$
+			+"\n        	}" //$NON-NLS-1$
+			+"\n		}" //$NON-NLS-1$
+			+"\n	}" //$NON-NLS-1$
+			+"\n}" //$NON-NLS-1$
+			+"\nfunction findIdsInString(str, all) {" //$NON-NLS-1$
+			+"\n    for (var i = 0 ; i < children.length ; i++) {" //$NON-NLS-1$
+			+"\n    	var node = children.item(i);" //$NON-NLS-1$
+			+"\n		if (node.nodeType == 1) {" //$NON-NLS-1$
+			+"\n    	var id = node.getAttribute('id');" //$NON-NLS-1$
+			+"\n       		if (node.tagName == 'SPAN' && id != null && id.indexOf('w_') == 0 && getNodeText(node).length > 0) {" //$NON-NLS-1$
+			+"\n            	if (id != null) all.push(id);" //$NON-NLS-1$
+			+"\n        	} else {" //$NON-NLS-1$
+			+"\n        		findSpans(txmGetChildren(node), all)" //$NON-NLS-1$
+			+"\n        	}" //$NON-NLS-1$
+			+"\n		}" //$NON-NLS-1$
+			+"\n	}" //$NON-NLS-1$
+			+"\n}" //$NON-NLS-1$
+			+"\nfunction get_type(thing){if(thing===null)return \"[object Null]\";  return Object.prototype.toString.call(thing);}\n" //$NON-NLS-1$
+			+"\nfunction getDetailedObject(inputObject) { var detailedObject = {}; var properties; \n   do {        properties = Object.getOwnPropertyNames( inputObject );        for (var o in properties) {detailedObject[properties[o]] = inputObject[properties[o]];}} while ( inputObject = Object.getPrototypeOf(inputObject) );return detailedObject;}\n" //$NON-NLS-1$
+			+"\nvar sheet = null;" //$NON-NLS-1$
+			+"\ntry{" //$NON-NLS-1$
+			+"\n	var style = document.createElement(\"style\");" //$NON-NLS-1$
+			+"\n	try { style.appendChild(document.createTextNode(\"\")); } catch (e) {};"//webkit hack //$NON-NLS-1$
+			+"\n	document.body.appendChild(style);" //$NON-NLS-1$
+			+"\n	sheet = style.sheet;" //$NON-NLS-1$
+			+"\n} catch(e) {sheet='error'}" //$NON-NLS-1$
+			+"\ntry{" //$NON-NLS-1$
+			+"\n" // define scrollIntoViewIfNeeded if absent //$NON-NLS-1$
+			+"\nif (!Element.prototype.scrollIntoViewIfNeeded) {" //$NON-NLS-1$
+			+"\n	Element.prototype.scrollIntoViewIfNeeded = function (centerIfNeeded) {" //$NON-NLS-1$
+			+"\n		centerIfNeeded = arguments.length === 0 ? true : !!centerIfNeeded;" //$NON-NLS-1$
+			+"\n		var parent = this.parentNode," //$NON-NLS-1$
+			+"\n		parentComputedStyle = window.getComputedStyle(parent, null)," //$NON-NLS-1$
+			+"\n		parentBorderTopWidth = parseInt(parentComputedStyle.getPropertyValue('border-top-width'))," //$NON-NLS-1$
+			+"\n		parentBorderLeftWidth = parseInt(parentComputedStyle.getPropertyValue('border-left-width'))," //$NON-NLS-1$
+			+"\n		overTop = this.offsetTop - parent.offsetTop < parent.scrollTop," //$NON-NLS-1$
+			+"\n		overBottom = (this.offsetTop - parent.offsetTop + this.clientHeight - parentBorderTopWidth) > (parent.scrollTop + parent.clientHeight)," //$NON-NLS-1$
+			+"\n		overLeft = this.offsetLeft - parent.offsetLeft < parent.scrollLeft," //$NON-NLS-1$
+			+"\n		overRight = (this.offsetLeft - parent.offsetLeft + this.clientWidth - parentBorderLeftWidth) > (parent.scrollLeft + parent.clientWidth)," //$NON-NLS-1$
+			+"\n		alignWithTop = overTop && !overBottom;" //$NON-NLS-1$
+			+"\n		if ((overTop || overBottom) && centerIfNeeded) {" //$NON-NLS-1$
+			+"\n			parent.scrollTop = this.offsetTop - parent.offsetTop - parent.clientHeight / 2 - parentBorderTopWidth + this.clientHeight / 2;" //$NON-NLS-1$
+			+"\n		}" //$NON-NLS-1$
+			+"\n		if ((overLeft || overRight) && centerIfNeeded) {" //$NON-NLS-1$
+			+"\n			parent.scrollLeft = this.offsetLeft - parent.offsetLeft - parent.clientWidth / 2 - parentBorderLeftWidth + this.clientWidth / 2;" //$NON-NLS-1$
+			+"\n		}" //$NON-NLS-1$
+			+"\n		if ((overTop || overBottom || overLeft || overRight) && !centerIfNeeded) {" //$NON-NLS-1$
+			+"\n			this.scrollIntoView(alignWithTop);" //$NON-NLS-1$
+			+"\n		}" //$NON-NLS-1$
+			+"\n	};" //$NON-NLS-1$
+			+"\n}" //$NON-NLS-1$
+			+"\n} catch(e) {Element.prototype.scrollIntoViewIfNeeded = Element.prototype.scrollIntoView}"; //$NON-NLS-1$
+	
 	protected boolean fastWordHighLight = SynopticEditionPreferences.getInstance().getBoolean(SynopticEditionPreferences.FAST_HIGHLIGHT);
 	private ArrayList<ProgressListener> beforeHighlighListeners;
 	public ArrayList<ProgressListener> getBeforeHighlighListeners() {
@@ -237,29 +240,28 @@
 		this.synopticEditionEditor = synopticEditionEditor;
 		this.currentEdition = edition;
 		this.currentText = currentEdition.getText();
-
+		
 		File functionsFile = null;
 		try {
-
 			Bundle bundle = Platform.getBundle("org.txm.edition.rcp"); //$NON-NLS-1$
 			URL fileURL = bundle.getEntry("res/js/functions.js"); //$NON-NLS-1$
 			URL r = FileLocator.resolve(fileURL);
 			Log.fine("Load JS functions from: "+r);
 			functions = IOUtils.getText(r, "UTF-8"); //$NON-NLS-1$
-
+			
 		} catch (Exception e) {
 			Log.severe(EditionUIMessages.bind(EditionUIMessages.error_while_reading, functionsFile, e.getLocalizedMessage()));
 			Log.printStackTrace(e);
 		}
-
+		
 		beforeHighlighListeners = new ArrayList<ProgressListener>();
 		afterHighlighListeners = new ArrayList<ProgressListener>();
 		
 		progresslistener = new ProgressListener() {
-
+			
 			@Override
 			public void changed(ProgressEvent event) { }
-
+			
 			@Override
 			public void completed(ProgressEvent event) {
 				
@@ -269,14 +271,14 @@
 					if (!execute(functions)) { // build the sheet if not present in the HTML DOM
 						Log.fine("JS execution (init) error with="+functions); //$NON-NLS-1$
 					} else {
-					
+						
 					}
 				}
 				
 				// do something before the highlight is done
 				for (ProgressListener pl : beforeHighlighListeners) { pl.completed(event);}
-
 				
+				
 				//System.out.println("highlight: "+highlightedColorPerWordIDS);
 				StringBuilder buffer = new StringBuilder();
 				//buffer.append("alert(\"\"+sheet);\n");
@@ -287,7 +289,7 @@
 				} else {
 					buffer.append("try { while(sheet.cssRules.length > 0) sheet.deleteRule(0); } catch (e) {};\n"); // empty style //$NON-NLS-1$
 				}
-
+				
 				if (buffer.length() > 0) {
 					if (!execute(buffer.toString())) {
 						Log.fine("JS execution error (delete cssRules) with="+buffer);
@@ -296,7 +298,7 @@
 				
 				
 				buffer = new StringBuilder();
-
+				
 				String firstWord = currentPage.getWordId();
 				Page nextPage = currentEdition.getNextPage(currentPage);
 				String lastWord = "w_999999999"; //$NON-NLS-1$
@@ -319,7 +321,7 @@
 				for (String wordid : highlightedColorPerWordIDS.keySet()) {
 					//Log.finest("words to highlight: "+highlightedColorPerWordIDS);
 					if (highlightedColorPerWordIDS.get(wordid).size() == 0) continue; // error
-
+					
 					//if (!slowWordHighLight) { //TODO: this code must be replaced with word position instead of word id comparaison
 					if (Edition.isFirstGTthanSecond(wordid, firstWord) < 0) continue; // skip the word to highlight
 					if (Edition.isFirstGTthanSecond(lastWord, wordid) < 0) continue; // skip the word to highlight
@@ -327,18 +329,18 @@
 					//n++;
 					RGBA composite = new RGBA(0,0,0,0f);
 					int size = highlightedColorPerWordIDS.get(wordid).size();
-
+					
 					for (RGBA color : highlightedColorPerWordIDS.get(wordid)) {
 						composite.r += color.r;
 						composite.g += color.g;
 						composite.b += color.b;
 						composite.a += color.a;
 					}
-
+					
 					composite.r /= size;
 					composite.g /= size;
 					composite.b /= size;
-
+					
 					String s = null;
 					if (!fastWordHighLight) {
 						//s = String.format(highlightscriptRule, wordid, composite.r, composite.g, composite.b, composite.a);
@@ -354,10 +356,10 @@
 						s = String.format(highlightscriptRuleFast, wordid.replace(" ", "\\ "), composite.r, composite.g, composite.b, composite.a); //$NON-NLS-1$ //$NON-NLS-2$
 						//						s = String.format(highlightscriptRuleFast, wordid, composite.r, composite.g, composite.b, composite.a);
 					}
-
+					
 					buffer.append(s+"\n"); //$NON-NLS-1$
 				}
-
+				
 				if (buffer.length() > 0) {
 					if (!execute(buffer.toString())) {
 						Log.fine("JS execution (highlight) error with="+buffer);
@@ -366,7 +368,7 @@
 				
 				
 				buffer = new StringBuilder();
-
+				
 				//				for (String wordidslist : highlightedColorSpans.keySet()) {
 				//					RGBA composite = new RGBA(0,0,0,0f);
 				//					int size = highlightedColorSpans.get(wordidslist).size();
@@ -386,26 +388,26 @@
 				//					cmd += "wrap(l, \""+wordidslist+"\";\n";
 				//					buffer.append(cmd+"\n");
 				//				}
-
+				
 				for (String wordid : fontColorPerWordIDS.keySet()) {
 					RGBA composite = new RGBA(0,0,0,0f);
 					int size = fontColorPerWordIDS.get(wordid).size();
-
+					
 					for (RGBA color : fontColorPerWordIDS.get(wordid)) {
 						composite.r += color.r;
 						composite.g += color.g;
 						composite.b += color.b;
 						composite.a += color.a;
 					}
-
+					
 					composite.r /= size;
 					composite.g /= size;
 					composite.b /= size;
-
+					
 					String s = String.format(colorscriptRuleFast, wordid, composite.r, composite.g, composite.b, composite.a);
 					buffer.append(s+"\n"); //$NON-NLS-1$
 				}
-
+				
 				if (buffer.length() > 0) {
 					if (!execute(buffer.toString())) {
 						Log.fine("JS execution (color) error with="+buffer);
@@ -414,12 +416,12 @@
 				
 				
 				buffer = new StringBuilder();
-
+				
 				for (String wordid : fontSizePerWordIDS.keySet()) {
 					String s = String.format(sizescriptRuleFast, wordid, fontSizePerWordIDS.get(wordid));
 					buffer.append(s+"\n"); //$NON-NLS-1$
 				}
-
+				
 				for (String wordid : fontWeightPerWordIDS.keySet()) {
 					String s = null;
 					if (!fastWordHighLight) {
@@ -444,12 +446,12 @@
 					}
 					buffer.append(s+"\n"); //$NON-NLS-1$
 				}
-
+				
 				for (String wordid : fontFamillyPerWordIDS.keySet()) {
 					String s = String.format(famillyscriptRuleFast, wordid, fontFamillyPerWordIDS.get(wordid));
 					buffer.append(s+"\n"); //$NON-NLS-1$
 				}
-
+				
 				if (buffer.length() > 0) {
 					if (!execute(buffer.toString())) {
 						Log.fine("JS execution (font) error with="+buffer);
@@ -458,13 +460,13 @@
 				
 				
 				buffer = new StringBuilder();
-
+				
 				if (focusedWordID != null) {
 					//System.out.println("Focus on: "+focusedWordID);
 					String s = "try { showElementIfNeeded(document.getElementById(\"" + focusedWordID + "\")); } catch (e) {document.getElementById(\"" + focusedWordID + "\").scrollIntoView();};"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 					buffer.append(s+"\n"); //$NON-NLS-1$
 				}
-
+				
 				if (buffer.length() > 0) {
 					if (execute(buffer.toString())) {
 						focusedWordID = null; // focus one time
@@ -475,7 +477,7 @@
 				
 				
 				buffer = new StringBuilder();
-
+				
 				if (highlightedAreas != null) {
 					for (int[] pos : highlightedAreas) {
 						if (pos == null || pos.length != 4) continue;
@@ -484,7 +486,7 @@
 						break;// one word only for now
 					}
 				}
-
+				
 				//System.out.println(buffer);
 				if (buffer.length() > 0) {
 					if (!execute(buffer.toString())) {
@@ -497,29 +499,81 @@
 				for (ProgressListener pl : afterHighlighListeners) { pl.completed(event);}
 			}
 		};
+		
+		getBrowser().addMouseListener(new MouseListener() {
+			
+			boolean dblClick = false;
+			boolean debug = false;
+			private int t,x,y;
+			
+			@Override
+			public void mouseDoubleClick(MouseEvent e) {
+				if (debug) System.out.println("DOUBLE CLICK"); //$NON-NLS-1$
+				dblClick= true;
+			}
+			
+			@Override
+			public void mouseDown(MouseEvent e) {
+				if (debug) System.out.println("MOUSE DOWN"); //$NON-NLS-1$
+				dblClick = false;
+				t = e.time;
+				x = e.x;
+				y = e.y;
+			}
+			
+			@Override
+			public void mouseUp(MouseEvent e) {
+				if (dblClick) { // doucle click raised by mouseDoubleClick
+					dblClick = false;
+					return; // stop right now ! :-o
+				}
+				if (debug) System.out.println("MOUSE UP"); //$NON-NLS-1$
+				EditionPanel panel = EditionPanel.this;
+				
+				// filter click that are not a left simple click (no drag)
+				//System.out.println("click count="+e.count+" button="+e.button+" time="+e.time+" diff="+(e.time-t)+" dist="+(Math.abs(e.x - x) + Math.abs(e.y - y)));
+				if (e.count > 1) {
+					if (debug) System.out.println(" DOUBLE CLICK"); //$NON-NLS-1$
+					//System.out.println("not a simple click");
+					return;
+				}
+				
+				int dist = Math.abs(e.x - x) + Math.abs(e.y - y);
+				int deltat = (e.time-t);
+				//System.out.println("deltat ="+deltat);
+				if (dist >= 0 && (deltat > 0 || dist > 0)) {
+					//System.out.println(" DRAG dist="+dist+" deltat="+deltat);
+					String[] ids = panel.getWordSelection(); // may be null
+					
+					panel.expandSelectionTo(ids);
+					return;
+				}
+			}
+		});
+		
 		getBrowser().addProgressListener(progresslistener);
 		new CommandLink (synopticEditionEditor, getBrowser());
 		new EditionLink (synopticEditionEditor, getBrowser());
 	}
-
+	
 	/**
 	 * Bypass BrowserViewer restriction on the getBrowser method
 	 */
 	public Browser getBrowser() {
 		return super.getBrowser();
 	}
-
+	
 	/**
 	 * Bypass BrowserViewer restriction on the getBrowser method
 	 */
 	public String getDOM() {
 		return "";//execute("return document.innerHTML"; //$NON-NLS-1$
 	}
-
+	
 	public ISelectionProvider getSelectionProvider() {
 		return selProvider;
 	}
-
+	
 	public void setHighlightWordsById(RGBA color, HashSet<String> wordids) {
 		for (String wordid : wordids) {
 			if (this.highlightedColorPerWordIDS.get(wordid) != null) {
@@ -530,27 +584,27 @@
 			hs.add(color);
 		}
 	}
-
+	
 	public void addHighlightWordsById(RGBA color, String wordid) {
 		if (!this.highlightedColorPerWordIDS.containsKey(wordid)) {
 			this.highlightedColorPerWordIDS.put(wordid, new ArrayList<RGBA>());
 		}
 		this.highlightedColorPerWordIDS.get(wordid).add(color);
 	}
-
+	
 	/**
 	 * Can be called to refresh the page word styles but only when the page is loaded
 	 */
 	public void updateWordStyles() {
 		progresslistener.completed(null);
 	}
-
+	
 	public void addHighlightWordsById(RGBA color, Collection<String> wordids) {
 		for (String wordid : wordids) {
 			addHighlightWordsById(color, wordid);
 		}
 	}
-
+	
 	public void removeHighlightWordsById(RGBA color, Collection<String> wordids) {
 		//System.out.println("Call removeHighlightWordsById: "+wordids+" color="+color);
 		StringBuffer buffer = new StringBuffer();
@@ -560,31 +614,31 @@
 				buffer.append(String.format(clearhighlightscript, wordid)+"\n"); //$NON-NLS-1$
 			}
 		}
-
+		
 		if (buffer.length() > 0) execute(buffer.toString());
 	}
-
+	
 	public void removeHighlightWordsById(RGBA color, String wordid) {
 		if (highlightedColorPerWordIDS.get(wordid) == null) return; // nothing to do
-
+		
 		//System.out.println("remove color="+color+" from id="+wordid);
 		this.highlightedColorPerWordIDS.get(wordid).remove(color);
-
+		
 		if (this.highlightedColorPerWordIDS.get(wordid).size() == 0) {
 			this.highlightedColorPerWordIDS.remove(wordid);
 		}
 	}
-
+	
 	/**
 	 * Open the page containing the word with ID=$line_wordid
 	 * @param line_wordid
 	 * @return true if the page changed
 	 */
 	public boolean backToText(Text text, String line_wordid) {
-
+		
 		String name = currentEdition.getName();
 		Edition edition = text.getEdition(name);
-
+		
 		if (edition == null) {
 			String s = EditionUIMessages.bind(EditionUIMessages.noEditionFoundForTextEqualsP0AndEditionEqualsP1, text, name);
 			System.out.println(s);
@@ -605,7 +659,7 @@
 		
 		return false;
 	}
-
+	
 	/**
 	 * First page.
 	 */
@@ -617,24 +671,24 @@
 			System.out.println(EditionUIMessages.bind(EditionUIMessages.failToRetrieveFirstPageOfEditionEqualsP0AndTextEqualsP1, currentEdition.getName(), currentText.getName()));
 			return;
 		}
-
+		
 		this.setURL(currentPage.toURL());
-
+		
 		//page_label.setText(makePageLabel());
 	}
-
+	
 	public void setURL(String url) {
 		if (!this.browser.isDisposed()) {
 			super.setURL(url);
 		}
 	}
-
+	
 	/**
 	 * Last page.
 	 */
 	public void lastPage() {
 		// System.out.println(Messages.TxmBrowser_2+currentPage);
-
+		
 		if (currentPage != null && currentPage.getFile().equals(currentEdition.getLastPage().getFile())) {
 			return;
 		}
@@ -642,7 +696,7 @@
 		currentText = currentEdition.getText();
 		this.setURL(currentPage.toURL());
 	}
-
+	
 	/**
 	 * Previous page.
 	 */
@@ -650,7 +704,7 @@
 		// System.out.println(Messages.TxmBrowser_3+currentPage);
 		if (currentPage != null) {
 			Page previous = currentEdition.getPreviousPage(currentPage);
-
+			
 			if (previous == currentPage) {
 				previousText(true);
 			} else {
@@ -663,9 +717,9 @@
 		}
 		//page_label.setText(makePageLabel());
 	}
-
-
-
+	
+	
+	
 	/**
 	 * Next page.
 	 */
@@ -685,8 +739,8 @@
 		}
 		//page_label.setText(makePageLabel());
 	}
-
-
+	
+	
 	public void firstText() {
 		//Text current = this.currentPage.getEdition().getText();
 		Project project = currentText.getProject();
@@ -698,7 +752,7 @@
 			return;
 		}
 		Text firstText = project.getText(id);
-
+		
 		if (firstText != null) {
 			String editionName = currentEdition.getName();
 			Edition tmp = firstText.getEdition(editionName);
@@ -716,7 +770,7 @@
 			this.setURL(currentPage.toURL());
 		}
 	}
-
+	
 	/**
 	 * Next text.
 	 */
@@ -732,7 +786,7 @@
 			return;
 		}
 		Text lastText = project.getText(id);
-
+		
 		if (lastText != null) {
 			String editionName = currentEdition.getName();
 			Edition tmp = lastText.getEdition(editionName);
@@ -740,7 +794,7 @@
 				System.out.println(EditionUIMessages.bind(EditionUIMessages.noEditionWithNameEqualsP0AvailableForTextEqualsP1, editionName, lastText.getName()));
 				return;
 			}
-
+			
 			currentEdition = tmp;
 			currentPage = currentEdition.getFirstPage(); 
 			currentText = lastText;
@@ -748,19 +802,19 @@
 				StatusLine.setMessage("No text next"); //$NON-NLS-1$
 				return;
 			}
-
+			
 			this.setURL(currentPage.toURL());
 			//page_label.setText(makePageLabel());
 		}
 		// System.out.println("Next texts "+nextText);
 	}
-
+	
 	/**
 	 * Previous text.
 	 * @param fromNextText if true  it means the user was reading the next text and then we show the last page of the previous text
 	 */
 	public void previousText(boolean fromNextText) {
-
+		
 		Project project = currentText.getProject();
 		String id;
 		try {
@@ -780,10 +834,10 @@
 			return;
 		}
 		Text previousText = project.getText(id);
-
+		
 		if (previousText != null) {
 			String editionName = currentEdition.getName();
-
+			
 			Edition tmp = previousText.getEdition(editionName);
 			if (tmp == null) {
 				System.out.println(EditionUIMessages.bind(EditionUIMessages.noEditionWithNameEqualsP0AvailableForTextEqualsP1, editionName, previousText.getName()));
@@ -796,7 +850,7 @@
 			} else {
 				currentPage = currentEdition.getFirstPage(); 
 			}
-
+			
 			if (currentPage == null) {
 				StatusLine.setMessage("No previous text"); //$NON-NLS-1$
 				return;
@@ -805,7 +859,7 @@
 		}
 		// System.out.println("Previous texts "+previousText);
 	}
-
+	
 	/**
 	 * Next text.
 	 */
@@ -830,7 +884,7 @@
 			return;
 		}
 		Text nextText = project.getText(id);
-
+		
 		if (nextText != null) {
 			String editionName = currentEdition.getName();
 			Edition tmp = nextText.getEdition(editionName);
@@ -839,21 +893,21 @@
 				return;
 			}
 			currentEdition = tmp;
-
+			
 			currentPage = currentEdition.getFirstPage(); 
 			currentText = nextText;
 			if (currentPage == null) {
 				StatusLine.setMessage("No text next"); //$NON-NLS-1$
 				return;
 			}
-
+			
 			this.setURL(currentPage.toURL());
 			//page_label.setText(makePageLabel());
 		}
 		// System.out.println("Next texts "+nextText);
 	}
-
-
+	
+	
 	public void setText(Text text, boolean refresh) {
 		String editionName = currentEdition.getName();
 		Edition tmp = text.getEdition(editionName);
@@ -861,7 +915,7 @@
 			System.out.println(EditionUIMessages.bind(EditionUIMessages.noEditionWithNameEqualsP0AvailableForTextEqualsP1, editionName, text.getName()));
 			return;
 		}
-
+		
 		currentEdition = tmp;
 		currentPage = currentEdition.getFirstPage(); 
 		currentText = text;
@@ -869,13 +923,13 @@
 			StatusLine.setMessage("No text next"); //$NON-NLS-1$
 			return;
 		}
-
+		
 		if (refresh) {
 			this.setURL(currentPage.toURL());
 		}
 		//page_label.setText(makePageLabel());
 	}
-
+	
 	/**
 	 * Gets the current page.
 	 *
@@ -884,7 +938,7 @@
 	public Page getCurrentPage() {
 		return currentPage;
 	}
-
+	
 	/**
 	 * Gets the current text.
 	 *
@@ -893,7 +947,7 @@
 	public Text getCurrentText() {
 		return currentText;
 	}
-
+	
 	/**
 	 * Make page label.
 	 *
@@ -902,7 +956,7 @@
 	public String makePageLabel() {
 		return currentPage.getName() + " / " + currentPage.getEdition().getNumPages(); //$NON-NLS-1$
 	}
-
+	
 	/**
 	 * Show page.
 	 *
@@ -915,11 +969,11 @@
 		currentPage = page;
 		this.setURL(currentPage.toURL());
 	}
-
+	
 	public void reloadPage() {
 		this.setURL(currentPage.toURL());
 	}
-
+	
 	//	/**
 	//	 * Sets the edition.
 	//	 *
@@ -928,7 +982,7 @@
 	//	public void setEdition(Edition edition) {
 	//		this.currentEdition = edition;
 	//	}
-
+	
 	static String SCRIPT01 = "var html = \"\";"+ //$NON-NLS-1$
 			"if (typeof window.getSelection != \"undefined\") {"+ // modern Web browsers //$NON-NLS-1$
 			"var sel = window.getSelection();"+ //$NON-NLS-1$
@@ -945,17 +999,17 @@
 			"}" + //$NON-NLS-1$
 			"}" + //$NON-NLS-1$
 			"return html"; //$NON-NLS-1$
-
+	
 	public String getTextSelectionDOM() {
 		return ((String) evaluate(SCRIPT01));
 	}
-
+	
 	/**
 	 * 
 	 * @return array of 2 word id, if only one word is selected 2nd value is null
 	 */
 	public String[] getWordSelection() {
-
+		
 		//System.out.println("getWordSelection");
 		String SCRIPT02_getspans = ""//functions //$NON-NLS-1$
 				+"var all = [];" //$NON-NLS-1$
@@ -990,10 +1044,10 @@
 				+"\n}" //$NON-NLS-1$
 				//+"alert('result='+all)"
 				+"\nreturn all;"; //$NON-NLS-1$
-
+		
 		//		System.out.println(functions);
 		//		System.out.println(SCRIPT02_getspans);
-
+		
 		Object ret = evaluate(SCRIPT02_getspans);
 		if (ret instanceof Object[]) {
 			Log.finer("selection word ids="+Arrays.toString((Object[])ret)); //$NON-NLS-1$
@@ -1014,71 +1068,71 @@
 			return null;
 		}
 	}
-
+	
 	public String getTextSelection() {
 		//System.out.println("DOM="+getTextSelectionDOM());
 		String rez =  getTextSelectionDOM().replaceAll("<[^>]+>", ""); //$NON-NLS-1$ //$NON-NLS-2$
 		//System.out.println("STR="+rez);
 		return rez;
 	}
-
+	
 	@Override
 	public void addSelectionChangedListener(ISelectionChangedListener listener) {	}
-
+	
 	@Override
 	public ISelection getSelection() {
 		return new SynopticTextSelection(this);
 	}
-
+	
 	@Override
 	public void removeSelectionChangedListener(
 			ISelectionChangedListener listener) {	}
-
+	
 	@Override
 	public void setSelection(ISelection selection) {	}
-
+	
 	static public class SynopticTextSelection implements ISelection  {
 		String str;
 		public SynopticTextSelection(EditionPanel panel) {
 			this.str = panel.getTextSelection();
 		}
-
+		
 		@Override
 		public boolean isEmpty() {
 			return str != null && str.length() > 0;
 		}
-
+		
 		public String getTextSelection() {
 			return str;
 		}
 	}
-
+	
 	public Edition getEdition() {
 		return currentEdition;
 	}
-
+	
 	public MenuManager getMenuManager() {	
 		return menuManager;
 	}
-
+	
 	public void initMenu() {
 		// create a new menu	
 		menuManager = new MenuManager(); //$NON-NLS-1$
-
+		
 		Menu menu = menuManager.createContextMenu(this.getBrowser());
-
+		
 		menu.addMenuListener(new MenuListener() {
-
+			
 			@Override
 			public void menuShown(MenuEvent e) {
 				Menu menu = menuManager.getMenu();
 				if (menu == null) return;
 				new MenuItem(menu, SWT.SEPARATOR);
-
+				
 				MenuItem copyItem = new MenuItem(menu, SWT.NONE);
 				copyItem.setText(EditionUIMessages.copyTextSelection);
 				copyItem.addSelectionListener(new SelectionListener() {
-
+					
 					@Override
 					public void widgetSelected(SelectionEvent e) {
 						String text = EditionPanel.this.getTextSelection();
@@ -1086,51 +1140,51 @@
 							IOClipboard.write(text);
 						}
 					}
-
+					
 					@Override
 					public void widgetDefaultSelected(SelectionEvent e) { }
 				});
 				String text = EditionPanel.this.getTextSelection();
 				copyItem.setEnabled(text != null && text.length() > 0);
-
+				
 				MenuItem reloadItem = new MenuItem(menu, SWT.NONE);
 				reloadItem.setText(EditionUIMessages.reload);
 				reloadItem.addSelectionListener(new SelectionListener() {
-
+					
 					@Override
 					public void widgetSelected(SelectionEvent e) {
 						EditionPanel.this.getBrowser().refresh();
 					}
-
+					
 					@Override
 					public void widgetDefaultSelected(SelectionEvent e) { }
 				});
 				MenuItem backItem = new MenuItem(menu, SWT.NONE);
 				backItem.setText(EditionUIMessages.back);
 				backItem.addSelectionListener(new SelectionListener() {
-
+					
 					@Override
 					public void widgetSelected(SelectionEvent e) {
 						EditionPanel.this.getBrowser().back();
 					}
-
+					
 					@Override
 					public void widgetDefaultSelected(SelectionEvent e) { }
 				});
 				MenuItem forwardItem = new MenuItem(menu, SWT.NONE);
 				forwardItem.setText(EditionUIMessages.forward);
 				forwardItem.addSelectionListener(new SelectionListener() {
-
+					
 					@Override
 					public void widgetSelected(SelectionEvent e) {
 						EditionPanel.this.getBrowser().forward();
 					}
-
+					
 					@Override
 					public void widgetDefaultSelected(SelectionEvent e) { }
 				});
 			}
-
+			
 			@Override
 			public void menuHidden(MenuEvent e) {
 				// TODO Auto-generated method stub
@@ -1154,7 +1208,7 @@
 		// replace the menu
 		this.getBrowser().setMenu(menu); 
 	}
-
+	
 	public void initSelectionProvider() {
 		selProvider = new ISelectionProvider() {
 			@Override
@@ -1179,16 +1233,16 @@
 				};
 				return sel;
 			}
-
+			
 			@Override
 			public void addSelectionChangedListener(ISelectionChangedListener listener) { }
 		};
 	}
-
-
-
+	
+	
+	
 	public void goToPage(String name) {
-
+		
 		Page next = currentEdition.get(name);
 		// System.out.println(Messages.TxmBrowser_4+currentPage);
 		if (next != null) {
@@ -1198,22 +1252,22 @@
 			System.out.println(EditionUIMessages.bind(EditionUIMessages.pageNotFoundP0, name));
 		}
 	}
-
+	
 	public void setFocusedWordID(String focusid) {
 		this.focusedWordID = focusid;
 	}
-
+	
 	public void setHighlightedArea(HashSet<int[]> positions) {
 		Log.finer("Highlight area: not implemented");
 	}
-
+	
 	public void expandSelectionTo(String[] ids) {
 		// expand selection
 		if (ids == null) return;
 		if (ids.length == 0) return;
 		//TODO: enable the feature for Windows computers
 		//if (System.getProperty("os.name").toLowerCase().contains("windows")) return; 
-
+		
 		//this.getBrowser().evaluate("alert('expand selection');");
 		//System.out.println("EXPAND SELECTION TO "+Arrays.toString(ids));
 		String id1 = ids[0];
@@ -1237,42 +1291,42 @@
 				+"sel.addRange(range);\n" //$NON-NLS-1$
 				+ "\n" //$NON-NLS-1$
 				+ "return null;"; //$NON-NLS-1$
-
+		
 		//System.out.println("Eval...\n"+SCRIPT02_expand);
 		evaluate(SCRIPT02_expand);
 		return;
 	}
-
+	
 	public void addFontWeightWordsById(String weight, List<String> wordids) {
 		for (String wordid : wordids) {
 			addFontWeightWordsById(weight, wordid);
 		}
 	}
-
+	
 	public void addFontWeightWordsById(String weight, String wordid) {
 		this.fontWeightPerWordIDS.put(wordid, weight);
 	}
-
+	
 	public void removeFontWeightWordsById(String wordid) {
 		this.fontWeightPerWordIDS.remove(wordid);
 	}
-
+	
 	public void removeFontWeightWordsById(List<String> wordids) {
 		for (String wordid : wordids) {
 			removeFontWeightWordsById(wordid);
 		}
 	}
-
+	
 	/**
 	 * Clears all highlighted words.
 	 */
 	public void removeHighlightWords() {
 		
 		// FIXME: SJ: this code leads to a concurrency modification exception on Windows
-//		Set<String> keys = highlightedColorPerWordIDS.keySet();
-//		for (String key : keys) {
-//			highlightedColorPerWordIDS.remove(key);
-//		}
+		//		Set<String> keys = highlightedColorPerWordIDS.keySet();
+		//		for (String key : keys) {
+		//			highlightedColorPerWordIDS.remove(key);
+		//		}
 		
 		// SJ: new version tests
 		highlightedColorPerWordIDS.clear();
Index: tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/SynopticEditionEditor.java
===================================================================
--- tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/SynopticEditionEditor.java	(revision 2393)
+++ tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/SynopticEditionEditor.java	(revision 2394)
@@ -871,7 +871,7 @@
 	 * 
 	 * @return the first and last word ID covered by the text selection of the first EditionPanel
 	 */
-	public Object getWordSelection() {
+	public String[] getWordSelection() {
 		for (EditionPanel p : editionPanels.values()) {
 			return p.getWordSelection();
 		}
Index: tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/handlers/SendEditionTo.java
===================================================================
--- tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/handlers/SendEditionTo.java	(revision 2393)
+++ tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/handlers/SendEditionTo.java	(revision 2394)
@@ -27,13 +27,29 @@
 //
 package org.txm.edition.rcp.handlers;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.osgi.util.NLS;
 import org.txm.core.results.TXMResult;
+import org.txm.edition.rcp.editors.SynopticEditionEditor;
 import org.txm.links.rcp.handlers.SendSelectionToQueryable;
+import org.txm.objects.Edition;
+import org.txm.objects.Project;
+import org.txm.objects.Text;
 import org.txm.rcp.editors.IEditionEditor;
 import org.txm.rcp.utils.SWTEditorsUtils;
+import org.txm.searchengine.cqp.CQPSearchEngine;
+import org.txm.searchengine.cqp.corpus.CQPCorpus;
+import org.txm.searchengine.cqp.corpus.MainCorpus;
+import org.txm.searchengine.cqp.corpus.QueryResult;
+import org.txm.searchengine.cqp.corpus.WordProperty;
 import org.txm.searchengine.cqp.corpus.query.CQLQuery;
+import org.txm.searchengine.cqp.corpus.query.Match;
+import org.txm.searchengine.cqp.corpus.query.MatchUtils;
+import org.txm.utils.logger.Log;
 
 /**
  * Sends the selected text of an edition to compute another command.
@@ -43,15 +59,79 @@
  * 
  */
 public class SendEditionTo extends SendSelectionToQueryable {
-
+	
 	@Override
 	public String createQuery(ExecutionEvent event, ISelection selection) {
 		
 		IEditionEditor editor = (IEditionEditor) SWTEditorsUtils.getActiveEditor(event);
-		String query = ((IEditionEditor)editor).getTextSelection();
-		query = query.replaceAll("\n", "").trim(); //$NON-NLS-1$ //$NON-NLS-2$
-		query = "\"" + CQLQuery.addBackSlash(query) + "\""; //$NON-NLS-1$ //$NON-NLS-2$
-		return query;
+		String query = null;
+		if (editor instanceof SynopticEditionEditor) {
+			SynopticEditionEditor seditor = (SynopticEditionEditor)editor;
+			String[] wordids = seditor.getWordSelection();
+			if (wordids == null) { // last resort
+				query = ((IEditionEditor)editor).getTextSelection();
+			} else {
+				
+				try {
+					Edition edition = seditor.getEditionPanel(0).getEdition();
+					Text text = edition.getText();
+					Project project = text.getParent();
+					String textid = edition.getText().getName();
+					
+					CQPCorpus corpus = (CQPCorpus) project.getCorpusBuild(null, MainCorpus.class);
+					
+					Match m = null;
+					Match n = null;
+					
+					if (wordids[1] == null) {
+						CQLQuery cqlQuery = new CQLQuery(NLS.bind("[id=\"{0}\" & _.text_id=\"{1}\"]", wordids[0], textid));
+						
+						QueryResult rez = corpus.query(cqlQuery, "TMP", false);
+						
+						if (rez.getNMatch() != 1) {
+							Log.warning(NLS.bind("Warning: found more than or no word for id={0} in {1}", wordids[0], textid));
+							return null;
+						}
+						
+						m = rez.getMatch(0);
+						n = rez.getMatch(0);
+					} else if (wordids[0] != null && wordids[1] != null) {
+						CQLQuery cqlQuery = new CQLQuery(NLS.bind("[id=\"{0}\" & _.text_id=\"{1}\"]", wordids[0]+"|"+wordids[1], textid));
+						QueryResult rez = corpus.query(cqlQuery, "TMP", false);
+						
+						if (rez.getNMatch() != 2) {
+							Log.warning(NLS.bind("Warning: found more than or no word for id={0} in {1}", wordids[0]+", "+wordids[1], textid));
+							return null;
+						}
+						
+						m = rez.getMatch(0);
+						n = rez.getMatch(1);
+					}
+					
+					int[] positions = MatchUtils.toPositions(m, n);
+					if (positions.length > 0) {
+						WordProperty p = corpus.getProperty("word");
+						String[] words = CQPSearchEngine.getCqiClient().cpos2Str(p.getQualifiedName(), positions);
+						if (words != null && words.length > 0) {
+							query = "";
+							for (String w : words) {
+								query += " \""+CQLQuery.addBackSlash(w)+"\"";
+							}
+							query = query.substring(1);
+						}
+					}
+				} catch (Exception e) {
+					Log.warning("Error: "+e);
+					Log.printStackTrace(e);
+				}
+			}
+			return query;
+		} else { // try using text selection of the current editor
+			query = ((IEditionEditor)editor).getTextSelection();
+			query = query.replaceAll("\n", "").trim(); //$NON-NLS-1$ //$NON-NLS-2$
+			query = "\"" + CQLQuery.addBackSlash(query) + "\""; //$NON-NLS-1$ //$NON-NLS-2$
+			return query;
+		}
 	}
 	
 	@Override
