diff --git a/src/main/java/org/olat/modules/video/managers/VideoManager.java b/src/main/java/org/olat/modules/video/managers/VideoManager.java
index a19f47d8fea7c994d512c8354f7d0f27a61577e7..918b0d94fd1a519e2a24ec3ace2dd01971fab86d 100644
--- a/src/main/java/org/olat/modules/video/managers/VideoManager.java
+++ b/src/main/java/org/olat/modules/video/managers/VideoManager.java
@@ -22,10 +22,12 @@ package org.olat.modules.video.managers;
 import java.io.File;
 import java.io.IOException;
 import java.util.HashMap;
+import java.util.List;
 
 import org.olat.core.commons.services.image.Size;
 import org.olat.core.manager.BasicManager;
 import org.olat.core.util.vfs.VFSLeaf;
+import org.olat.modules.video.models.VideoQualityVersion;
 import org.olat.resource.OLATResource;
 
 /**
@@ -76,5 +78,6 @@ public abstract class VideoManager extends BasicManager {
 	public abstract String getDescription(OLATResource video);
 
 	public abstract boolean optimizeVideoRessource(OLATResource video);
-
+	
+	public abstract List<VideoQualityVersion> getQualityVersions(OLATResource video);
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/video/managers/VideoManagerImpl.java b/src/main/java/org/olat/modules/video/managers/VideoManagerImpl.java
index 1b1c6481f58b5833ac9ce6d5b370529f4c2216ff..8d51498daa862d9f6b118312f6777ea398f7190c 100644
--- a/src/main/java/org/olat/modules/video/managers/VideoManagerImpl.java
+++ b/src/main/java/org/olat/modules/video/managers/VideoManagerImpl.java
@@ -8,10 +8,12 @@ import java.io.RandomAccessFile;
 import java.nio.channels.FileChannel;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map.Entry;
 
 import javax.imageio.ImageIO;
 
+import org.apache.commons.io.FileUtils;
 import org.jcodec.api.FrameGrab;
 import org.jcodec.common.FileChannelWrapper;
 import org.olat.core.commons.services.image.Size;
@@ -21,6 +23,7 @@ import org.olat.core.util.vfs.VFSManager;
 import org.olat.core.util.xml.XStreamHelper;
 import org.olat.fileresource.FileResourceManager;
 import org.olat.modules.video.models.VideoMetadata;
+import org.olat.modules.video.models.VideoQualityVersion;
 import org.olat.resource.OLATResource;
 import org.springframework.stereotype.Service;
 
@@ -162,7 +165,7 @@ public class VideoManagerImpl extends VideoManager {
 		}catch(	Exception e){
 			return false;
 		}
-		//TODO: throw right exception
+		//TODO: throw correct exception
 	}
 
 	@Override
@@ -213,15 +216,23 @@ public class VideoManagerImpl extends VideoManager {
 		File file = getVideoFile(video);
 		File videoResourceFileroot = fileResourceManager.getFileResourceRoot(video);
 		File optimizedFolder = new File(videoResourceFileroot, "optimizedVideoData");
+		File metaDataFile = new File(optimizedFolder,"optimizedVideo_metadata.xml");
 		optimizedFolder.mkdirs();
 
 		ArrayList<String> cmd = new ArrayList<String>();
 
+		//create Metadata
+		List<VideoQualityVersion> versions = getQualityVersions(video);
+		versions.add(new VideoQualityVersion("normal", FileUtils.byteCountToDisplaySize(file.length()), getVideoSize(video), "mp4"));
+		XStreamHelper.writeObject(XStreamHelper.createXStreamInstance(), metaDataFile, versions);
+		
+		//start transcoding with handbrake
 		cmd.add("HandBrakeCLI");
-		cmd.add("-i "+file.getAbsolutePath());
-		cmd.add("-o "+optimizedFolder.getAbsolutePath()+"/optimized_"+file.getName());
+		cmd.add("-i"+file.getAbsolutePath());
+		cmd.add("-o"+optimizedFolder.getAbsolutePath()+"/optimized_"+file.getName());
 		cmd.add("--optimize");
-		cmd.add("--preset Normal");
+		cmd.add("--preset");
+		cmd.add("Normal");
 
 		ProcessBuilder pb = new ProcessBuilder(cmd);
 		pb.directory(optimizedFolder);
@@ -230,27 +241,36 @@ public class VideoManagerImpl extends VideoManager {
 		pb.inheritIO();
 
 
-		 try {
-				logInfo("+--------------------------HANDBRAKE STARTS TRANSCODING------------------------------------+");
-	            Runtime.getRuntime().exec("HandBrakeCLI "+" -i "+file.getAbsolutePath()+" -o "+optimizedFolder.getAbsolutePath()+"/optimized_"+file.getName()+" --optimize"+" --preset Normal");
-				logInfo("+---------------------------HANDBRAKE TRANSCODING DONE-------------------------------------+");
-				return true;
-		 } catch (Exception e) {
-	            System.err.println("Unable to do videotranscoding");
-				return false;
-	     }
-
 		 
-//		try {
-//			logInfo("+--------------------------HANDBRAKE STARTS TRANSCODING------------------------------------+");
-//			Process process = pb.start();
-//			process.waitFor();
-//			logInfo("+---------------------------HANDBRAKE TRANSCODING DONE-------------------------------------+");
-//			return true;
-//		} catch (Exception e) {
-//			return false;
-//		}
+		try {
+			logInfo("+--------------------------HANDBRAKE STARTS TRANSCODING------------------------------------+");
+			Process process = pb.start();
+			return true;
+		} catch (Exception e) {
+			return false;
+		}
 
 	}
+	
+	@Override
+	public List<VideoQualityVersion> getQualityVersions(OLATResource video){
+		File videoResourceFileroot = fileResourceManager.getFileResourceRoot(video);
+		File optimizedFolder = new File(videoResourceFileroot, "optimizedVideoData");
+		File metaDataFile = new File(optimizedFolder,"optimizedVideo_metadata.xml");
+		List<VideoQualityVersion> versions;
+		
+		if(!metaDataFile.exists()){
+			try {
+				metaDataFile.createNewFile();
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+			versions = new ArrayList<VideoQualityVersion>();
+		}else{
+			Object fileContent = XStreamHelper.readObject(XStreamHelper.createXStreamInstance(), metaDataFile);
+			versions = (List<VideoQualityVersion>) fileContent;
+		}
+		return versions;
+	}
 
 }
diff --git a/src/main/java/org/olat/modules/video/models/VideoQualityVersion.java b/src/main/java/org/olat/modules/video/models/VideoQualityVersion.java
new file mode 100644
index 0000000000000000000000000000000000000000..15740f4b6dc7e6d6afdbe8c4c6dea8f3084d6740
--- /dev/null
+++ b/src/main/java/org/olat/modules/video/models/VideoQualityVersion.java
@@ -0,0 +1,59 @@
+package org.olat.modules.video.models;
+
+import org.olat.core.commons.services.image.Size;
+
+public class VideoQualityVersion{
+	// Properties
+	String type;
+	String fileSize;
+	Size dimension;
+	String format;
+	boolean isTransforming;
+	
+	public VideoQualityVersion(String type, String fileSize, Size dimension, String format){
+		this.type = type;
+		this.fileSize = fileSize;
+		this.dimension = dimension;
+		this.format = format;
+	}
+	
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public String getFileSize() {
+		return fileSize;
+	}
+
+	public void setFileSize(String fileSize) {
+		this.fileSize = fileSize;
+	}
+
+	public Size getDimension() {
+		return dimension;
+	}
+
+	public void setDimension(Size dimension) {
+		this.dimension = dimension;
+	}
+
+	public String getFormat() {
+		return format;
+	}
+
+	public void setFormat(String format) {
+		this.format = format;
+	}
+	
+	public boolean getIsTransforming() {
+		return isTransforming;
+	}
+
+	public void setIsTransforming(boolean isTranscoding) {
+		this.isTransforming = isTranscoding;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/video/service/TranscoderService.java b/src/main/java/org/olat/modules/video/service/TranscoderService.java
index 3983288c4c7e968d70ab6deb996f9af764ddcc6d..fcefed9019b4c39f6e8511af5b343be5c2228301 100644
--- a/src/main/java/org/olat/modules/video/service/TranscoderService.java
+++ b/src/main/java/org/olat/modules/video/service/TranscoderService.java
@@ -12,10 +12,10 @@ public class TranscoderService{
 	private static String transcodingProvider;
 
     private static TranscoderService service;
-    private ServiceLoader<Transcoder> loader;
+    private static ServiceLoader<Transcoder> loader;
 
     private TranscoderService() {
-        loader = ServiceLoader.load(Transcoder.class);
+    		loader = ServiceLoader.load(Transcoder.class);
     }
 
     public static synchronized TranscoderService getInstance() {
@@ -24,4 +24,12 @@ public class TranscoderService{
         }
         return service;
     }
+    
+//    public static Transcoder getTrascoder(){
+//    	
+//        for (Transcoder transcoder : loader) {
+//        	return transcoder;
+//        }
+//        
+//    }
 }
diff --git a/src/main/java/org/olat/modules/video/ui/VideoQualityTableFormController.java b/src/main/java/org/olat/modules/video/ui/VideoQualityTableFormController.java
index 84bf50fed3d17d1f55713a2f3f9996909ff97769..16bfed07885b4fbe33606488e9efb700a8deecfa 100644
--- a/src/main/java/org/olat/modules/video/ui/VideoQualityTableFormController.java
+++ b/src/main/java/org/olat/modules/video/ui/VideoQualityTableFormController.java
@@ -19,6 +19,7 @@ import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.modules.video.managers.VideoManager;
 import org.olat.modules.video.models.VideoQualityTableModel;
+import org.olat.modules.video.models.VideoQualityVersion;
 import org.olat.modules.video.models.VideoQualityTableModel.QualityTableCols;
 import org.olat.resource.OLATResource;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -61,7 +62,14 @@ public class VideoQualityTableFormController extends FormBasicController {
 		Size origSize = videoManager.getVideoSize(videoResource);
 
 		FormLink viewButton = uifactory.addFormLink("view", "viewQuality", "quality.view", "qulaity.view", null, Link.LINK);
+		
 		rows.add(new QualityTableRow("original", origSize.getWidth() +"x"+ origSize.getHeight(),  FileUtils.byteCountToDisplaySize(videoManager.getVideoFile(videoResource).length()), "mp4",viewButton));
+		
+		List<VideoQualityVersion> versions = videoManager.getQualityVersions(videoResource);
+		for(VideoQualityVersion version:versions){
+			rows.add(new QualityTableRow(version.getType(), version.getDimension().getWidth() +"x"+ version.getDimension().getHeight(),  version.getFileSize(), version.getFormat(),viewButton));
+		}
+		
 		tableModel.setObjects(rows);
 		tableEl = uifactory.addTableElement(getWindowControl(), "qualities", tableModel, getTranslator(), generalCont);
 		tableEl.setCustomizeColumns(false);
diff --git a/src/main/java/org/olat/repository/handlers/VideoHandler.java b/src/main/java/org/olat/repository/handlers/VideoHandler.java
index d6465e105fd0a6d17bab9b11bdea365a2da67779..e887c2275a0f2f1deaf7d38f4ef12bbe4c536564 100644
--- a/src/main/java/org/olat/repository/handlers/VideoHandler.java
+++ b/src/main/java/org/olat/repository/handlers/VideoHandler.java
@@ -182,8 +182,6 @@ public class VideoHandler extends FileHandler {
 		return re;
 	}
 
-
-
 	@Override
 	public MediaResource getAsMediaResource(OLATResourceable res, boolean backwardsCompatible) {
 		return FileResourceManager.getInstance().getAsDownloadeableMediaResource(res);
diff --git a/src/main/resources/serviceconfig/olat.properties b/src/main/resources/serviceconfig/olat.properties
index 814c34f664adc4a74be90d0e7a58ce1c7c1fd184..9721bfb2ca160f81c1551bbaac7541d5755d6f12 100644
--- a/src/main/resources/serviceconfig/olat.properties
+++ b/src/main/resources/serviceconfig/olat.properties
@@ -1156,5 +1156,5 @@ monitored.probes=Runtime,System,Database,Memory,OpenOLAT,Release,Environment,Ind
 monitoring.dependency.server=myserver
 
 
-
-
+#
+video.transcoding.provider=handbrake