diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 031c58e724c00f852ca19cf2536e68f2226fe43d..33f35eee6c50a4220c40def90f9828b368b63e06 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -199,9 +199,9 @@ var FileList={
 			$('#notification').data('newName', newName);
 			$('#notification').data('isNewFile', isNewFile);
             if (isNewFile) {
-                Files.showHtmlNotification(t('files', '{new_name} already exists', {new_name: escapeHTML(newName)})+'<span class="replace">'+t('files', 'replace')+'</span><span class="suggest">'+t('files', 'suggest name')+'</span><span class="cancel">'+t('files', 'cancel')+'</span>');
+                OC.Notification.showHtml(t('files', '{new_name} already exists', {new_name: escapeHTML(newName)})+'<span class="replace">'+t('files', 'replace')+'</span><span class="suggest">'+t('files', 'suggest name')+'</span><span class="cancel">'+t('files', 'cancel')+'</span>');
             } else {
-                Files.showHtmlNotification(t('files', '{new_name} already exists', {new_name: escapeHTML(newName)})+'<span class="replace">'+t('files', 'replace')+'</span><span class="cancel">'+t('files', 'cancel')+'</span>');
+                OC.Notification.showHtml(t('files', '{new_name} already exists', {new_name: escapeHTML(newName)})+'<span class="replace">'+t('files', 'replace')+'</span><span class="cancel">'+t('files', 'cancel')+'</span>');
             }
 			return true;
 		} else {
@@ -244,9 +244,9 @@ var FileList={
 			FileList.finishReplace();
 		};
 		if (isNewFile) {
-			Files.showHtmlNotification(t('files', 'replaced {new_name}', {new_name: newName})+'<span class="undo">'+t('files', 'undo')+'</span>');
+			OC.Notification.showHtml(t('files', 'replaced {new_name}', {new_name: newName})+'<span class="undo">'+t('files', 'undo')+'</span>');
 		} else {
-            Files.showHtmlNotification(t('files', 'replaced {new_name} with {old_name}', {new_name: newName}, {old_name: oldName})+'<span class="undo">'+t('files', 'undo')+'</span>');
+            OC.Notification.showHtml(t('files', 'replaced {new_name} with {old_name}', {new_name: newName}, {old_name: oldName})+'<span class="undo">'+t('files', 'undo')+'</span>');
 		}
 	},
 	finishReplace:function() {
@@ -277,9 +277,9 @@ var FileList={
 		} else {
 			// NOTE: Temporary fix to change the text to unshared for files in root of Shared folder
 			if ($('#dir').val() == '/Shared') {
-				Files.showHtmlNotification(t('files', 'unshared {files}', {'files': escapeHTML(files)})+'<span class="undo">'+t('files', 'undo')+'</span>');
+				OC.Notification.showHtml(t('files', 'unshared {files}', {'files': escapeHTML(files)})+'<span class="undo">'+t('files', 'undo')+'</span>');
 			} else {
-                Files.showHtmlNotification(t('files', 'deleted {files}', {'files': escapeHTML(files)})+'<span class="undo">'+t('files', 'undo')+'</span>');
+                OC.Notification.showHtml(t('files', 'deleted {files}', {'files': escapeHTML(files)})+'<span class="undo">'+t('files', 'undo')+'</span>');
 			}
 		}
 	},
