diff --git a/.htaccess b/.htaccess
new file mode 100644
index 0000000000000000000000000000000000000000..58230365bf52ae201d58042ffb02ae5f5855d637
--- /dev/null
+++ b/.htaccess
@@ -0,0 +1,4 @@
+ErrorDocument 404 //owncloud/templates/404.php
+php_value upload_max_filesize 20M
+php_value post_max_size 20M
+SetEnv htaccessWorking true
diff --git a/files/css/files.css b/files/css/files.css
index 1cfca68ff55a43d945def9b05ee5f64191eb76f7..7c7965ab8473f09728731a320634930fe3ce1daa 100644
--- a/files/css/files.css
+++ b/files/css/files.css
@@ -4,6 +4,7 @@
 {
     display: none;
     position: absolute;
+	right:0px;
     background-color: #EEE;
 }
 
@@ -36,7 +37,7 @@
 #file_upload_filename {
 	background-image:url(../../img/mimetypes/file.png);
 }
-#file_upload_start {opacity:0;}
+#file_upload_start {opacity:0;filter: alpha(opacity = 0);}
 
 #file_newfolder_name {
 	background-image:url(../../img/places/folder.png); font-weight: bold; 
@@ -104,3 +105,10 @@ table td.filename a
     text-decoration: none;
 }
 
