Index: tmp/org.txm.backtomedia.rcp/src/vlcplayerrcp/messages.properties
===================================================================
--- tmp/org.txm.backtomedia.rcp/src/vlcplayerrcp/messages.properties	(revision 2423)
+++ tmp/org.txm.backtomedia.rcp/src/vlcplayerrcp/messages.properties	(revision 2424)
@@ -37,7 +37,7 @@
 
 playing = Playing {0} from {1} ms to {2} ms ...
 
-rate = Rate:
+rate = Speed
 
 repeat = Repeat
 
@@ -51,4 +51,4 @@
 
 time_range = Time range
 
-volume = Vol:
+volume = Vol
Index: tmp/org.txm.backtomedia.rcp/src/vlcplayerrcp/messages_fr.properties
===================================================================
--- tmp/org.txm.backtomedia.rcp/src/vlcplayerrcp/messages_fr.properties	(revision 2423)
+++ tmp/org.txm.backtomedia.rcp/src/vlcplayerrcp/messages_fr.properties	(revision 2424)
@@ -37,7 +37,7 @@
 
 playing = Joue {0} depuis {1} ms à {2} ms ...
 
-rate = Taux
+rate = Vitesse
 
 repeat = Répéter
 
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 2423)
+++ tmp/org.txm.backtomedia.rcp/src/org/txm/backtomedia/editors/vlcplayer/VLCPlayer.java	(revision 2424)
@@ -1,10 +1,16 @@
 package org.txm.backtomedia.editors.vlcplayer;
 
+import static uk.co.caprica.vlcj.binding.LibVlc.libvlc_new;
+import static uk.co.caprica.vlcj.binding.LibVlc.libvlc_release;
+
 import java.io.File;
 import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
 
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.layout.GridData;
@@ -23,12 +29,10 @@
 import uk.co.caprica.vlcj.binding.LibC;
 import uk.co.caprica.vlcj.binding.RuntimeUtil;
 import uk.co.caprica.vlcj.binding.internal.libvlc_instance_t;
-
-import static uk.co.caprica.vlcj.binding.LibVlc.libvlc_new;
-import static uk.co.caprica.vlcj.binding.LibVlc.libvlc_release;
 import uk.co.caprica.vlcj.factory.discovery.NativeDiscovery;
 import uk.co.caprica.vlcj.factory.discovery.strategy.NativeDiscoveryStrategy;
 import uk.co.caprica.vlcj.factory.swt.SwtMediaPlayerFactory;
+import uk.co.caprica.vlcj.media.MediaRef;
 import uk.co.caprica.vlcj.player.base.MediaPlayer;
 import uk.co.caprica.vlcj.player.base.MediaPlayerEventAdapter;
 import uk.co.caprica.vlcj.player.component.EmbeddedMediaPlayerComponent;
