diff --git a/apps/files/index.php b/apps/files/index.php
index 5e644a2a3bb9a5f48c3b93364563bdbef0c1cca3..c45fe60e4f727edd96a1ae37b23ec47cbbfb6375 100644
--- a/apps/files/index.php
+++ b/apps/files/index.php
@@ -31,6 +31,7 @@ OCP\Util::addscript( 'files', 'jquery.fileupload' );
 OCP\Util::addscript( 'files', 'files' );
 OCP\Util::addscript( 'files', 'filelist' );
 OCP\Util::addscript( 'files', 'fileactions' );
+OCP\Util::addscript( 'files', 'keyboardshortcuts' ); 
 if(!isset($_SESSION['timezone'])) {
 	OCP\Util::addscript( 'files', 'timezone' );
 }
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index d29732f9b3fc2c337aaf4b62db20106a7c327f37..886bbfbb18fdd3c08c7c1d0d178def94d0befe6e 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -40,6 +40,7 @@ Files={
 	}
 };
 $(document).ready(function() {
+	Files.bindKeyboardShortcuts(document, jQuery); 
 	$('#fileList tr').each(function(){
 		//little hack to set unescape filenames in attribute
 		$(this).attr('data-file',decodeURIComponent($(this).attr('data-file')));
diff --git a/apps/files/js/keyboardshortcuts.js b/apps/files/js/keyboardshortcuts.js
new file mode 100644
index 0000000000000000000000000000000000000000..562755f55b7608d956190be658a75d58b7c32624
--- /dev/null
+++ b/apps/files/js/keyboardshortcuts.js
@@ -0,0 +1,165 @@
+/**
+ * Copyright (c) 2012 Erik Sargent <esthepiking at gmail dot com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ */
+/*****************************
+ * Keyboard shortcuts for Files app
+ * ctrl/cmd+n: new folder
+ * ctrl/cmd+shift+n: new file
+ * esc (while new file context menu is open): close menu
+ * up/down: select file/folder
+ * enter: open file/folder
+ * delete/backspace: delete file/folder
+ *****************************/
+var Files = Files || {};
+(function(Files) {
+	var keys = [];
+	var keyCodes = {
+		shift: 16,
+		n: 78,
+		cmdFirefox: 224,
+		cmdOpera: 17,
+		leftCmdWebKit: 91,
+		rightCmdWebKit: 93,
+		ctrl: 17,
+		esc: 27,
+		downArrow: 40,
+		upArrow: 38,
+		enter: 13,
+		del: 46
+	};
+
+	function removeA(arr) {
+		var what, a = arguments,
+			L = a.length,
+			ax;
+		while (L > 1 && arr.length) {
+			what = a[--L];
+			while ((ax = arr.indexOf(what)) !== -1) {
+				arr.splice(ax, 1);
+			}
+		}
+		return arr;
+	}
+
+	function newFile() {
+		$("#new").addClass("active");
+		$(".popup.popupTop").toggle(true);
+		$('#new li[data-type="file"]').trigger('click');
+		removeA(keys, keyCodes.n);
+	}
+
+	function newFolder() {
+		$("#new").addClass("active");
+		$(".popup.popupTop").toggle(true);
+		$('#new li[data-type="folder"]').trigger('click');
+		removeA(keys, keyCodes.n);
+	}
+
+	function esc() {
+		$("#controls").trigger('click');
+	}
+
+	function down() {
+		var select = -1;
+		$("#fileList tr").each(function(index) {
+			if ($(this).hasClass("mouseOver")) {
+				select = index + 1;
+				$(this).removeClass("mouseOver");
+			}
+		});
+		if (select === -1) {
+			$("#fileList tr:first").addClass("mouseOver");
+		} else {
+			$("#fileList tr").each(function(index) {
+				if (index === select) {
+					$(this).addClass("mouseOver");
+				}
+			});
+		}
+	}
+
+	function up() {
+		var select = -1;
+		$("#fileList tr").each(function(index) {
+			if ($(this).hasClass("mouseOver")) {
+				select = index - 1;
+				$(this).removeClass("mouseOver");
+			}
+		});
+		if (select === -1) {
+			$("#fileList tr:last").addClass("mouseOver");
+		} else {
+			$("#fileList tr").each(function(index) {
+				if (index === select) {
+					$(this).addClass("mouseOver");
+				}
+			});
+		}
+	}
+
+	function enter() {
+		$("#fileList tr").each(function(index) {
+			if ($(this).hasClass("mouseOver")) {
+				$(this).removeClass("mouseOver");
+				$(this).find("span.nametext").trigger('click');
+			}
+		});
+	}
+
+	function del() {
+		$("#fileList tr").each(function(index) {
+			if ($(this).hasClass("mouseOver")) {
+				$(this).removeClass("mouseOver");
+				$(this).find("a.action.delete").trigger('click');
+			}
+		});
+	}
+
+	function rename() {
+		$("#fileList tr").each(function(index) {
+			if ($(this).hasClass("mouseOver")) {
+				$(this).removeClass("mouseOver");
+				$(this).find("a[data-action='Rename']").trigger('click');
+			}
+		});
+	}
+	Files.bindKeyboardShortcuts = function(document, $) {
+		$(document).keydown(function(event) { //check for modifier keys
+			var preventDefault = false;
+			if ($.inArray(event.keyCode, keys) === -1) keys.push(event.keyCode);
+			if (
+			$.inArray(keyCodes.n, keys) !== -1 && ($.inArray(keyCodes.cmdFirefox, keys) !== -1 || $.inArray(keyCodes.cmdOpera, keys) !== -1 || $.inArray(keyCodes.leftCmdWebKit, keys) !== -1 || $.inArray(keyCodes.rightCmdWebKit, keys) !== -1 || $.inArray(keyCodes.ctrl, keys) !== -1 || event.ctrlKey)) {
+				preventDefault = true; //new file/folder prevent browser from responding
+			}
+			if (preventDefault) {
+				event.preventDefault(); //Prevent web browser from responding
+				event.stopPropagation();
+				return false;
+			}
+		});
+		$(document).keyup(function(event) {
+			// do your event.keyCode checks in here
+			if (
+			$.inArray(keyCodes.n, keys) !== -1 && ($.inArray(keyCodes.cmdFirefox, keys) !== -1 || $.inArray(keyCodes.cmdOpera, keys) !== -1 || $.inArray(keyCodes.leftCmdWebKit, keys) !== -1 || $.inArray(keyCodes.rightCmdWebKit, keys) !== -1 || $.inArray(keyCodes.ctrl, keys) !== -1 || event.ctrlKey)) {
+				if ($.inArray(keyCodes.shift, keys) !== -1) { //16=shift, New File
+					newFile();
+				} else { //New Folder
+					newFolder();
+				}
+			} else if ($("#new").hasClass("active") && $.inArray(keyCodes.esc, keys) !== -1) { //close new window
+				esc();
+			} else if ($.inArray(keyCodes.downArrow, keys) !== -1) { //select file
+				down();
+			} else if ($.inArray(keyCodes.upArrow, keys) !== -1) { //select file
+				up();
+			} else if (!$("#new").hasClass("active") && $.inArray(keyCodes.enter, keys) !== -1) { //open file
+				enter();
+			} else if (!$("#new").hasClass("active") && $.inArray(keyCodes.del, keys) !== -1) { //delete file
+				del();
+			}
+			removeA(keys, event.keyCode);
+		});
+	};
+})(Files);
\ No newline at end of file