diff --git a/Gemfile b/Gemfile
index 257fbd2d939737d9b87d06a43d77e203f139ac85..5a0fdd46cd0fea5921d9a48269d70ebc7ced2be6 100644
--- a/Gemfile
+++ b/Gemfile
@@ -86,6 +86,7 @@ gem 'rails-assets-punycode', '1.3.1'
 
 # jQuery plugins
 
+gem 'rails-assets-jquery-textchange', '0.2.3'
 gem 'rails-assets-perfect-scrollbar', '0.4.11'
 
 # Localization
diff --git a/Gemfile.lock b/Gemfile.lock
index cdfcbb3fd8eb86a4ea9f31dee554bd7707fa3a9c..b26e349bdb3604f302ce52d0ac252828db7321b1 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -357,6 +357,8 @@ GEM
       railties (= 4.1.6)
       sprockets-rails (~> 2.0)
     rails-assets-jquery (1.11.1)
+    rails-assets-jquery-textchange (0.2.3)
+      rails-assets-jquery
     rails-assets-perfect-scrollbar (0.4.11)
       rails-assets-jquery (>= 1.10)
     rails-assets-punycode (1.3.1)
@@ -574,6 +576,7 @@ DEPENDENCIES
   rack-ssl (= 1.4.1)
   rails (= 4.1.6)
   rails-assets-jquery (= 1.11.1)
+  rails-assets-jquery-textchange (= 0.2.3)
   rails-assets-perfect-scrollbar (= 0.4.11)
   rails-assets-punycode (= 1.3.1)
   rails-i18n (= 4.0.3)
diff --git a/app/assets/javascripts/app/views/publisher_view.js b/app/assets/javascripts/app/views/publisher_view.js
index 876ad83399384968a55443c01d11ce7a0c8b2ee6..2f20a3b448005f892a6c4a3c08bc44a44be904b5 100644
--- a/app/assets/javascripts/app/views/publisher_view.js
+++ b/app/assets/javascripts/app/views/publisher_view.js
@@ -8,7 +8,7 @@
 //= require ./publisher/aspect_selector_blueprint_view
 //= require ./publisher/getting_started_view
 //= require ./publisher/uploader_view
-//= require jquery.textchange
+//= require jquery-textchange
 
 app.views.Publisher = Backbone.View.extend({
 
diff --git a/config/application.rb b/config/application.rb
index a54bdeb326aea9710e5b00b48f9a6b5620661e50..f9c14f113491a71b9f890cb2714a257ea3efe91f 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -57,7 +57,7 @@ module Diaspora
       inbox.js
       jquery.js
       jquery_ujs.js
-      jquery.textchange.js
+      jquery-textchange.js
       mailchimp.js
       main.js
       mobile.js
diff --git a/vendor/assets/javascripts/jquery.textchange.js b/vendor/assets/javascripts/jquery.textchange.js
deleted file mode 100644
index 3affea18e3f2a0bb3cf1ebb62453b3c15945ecc0..0000000000000000000000000000000000000000
--- a/vendor/assets/javascripts/jquery.textchange.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/*!
- * jQuery TextChange Plugin
- * http://www.zurb.com/playground/jquery-text-change-custom-event
- *
- * Copyright 2010, ZURB
- * Released under the MIT License
- */
-(function ($) {
-
-        $.event.special.textchange = {
-
-                setup: function (data, namespaces) {
-                  $(this).data('lastValue', this.contentEditable === 'true' ? $(this).html() : $(this).val());
-                        $(this).bind('keyup.textchange', $.event.special.textchange.handler);
-                        $(this).bind('cut.textchange paste.textchange input.textchange', $.event.special.textchange.delayedHandler);
-                },
-
-                teardown: function (namespaces) {
-                        $(this).unbind('.textchange');
-                },
-
-                handler: function (event) {
-                        $.event.special.textchange.triggerIfChanged($(this));
-                },
-
-                delayedHandler: function (event) {
-                        var element = $(this);
-                        setTimeout(function () {
-                                $.event.special.textchange.triggerIfChanged(element);
-                        }, 25);
-                },
-
-                triggerIfChanged: function (element) {
-                  var current = element[0].contentEditable === 'true' ? element.html() : element.val();
-                        if (current !== element.data('lastValue')) {
-                                element.trigger('textchange',  [element.data('lastValue')]);
-                                element.data('lastValue', current);
-                        }
-                }
-        };
-
-        $.event.special.hastext = {
-
-                setup: function (data, namespaces) {
-                        $(this).bind('textchange', $.event.special.hastext.handler);
-                },
-
-                teardown: function (namespaces) {
-                        $(this).unbind('textchange', $.event.special.hastext.handler);
-                },
-
-                handler: function (event, lastValue) {
-                        if ((lastValue === '') && lastValue !== $(this).val()) {
-                                $(this).trigger('hastext');
-                        }
-                }
-        };
-
-        $.event.special.notext = {
-
-                setup: function (data, namespaces) {
-                        $(this).bind('textchange', $.event.special.notext.handler);
-                },
-
-                teardown: function (namespaces) {
-                        $(this).unbind('textchange', $.event.special.notext.handler);
-                },
-
-                handler: function (event, lastValue) {
-                        if ($(this).val() === '' && $(this).val() !== lastValue) {
-                                $(this).trigger('notext');
-                        }
-                }
-        };
-
-})(jQuery);
\ No newline at end of file