@@ -39,7 +43,7 @@
 
 public class VLCPlayer extends Composite {
 	
-	static {
+	static { // force native libs discovery -> fix Mac OS X init
 		NativeDiscovery discovery = new NativeDiscovery() {
 			
 			@Override
@@ -53,13 +57,13 @@
 			}
 		};
 		boolean found = discovery.discover();
-		System.out.println("VLC NativeDiscovery: " + found);
+		Log.finer("VLC NativeDiscovery: " + found);
 		libvlc_instance_t instance = libvlc_new(0, new StringArray(new String[0]));
-		System.out.println("VLC NativeDiscovery: instance " + instance);
+		Log.finer("VLC NativeDiscovery: instance " + instance);
 		if (instance != null) {
 			libvlc_release(instance);
 		}
-		System.out.println("VLC NativeDiscovery: " + new LibVlcVersion().getVersion());
+		Log.finer("VLC NativeDiscovery: " + new LibVlcVersion().getVersion());
 	}
 	
 	protected static final String NOMEDIA = ""; //$NON-NLS-1$
@@ -124,15 +128,14 @@
 		this.setLayout(new GridLayout(11, false));
 		
 		// THE PLAYER
-		
-		if (RuntimeUtil.isMac()) {
-			try {
-				LibC.INSTANCE.setenv("VLC_PLUGIN_PATH", "/Applications/VLC.app/Contents/MacOS/plugins", 1);
-			}
-			catch (Exception ex) {
-				ex.printStackTrace();
-			}
-		}
+		// if (RuntimeUtil.isMac()) {
+		// try {
+		// LibC.INSTANCE.setenv("VLC_PLUGIN_PATH", "/Applications/VLC.app/Contents/MacOS/plugins", 1);
+		// }
+		// catch (Exception ex) {
+		// ex.printStackTrace();
+		// }
+		// }
 		videoComposite = new Composite(this, SWT.EMBEDDED | SWT.NO_BACKGROUND);
 		GridData gdata = new GridData(SWT.FILL, SWT.FILL, true, true);
 		gdata.horizontalSpan = 11;
@@ -145,14 +148,15 @@
 		vlcPlayer = e.mediaPlayer();
 		vlcPlayer.videoSurface().set(playerCanvas);
 		
-		// videoComposite.addDisposeListener(new DisposeListener() {
-		// @Override
-		// public void widgetDisposed(DisposeEvent e) {
-		// vlcPlayer.controls().stop();
-		// vlcPlayer.release();
-		// factory.release();
-		// }
-		// });
+		videoComposite.addDisposeListener(new DisposeListener() {
+			
+			@Override
+			public void widgetDisposed(DisposeEvent e) {
+				vlcPlayer.controls().stop();
+				vlcPlayer.release();
+				factory.release();
+			}
+		});
 		
 		// THE CONTROL BUTTONS
 		playButton = new Button(this, SWT.PUSH);
@@ -335,16 +339,8 @@
 		vlcPlayer.events().addMediaPlayerEventListener(new MediaPlayerEventAdapter() {
 			
 			@Override
-			public void playing(MediaPlayer mediaPlayer) {
-				mediaPlayer.submit(new Runnable() {
-					
-					@Override
-					public void run() {
-						if (volumeField != null) {
-							vlcPlayer.audio().setVolume(volume);
-						}
-					}
-				});
+			public void opening(MediaPlayer mediaPlayer) {
+				Log.info("Opening media...");
 			}
 			
 			@Override
@@ -455,7 +451,14 @@
 	protected void replay() {
 		if (currentlyPlayed.length() > 0) {
 			// this.play(currentlyPlayed, startTime, endTime);
-			vlcPlayer.controls().setTime(start);
+			vlcPlayer.submit(new Runnable() {
+				
+				@Override
+				public void run() {
+					vlcPlayer.controls().setTime(start);
+				}
+			});
+			
 			playButton.setText(MessagesMP.pause);
 		}
 	}
@@ -512,7 +515,7 @@
 	 * @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) {
+	public boolean play(String mrl, String startTime, String endTime) {
 		
 		if (startTime.matches("[0-9]+.[0-9]+")) {
 			start = (int) (1000 * Float.parseFloat(startTime));
@@ -542,8 +545,21 @@
 		// @Override
 		// public void run() {
 		String[] options = { " :live-caching=200" }; // reduce video stream cache duration to 200ms
-		vlcPlayer.media().play(mrl, options);
+		
+		System.out.println("Preparing media...");
+		if (!vlcPlayer.media().prepare(mrl, options)) {
+			return false;
+		}
+		
+		System.out.println("Is media valid ?");
+		if (!vlcPlayer.media().isValid()) {
+			return false;
+		}
+		System.out.println("Playing media...");
+		vlcPlayer.controls().play();
+		vlcPlayer.audio().setVolume(volume);
 		vlcPlayer.controls().setTime(start);
+		
 		if (new File(mrl + ".srt").exists()) { //$NON-NLS-1$
 			vlcPlayer.subpictures().setSubTitleFile(mrl + ".srt"); //$NON-NLS-1$
 		}
@@ -554,6 +570,7 @@
 		firstLengthEvent = true;
 		// }
 		// });
+		return true;
 	}
 	
 	public void setRepeat(boolean repeat) {