+.dropArrow{
+	height:16px;
+	width:16px;
+	display: -moz-inline-box; /* fallback for older firefox versions*/
+	display: inline-block;
+	background-image:url('../../img/drop-arrow.png');
+}
\ No newline at end of file
diff --git a/files/index.php b/files/index.php
index 79f8b677018310188199d8c374b8292387e6f40a..d796583a4ae0241b54d8d3e8d46a556378297c92 100644
--- a/files/index.php
+++ b/files/index.php
@@ -36,6 +36,7 @@ if( !OC_USER::isLoggedIn()){
 OC_UTIL::addStyle( "files", "files" );
 OC_UTIL::addScript( "files", "files" );
 OC_UTIL::addScript( 'files', 'filelist' );
+OC_UTIL::addScript( 'files', 'fileactions' );
 OC_APP::setActiveNavigationEntry( "files_index" );
 // Load the files
 $dir = isset( $_GET['dir'] ) ? $_GET['dir'] : '';
diff --git a/files/js/fileactions.js b/files/js/fileactions.js
new file mode 100644
index 0000000000000000000000000000000000000000..bb02b639c57dfb78f522944fd244f9d40140dbd3
--- /dev/null
+++ b/files/js/fileactions.js
@@ -0,0 +1,100 @@
+FileActions={
+	actions:{},
+	defaults:{},
+	register:function(mime,name,action){
+		if(!FileActions.actions[mime]){
+			FileActions.actions[mime]={};
+		}
+		FileActions.actions[mime][name]=action;
+	},
+	setDefault:function(mime,name){
+		FileActions.defaults[mime]=FileActions.actions[mime][name];
+	},
+	get:function(mime,type){
+		var actions={};
+		if(FileActions.actions.all){
+			actions=$.extend( actions, FileActions.actions.all )
+		}
+		if(mime){
+			if(FileActions.actions[mime]){
+				actions=$.extend( actions, FileActions.actions[mime] )
+			}
+			var mimePart=mime.substr(0,mime.indexOf('/'));
+			if(FileActions.actions[mimePart]){
+				actions=$.extend( actions, FileActions.actions[mimePart] )
+			}
+		}
+		if(type){//type is 'dir' or 'file'
+			if(FileActions.actions[type]){
+				actions=$.extend( actions, FileActions.actions[type] )
+			}
+		}
+		return actions;
+	},
+	getDefault:function(mime,type){
+		if(mime){
+			var mimePart=mime.substr(0,mime.indexOf('/'));
+		}
+		if(mime && FileActions.defaults[mime]){
+			return FileActions.defaults[mime];
+		}else if(mime && FileActions.defaults[mimePart]){
+			return FileActions.defaults[mimePart];
+		}else if(type && FileActions.defaults[type]){
+			return FileActions.defaults[type];
+		}else{
+			return FileActions.defaults.all;
+		}
+	},
+	display:function(parent){
+		$('#file_menu>ul').empty();
+		parent.append($('#file_menu'));
+		var actions=FileActions.get(FileActions.getCurrentMimeType(),FileActions.getCurrentType());
+		for(name in actions){
+			var html='<li><a href="" alt="'+name+'">'+name+'</a></li>';
+			var element=$(html);
+			element.data('action',name);
+			element.click(function(){
+				event.preventDefault();
+				actions[$(this).data('action')](FileActions.getCurrentFile());
+			});
+			$('#file_menu>ul').append(element);
+		}
+		$('#file_menu').slideToggle(250);
+		return false;
+	},
+	getCurrentFile:function(){
+		return $('#file_menu').parents('tr:first').attr('data-file');
+	},
+	getCurrentMimeType:function(){
+		return $('#file_menu').parents('tr:first').attr('data-mime');
+	},
+	getCurrentType:function(){
+		return $('#file_menu').parents('tr:first').attr('data-type');
+	}
+}
+
+FileActions.register('all','Download',function(filename){
+	window.location='ajax/download.php?files='+filename+'&dir='+$('#dir').val();
+	$('#file_menu').slideToggle(250);
+});
+
+FileActions.register('all','Delete',function(filename){
+	$.ajax({
+		url: 'ajax/delete.php',
+		data: "dir="+$('#dir').val()+"&file="+filename,
+		complete: function(data){
+			boolOperationFinished(data, function(){
+				FileList.remove(filename);
+			});
+		}
+	});
+});
+
+FileActions.setDefault('all','Download');
+
+FileActions.register('dir','Open',function(filename){
+	window.location='index.php?dir='+$('#dir').val()+'/'+filename;
+	$('#file_menu').slideToggle(250);
+});
+
+FileActions.setDefault('dir','Open');
\ No newline at end of file
diff --git a/files/js/files.js b/files/js/files.js
index 2c595ee4457bce0160aa548cb1a73f78d9b5ea3d..c758432a4f64926929cd8bebac3ec6b5397daeda 100644
--- a/files/js/files.js
+++ b/files/js/files.js
@@ -15,11 +15,22 @@ $(document).ready(function() {
 
 	// Sets the file-action buttons behaviour :
 	$('td.fileaction a').live('click',function() {
-		$(this).parent().append($('#file_menu'));
-		$('#file_menu').slideToggle(250);
-		return false;
+		event.preventDefault();
+		FileActions.display($(this).parent());
 	});
-
+	
+	// Sets the file link behaviour :
+	$('td.filename a').live('click',function() {
+		event.preventDefault();
+		var filename=$(this).text();
+		var mime=$(this).parent().parent().attr('data-mime');
+		var type=$(this).parent().parent().attr('data-type');
+		var action=FileActions.getDefault(mime,type);
+		if(action){
+			action(filename);
+		}
+	});
+	
 	// Sets the select_all checkbox behaviour :
 	$('#select_all').click(function() {
 		if($(this).attr('checked'))
@@ -40,33 +51,10 @@ $(document).ready(function() {
 		}
 	});
 	
-	// Download current file 
-	$('#download_single_file').click(function() {
-		filename = $('#file_menu').parents('tr:first').find('.filename:first').children('a:first').text();
-		window.location='ajax/download.php?files='+filename+'&dir='+$('#dir').val();
-		$('#file_menu').slideToggle(250);
-		return false;
-	});
-	
-	// Delete current file 
-	$('#delete_single_file').click(function() {
-		filename = $('#file_menu').parents('tr:first').attr('data-file');
-		$.ajax({
-			url: 'ajax/delete.php',
-			data: "dir="+$('#dir').val()+"&file="+filename,
-			complete: function(data){
-				boolOperationFinished(data, function(){
-					FileList.remove(filename);
-				});
-			}
-		});
-		return false;
-	});
-	
 	$('#file_newfolder_submit').click(function() {
 		$.ajax({
 			url: 'ajax/newfolder.php',
-		 data: "dir="+$('#dir').val()+"&foldername="+$('#file_newfolder_name').val(),
+			data: "dir="+$('#dir').val()+"&foldername="+$('#file_newfolder_name').val(),
 			complete: function(data){boolOperationFinished(data, function(){
 				var date=formatDate(new Date());
 				FileList.addDir($('#file_newfolder_name').val(),'0 B',date)
diff --git a/files/templates/index.php b/files/templates/index.php
index 6222724e7be5b60d9876b8619503994b7d8f68f1..11cf0360e1e0148138b894a3450f4d36698645be 100644
--- a/files/templates/index.php
+++ b/files/templates/index.php
@@ -44,8 +44,5 @@
 
 <div id="file_menu">
 	<ul>
-		<li><a href="" title="" id="download_single_file">Download</a></li>
-		<li><a href="" title="">Share</a></li>
-		<li><a href="" title="" id="delete_single_file">Delete</a></li>
 	</ul>
 </div>
diff --git a/files/templates/part.list.php b/files/templates/part.list.php
index f99cd87be24945187551f819485c4b971eb67e0a..16d9d92c04025c5a1a1a0e5ecd3a4289b31e2fed 100644
--- a/files/templates/part.list.php
+++ b/files/templates/part.list.php
@@ -1,5 +1,5 @@
 		<?php foreach($_["files"] as $file): ?>
-			<tr data-file='<?php echo $file['name'];?>' data-type='<?php echo ($file["type"] == "dir")?'dir':'file'?>'>
+			<tr data-file='<?php echo $file['name'];?>' data-type='<?php echo ($file["type"] == "dir")?'dir':'file'?>' data-mime='<?php echo $file["mime"]?>'>
 				<td class="selection"><input type="checkbox" /></td>
 				<td class="filename"><a style="background-image:url(<?php if($file["type"] == "dir") echo mimetype_icon("dir"); else echo mimetype_icon($file["mime"]); ?>)" href="<?php if($file["type"] == "dir") echo link_to("files", "index.php?dir=".$file["directory"]."/".$file["name"]); else echo link_to("files", "download.php?file=".$file["directory"]."/".$file["name"]); ?>" title=""><?php echo htmlspecialchars($file["name"]); ?></a></td>
 				<td class="filesize"><?php echo human_file_size($file["size"]); ?></td>