diff --git a/cps/helper.py b/cps/helper.py
index 52e96b6c..60c9e5fc 100755
--- a/cps/helper.py
+++ b/cps/helper.py
@@ -508,3 +508,22 @@ class Updater(threading.Thread):
                     logging.getLogger('cps.web').debug("Could not remove:" + item_path)
         shutil.rmtree(source, ignore_errors=True)
 
+def check_unrar(unrarLocation):
+    error = False
+    if os.path.exists(unrarLocation):
+        try:
+            p = subprocess.Popen(unrarLocation, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+            p.wait()
+            for lines in p.stdout.readlines():
+                if isinstance(lines, bytes):
+                    lines = lines.decode('utf-8')
+                value=re.search('UNRAR (.*) freeware', lines)
+                if value:
+                    version = value.group(1)
+        except Exception:
+            error = True
+            version=_(u'Excecution permissions missing')
+    else:
+        version = _(u'Unrar binary file not found')
+        error=True
+    return (error, version)
diff --git a/cps/static/js/kthoom.js b/cps/static/js/kthoom.js
index 72c1d04d..032f5220 100644
--- a/cps/static/js/kthoom.js
+++ b/cps/static/js/kthoom.js
@@ -289,16 +289,15 @@ function loadFromArrayBuffer(ab) {
         imageFilenames.push(f.filename);
         imageFiles.push(new kthoom.ImageFile(f));
                         
-                        // add thumbnails to the TOC list
-                        $('#thumbnails').append(
-                            "
 \
-                                 \
-                                    
 \
-                                    "+ imageFiles.length +" \
-                                 \
-                            "
-                        );
-                    //}
+        // add thumbnails to the TOC list
+        $('#thumbnails').append(
+            " \
+                 \
+                    
 \
+                    "+ imageFiles.length +" \
+                 \
+            "
+        );
     }
     var percentage = (ab.page+1) / (ab.last+1);
     totalImages = ab.last+1;
@@ -339,81 +338,93 @@ function setImage(url) {
         updateScale(true);
         canvas.width = innerWidth - 100;
         canvas.height = 200;
-        x.fillStyle = "red";
-        x.font = "50px sans-serif";
+        x.fillStyle = "black";
+        x.textAlign="center";
+        x.font = "24px sans-serif";
         x.strokeStyle = "black";
-        x.fillText("Loading Page #" + (currentImage + 1), 100, 100);
+        x.fillText("Loading Page #" + (currentImage + 1), innerWidth/2, 100);
     } else {
-        if ($("body").css("scrollHeight") / innerHeight > 1) {
-            $("body").css("overflowY", "scroll");
-        }
-
-        var img = new Image();
-        img.onerror = function() {
-            canvas.width = innerWidth - 100;
-            canvas.height = 300;
+        if (url === "error") {
             updateScale(true);
-            x.fillStyle = "orange";
-            x.font = "50px sans-serif";
+            canvas.width = innerWidth - 100;
+            canvas.height = 200;
+            x.fillStyle = "black";
+            x.textAlign="center";
+            x.font = "24px sans-serif";
             x.strokeStyle = "black";
-            x.fillText("Page #" + (currentImage + 1) + " (" +
-              imageFiles[currentImage].filename + ")", 100, 100);
-            x.fillStyle = "red";
-            x.fillText("Is corrupt or not an image", 100, 200);
+            x.fillText("Unable to decompress image #" + (currentImage + 1), innerWidth/2, 100);
+        } else {
+            if ($("body").css("scrollHeight") / innerHeight > 1) {
+                $("body").css("overflowY", "scroll");
+            }
 
-            var xhr = new XMLHttpRequest();
-            if (/(html|htm)$/.test(imageFiles[currentImage].filename)) {
-                xhr.open("GET", url, true);
-                xhr.onload = function() {
-                    //document.getElementById('mainText').style.display = '';
-                    $("#mainText").css("display", "");
-                    $("#mainText").innerHTML("");
+            var img = new Image();
+            img.onerror = function() {
+                canvas.width = innerWidth - 100;
+                canvas.height = 300;
+                updateScale(true);
+                x.fillStyle = "black";
+                x.font = "50px sans-serif";
+                x.strokeStyle = "black";
+                x.fillText("Page #" + (currentImage + 1) + " (" +
+                  imageFiles[currentImage].filename + ")", innerWidth/2, 100);
+                x.fillStyle = "black";
+                x.fillText("Is corrupt or not an image", innerWidth/2, 200);
+
+                var xhr = new XMLHttpRequest();
+                if (/(html|htm)$/.test(imageFiles[currentImage].filename)) {
+                    xhr.open("GET", url, true);
+                    xhr.onload = function() {
+                        //document.getElementById('mainText').style.display = '';
+                        $("#mainText").css("display", "");
+                        $("#mainText").innerHTML("");
+                    }
+                    xhr.send(null);
+                } else if (!/(jpg|jpeg|png|gif)$/.test(imageFiles[currentImage].filename) && imageFiles[currentImage].data.uncompressedSize < 10 * 1024) {
+                    xhr.open("GET", url, true);
+                    xhr.onload = function() {
+                        $("#mainText").css("display", "");
+                        $("#mainText").innerText(xhr.responseText);
+                    };
+                    xhr.send(null);
                 }
-                xhr.send(null);
-            } else if (!/(jpg|jpeg|png|gif)$/.test(imageFiles[currentImage].filename) && imageFiles[currentImage].data.uncompressedSize < 10 * 1024) {
-                xhr.open("GET", url, true);
-                xhr.onload = function() {
-                    $("#mainText").css("display", "");
-                    $("#mainText").innerText(xhr.responseText);
-                };
-                xhr.send(null);
-            }
-        };
-        img.onload = function() {
-            var h = img.height,
-                w = img.width,
-                sw = w,
-                sh = h;
-            settings.rotateTimes =  (4 + settings.rotateTimes) % 4;
-            x.save();
-            if (settings.rotateTimes % 2 === 1) {
-                sh = w;
-                sw = h;
-            }
-            canvas.height = sh;
-            canvas.width = sw;
-            x.translate(sw / 2, sh / 2);
-            x.rotate(Math.PI / 2 * settings.rotateTimes);
-            x.translate(-w / 2, -h / 2);
-            if (settings.vflip) {
-                x.scale(1, -1);
-                x.translate(0, -h);
-            }
-            if (settings.hflip) {
-                x.scale(-1, 1);
-                x.translate(-w, 0);
-            }
-            canvas.style.display = "none";
-            scrollTo(0, 0);
-            x.drawImage(img, 0, 0);
+            };
+            img.onload = function() {
+                var h = img.height,
+                    w = img.width,
+                    sw = w,
+                    sh = h;
+                settings.rotateTimes =  (4 + settings.rotateTimes) % 4;
+                x.save();
+                if (settings.rotateTimes % 2 === 1) {
+                    sh = w;
+                    sw = h;
+                }
+                canvas.height = sh;
+                canvas.width = sw;
+                x.translate(sw / 2, sh / 2);
+                x.rotate(Math.PI / 2 * settings.rotateTimes);
+                x.translate(-w / 2, -h / 2);
+                if (settings.vflip) {
+                    x.scale(1, -1);
+                    x.translate(0, -h);
+                }
+                if (settings.hflip) {
+                    x.scale(-1, 1);
+                    x.translate(-w, 0);
+                }
+                canvas.style.display = "none";
+                scrollTo(0, 0);
+                x.drawImage(img, 0, 0);
 
-            updateScale();
+                updateScale();
 
-            canvas.style.display = "";
-            $("body").css("overflowY", "");
-            x.restore();
-        };
-        img.src = url;
+                canvas.style.display = "";
+                $("body").css("overflowY", "");
+                x.restore();
+            };
+            img.src = url;
+        }
     }
 }
 
@@ -528,19 +539,26 @@ function keyHandler(evt) {
 
 function ImageLoadCallback(event) {
     var jso=this.response;
-    if (jso.page !== jso.last)
-    {
-        // var secRequest = new XMLHttpRequest();
-        this.open("GET", this.fileid + "/"+(jso.page+1));
-        this.addEventListener("load",ImageLoadCallback);
-        this.send();
+    // Unable to decompress file, or no response from server
+    if (jso === null){
+        setImage("error");
     }
     else
     {
-        var diff = ((new Date).getTime() - start)/1000;
-        console.log('Transfer done in ' + diff + 's');
+        if (jso.page !== jso.last)
+        {
+            // var secRequest = new XMLHttpRequest();
+            this.open("GET", this.fileid + "/"+(jso.page+1));
+            this.addEventListener("load",ImageLoadCallback);
+            this.send();
+        }
+        else
+        {
+            var diff = ((new Date).getTime() - start)/1000;
+            console.log('Transfer done in ' + diff + 's');
+        }
+        loadFromArrayBuffer(jso);
     }
-    loadFromArrayBuffer(jso);
 }
 function init(fileid) {
     start = (new Date).getTime();
diff --git a/cps/templates/stats.html b/cps/templates/stats.html
index 7be8f613..a313e1c4 100644
--- a/cps/templates/stats.html
+++ b/cps/templates/stats.html
@@ -42,6 +42,10 @@
       Kindlegen | 
       {{versions['KindlegenVersion']}} | 
     
+    
+      | Unrar | 
+      {{versions['unrarVersion']}} | 
+    
     
       | ImageMagick | 
       {{versions['ImageVersion']}} | 
diff --git a/cps/web.py b/cps/web.py
index 7fb64aa5..90dca450 100755
--- a/cps/web.py
+++ b/cps/web.py
@@ -941,11 +941,11 @@ def get_comic_book(book_id, book_format, page):
                             extractedfile="data:image/png;base64," + b64
                             fileData={"name": rarNames[page],"page":page, "last":rarNames.__len__()-1, "content": extractedfile}
                         except:
-                            return ""
                             # rarfile not valid
-                            # ToDo: error handling
+                            app.logger.error('Unrar binary not found unable to decompress file ' + cbr_file)
+                            return ""
                     else:
-
+                        app.logger.info('Unrar is not supported please install python rarfile extension')
                         # no support means return nothing
                         return ""
                 if book_format == "cbz":
@@ -1523,7 +1523,13 @@ def stats():
     versions['requests'] = requests.__version__
     versions['pysqlite'] = db.engine.dialect.dbapi.version
     versions['sqlite'] = db.engine.dialect.dbapi.sqlite_version
-
+    if rar_support:
+        rarVersion = helper.check_unrar(config.config_rarfile_location)
+        if not rarVersion[0]:
+            versions['unrarVersion'] = rarVersion[1]
+        else:
+            versions['unrarVersion'] = _('not installed')
+            app.logger.info(rarVersion[1])
     return render_title_template('stats.html', bookcounter=counter, authorcounter=authors, versions=versions,
                                  categorycounter=categorys, seriecounter=series, title=_(u"Statistics"))
 
@@ -2551,8 +2557,14 @@ def configuration_helper(origin):
         # Rarfile Content configuration
         # ToDo check: location valid
         if "config_rarfile_location" in to_save:
-            content.config_rarfile_location = to_save["config_rarfile_location"].strip()
-
+            check = helper.check_unrar(to_save["config_rarfile_location"].strip())
+            if not check[0] :
+                content.config_rarfile_location = to_save["config_rarfile_location"].strip()
+            else:
+                flash(check[1], category="error")
+                return render_title_template("config_edit.html", content=config, origin=origin, gdrive=gdrive_support,
+                                         goodreads=goodreads_support, rarfile_support=rar_support,
+                                         title=_(u"Basic Configuration"))
 
         content.config_default_role = 0
         if "admin_role" in to_save: