diff --git a/css/mediarack.css b/css/mediarack.css
index 88c8fb153d6ff2f952992a87e4c0295dec300c69..68c381f6f38495fbad5f97dd680d7ca42159472e 100644
--- a/css/mediarack.css
+++ b/css/mediarack.css
@@ -15,7 +15,7 @@ body {
 }
 
 .show {
-  margin-bottom: 50px;
+  margin-bottom: 25px !important;
   min-height: 200px;
 }
 
diff --git a/index.php b/index.php
index 6968f5f129a8f6c519b4ec53a4356a28139b8b07..e80a59674851055447481f5373644e638aca420b 100644
--- a/index.php
+++ b/index.php
@@ -11,21 +11,14 @@ include_once 'config.php';
     <meta name="author" content="">
     <link rel="shortcut icon" href="img/favicon.png">
     <title>MediaRack</title>
-	<meta property="og:title" content="MediaRack" />
-	<meta property="og:description" content="My TV Show and Movie library" />
-	<meta property="og:type" content="website" />
-	<meta property="og:url" content="http://<?php echo $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; ?>" />
-	<meta property="og:image" content="http://<?php echo $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; ?>img/opengraph.jpg" />
-
-  <link href="css/bootstrap.min.css" rel="stylesheet">
-  <link href="css/bootstrap-slate.min.css" rel="stylesheet">
-  <link href="css/mediarack.css" rel="stylesheet">
-
-  <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
-  <!--[if lt IE 9]>
-    <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
-    <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
-  <![endif]-->
+  	<meta property="og:title" content="MediaRack" />
+  	<meta property="og:description" content="My TV Show and Movie library" />
+  	<meta property="og:type" content="website" />
+  	<meta property="og:url" content="https://<?php echo $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; ?>" />
+  	<meta property="og:image" content="https://<?php echo $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; ?>img/opengraph.jpg" />
+    <link href="css/bootstrap.min.css" rel="stylesheet">
+    <link href="css/bootstrap-slate.min.css" rel="stylesheet">
+    <link href="css/mediarack.css" rel="stylesheet">
   </head>
 
   <body>
@@ -108,9 +101,8 @@ include_once 'config.php';
     <script src="js/jquery-1.10.2.min.js"></script>
     <script src="js/bootstrap.min.js"></script>
 	<script src="js/jquery.jcarousel.min.js"></script>
-	<script src="js/jquery.lazyload.min.js"></script>
-  <script src="js/jquery.lazy.min.js"></script>
-	<script src="js/jquery.scrollstop.js"></script>
+	<script src="js/jquery.lazyload.js"></script>
+	<script src="js/jquery.scrollstop.min.js"></script>
 	<script src="js/mediarack.js"></script>
 	
 	<!-- Piwik -->
