Index: tmp/org.txm.backtomedia.rcp/src/org/txm/backtomedia/editors/vlcplayer/JFXPlayer.java
===================================================================
--- tmp/org.txm.backtomedia.rcp/src/org/txm/backtomedia/editors/vlcplayer/JFXPlayer.java	(revision 3095)
+++ tmp/org.txm.backtomedia.rcp/src/org/txm/backtomedia/editors/vlcplayer/JFXPlayer.java	(revision 3096)
@@ -29,6 +29,7 @@
 import org.txm.rcp.swt.GLComposite;
 import org.txm.utils.logger.Log;
 
+import javafx.application.Platform;
 import javafx.beans.InvalidationListener;
 import javafx.beans.Observable;
 import javafx.embed.swt.FXCanvas;
@@ -46,7 +47,7 @@
 	
 	protected static final String NOMEDIA = ""; //$NON-NLS-1$
 	
-	private MediaPlayer vlcPlayer;
+	private MediaPlayer jfxPlayer;
 	
 	private GLComposite videoComposite;
 	
@@ -88,7 +89,7 @@
 	long time, mins, secs;
 	
 	public MediaPlayer getEmbeddedMediaPlayer() {
-		return vlcPlayer;
+		return jfxPlayer;
 	}
 	
 	Semaphore s = new Semaphore(1);
@@ -116,15 +117,15 @@
 		GridData gdata = new GridData(SWT.FILL, SWT.FILL, true, true);
 		gdata.horizontalSpan = 11;
 		videoComposite.setLayoutData(gdata);
