Index: tmp/org.txm.backtomedia.rcp/src/org/txm/backtomedia/editors/vlcplayer/VLCPlayer.java
===================================================================
--- tmp/org.txm.backtomedia.rcp/src/org/txm/backtomedia/editors/vlcplayer/VLCPlayer.java	(revision 2263)
+++ tmp/org.txm.backtomedia.rcp/src/org/txm/backtomedia/editors/vlcplayer/VLCPlayer.java	(revision 2264)
@@ -3,6 +3,8 @@
 import java.awt.Canvas;
 import java.awt.Frame;
 import java.io.File;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
 import java.util.List;
 
 import org.eclipse.swt.SWT;
@@ -552,11 +554,31 @@
 			this.stopButton.dispose();
 	}
 
+	DateTimeFormatter hhmmssFormatter = DateTimeFormatter.ISO_LOCAL_TIME;
+	/**
+	 * 
+	 * @param mrl
+	 * @param startTime "0.0" or ""hh:mm:ss" format
+	 * @param endTime "0.0" or ""hh:mm:ss" format
+	 */
 	public void play(String mrl, String startTime, String endTime) {
 
-		start = (int)(1000*Float.parseFloat(startTime));
-		end = (int)(1000*Float.parseFloat(endTime));
+		if (startTime.matches("[0-9]+.[0-9]+")) {
+			start = (int)(1000*Float.parseFloat(startTime));
+		} else if (startTime.matches("[0-9]+:[0-9]+:[0-9]+")) {
+			if (startTime.indexOf(":") == 1) startTime = "0"+startTime;
+			LocalTime time1 = LocalTime.parse(startTime, hhmmssFormatter);
+			start = (time1.getHour()*60*60) + (time1.getMinute()*60) + time1.getSecond();
+		}
 		
+		if (endTime.matches("[0-9]+.[0-9]+")) {
+			end = (int)(1000*Float.parseFloat(endTime));
+		} else if (endTime.matches("[0-9]+:[0-9]+:[0-9]+")) {
+			if (endTime.indexOf(":") == 1) endTime = "0"+endTime;
+			LocalTime time1 = LocalTime.parse(endTime, hhmmssFormatter);
+			end = (time1.getHour()*60*60) + (time1.getMinute()*60) + time1.getSecond();
+		}
+		
 		Log.fine(MessagesMP.bind(MessagesMP.playing, new Object[]{mrl, startTime, endTime}));
 		vlcPlayer.playMedia(mrl);
 		vlcPlayer.setTime(start);
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 2263)
+++ tmp/org.txm.backtomedia.rcp/src/org/txm/backtomedia/commands/function/BackToMedia.java	(revision 2264)
@@ -71,95 +71,104 @@
 import vlcplayerrcp.MessagesMP;
 
 /**
- * open the VLCPlayer Editor and go back to time 
+ * open the VLCPlayer Editor and go back to time
+ * 
  * @author mdecorde.
  */
 public class BackToMedia extends AbstractHandler {
-
+	
 	/** The ID. */
 	public static String ID = "org.txm.rcp.commands.BackToMedia"; //$NON-NLS-1$
-
+	
 	/** The selection. */
 	private IStructuredSelection selection;
-
+	
 	private static HashMap<ITXMResultEditor<?>, VLCPlayerEditor> associatedEditors = new HashMap<ITXMResultEditor<?>, VLCPlayerEditor>();
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+	
+	/*
+	 * (non-Javadoc)
+	 * @see
+	 * org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.
+	 * ExecutionEvent)
 	 */
 	@Override
 	public Object execute(ExecutionEvent event) throws ExecutionException {
-
+		
 		String corpus_parameter = event.getParameter("corpus"); //$NON-NLS-1$
 		String text_parameter = event.getParameter("text"); //$NON-NLS-1$
 		String word_parameter = event.getParameter("word"); //$NON-NLS-1$
 		String time_parameter = event.getParameter("time"); //$NON-NLS-1$
-
+		
 		if (corpus_parameter != null && text_parameter != null && (word_parameter != null || time_parameter != null)) {
-
+			
 			try {
 				CQPCorpus cqpCorpus = CorpusManager.getCorpusManager().getCorpus(corpus_parameter);
 				if (cqpCorpus == null) {
 					Log.warning(NLS.bind("Corpus with ID={0} not found.", corpus_parameter));
 					return null;
 				}
-
+				
 				if (time_parameter != null) {
-					return backToMedia(cqpCorpus, text_parameter, 0,0,0,0, time_parameter, time_parameter, null, HandlerUtil.getActiveWorkbenchWindow(event).getShell());
-				} else {
+					return backToMedia(cqpCorpus, text_parameter, 0, 0, 0, 0, time_parameter, time_parameter, null, HandlerUtil.getActiveWorkbenchWindow(event).getShell());
+				}
+				else {
 					CQLQuery query = new CQLQuery(NLS.bind("[id=\"{0}\" & _.text_id=\"{1}\"]", word_parameter, text_parameter));
 					QueryResult rez = cqpCorpus.query(query, "TMP", false);
-					if(rez.getNMatch() == 1) {
+					if (rez.getNMatch() == 1) {
 						Match m = rez.getMatch(0);
 						return backToMedia(cqpCorpus, text_parameter, m.getStart(), m.getEnd(), 10, 10, null, null, null, HandlerUtil.getActiveWorkbenchWindow(event).getShell());
-					} else {
-						Log.warning(NLS.bind("Fail to find word with id={0} in text with id={1}",word_parameter, text_parameter));
 					}
+					else {
+						Log.warning(NLS.bind("Fail to find word with id={0} in text with id={1}", word_parameter, text_parameter));
+					}
 				}
-			} catch (Exception e) {
-				Log.warning(TXMCoreMessages.bind("Fail open media for parameters corpus={0} text={1} word={2}: {3}",corpus_parameter, text_parameter, word_parameter, e));
+			}
+			catch (Exception e) {
+				Log.warning(TXMCoreMessages.bind("Fail open media for parameters corpus={0} text={1} word={2}: {3}", corpus_parameter, text_parameter, word_parameter, e));
 				Log.printStackTrace(e);
 			}
 			return null;
-		} else {
+		}
+		else {
 			Object o = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage().getSelection();
 			if (!(o instanceof IStructuredSelection)) {
 				Log.fine(MessagesMP.BackToMedia_0);
 				return null;
 			}
-
+			
 			IWorkbenchPart page = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage().getActivePart();
-
+			
 			if (!(page instanceof ConcordanceEditor)) {
 				Log.fine(MessagesMP.BackToMedia_1);
 				System.out.println("Active page is not a ConcordanceEditor"); //$NON-NLS-1$
 				return null;
 			}
 			ConcordanceEditor ce = (ConcordanceEditor) page;
-			selection = (IStructuredSelection)o;
-
+			selection = (IStructuredSelection) o;
+			
 			Object s = selection.getFirstElement();
-
-			//System.out.println("Selected object: "+s);
-			if (!(s instanceof Line)) {
-				return null;
-			}
-
-			Line line = (Line)s;
+			
+			// System.out.println("Selected object: "+s);
+			if (!(s instanceof Line)) { return null; }
+			
+			Line line = (Line) s;
 			org.txm.objects.Match m = line.getMatch();
-			String textid = line.getTextId();//line.getMatch().getValueForProperty(textP);// get text via text struc property id
+			String textid = line.getTextId();// line.getMatch().getValueForProperty(textP);// get text via text struc property id
 			CQPCorpus corpus = line.getConcordance().getCorpus();
-
-			return backToMedia(corpus, textid, m.getStart(), m.getEnd(), line.getConcordance().getLeftContextSize(), line.getConcordance().getRightContextSize(), null, null, ce, ce.getContainer().getShell());
+			
+			return backToMedia(corpus, textid, m.getStart(), m.getEnd(), line.getConcordance().getLeftContextSize(), line.getConcordance().getRightContextSize(), null, null, ce, ce.getContainer()
+					.getShell());
 		}
 	}
-
-	public static Object backToMedia(CQPCorpus corpus, String textid, int keywordPosition, int keywordEndPosition, int leftContext, int rightContext, String sStartTime, String sEndTime, ITXMResultEditor<?> editor, Shell shell) {
-
+	
+	public static Object backToMedia(CQPCorpus corpus, String textid, int keywordPosition, int keywordEndPosition, int leftContext, int rightContext, String sStartTime, String sEndTime,
+			ITXMResultEditor<?> editor, Shell shell) {
+		
 		TXMPreferences alternative = BackToMediaPreferences.getInstance();
-
+		
 		// try reading project specific preferences
-		//TODO see with SJ how to implement the "command > project > preferences > default preferences" preference order
+		// TODO see with SJ how to implement the "command > project > preferences >
+		// default preferences" preference order
 		CorpusCommandPreferences commandPreferences = corpus.getProject().getCommandPreferences("backtomedia"); //$NON-NLS-1$
 		String structurePropertyName = commandPreferences.get(BackToMediaPreferences.STRUCTURE, alternative);
 		String startPropertyName = commandPreferences.get(BackToMediaPreferences.STRUCTURE_START_PROPERTY, alternative);
@@ -171,30 +180,31 @@
 		String secured_media_password = System.getProperty(BackToMediaPreferences.MEDIA_AUTH_PASSWORD);
 		String media_format = commandPreferences.get(BackToMediaPreferences.MEDIA_EXTENSION, alternative);
 		String media_index = commandPreferences.get(BackToMediaPreferences.MEDIA_INDEX_NODE, alternative);
-
+		
 		try {
-
-			Log.fine(MessagesMP.BackToMedia_7+textid);
-
+			
+			Log.fine(MessagesMP.BackToMedia_7 + textid);
+			
 			if (sStartTime == null || sEndTime == null) { // we need to find out the time to play
-
+				
 				if (BackToMediaPreferences.WORDMODE.equals(sync_mode)) {
 					String pTimeName = BackToMediaPreferences.getInstance().getString(BackToMediaPreferences.WORD_PROPERTY);
 					if ("".equals(pTimeName)) pTimeName = "time"; //$NON-NLS-1$ //$NON-NLS-2$
-
+					
 					Property timeP = corpus.getProperty(pTimeName);
 					if (timeP == null) {
-						System.out.println(MessagesMP.BackToMedia_11+pTimeName);
+						System.out.println(MessagesMP.BackToMedia_11 + pTimeName);
 						return false;
 					}
-
+					
 					int leftPosition = Math.max(keywordPosition - leftContext, 0);
 					int rightPosition = Math.min(keywordPosition + rightContext, corpus.getSize());
-					int[] positions = {leftPosition, rightPosition};
+					int[] positions = { leftPosition, rightPosition };
 					String[] times = CQPSearchEngine.getCqiClient().cpos2Str(timeP.getQualifiedName(), positions);
 					sStartTime = times[0];
 					sEndTime = times[1];
-				} else if (BackToMediaPreferences.STRUCTUREMODE.equals(sync_mode)){
+				}
+				else if (BackToMediaPreferences.STRUCTUREMODE.equals(sync_mode)) {
 					StructuralUnit structure = corpus.getStructuralUnit(structurePropertyName);
 					if (structure == null) {
 						System.out.println(MessagesMP.bind(MessagesMP.BackToMedia_12, structurePropertyName));
@@ -205,18 +215,19 @@
 						System.out.println(MessagesMP.bind(MessagesMP.BackToMedia_14, startPropertyName));
 						return null;
 					}
-
+					
 					sStartTime = Match.getValueForProperty(startProperty, keywordPosition);
-					Log.fine(MessagesMP.BackToMedia_16+sStartTime);
-
+					Log.fine(MessagesMP.BackToMedia_16 + sStartTime);
+					
 					Property endProperty = structure.getProperty(endPropertyName);
 					if (endProperty == null) {
 						System.out.println(MessagesMP.bind(MessagesMP.BackToMedia_17, endPropertyName));
 						return null;
 					}
-					sEndTime =  Match.getValueForProperty(endProperty, keywordEndPosition);
-					Log.fine(MessagesMP.BackToMedia_19+sEndTime);
-				} else { // MILESTONE MODE
+					sEndTime = Match.getValueForProperty(endProperty, keywordEndPosition);
+					Log.fine(MessagesMP.BackToMedia_19 + sEndTime);
+				}
+				else { // MILESTONE MODE
 					StructuralUnit structure = corpus.getStructuralUnit(structurePropertyName);
 					if (structure == null) {
 						System.out.println(MessagesMP.bind(MessagesMP.BackToMedia_12, structurePropertyName));
@@ -227,26 +238,28 @@
 						System.out.println(MessagesMP.bind(MessagesMP.BackToMedia_14, startPropertyName));
 						return null;
 					}
-
+					
 					AbstractCqiClient cqiClient = CorpusManager.getCorpusManager().getCqiClient();
 					try {
 						int[] struc = cqiClient.cpos2Struc(startProperty.getQualifiedName(),
-								new int[] {keywordPosition, keywordEndPosition});
-						int[] struc2 = new int[] {struc[0], struc[1], struc[1]+1};
+								new int[] { keywordPosition, keywordEndPosition });
+						int[] struc2 = new int[] { struc[0], struc[1], struc[1] + 1 };
 						String[] times = cqiClient.struc2Str(startProperty.getQualifiedName(), struc2);
 						sStartTime = times[0];
 						if (times[2] != null) {
 							sEndTime = times[2];
-						} else {
+						}
+						else {
 							sEndTime = times[1];
 						}
-
-					} catch (Exception e) {
+						
+					}
+					catch (Exception e) {
 						return null;
 					}
 				}
 			}
-
+			
 			File binDir = corpus.getProject().getProjectDirectory();
 			String path = null;
 			if (media_index != null && media_index.length() > 0) {
@@ -258,21 +271,24 @@
 						InputStream conn = audioFile.toURI().toURL().openStream();
 						conn.close();
 						path = path2;
-					} catch(Exception e) {
-						Log.info("Could not open media file: "+path2);
 					}
-				} else if (!audioFile.exists()) {
-					Log.info("Media file register in the index not found: "+audioFile);
+					catch (Exception e) {
+						Log.info("Could not open media file: " + path2);
+					}
+				}
+				else if (!audioFile.exists()) {
+					Log.info("Media file register in the index not found: " + audioFile);
 					return null;
 				}
-			} else if (((media_directory != null && media_directory.length() > 0) || (media_auth) ) 
+			}
+			else if (((media_directory != null && media_directory.length() > 0) || (media_auth))
 					&& media_format != null && media_format.length() > 0) {
-
+				
 				String path_prefix = media_directory;
 				if (media_auth) {
-
+					
 					if (secured_media_password == null) {
-						UsernamePasswordDialog dialog = new UsernamePasswordDialog(shell, new boolean[]{false, true}, media_directory);
+						UsernamePasswordDialog dialog = new UsernamePasswordDialog(shell, new boolean[] { false, true }, media_directory);
 						if (dialog.open() == dialog.OK) {
 							System.setProperty(BackToMediaPreferences.MEDIA_AUTH_PASSWORD, dialog.getPassword());
 							secured_media_password = dialog.getPassword();
@@ -280,39 +296,43 @@
 					}
 					path_prefix = NLS.bind(media_directory, secured_media_login, secured_media_password);
 				}
-
-				File audioFile = new File(path_prefix, textid+"."+media_format); //$NON-NLS-1$
+				
+				File audioFile = new File(path_prefix, textid + "." + media_format); //$NON-NLS-1$
 				if (path_prefix.startsWith("http")) {
 					URL url = null;
 					try {
-						url = new URL(path_prefix+textid+"."+media_format);
+						url = new URL(path_prefix + textid + "." + media_format);
 						if (!(media_auth)) {
-							System.out.println("URL="+url);
+							System.out.println("URL=" + url);
 							InputStream conn = url.openStream();
 							conn.close();
 						}
 						path = url.toString();
-					} catch(Exception e) {
-						Log.info("Could not open media file: "+url);
 					}
-				} else { // local file
+					catch (Exception e) {
+						Log.info("Could not open media file: " + url);
+					}
+				}
+				else { // local file
 					if (!new File(path_prefix).exists()) {
-						Log.info("Media directory not found: "+path_prefix);
+						Log.info("Media directory not found: " + path_prefix);
 						return null;
-					} else if (!audioFile.exists()) {
-						Log.info("Media file not found: "+audioFile);
+					}
+					else if (!audioFile.exists()) {
+						Log.info("Media file not found: " + audioFile);
 						return null;
 					}
 					path = audioFile.getAbsolutePath();
 				}
-			} else {
+			}
+			else {
 				File mediaDir = new File(binDir, "media"); //$NON-NLS-1$
-				File audioFile = new File(mediaDir, textid+".mp3"); //$NON-NLS-1$
-				if (!audioFile.exists()) audioFile = new File(mediaDir, textid+".ogg"); //$NON-NLS-1$
-				if (!audioFile.exists()) audioFile = new File(mediaDir, textid+".wav"); //$NON-NLS-1$
-				if (!audioFile.exists()) audioFile = new File(mediaDir, textid+".mp4"); //$NON-NLS-1$
-				if (!audioFile.exists()) audioFile = new File(mediaDir, textid+".avi"); //$NON-NLS-1$
-				if (!audioFile.exists()) audioFile = new File(mediaDir, textid+".mov"); //$NON-NLS-1$
+				File audioFile = new File(mediaDir, textid + ".mp3"); //$NON-NLS-1$
+				if (!audioFile.exists()) audioFile = new File(mediaDir, textid + ".ogg"); //$NON-NLS-1$
+				if (!audioFile.exists()) audioFile = new File(mediaDir, textid + ".wav"); //$NON-NLS-1$
+				if (!audioFile.exists()) audioFile = new File(mediaDir, textid + ".mp4"); //$NON-NLS-1$
+				if (!audioFile.exists()) audioFile = new File(mediaDir, textid + ".avi"); //$NON-NLS-1$
+				if (!audioFile.exists()) audioFile = new File(mediaDir, textid + ".mov"); //$NON-NLS-1$
 				if (!audioFile.exists()) {
 					System.out.println(NLS.bind(MessagesMP.BackToMedia_26, textid));
 					System.out.println(NLS.bind(MessagesMP.BackToMedia_27, mediaDir));
@@ -321,10 +341,10 @@
 				}
 				path = audioFile.getAbsolutePath();
 			}
-
-			Log.fine(MessagesMP.BackToMedia_25+path);
-
-			//System.out.println("Linked editors: "+associatedEditors);
+			
+			Log.fine(MessagesMP.BackToMedia_25 + path);
+			
+			// System.out.println("Linked editors: "+associatedEditors);
 			VLCPlayerEditor vlcEditor = null;
 			if (editor != null) {
 				vlcEditor = associatedEditors.get(editor);
@@ -332,35 +352,35 @@
 			if (vlcEditor != null && !editor.isDirty() && !vlcEditor.getPlayer().isDisposed()) {
 				vlcEditor.getPlayer().play(path, sStartTime, sEndTime);
 				vlcEditor.getPlayer().setRepeat(true);
-			} else {
-				//System.out.println("new editor linked to "+ce);
+			}
+			else {
+				// System.out.println("new editor linked to "+ce);
 				vlcEditor = OpenVLCPlayer.openEditor(path, sStartTime, sEndTime);
-
-				//editor.getPlayer().setRepeat(true);
-				if (vlcEditor == null) {
-					return null;
-				}
-
+				
+				// editor.getPlayer().setRepeat(true);
+				if (vlcEditor == null) { return null; }
+				
 				// move the editor in the window
 				int position = BackToMediaPreferences.getInstance().getInt(BackToMediaPreferences.BACKTOMEDIA_POSITION);
 				if (editor != null) {
 					SWTEditorsUtils.addEditor(vlcEditor, (EditorPart) editor, position);
 				}
-
+				
 				VLCPlayer player = vlcEditor.getPlayer();
 				if (player != null) {
 					player.hideStopButton();
 					associatedEditors.put(editor, vlcEditor);
 				}
 			}
-
+			
 			if (path != null) {
 				vlcEditor.setPartName(textid);
 			}
 			return null;
-
-		} catch (Exception e2) {
-			System.out.println(MessagesMP.BackToMedia_30+e2);
+			
+		}
+		catch (Exception e2) {
+			System.out.println(MessagesMP.BackToMedia_30 + e2);
 			Log.printStackTrace(e2);
 			return null;
 		}