diff --git a/js/jquery.lazyload.js b/js/jquery.lazyload.js
new file mode 100644
index 0000000000000000000000000000000000000000..ddabe6d5f47f05449d87f50379a30b46c7050c20
--- /dev/null
+++ b/js/jquery.lazyload.js
@@ -0,0 +1,246 @@
+/*!
+ * Lazy Load - jQuery plugin for lazy loading images
+ *
+ * Copyright (c) 2007-2015 Mika Tuupola
+ *
+ * Licensed under the MIT license:
+ *   http://www.opensource.org/licenses/mit-license.php
+ *
+ * Project home:
+ *   http://www.appelsiini.net/projects/lazyload
+ *
+ * Version:  1.9.7
+ *
+ */
+
+(function($, window, document, undefined) {
+    var $window = $(window);
+
+    $.fn.lazyload = function(options) {
+        var elements = this;
+        var $container;
+        var settings = {
+            threshold       : 0,
+            failure_limit   : 0,
+            event           : "scroll",
+            effect          : "show",
+            container       : window,
+            data_attribute  : "original",
+            skip_invisible  : false,
+            appear          : null,
+            load            : null,
+            error           : null,
+            placeholder     : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC"
+        };
+
+        function update() {
+            var counter = 0;
+
+            elements.each(function() {
+                var $this = $(this);
+                if (settings.skip_invisible && !$this.is(":visible")) {
+                    return;
+                }
+                if ($.abovethetop(this, settings) ||
+                    $.leftofbegin(this, settings)) {
+                        /* Nothing. */
+                } else if (!$.belowthefold(this, settings) &&
+                    !$.rightoffold(this, settings)) {
+                        $this.trigger("appear");
+                        /* if we found an image we'll load, reset the counter */
+                        counter = 0;
+                } else {
+                    if (++counter > settings.failure_limit) {
+                        return false;
+                    }
+                }
+            });
+
+        }
+
+        if(options) {
+            /* Maintain BC for a couple of versions. */
+            if (undefined !== options.failurelimit) {
+                options.failure_limit = options.failurelimit;
+                delete options.failurelimit;
+            }
+            if (undefined !== options.effectspeed) {
+                options.effect_speed = options.effectspeed;
+                delete options.effectspeed;
+            }
+
+            $.extend(settings, options);
+        }
+
+        /* Cache container as jQuery as object. */
+        $container = (settings.container === undefined ||
+                      settings.container === window) ? $window : $(settings.container);
+
+        /* Fire one scroll event per scroll. Not one scroll event per image. */
+        if (0 === settings.event.indexOf("scroll")) {
+            $container.bind(settings.event, function() {
+                return update();
+            });
+        }
+
+        this.each(function() {
+            var self = this;
+            var $self = $(self);
+
+            self.loaded = false;
+
+            /* If no src attribute given use data:uri. */
+            if ($self.attr("src") === undefined || $self.attr("src") === false) {
+                if ($self.is("img")) {
+                    $self.attr("src", settings.placeholder);
+                }
+            }
+
+            /* When appear is triggered load original image. */
+            $self.one("appear", function() {
+                if (!this.loaded) {
+                    if (settings.appear) {
+                        var elements_left = elements.length;
+                        settings.appear.call(self, elements_left, settings);
+                    }
+                    $("<img />")
+                        .bind("load", function() {
+
+                            var original = $self.attr("data-" + settings.data_attribute);
+                            $self.hide();
+                            if ($self.is("img")) {
+                                $self.attr("src", original);
+                            } else {
+                                $self.css("background-image", "url('" + original + "')");
+                            }
+                            $self[settings.effect](settings.effect_speed);
+
+                            self.loaded = true;
+
+                            /* Remove image from array so it is not looped next time. */
+                            var temp = $.grep(elements, function(element) {
+                                return !element.loaded;
+                            });
+                            elements = $(temp);
+
+                            if (settings.load) {
+                                var elements_left = elements.length;
+                                settings.load.call(self, elements_left, settings);
+                            }
+                        })
+                        .bind("error", function() { 
+                           settings.error.call(self, settings);
+                        })
+                        .attr("src", $self.attr("data-" + settings.data_attribute));
+                }
+            });
+
+            /* When wanted event is triggered load original image */
+            /* by triggering appear.                              */
+            if (0 !== settings.event.indexOf("scroll")) {
+                $self.bind(settings.event, function() {
+                    if (!self.loaded) {
+                        $self.trigger("appear");
+                    }
+                });
+            }
+        });
+
+        /* Check if something appears when window is resized. */
+        $window.bind("resize", function() {
+            update();
+        });
+
+        /* With IOS5 force loading images when navigating with back button. */
+        /* Non optimal workaround. */
+        if ((/(?:iphone|ipod|ipad).*os 5/gi).test(navigator.appVersion)) {
+            $window.bind("pageshow", function(event) {
+                if (event.originalEvent && event.originalEvent.persisted) {
+                    elements.each(function() {
+                        $(this).trigger("appear");
+                    });
+                }
+            });
+        }
+
+        /* Force initial check if images should appear. */
+        $(document).ready(function() {
+            update();
+        });
+
+        return this;
+    };
+
+    /* Convenience methods in jQuery namespace.           */
+    /* Use as  $.belowthefold(element, {threshold : 100, container : window}) */
+
+    $.belowthefold = function(element, settings) {
+        var fold;
+
+        if (settings.container === undefined || settings.container === window) {
+            fold = (window.innerHeight ? window.innerHeight : $window.height()) + $window.scrollTop();
+        } else {
+            fold = $(settings.container).offset().top + $(settings.container).height();
+        }
+
+        return fold <= $(element).offset().top - settings.threshold;
+    };
+
+    $.rightoffold = function(element, settings) {
+        var fold;
+
+        if (settings.container === undefined || settings.container === window) {
+            fold = $window.width() + $window.scrollLeft();
+        } else {
+            fold = $(settings.container).offset().left + $(settings.container).width();
+        }
+
+        return fold <= $(element).offset().left - settings.threshold;
+    };
+
+    $.abovethetop = function(element, settings) {
+        var fold;
+
+        if (settings.container === undefined || settings.container === window) {
+            fold = $window.scrollTop();
+        } else {
+            fold = $(settings.container).offset().top;
+        }
+
+        return fold >= $(element).offset().top + settings.threshold  + $(element).height();
+    };
+
+    $.leftofbegin = function(element, settings) {
+        var fold;
+
+        if (settings.container === undefined || settings.container === window) {
+            fold = $window.scrollLeft();
+        } else {
+            fold = $(settings.container).offset().left;
+        }
+
+        return fold >= $(element).offset().left + settings.threshold + $(element).width();
+    };
+
+    $.inviewport = function(element, settings) {
+         return !$.rightoffold(element, settings) && !$.leftofbegin(element, settings) &&
+                !$.belowthefold(element, settings) && !$.abovethetop(element, settings);
+     };
+
+    /* Custom selectors for your convenience.   */
+    /* Use as $("img:below-the-fold").something() or */
+    /* $("img").filter(":below-the-fold").something() which is faster */
+
+    $.extend($.expr[":"], {
+        "below-the-fold" : function(a) { return $.belowthefold(a, {threshold : 0}); },
+        "above-the-top"  : function(a) { return !$.belowthefold(a, {threshold : 0}); },
+        "right-of-screen": function(a) { return $.rightoffold(a, {threshold : 0}); },
+        "left-of-screen" : function(a) { return !$.rightoffold(a, {threshold : 0}); },
+        "in-viewport"    : function(a) { return $.inviewport(a, {threshold : 0}); },
+        /* Maintain BC for couple of versions. */
+        "above-the-fold" : function(a) { return !$.belowthefold(a, {threshold : 0}); },
+        "right-of-fold"  : function(a) { return $.rightoffold(a, {threshold : 0}); },
+        "left-of-fold"   : function(a) { return !$.rightoffold(a, {threshold : 0}); }
+    });
+
+})(jQuery, window, document);
diff --git a/js/jquery.lazyload.min.js b/js/jquery.lazyload.min.js
deleted file mode 100644
index 575abfb2b41bc4d07dc3e326efc38d63fda4d1be..0000000000000000000000000000000000000000
--- a/js/jquery.lazyload.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! Lazy Load 1.9.5 - MIT license - Copyright 2010-2015 Mika Tuupola */
-!function(a,b,c,d){var e=a(b);a.fn.lazyload=function(f){function g(){var b=0;i.each(function(){var c=a(this);if(!j.skip_invisible||c.is(":visible"))if(a.abovethetop(this,j)||a.leftofbegin(this,j));else if(a.belowthefold(this,j)||a.rightoffold(this,j)){if(++b>j.failure_limit)return!1}else c.trigger("appear"),b=0})}var h,i=this,j={threshold:0,failure_limit:0,event:"scroll",effect:"show",container:b,data_attribute:"original",skip_invisible:!1,appear:null,load:null,placeholder:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC"};return f&&(d!==f.failurelimit&&(f.failure_limit=f.failurelimit,delete f.failurelimit),d!==f.effectspeed&&(f.effect_speed=f.effectspeed,delete f.effectspeed),a.extend(j,f)),h=j.container===d||j.container===b?e:a(j.container),0===j.event.indexOf("scroll")&&h.bind(j.event,function(){return g()}),this.each(function(){var b=this,c=a(b);b.loaded=!1,(c.attr("src")===d||c.attr("src")===!1)&&c.is("img")&&c.attr("src",j.placeholder),c.one("appear",function(){if(!this.loaded){if(j.appear){var d=i.length;j.appear.call(b,d,j)}a("<img />").bind("load",function(){var d=c.attr("data-"+j.data_attribute);c.hide(),c.is("img")?c.attr("src",d):c.css("background-image","url('"+d+"')"),c[j.effect](j.effect_speed),b.loaded=!0;var e=a.grep(i,function(a){return!a.loaded});if(i=a(e),j.load){var f=i.length;j.load.call(b,f,j)}}).attr("src",c.attr("data-"+j.data_attribute))}}),0!==j.event.indexOf("scroll")&&c.bind(j.event,function(){b.loaded||c.trigger("appear")})}),e.bind("resize",function(){g()}),/(?:iphone|ipod|ipad).*os 5/gi.test(navigator.appVersion)&&e.bind("pageshow",function(b){b.originalEvent&&b.originalEvent.persisted&&i.each(function(){a(this).trigger("appear")})}),a(c).ready(function(){g()}),this},a.belowthefold=function(c,f){var g;return g=f.container===d||f.container===b?(b.innerHeight?b.innerHeight:e.height())+e.scrollTop():a(f.container).offset().top+a(f.container).height(),g<=a(c).offset().top-f.threshold},a.rightoffold=function(c,f){var g;return g=f.container===d||f.container===b?e.width()+e.scrollLeft():a(f.container).offset().left+a(f.container).width(),g<=a(c).offset().left-f.threshold},a.abovethetop=function(c,f){var g;return g=f.container===d||f.container===b?e.scrollTop():a(f.container).offset().top,g>=a(c).offset().top+f.threshold+a(c).height()},a.leftofbegin=function(c,f){var g;return g=f.container===d||f.container===b?e.scrollLeft():a(f.container).offset().left,g>=a(c).offset().left+f.threshold+a(c).width()},a.inviewport=function(b,c){return!(a.rightoffold(b,c)||a.leftofbegin(b,c)||a.belowthefold(b,c)||a.abovethetop(b,c))},a.extend(a.expr[":"],{"below-the-fold":function(b){return a.belowthefold(b,{threshold:0})},"above-the-top":function(b){return!a.belowthefold(b,{threshold:0})},"right-of-screen":function(b){return a.rightoffold(b,{threshold:0})},"left-of-screen":function(b){return!a.rightoffold(b,{threshold:0})},"in-viewport":function(b){return a.inviewport(b,{threshold:0})},"above-the-fold":function(b){return!a.belowthefold(b,{threshold:0})},"right-of-fold":function(b){return a.rightoffold(b,{threshold:0})},"left-of-fold":function(b){return!a.rightoffold(b,{threshold:0})}})}(jQuery,window,document);
\ No newline at end of file
diff --git a/js/jquery.scrollstop.js b/js/jquery.scrollstop.js
deleted file mode 100644
index a0bb6371002f36c275d90ef0a78f4e951c1b36a4..0000000000000000000000000000000000000000
--- a/js/jquery.scrollstop.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/* http://james.padolsey.com/javascript/special-scroll-events-for-jquery/ */
-
-(function(){
-    
-    var special = jQuery.event.special,
-        uid1 = "D" + (+new Date()),
-        uid2 = "D" + (+new Date() + 1);
-        
-    special.scrollstart = {
-        setup: function() {
-            
-            var timer,
-                handler =  function(evt) {
-                    
-                    var _self = this,
-                        _args = arguments;
-                    
-                    if (timer) {
-                        clearTimeout(timer);
-                    } else {
-                        evt.type = "scrollstart";
-                        jQuery.event.dispatch.apply(_self, _args);
-                    }
-                    
-                    timer = setTimeout( function(){
-                        timer = null;
-                    }, special.scrollstop.latency);
-                    
-                };
-            
-            jQuery(this).bind("scroll", handler).data(uid1, handler);
-            
-        },
-        teardown: function(){
-            jQuery(this).unbind( "scroll", jQuery(this).data(uid1) );
-        }
-    };
-    
-    special.scrollstop = {
-        latency: 300,
-        setup: function() {
-            
-            var timer,
-                    handler = function(evt) {
-                    
-                    var _self = this,
-                        _args = arguments;
-                    
-                    if (timer) {
-                        clearTimeout(timer);
-                    }
-                    
-                    timer = setTimeout( function(){
-                        
-                        timer = null;
-                        evt.type = "scrollstop";
-                        jQuery.event.dispatch.apply(_self, _args);
-                        
-                        
-                    }, special.scrollstop.latency);
-                    
-                };
-            
-            jQuery(this).bind("scroll", handler).data(uid2, handler);
-            
-        },
-        teardown: function() {
-            jQuery(this).unbind( "scroll", jQuery(this).data(uid2) );
-        }
-    };
-    
-})();
\ No newline at end of file
diff --git a/js/jquery.scrollstop.min.js b/js/jquery.scrollstop.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..8b4a78156f314979af34d87be3cb79798495f659
--- /dev/null
+++ b/js/jquery.scrollstop.min.js
@@ -0,0 +1,2 @@
+/*! Lazy Load 1.9.7 - MIT license - Copyright 2010-2015 Mika Tuupola */
+!function(){var a=jQuery.event.special,b="D"+ +new Date,c="D"+(+new Date+1);a.scrollstart={setup:function(){var c,d=function(b){var d=this,e=arguments;c?clearTimeout(c):(b.type="scrollstart",jQuery.event.dispatch.apply(d,e)),c=setTimeout(function(){c=null},a.scrollstop.latency)};jQuery(this).bind("scroll",d).data(b,d)},teardown:function(){jQuery(this).unbind("scroll",jQuery(this).data(b))}},a.scrollstop={latency:300,setup:function(){var b,d=function(c){var d=this,e=arguments;b&&clearTimeout(b),b=setTimeout(function(){b=null,c.type="scrollstop",jQuery.event.dispatch.apply(d,e)},a.scrollstop.latency)};jQuery(this).bind("scroll",d).data(c,d)},teardown:function(){jQuery(this).unbind("scroll",jQuery(this).data(c))}}}();
\ No newline at end of file
diff --git a/js/mediarack.js b/js/mediarack.js
index be78ebe3e4ad797fc838644019b0f4b6fcf8a684..bb5f17a81d4cddfb658f5feeb5e42236704b81a2 100644
--- a/js/mediarack.js
+++ b/js/mediarack.js
@@ -59,9 +59,9 @@ function getLatest(type) {
       $.each(data, function (key, ep) {
         var ulLatestContainer = $("#latest"+type);
         if(type == 'Shows') {
-          var liLatestItem =  $('<li><img src="'+cdn('show/'+escape(ep.show))+'/poster.jpg" /><div class="epLabel">'+ep.show+'<br />'+ep.episode+'<br />'+ep.airdate+'</div></li>');
+          var liLatestItem =  $('<li><img src="'+cdn('show/'+cleanname(ep.show)+'/poster.jpg')+'" /><div class="epLabel">'+ep.show+'<br />'+ep.episode+'<br />'+ep.airdate+'</div></li>');
         }else{
-          var liLatestItem =  $('<li><img src="'+cdn('movie/'+escape(ep.movie))+'/poster.jpg" /><div class="epLabel">'+ep.movie+'</div></li>');
+          var liLatestItem =  $('<li><img src="'+cdn('movie/'+cleanname(ep.movie)+'/poster.jpg')+'" /><div class="epLabel">'+ep.movie+'</div></li>');
         }
         ulLatestContainer.append(liLatestItem);
       });
@@ -127,8 +127,8 @@ function getShows() {
         }
       
         var divShowContainer = $('<div class="show panel panel-default" data-showid="'+show.id+'" id="show_'+show.id+'"></div>');
-        var divShowHeader = $('<div class="showName panel-heading"><h2 class="panel-title text-center"><img class="showLogo lazy" style="min-height: 50px; height: 50px;" alt="'+show.name+'" data-original="'+cdn('show/'+escape(show.folder)+'/logo.png')+'" /></h2></div>');
-        var divShowBody = $('<div class="panel-body lazy" data-original="'+cdn('show/'+escape(show.folder)+'/fanart.jpg')+'"></div>');
+        var divShowHeader = $('<div class="showName panel-heading"><h2 class="panel-title text-center"><img class="showLogo lazy" style="min-height: 50px; height: 50px;" alt="'+show.name+'" data-original="'+cdn('show/'+cleanname(show.folder)+'/logo.png')+'" /></h2></div>');
+        var divShowBody = $('<div class="panel-body lazy" data-original="'+cdn('show/'+cleanname(show.folder)+'/fanart.jpg')+'"></div>');
         
         if(show.seasons[0].season == '0') {
           var countSeasons = show.seasons.length-1;
@@ -140,7 +140,7 @@ function getShows() {
           countEpisodes = countEpisodes+season.count;
         });
         var divShowFooter =$('<div class="panel-footer"><strong>Seasons:</strong> '+countSeasons+', <strong>Episodes:</strong> '+countEpisodes+' </div>');
-        var divShowPoster = $('<div class="col-md-2 text-center posterContainer"><a href="#" class="thumbnail"><img id="poster_'+show.id+'" class="showPoster lazy" data-original="'+cdn('show/'+escape(show.folder)+'/poster.jpg')+'"/></a></div>');
+        var divShowPoster = $('<div class="col-md-2 text-center posterContainer"><a href="#" class="thumbnail"><img id="poster_'+show.id+'" class="showPoster lazy" data-original="'+cdn('show/'+cleanname(show.folder)+'/poster.jpg')+'"/></a></div>');
         var ulSeasons = $('<ul class="seasons col-md-10 list-group"></ul>');
         $.each(show.seasons, function(key, season) {
           if (season.season == '0') {
@@ -153,10 +153,10 @@ function getShows() {
             getEpisodes($(this).parent().parent().parent().data('showid'), $(this).data('season'));
           });
           liSeason.hover(function() {
-            $("#poster_"+show.id).error(function() {$(this).attr('src', cdn('show/'+escape(show.folder)+'/poster.jpg'))});
-            $("#poster_"+show.id).attr('src', cdn('show/'+escape(show.folder)+'/'+season.season+'/poster.jpg'));
+            $("#poster_"+show.id).error(function() {$(this).attr('src', cdn('show/'+cleanname(show.folder)+'/poster.jpg'))});
+            $("#poster_"+show.id).attr('src', cdn('show/'+cleanname(show.folder)+'/'+season.season+'/poster.jpg'));
           }, function() {
-            $("#poster_"+show.id).attr('src', cdn('show/'+escape(show.folder)+'/poster.jpg'));
+            $("#poster_"+show.id).attr('src', cdn('show/'+cleanname(show.folder)+'/poster.jpg'));
           });
           ulSeasons.append(liSeason);
         });
@@ -172,14 +172,21 @@ function getShows() {
         divShowContainer.append(divShowBody);
         divShowContainer.append(divShowFooter);
         divShows.append(divShowContainer);
-        $("#shows div.panel-body.lazy, #shows img.showPoster.lazy, #shows img.showLogo.lazy").lazyload({
+        $("#shows div.panel-body.lazy, #shows img.showPoster.lazy").lazyload({
           threshold: 1000
         });
+        $("#shows img.showLogo.lazy").lazyload({
+          threshold: 1000,
+          error: function() {
+            var title = $(this).attr('alt');
+            $(this).parent().html(title);
+          }
+        });
         /*
         if(showOffset < showLimit) {
-          divShowHeader.find("img.showLogo").attr('src', cdn('show/'+escape(show.folder)+'/logo.png')).removeClass('lazy');
-          divShowBody.css('background-image', 'url('+cdn('show/'+escape(show.folder)+'/fanart.jpg')+')').removeClass('lazy');
-          divShowPoster.find("img.showPoster").attr('src', cdn('show/'+escape(show.folder)+'/poster.jpg')).removeClass('lazy');
+          divShowHeader.find("img.showLogo").attr('src', cdn('show/'+cleanname(show.folder)+'/logo.png')).removeClass('lazy');
+          divShowBody.css('background-image', 'url('+cdn('show/'+cleanname(show.folder)+'/fanart.jpg')+')').removeClass('lazy');
+          divShowPoster.find("img.showPoster").attr('src', cdn('show/'+cleanname(show.folder)+'/poster.jpg')).removeClass('lazy');
         }
         */
         i++;
@@ -250,10 +257,10 @@ function getMovies() {
       $("#movies div.panel-body.lazy, #movies img.moviePoster.lazy, #movies img.movieLogo.lazy").removeClass('lazy');
       $.each(data, function (key, movie) {
         var divMovieContainer = $('<div class="movie panel panel-default" data-imdb="'+movie.imdb+'" id="movie_'+movie.imdb+'"></div>');
-        var divMovieHeader = $('<div class="movieName panel-heading"><h2 class="panel-title text-center"><img class="movieLogo lazy" alt="'+movie.title+'" data-original="'+cdn('movie/'+escape(movie.folder)+'/logo.png')+'" /></h2></div>');
-        var divMovieBody = $('<div class="panel-body lazy" data-original="'+cdn('movie/'+escape(movie.folder)+'/fanart.jpg')+'"></div>');
+        var divMovieHeader = $('<div class="movieName panel-heading"><h2 class="panel-title text-center"><img class="movieLogo lazy" alt="'+movie.title+'" data-original="'+cdn('movie/'+cleanname(movie.folder)+'/logo.png')+'" /></h2></div>');
+        var divMovieBody = $('<div class="panel-body lazy" data-original="'+cdn('movie/'+cleanname(movie.folder)+'/fanart.jpg')+'"></div>');
         //divMovieBody.css('background-image', 'url('+cdn('img/no_fanart.jpg'));
-        var divMoviePoster = $('<div class="col-md-2 text-center"><a href="#" class="thumbnail"><img id="poster_'+movie.imdb+'" class="moviePoster lazy" data-original="'+cdn('movie/'+escape(movie.folder)+'/poster.jpg')+'" /></a></div>');
+        var divMoviePoster = $('<div class="col-md-2 text-center"><a href="#" class="thumbnail"><img id="poster_'+movie.imdb+'" class="moviePoster lazy" data-original="'+cdn('movie/'+cleanname(movie.folder)+'/poster.jpg')+'" /></a></div>');
         var divMoviePlot = $('<div class="moviePlot col-md-10 panel panel-default"><div class="panel-heading">'+movie.tagline+'</div><div class="panel-body">'+movie.plot+'</div></div>');
         var divMovieFooter =$('<div class="panel-footer text-right">IMDB Rating: '+movie.rating+'</div>');
         divMovieBody.append(divMoviePoster);
@@ -268,14 +275,21 @@ function getMovies() {
         divMovieContainer.append(divMovieBody);
         divMovieContainer.append(divMovieFooter);
         divMovies.append(divMovieContainer);
-        $("#movies div.panel-body.lazy, #movies img.moviePoster.lazy, #movies img.movieLogo.lazy").lazyload({
+        $("#movies div.panel-body.lazy, #movies img.moviePoster.lazy").lazyload({
           threshold: 1000
-        });   
+        });
+        $("#movies img.movieLogo.lazy").lazyload({
+          threshold: 1000,
+          error: function() {
+            var title = $(this).attr('alt');
+            $(this).parent().html(title);
+          }
+        });
         /*
         if(movieOffset < movieLimit) {
-          divMovieHeader.find("img.movieLogo").attr('src', cdn('movie/'+escape(movie.folder)+'/logo.png')).removeClass('lazy');
-          divMovieBody.css('background-image', 'url('+cdn('movie/'+escape(movie.folder)+'/fanart.jpg')+')').removeClass('lazy');
-          divMoviePoster.find("img.moviePoster").attr('src', cdn('movie/'+escape(movie.folder)+'/poster.jpg')).removeClass('lazy');
+          divMovieHeader.find("img.movieLogo").attr('src', cdn('movie/'+cleanname(movie.folder)+'/logo.png')).removeClass('lazy');
+          divMovieBody.css('background-image', 'url('+cdn('movie/'+cleanname(movie.folder)+'/fanart.jpg')+')').removeClass('lazy');
+          divMoviePoster.find("img.moviePoster").attr('src', cdn('movie/'+cleanname(movie.folder)+'/poster.jpg')).removeClass('lazy');
         }
         */
         i++;
@@ -297,3 +311,9 @@ function cdn(img) {
   }
   return img;
 }
+
+function cleanname(txt) {
+  // this breaks thumbnail generation, because the local folder can't be found anymore
+  //return txt.replace(/[^a-zA-Z0-9]/g, '_');
+  return escape(txt);
+}
\ No newline at end of file