-		vlcPlayer = null;
+		jfxPlayer = null;
 		
 		videoComposite.addDisposeListener(new DisposeListener() {
 			
 			@Override
 			public void widgetDisposed(DisposeEvent e) {
-				if (vlcPlayer != null) {
-					vlcPlayer.dispose();
-					vlcPlayer = null;
+				if (jfxPlayer != null) {
+					jfxPlayer.dispose();
+					jfxPlayer = null;
 					fxCanvas.setScene(null);
 				}
 			}
@@ -138,11 +139,11 @@
 			
 			@Override
 			public void mouseUp(MouseEvent e) {
-				if (vlcPlayer != null) {
-					if (vlcPlayer.getStatus().equals(Status.PAUSED)) {
+				if (jfxPlayer != null) {
+					if (jfxPlayer.getStatus().equals(Status.PAUSED)) {
 						resume();
 					}
-					else if (vlcPlayer.getStatus().equals(Status.PLAYING)) {
+					else if (jfxPlayer.getStatus().equals(Status.PLAYING)) {
 						pause();
 					}
 				}
@@ -177,11 +178,11 @@
 					selectMedia();
 					playButton.setText(MessagesMP.pause);
 				}
-				else if (vlcPlayer != null && vlcPlayer.getStatus().equals(Status.PLAYING)) {
+				else if (jfxPlayer != null && jfxPlayer.getStatus().equals(Status.PLAYING)) {
 					pause();
 				}
-				else if (vlcPlayer != null && hasEnded) {
-					if (vlcPlayer == null) return;
+				else if (jfxPlayer != null && hasEnded) {
+					if (jfxPlayer == null) return;
 					replay();
 				}
 				else {
@@ -213,9 +214,9 @@
 			
 			@Override
 			public void widgetSelected(SelectionEvent e) {
-				if (vlcPlayer != null) {
+				if (jfxPlayer != null) {
 					userStopped = true;
-					vlcPlayer.stop();
+					jfxPlayer.stop();
 				}
 			}
 			
@@ -238,20 +239,20 @@
 					case UPPER:
 						end = timeRange.getUpperValue();
 						
-						vlcPlayer.setStopTime(Duration.seconds(end));
+						jfxPlayer.setStopTime(Duration.seconds(end));
 						if (end < time) {
 							// System.out.println("Upper changed: fix time");
 							time = end;
-							vlcPlayer.seek(Duration.seconds(time));
+							jfxPlayer.seek(Duration.seconds(time));
 						}
 						break;
 					case LOWER:
 						start = timeRange.getLowerValue();
-						vlcPlayer.setStartTime(Duration.seconds(start));
+						jfxPlayer.setStartTime(Duration.seconds(start));
 						if (start > time) {
 							// System.out.println("Lower changed: fix time");
 							time = start;
-							vlcPlayer.seek(Duration.seconds(time));
+							jfxPlayer.seek(Duration.seconds(time));
 						}
 						break;
 					case MIDDLE:
@@ -259,7 +260,7 @@
 						time = timeRange.getMiddleValue();
 						// System.out.println("Middle changed: fix time: " + time);
 						
-						vlcPlayer.seek(Duration.seconds(time));
+						jfxPlayer.seek(Duration.seconds(time));
 						
 						break;
 					default:
@@ -304,7 +305,7 @@
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				float rate = rateField.getSelection() / 100.0f;
-				vlcPlayer.setRate(rate);
+				jfxPlayer.setRate(rate);
 				rateValueLabel.setText("" + rateField.getSelection() + "%");
 			}
 			
@@ -330,7 +331,7 @@
 			
 			@Override
 			public void widgetSelected(SelectionEvent e) {
-				vlcPlayer.setVolume(volumeField.getSelection());
+				jfxPlayer.setVolume(volumeField.getSelection());
 				volume = volumeField.getSelection();
 				volumeValueLabel.setText("" + volume + "%");
 			}
@@ -416,15 +417,15 @@
 	}
 	
 	protected void resume() {
-		if (vlcPlayer != null) {
-			vlcPlayer.play();
+		if (jfxPlayer != null) {
+			jfxPlayer.play();
 			playButton.setText(MessagesMP.pause);
 		}
 	}
 	
 	protected void pause() {
-		if (vlcPlayer != null) {
-			vlcPlayer.pause();
+		if (jfxPlayer != null) {
+			jfxPlayer.pause();
 			playButton.setText(MessagesMP.resume);
 		}
 	}
@@ -438,7 +439,7 @@
 	
 	protected void replay() {
 		if (currentlyPlayed.length() > 0) {
-			vlcPlayer.seek(Duration.seconds(start));
+			jfxPlayer.seek(Duration.seconds(start));
 			playButton.setText(MessagesMP.pause);
 		}
 	}
@@ -576,23 +577,25 @@
 				}
 			});
 			media = new Media(mrl);
-			if (vlcPlayer != null) {
+			if (jfxPlayer != null) {
 				try {
-					vlcPlayer.stop();
+					jfxPlayer.stop();
 				}
 				catch (Exception e) {
 					
 				}
 			}
-			vlcPlayer = new MediaPlayer(media);
 			
-			if (vlcPlayer.getError() == null) {
-				vlcPlayer.setOnError(new Runnable() {
+			Platform.setImplicitExit(false); // This is important to avoid Thread exception when re-opening a player
+			jfxPlayer = new MediaPlayer(media);
+			
+			if (jfxPlayer.getError() == null) {
+				jfxPlayer.setOnError(new Runnable() {
 					
 					@Override
 					public void run() {
 						System.out.println("JFX Player Error:");
-						vlcPlayer.getError().printStackTrace();
+						jfxPlayer.getError().printStackTrace();
 					}
 				});
 			}
@@ -601,9 +604,9 @@
 			}
 			
 			initializePlayerListeners();
-			vlcPlayer.setAutoPlay(false);
+			jfxPlayer.setAutoPlay(false);
 			
-			view = new MediaView(vlcPlayer);
+			view = new MediaView(jfxPlayer);
 			
 			group = new Group(view);
 			
@@ -619,33 +622,33 @@
 			return false;
 		}
 		
-		vlcPlayer.setOnReady(new Runnable() {
+		jfxPlayer.setOnReady(new Runnable() {
 			
 			@Override
 			public void run() {
 				
 				timeRange.setMinimum(0);
-				Duration d = vlcPlayer.getMedia().getDuration();
+				Duration d = jfxPlayer.getMedia().getDuration();
 				if (d.toSeconds() > 0) {
 					timeRange.setMaximum((int) d.toSeconds());
 				}
 				timeRange.setLowerValue(start);
 				timeRange.setMiddleValue(start);
 				
-				vlcPlayer.setVolume(volume);
+				jfxPlayer.setVolume(volume);
 				
-				vlcPlayer.setStartTime(Duration.seconds(start));
-				vlcPlayer.seek(Duration.seconds(start));
+				jfxPlayer.setStartTime(Duration.seconds(start));
+				jfxPlayer.seek(Duration.seconds(start));
 				if (end > start) {
 					timeRange.setUpperValue(end);
-					vlcPlayer.setStopTime(Duration.seconds(end));
+					jfxPlayer.setStopTime(Duration.seconds(end));
 				}
 				else if (d.toSeconds() > 0) {
-					timeRange.setUpperValue((int) vlcPlayer.getMedia().getDuration().toSeconds());
+					timeRange.setUpperValue((int) jfxPlayer.getMedia().getDuration().toSeconds());
 				}
 				Log.info("Playing media...");
 				
-				vlcPlayer.play();
+				jfxPlayer.play();
 				resizeView();
 				
 				// if (new File(mrl + ".srt").exists()) { //$NON-NLS-1$
@@ -667,14 +670,14 @@
 	
 	private void initializePlayerListeners() {
 		
-		vlcPlayer.currentTimeProperty().addListener(new InvalidationListener() {
+		jfxPlayer.currentTimeProperty().addListener(new InvalidationListener() {
 			
 			@Override
 			public void invalidated(Observable ov) {
 				if (videoComposite.isDisposed()) return;
-				if (vlcPlayer == null) return;
+				if (jfxPlayer == null) return;
 				
-				Duration currentTime = vlcPlayer.getCurrentTime();
+				Duration currentTime = jfxPlayer.getCurrentTime();
 				time = (int) currentTime.toSeconds();
 				if (previous == time) {
 					return;
@@ -711,10 +714,10 @@
 	public void setRepeat(boolean repeat) {
 		this.repeat = repeat;
 		if (this.repeat) {
-			vlcPlayer.setCycleCount(Integer.MAX_VALUE);
+			jfxPlayer.setCycleCount(Integer.MAX_VALUE);
 		}
 		else {
-			vlcPlayer.setCycleCount(0);
+			jfxPlayer.setCycleCount(0);
 		}
 		if (!repeatButton.isDisposed()) {
 			repeatButton.setSelection(repeat);
@@ -723,12 +726,12 @@
 	
 	@Override
 	public void stop() {
-		if (vlcPlayer == null) return; // nothing to do
+		if (jfxPlayer == null) return; // nothing to do
 		userStopped = true;
-		vlcPlayer.stop();
+		jfxPlayer.stop();
 		
-		vlcPlayer.dispose();
-		vlcPlayer = null;
+		jfxPlayer.dispose();
+		jfxPlayer = null;
 		fxCanvas.setScene(null);
 		
 		currentlyPlayed = NOMEDIA;
@@ -739,6 +742,6 @@
 	
 	@Override
 	public boolean isMediaLoaded() {
-		return vlcPlayer != null && vlcPlayer.getStatus().equals(Status.READY);
+		return jfxPlayer != null && jfxPlayer.getStatus().equals(Status.READY);
 	}
 }
Index: tmp/org.txm.backtomedia.rcp/src/org/txm/backtomedia/commands/function/OpenVLCPlayer.java
===================================================================
--- tmp/org.txm.backtomedia.rcp/src/org/txm/backtomedia/commands/function/OpenVLCPlayer.java	(revision 3095)
+++ tmp/org.txm.backtomedia.rcp/src/org/txm/backtomedia/commands/function/OpenVLCPlayer.java	(revision 3096)
@@ -29,6 +29,7 @@
 
 import java.io.File;
 import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
 import java.net.URLEncoder;
 
 import org.eclipse.core.commands.AbstractHandler;
@@ -65,9 +66,6 @@
 	/** The ID. */
 	public static String ID = "org.txm.rcp.commands.BackToMedia"; //$NON-NLS-1$
 	
-	/** The selection. */
-	private IStructuredSelection selection;
-	
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
@@ -76,10 +74,21 @@
 	public Object execute(ExecutionEvent event) throws ExecutionException {
 		
 		Object o = HandlerUtil.getCurrentSelection(event);
+		IStructuredSelection selection;
 		if (o instanceof IStructuredSelection) {
 			selection = (IStructuredSelection) o;
 			Object s = selection.getFirstElement();
-			System.out.println(MessagesMP.select_object + s);
+			if (s instanceof File) {
+				File f = (File) s;
+				
+				try {
+					return openEditor(f.toURI().toURL().toString(), 0);
+				}
+				catch (MalformedURLException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+			}
 		}
 		
 		Shell sh = HandlerUtil.getActiveShell(event);
@@ -100,7 +109,7 @@
 				else {
 					
 				}
-				openEditor(mrl, 0);
+				return openEditor(mrl, 0);
 			}
 		}
 		
@@ -119,7 +128,6 @@
 			else {
 				return null;
 			}
-			
 		}
 		catch (PartInitException e) {
 			e.printStackTrace();
@@ -127,19 +135,20 @@
 		return null;
 	}
 	
-	public static void openEditor(String mrl, int time) {
+	public static VLCPlayerEditor openEditor(String mrl, int time) {
 		IWorkbenchPage page = TXMWindows.getActiveWindow().getActivePage();
 		VLCPlayerEditorInput editorInput = new VLCPlayerEditorInput();
 		StatusLine.setMessage(MessagesMP.opening_media);
 		try {
-			VLCPlayerEditor player = (VLCPlayerEditor) page
-					.openEditor(editorInput, VLCPlayerEditor.ID);
+			VLCPlayerEditor player = (VLCPlayerEditor) page.openEditor(editorInput, VLCPlayerEditor.ID);
 			if (player != null) {
 				player.getPlayer().play(mrl, time);
 				StatusLine.setMessage("");
 				if (mrl != null) {
 					player.setPartName(new File(mrl).getName());
 				}
+				
+				return player;
 			}
 			else {
 				System.out.println(MessagesMP.error_open_media);
@@ -148,6 +157,7 @@
 		catch (PartInitException e) {
 			e.printStackTrace();
 		}
+		return null;
 	}
 	
 	public static VLCPlayerEditor openEditor(String mrl, int time, int endtime) {
Index: tmp/org.txm.backtomedia.rcp/plugin.xml
===================================================================
--- tmp/org.txm.backtomedia.rcp/plugin.xml	(revision 3095)
+++ tmp/org.txm.backtomedia.rcp/plugin.xml	(revision 3096)
@@ -59,6 +59,19 @@
                style="push">
          </command>
       </menuContribution>
+      <menuContribution
+            locationURI="popup:org.txm.rcp.views.fileexplorer.Explorer?after=org.txm.rcp.commands.OpenBrowser">
+         <command
+               commandId="org.txm.backtomedia.commands.function.OpenVLCPlayer"
+               style="push">
+            <visibleWhen
+                  checkEnabled="false">
+               <reference
+                     definitionId="OneFileSelected">
+               </reference>
+            </visibleWhen>
+         </command>
+      </menuContribution>
    </extension>
    <extension
          point="org.eclipse.ui.commands">
