diff --git a/Changelog.md b/Changelog.md
index f9efb46788bd7e4cff5c8c09db175390e42d2be8..07f354cfcbf83c11d9cdd06e46472713dd974640 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -116,6 +116,7 @@ diaspora.yml file**. The existing settings from 0.4.x and before will not work a
 * Replace %{third_party_tools} by the appropriate hyperlink in tags FAQ [#5509](https://github.com/diaspora/diaspora/pull/5509)
 * Repair downloading the profile image from Facebook [#5493](https://github.com/diaspora/diaspora/pull/5493)
 * Fix localization of post and comment timestamps on mobile [#5482](https://github.com/diaspora/diaspora/issues/5482)
+* Fix mobile JS loading to quieten errors. Fixes also service buttons on mobile bookmarklet.
 
 ## Features
 * Don't pull jQuery from a CDN by default [#5105](https://github.com/diaspora/diaspora/pull/5105)
diff --git a/app/assets/javascripts/jasmine-load-all.js b/app/assets/javascripts/jasmine-load-all.js
index eda5e0faab842a20e29e4038e4dc65849214bd01..d6d42ecf1c613a612d667d10f336a6dae8fd7a01 100644
--- a/app/assets/javascripts/jasmine-load-all.js
+++ b/app/assets/javascripts/jasmine-load-all.js
@@ -4,7 +4,7 @@
 //= require main
 //= require home
 //= require inbox
-//= require mobile
+//= require mobile/mobile
 //= require profile
 //= require contact-list
 //= require sinon
diff --git a/app/assets/javascripts/mobile.js b/app/assets/javascripts/mobile/mobile.js
similarity index 74%
rename from app/assets/javascripts/mobile.js
rename to app/assets/javascripts/mobile/mobile.js
index 21dd05582dcfccd48bf028eefaf54b90549a798b..af1a3c336fadfae5a12efdaec5d5adb65adc91b0 100644
--- a/app/assets/javascripts/mobile.js
+++ b/app/assets/javascripts/mobile/mobile.js
@@ -15,6 +15,7 @@
 //= require diaspora
 //= require helpers/i18n
 //= require widgets/timeago
+//= require mobile/mobile_file_uploader
 
 $(document).ready(function(){
 
@@ -302,86 +303,5 @@ $(document).ready(function(){
 
 });
 
-function createUploader(){
-
-   var aspectIds = gon.preloads.aspect_ids;
-
-   var uploader = new qq.FileUploaderBasic({
-       element: document.getElementById('file-upload-publisher'),
-       params: {'photo' : {'pending' : 'true', 'aspect_ids' : aspectIds},},
-       allowedExtensions: ['jpg', 'jpeg', 'png', 'gif', 'tiff'],
-       action: "/photos",
-       debug: true,
-       button: document.getElementById('file-upload-publisher'),
-       sizeLimit: 4194304,
-
-       onProgress: function(id, fileName, loaded, total){
-        var progress = Math.round(loaded / total * 100 );
-         $('#fileInfo-publisher').text(fileName + ' ' + progress + '%');
-       },
-
-       messages: {
-          typeError: Diaspora.I18n.t("photo_uploader.invalid_ext"),
-          sizeError: Diaspora.I18n.t("photo_uploader.new_photo.size_error"),
-          emptyError: Diaspora.I18n.t("photo_uploader.new_photo.empty")
-       },
-
-       onSubmit: function(id, fileName){
-        $('#file-upload-publisher').addClass("loading");
-        $('#publisher_textarea_wrapper').addClass("with_attachments");
-        $('#photodropzone').append(
-          "<li class='publisher_photo loading' style='position:relative;'>" +
-            "<img alt='Ajax-loader2' src='"+ImagePaths.get('ajax-loader2.gif')+"' />" +
-          "</li>"
-          );
-       },
-
-       onComplete: function(id, fileName, responseJSON) {
-        $('#fileInfo-publisher').text(Diaspora.I18n.t("photo_uploader.completed", {'file': fileName}));
-        var id = responseJSON.data.photo.id,
-            url = responseJSON.data.photo.unprocessed_image.url,
-            currentPlaceholder = $('li.loading').first();
-
-        $('#publisher_textarea_wrapper').addClass("with_attachments");
-        $('#new_status_message').append("<input type='hidden' value='" + id + "' name='photos[]' />");
-
-        // replace image placeholders
-        var img = currentPlaceholder.find('img');
-        img.attr('src', url);
-        img.attr('data-id', id);
-        currentPlaceholder.removeClass('loading');
-        currentPlaceholder.append("<div class='x'>X</div>" +
-            "<div class='circle'></div>");
-        ////
-
-        var publisher = $('#publisher'),
-            textarea = publisher.find('textarea');
-
-        publisher.find("input[type='submit']").removeAttr('disabled');
-
-        $('.x').bind('click', function(){
-          var photo = $(this).closest('.publisher_photo');
-          photo.addClass("dim");
-          $.ajax({url: "/photos/" + photo.children('img').attr('data-id'),
-                  dataType: 'json',
-                  type: 'DELETE',
-                  success: function() {
-                            photo.fadeOut(400, function(){
-                              photo.remove();
-                              if ( $('.publisher_photo').length == 0){
-                                $('#publisher_textarea_wrapper').removeClass("with_attachments");
-                              }
-                            });
-                          }
-                  });
-        });
-       },
-
-       onAllComplete: function(completed_files){
-       }
-
-   });
-}
-createUploader();
 // @license-end
 
diff --git a/app/assets/javascripts/mobile/mobile_file_uploader.js b/app/assets/javascripts/mobile/mobile_file_uploader.js
new file mode 100644
index 0000000000000000000000000000000000000000..ac17956c234bac09a61d30244ce2e1eb95fbde9d
--- /dev/null
+++ b/app/assets/javascripts/mobile/mobile_file_uploader.js
@@ -0,0 +1,85 @@
+// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3-or-Later
+//= require js_image_paths
+
+function createUploader(){
+
+   var aspectIds = gon.preloads.aspect_ids;
+
+   var uploader = new qq.FileUploaderBasic({
+       element: document.getElementById('file-upload-publisher'),
+       params: {'photo' : {'pending' : 'true', 'aspect_ids' : aspectIds},},
+       allowedExtensions: ['jpg', 'jpeg', 'png', 'gif', 'tiff'],
+       action: "/photos",
+       debug: true,
+       button: document.getElementById('file-upload-publisher'),
+       sizeLimit: 4194304,
+
+       onProgress: function(id, fileName, loaded, total){
+        var progress = Math.round(loaded / total * 100 );
+         $('#fileInfo-publisher').text(fileName + ' ' + progress + '%');
+       },
+
+       messages: {
+          typeError: Diaspora.I18n.t("photo_uploader.invalid_ext"),
+          sizeError: Diaspora.I18n.t("photo_uploader.new_photo.size_error"),
+          emptyError: Diaspora.I18n.t("photo_uploader.new_photo.empty")
+       },
+
+       onSubmit: function(id, fileName){
+        $('#file-upload-publisher').addClass("loading");
+        $('#publisher_textarea_wrapper').addClass("with_attachments");
+        $('#photodropzone').append(
+          "<li class='publisher_photo loading' style='position:relative;'>" +
+            "<img alt='Ajax-loader2' src='"+ImagePaths.get('ajax-loader2.gif')+"' />" +
+          "</li>"
+          );
+       },
+
+       onComplete: function(id, fileName, responseJSON) {
+        $('#fileInfo-publisher').text(Diaspora.I18n.t("photo_uploader.completed", {'file': fileName}));
+        var id = responseJSON.data.photo.id,
+            url = responseJSON.data.photo.unprocessed_image.url,
+            currentPlaceholder = $('li.loading').first();
+
+        $('#publisher_textarea_wrapper').addClass("with_attachments");
+        $('#new_status_message').append("<input type='hidden' value='" + id + "' name='photos[]' />");
+
+        // replace image placeholders
+        var img = currentPlaceholder.find('img');
+        img.attr('src', url);
+        img.attr('data-id', id);
+        currentPlaceholder.removeClass('loading');
+        currentPlaceholder.append("<div class='x'>X</div>" +
+            "<div class='circle'></div>");
+        ////
+
+        var publisher = $('#publisher'),
+            textarea = publisher.find('textarea');
+
+        publisher.find("input[type='submit']").removeAttr('disabled');
+
+        $('.x').bind('click', function(){
+          var photo = $(this).closest('.publisher_photo');
+          photo.addClass("dim");
+          $.ajax({url: "/photos/" + photo.children('img').attr('data-id'),
+                  dataType: 'json',
+                  type: 'DELETE',
+                  success: function() {
+                            photo.fadeOut(400, function(){
+                              photo.remove();
+                              if ( $('.publisher_photo').length == 0){
+                                $('#publisher_textarea_wrapper').removeClass("with_attachments");
+                              }
+                            });
+                          }
+                  });
+        });
+       },
+
+       onAllComplete: function(completed_files){
+       }
+
+   });
+}
+createUploader();
+// @license-end
diff --git a/app/views/conversations/new.mobile.haml b/app/views/conversations/new.mobile.haml
index 59ea5328a8c581b649416a60772e9a8750156942..160059c8d753a73220df49f1f7e3f04f03ccc3e0 100644
--- a/app/views/conversations/new.mobile.haml
+++ b/app/views/conversations/new.mobile.haml
@@ -3,7 +3,6 @@
 -#   the COPYRIGHT file.
 
 = javascript_include_tag :jquery
-= javascript_include_tag :mobile
 
 :javascript
   $(document).ready(function () {
diff --git a/app/views/layouts/application.mobile.haml b/app/views/layouts/application.mobile.haml
index 448d190f51672a4bb9d877c52aaaa5d965abfa64..517f06a6e1c4bef1adbbab7d1d8b7b58911f82d0 100644
--- a/app/views/layouts/application.mobile.haml
+++ b/app/views/layouts/application.mobile.haml
@@ -119,6 +119,6 @@
 
     / javascripts at the bottom
     = jquery_include_tag
-    = javascript_include_tag :mobile
+    = javascript_include_tag "mobile/mobile"
     = load_javascript_locales
     = include_chartbeat
diff --git a/app/views/publisher/_publisher.mobile.haml b/app/views/publisher/_publisher.mobile.haml
index dca0f8cf2232656d087e942afa63c6b62feee0b2..6a1d72f78cc7e0b373eb8bb4aa846fee66960708 100644
--- a/app/views/publisher/_publisher.mobile.haml
+++ b/app/views/publisher/_publisher.mobile.haml
@@ -2,12 +2,6 @@
 -#   licensed under the Affero General Public License version 3 or later.  See
 -#   the COPYRIGHT file.
 
-- content_for :head do
-  = jquery_include_tag
-  = javascript_include_tag :main
-  = load_javascript_locales
-  = include_gon
-
 = form_for StatusMessage.new, {:data => {:ajax => false}} do |status|
   = status.hidden_field :provider_display_name, :value => 'mobile'
   = status.text_area :text, :placeholder => t('shared.publisher.whats_on_your_mind'), :rows => 4, :autofocus => "autofocus"
@@ -39,4 +33,4 @@
     #publisher_mobile
       = submit_tag t('shared.publisher.share'), :class => 'btn primary', :id => "submit_new_message"
 
-    #publisher_photo_upload
\ No newline at end of file
+    #publisher_photo_upload
diff --git a/app/views/status_messages/bookmarklet.mobile.haml b/app/views/status_messages/bookmarklet.mobile.haml
index 7fea219b9f38c33de4b0e79251e402c3038ff5c6..31279a3860b2430ed2f6583cfecd93d09e816da0 100644
--- a/app/views/status_messages/bookmarklet.mobile.haml
+++ b/app/views/status_messages/bookmarklet.mobile.haml
@@ -21,4 +21,4 @@
   });
 
 - content_for(:head) do
-  = javascript_include_tag :jquery, :mobile
+  = javascript_include_tag :jquery
diff --git a/config/application.rb b/config/application.rb
index d45ec05d70118abed5f4f92bddad93d15e34189f..b84576c79beffaa181996865215b9d20d993910c 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -61,7 +61,7 @@ module Diaspora
       mailchimp.js
       main.js
       jsxc.js
-      mobile.js
+      mobile/mobile.js
       profile.js
       people.js
       profile.js