diff --git a/lsp/mist.js b/lsp/mist.js
index 8be7a5d4..0b3b3652 100644
--- a/lsp/mist.js
+++ b/lsp/mist.js
@@ -2824,7 +2824,7 @@ var UI = {
         var embedoptions = {autoplay: true};
         function embedhtml(opts) {
           var open = ['div'];
-          var inner = "\n"+'   <script src="'+embedbase+'embed_'+other+'.js"><'+'/script>'+"\n"; //don't leave the closing script tag complete
+          var inner = "\n"+'   <script src="'+embedbase+'embed_'+encodeURIComponent(other)+'.js"><'+'/script>'+"\n"; //don't leave the closing script tag complete
           if (!opts.autoplay) {
             open.push('data-noautoplay');
           }
@@ -2844,17 +2844,17 @@ var UI = {
           {
             label: 'Embedable script',
             type: 'str',
-            value: embedbase+'embed_'+other+'.js',
+            value: embedbase+'embed_'+encodeURIComponent(other)+'.js',
             readonly: true
           },{
             label: 'Stream info script',
             type: 'str',
-            value: embedbase+'info_'+other+'.js',
+            value: embedbase+'info_'+encodeURIComponent(other)+'.js',
             readonly: true
           },{
             label: 'Autodetect player',
             type: 'str',
-            value: embedbase+other+'.html',
+            value: embedbase+encodeURIComponent(other)+'.html',
             readonly: true,
             qrcode: true
           },$('<h3>').text('Embed code'),{
@@ -3027,7 +3027,7 @@ var UI = {
           
           // jQuery doesn't work -> use DOM magic
           var script = document.createElement('script');
-          script.src = embedbase+'embed_'+other+'.js';
+          script.src = embedbase+'embed_'+encodeURIComponent(other)+'.js';
           script.onerror = function(){
             $c.html('Error loading "'+script.src+'".<br>').append(
               $('<button>').text('Try again').click(function(){
diff --git a/lsp/test_streamembed.html b/lsp/test_streamembed.html
index d2b1839e..79755642 100644
--- a/lsp/test_streamembed.html
+++ b/lsp/test_streamembed.html
@@ -14,7 +14,7 @@
           var embedtype = $('input[name=force]').val();
           
           var info = document.createElement('script');
-          info.src = 'http://'+(window.location.hostname == '' ? 'localhost' : window.location.hostname)+':8080/info_'+streamName+'.js?video=0';
+          info.src = 'http://'+(window.location.hostname == '' ? 'localhost' : window.location.hostname)+':8080/info_'+encodeURIComponent(streamName)+'.js';
           document.getElementById('embedcontainer').appendChild(info);
           info.onload = function(){
             if (embedtype == '') {
@@ -45,4 +45,4 @@
     <div id=embedcontainer style="width: 100%; height: 35em;" data-forcesupportcheck data-autoplay>
     </div>
   </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/src/embed.js b/src/embed.js
index c8904bc6..264c3e38 100644
--- a/src/embed.js
+++ b/src/embed.js
@@ -189,7 +189,7 @@ function mistembed(streamname) {
       break;
 
       case 'html5':
-        container.innerHTML += '<video width="' + videowidth + '" height="' + videoheight + '" src="' + encodeURI(src.url) + '" controls="controls" '+(autoplay ? 'autoplay="autoplay"' : '')+'><strong>No HTML5 video support</strong></video>';
+        container.innerHTML += '<video width="' + videowidth + '" height="' + videoheight + '" src="' + src.url + '" controls="controls" '+(autoplay ? 'autoplay="autoplay"' : '')+'><strong>No HTML5 video support</strong></video>';
         break;
         
       case 'rtsp':
@@ -264,11 +264,19 @@ function mistembed(streamname) {
 
   if(video.error) {
     // there was an error; display it
-    container.innerHTML = ['<strong>Error: ', video.error, '</strong>'].join('');
+    if (video.on_error){
+      container.innerHTML = video.on_error;
+    }else{
+      container.innerHTML = ['<strong>Error: ', video.error, '</strong>'].join('');
+    }
   }
   else if ((typeof video.source == 'undefined') || (video.source.length < 1)) {
     // no stream sources
-    container.innerHTML = '<strong>Error: no protocols found</strong>';
+    if (video.on_error){
+      container.innerHTML = video.on_error;
+    }else{
+      container.innerHTML = '<strong>Error: no active source or compatible protocols for this stream</strong>';
+    }
   }
   else {
     // no error, and sources found. Check the video types and output the best