@@ -293,7 +293,7 @@ var FileList={
 				data: {dir:$('#dir').val(),files:fileNames},
 				complete: function(data){
 					boolOperationFinished(data, function(){
-                        Files.hideNotification();
+                        OC.Notification.hide();
 						$.each(FileList.deleteFiles,function(index,file){
 							FileList.remove(file);
 						});
@@ -353,16 +353,16 @@ $(document).ready(function(){
 			FileList.replaceIsNewFile = null;
 		}
 		FileList.lastAction = null;
-        Files.hideNotification();
+        OC.Notification.hide();
 	});
 	$('#notification .replace').live('click', function() {
-        Files.hideNotification(function() {
+        OC.Notification.hide(function() {
             FileList.replace($('#notification').data('oldName'), $('#notification').data('newName'), $('#notification').data('isNewFile'));
         });
 	});
 	$('#notification .suggest').live('click', function() {
 		$('tr').filterAttr('data-file', $('#notification').data('oldName')).show();
-        Files.hideNotification();
+        OC.Notification.hide();
 	});
 	$('#notification .cancel').live('click', function() {
 		if ($('#notification').data('isNewFile')) {
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index 6023cf78e797c3fb7289e3c37e36dee53ffe3869..6166b240e83303d732507ba6d3d7c5d2612a3004 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -30,45 +30,23 @@ Files={
 		var invalid_characters = ['\\', '/', '<', '>', ':', '"', '|', '?', '*'];
 		for (var i = 0; i < invalid_characters.length; i++) {
 			if (name.indexOf(invalid_characters[i]) != -1) {
-				Files.showNotification(t('files', "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed."));
+				OC.Notification.show(t('files', "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed."));
 				return true;
 			}
 		}
-        Files.hideNotification();
+        OC.Notification.hide();
 		return false;
 	},
     displayStorageWarnings: function() {
         var usedSpacePercent = $('#usedSpacePercent').val();
         if (usedSpacePercent > 98) {
-            Files.showNotification(t('files', 'Your storage is full, files can not be updated or synced anymore!'));
+            OC.Notification.show(t('files', 'Your storage is full, files can not be updated or synced anymore!'));
             return;
         }
         if (usedSpacePercent > 90) {
-            Files.showNotification(t('files', 'Your storage is almost full ({usedSpacePercent}%)', {usedSpacePercent: usedSpacePercent}));
+            OC.Notification.show(t('files', 'Your storage is almost full ({usedSpacePercent}%)', {usedSpacePercent: usedSpacePercent}));
         }
-    },
-    hideNotification: function(callback) {
-        $("#notification").text('');
-        $('#notification').fadeOut('400', function(){
-            if ($("#notification").text() === '') {
-                Files.displayStorageWarnings();
-            }
-            if (callback) {
-                callback.call();
-            }
-        });
-    },
-    showHtmlNotification: function(html) {
-        $('#notification').hide();
-        $("#notification").html(html);
-        $("#notification").fadeIn();
-    },
-    showNotification: function(text) {
-        $('#notification').hide();
-        $("#notification").text(text);
-        $("#notification").fadeIn();
     }
-
 };
 $(document).ready(function() {
 	Files.bindKeyboardShortcuts(document, jQuery); 
@@ -202,7 +180,7 @@ $(document).ready(function() {
 	$('.download').click('click',function(event) {
 		var files=getSelectedFiles('name').join(';');
 		var dir=$('#dir').val()||'/';
-        Files.showNotification(t('files','generating ZIP-file, it may take some time.'));
+        OC.Notification.show(t('files','generating ZIP-file, it may take some time.'));
 		// use special download URL if provided, e.g. for public shared files
 		if ( (downloadURL = document.getElementById("downloadURL")) ) {
 			window.location=downloadURL.value+"&download&files="+files;
@@ -331,7 +309,7 @@ $(document).ready(function() {
 											var response;
 											response=jQuery.parseJSON(result);
 											if(response[0] == undefined || response[0].status != 'success') {
-                                                Files.showNotification(t('files', response.data.message));
+                                                OC.Notification.show(t('files', response.data.message));
 											}
 											var file=response[0];
                                             // TODO: this doesn't work if the file name has been changed server side
@@ -368,7 +346,7 @@ $(document).ready(function() {
 										} else {
 											uploadtext.text(t('files', '{count} files uploading', {count: currentUploads}));
 										}
-                                        Files.showNotification(t('files', 'Upload cancelled.'));
+                                        OC.Notification.show(t('files', 'Upload cancelled.'));
 									}
 								});
 								//TODO test with filenames containing slashes
@@ -391,14 +369,14 @@ $(document).ready(function() {
 												}
 												FileList.loadingDone(file.name, file.id);
 											} else {
-                                                Files.showNotification(t('files', response.data.message));
+                                                OC.Notification.show(t('files', response.data.message));
 												$('#fileList > tr').not('[data-mime]').fadeOut();
 												$('#fileList > tr').not('[data-mime]').remove();
 											}
 										})
 								.error(function(jqXHR, textStatus, errorThrown) {
 									if(errorThrown === 'abort') {
-                                        Files.showNotification(t('files', 'Upload cancelled.'));
+                                        OC.Notification.show(t('files', 'Upload cancelled.'));
 									}
 								});
 								uploadingFiles[uniqueName] = jqXHR;
@@ -418,7 +396,7 @@ $(document).ready(function() {
 								}
 								FileList.loadingDone(file.name, file.id);
 							} else {
-                                Files.showNotification(t('files', response.data.message));
+                                OC.Notification.show(t('files', response.data.message));
 								$('#fileList > tr').not('[data-mime]').fadeOut();
 								$('#fileList > tr').not('[data-mime]').remove();
 							}
@@ -535,7 +513,7 @@ $(document).ready(function() {
 			if (type != 'web' && Files.containsInvalidCharacters($(this).val())) {
 				return;
 			} else if( type == 'folder' && $('#dir').val() == '/' && $(this).val() == 'Shared') {
-                Files.showNotification(t('files','Invalid folder name. Usage of "Shared" is reserved by Owncloud'));
+                OC.Notification.show(t('files','Invalid folder name. Usage of "Shared" is reserved by Owncloud'));
 				return;
 			}
 			if (FileList.lastAction) {
@@ -708,6 +686,7 @@ $(document).ready(function() {
 
     // display storage warnings
     setTimeout ( "Files.displayStorageWarnings()", 100 );
+    OC.Notification.setDefault(Files.displayStorageWarnings);
 });
 
 function scanFiles(force,dir){
diff --git a/core/js/js.js b/core/js/js.js
index 7d967321d93b97465f7abfb2a3b5bb4a1a79b46c..b57603b7b2ff71c0ad4db22db414b726124273ed 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -289,6 +289,36 @@ OC.search.lastResults={};
 OC.addStyle.loaded=[];
 OC.addScript.loaded=[];
 
+OC.Notification={
+    getDefaultNotificationFunction: null,
+    setDefault: function(callback) {
+        OC.Notification.getDefaultNotificationFunction = callback;
+    },
+    hide: function(callback) {
+        $("#notification").text('');
+        $('#notification').fadeOut('400', function(){
+            if ($("#notification").text() === '') {
+                if (OC.Notification.getDefaultNotificationFunction) {
+                    OC.Notification.getDefaultNotificationFunction.call();
+                }
+            }
+            if (callback) {
+                callback.call();
+            }
+        });
+    },
+    showHtml: function(html) {
+        $('#notification').hide();
+        $('#notification').html(html);
+        $('#notification').fadeIn();
+    },
+    show: function(text) {
+        $('#notification').hide();
+        $('#notification').text(text);
+        $('#notification').fadeIn();
+    }
+};
+
 OC.Breadcrumb={
 	container:null,
 	crumbs:[],