diff --git a/book_tools/format/__init__.py b/book_tools/format/__init__.py
index 956789bde40bfd331cd1c17110fac7b11cafa6ad..761edb02880adefe7afadbb82f59fedc758dacaf 100644
--- a/book_tools/format/__init__.py
+++ b/book_tools/format/__init__.py
@@ -17,33 +17,41 @@ from constance import config
 
 class __detector:
     @staticmethod
-    def file(filename):
-        (n, e) = os.path.splitext(filename)
-        if e.lower() == '.xml':
+    def format(fmt):
+        if fmt.lower() == 'xml':
             return Mimetype.XML
-        if e.lower() == '.fb2':
+        elif fmt.lower() == 'fb2':
             return Mimetype.FB2
-        elif e.lower()=='.epub' or e.lower()=='.zip':
+        elif fmt.lower() =='epub':
+            return Mimetype.EPUB
+        elif fmt.lower() =='mobi':
+            return Mimetype.MOBI
+        elif fmt.lower() == 'zip':
             return Mimetype.ZIP
-        elif e.lower()=='.pdf':
+        elif fmt.lower() =='pdf':
             return Mimetype.PDF
-        elif e.lower()=='.doc' or e.lower()=='.docx':
+        elif fmt.lower() =='doc' or fmt.lower()=='docx':
             return Mimetype.MSWORD
-        elif e.lower()=='.djvu':
+        elif fmt.lower() =='djvu':
             return Mimetype.DJVU
-        elif e.lower()=='.txt':
+        elif fmt.lower() =='txt':
             return Mimetype.TEXT
-        elif e.lower()=='.rtf':
+        elif fmt.lower() =='rtf':
             return Mimetype.RTF
         else:
             return Mimetype.OCTET_STREAM
 
+    @staticmethod
+    def file(filename):
+        (n, e) = os.path.splitext(filename)
+        return format(e[1:])
+
 def detect_mime(file, original_filename):
     FB2_ROOT = 'FictionBook'
     mime = __detector.file(original_filename)
 
     try:
-        if mime == Mimetype.XML or mime == Mimetype.FB2:
+        if mime == Mimetype.XML:
             if FB2_ROOT == __xml_root_tag(file):
                 return Mimetype.FB2
         elif mime == Mimetype.ZIP:
diff --git a/opds_catalog/dl.py b/opds_catalog/dl.py
index 45be4789f528efec7e85df61061e2a672ab2005f..918683f5cc50ac8512c4cba8cf57f31721e91264 100644
--- a/opds_catalog/dl.py
+++ b/opds_catalog/dl.py
@@ -11,7 +11,9 @@ from django.http import HttpResponse, Http404
 from opds_catalog.models import Book, bookshelf
 from opds_catalog import settings, utils, opdsdb, fb2parse
 import opds_catalog.zipf as zipfile
-from book_tools.format import create_bookfile
+
+from book_tools.format import create_bookfile, __detector
+from book_tools.format.mimetype import Mimetype
 
 from constance import config
 from PIL import Image
@@ -40,17 +42,10 @@ def Download(request, book_id, zip_flag):
         
     if zip_flag == '1':
         dlfilename=transname+'.zip'   
-        content_type='application/zip' 
+        content_type= Mimetype.FB2_ZIP if book.format=='fb2' else Mimetype.ZIP
     else:    
         dlfilename=transname
-        if book.format=="fb2":
-            content_type='text/xml'
-        elif book.format=="epub":
-            content_type='application/epub+zip'
-        elif book.format=="mobi":
-            content_type='application/x-mobipocket-ebook'
-        else:
-            content_type='application/octet-stream'       
+        content_type = __detector.format(book.format)
 
     response = HttpResponse()
     response["Content-Type"]='%s; name="%s"'%(content_type,dlfilename)
@@ -243,12 +238,9 @@ def ConvertFB2(request, book_id, convert_type):
     
     if convert_type=='epub':
         converter_path=config.SOPDS_FB2TOEPUB
-        content_type='application/epub+zip'
     elif convert_type=='mobi':
         converter_path=config.SOPDS_FB2TOMOBI
-        content_type='application/x-mobipocket-ebook'
-    else:
-        content_type='application/octet-stream'
+    content_type=__detector.format(convert_type)
 
     if book.cat_type==opdsdb.CAT_NORMAL:
         tmp_fb2_path=None
diff --git a/opds_catalog/feeds.py b/opds_catalog/feeds.py
index d313afd08d08f165ad5481d5ff893665867fb222..2c89dba5e7ea85a5e14a18e390c868feb305583a 100644
--- a/opds_catalog/feeds.py
+++ b/opds_catalog/feeds.py
@@ -1,11 +1,8 @@
-import urllib
-
 from django.utils import timezone
 from django.utils.translation import ugettext as _
 from django.utils.feedgenerator import Atom1Feed, Enclosure, rfc3339_date
 from django.contrib.syndication.views import Feed
 from django.core.urlresolvers import reverse
-from django.core.paginator import Paginator, EmptyPage
 from django.shortcuts import render
 from django.db.models import Count, Min
 
@@ -15,8 +12,12 @@ from opds_catalog import settings
 from opds_catalog.middleware import BasicAuthMiddleware
 from opds_catalog.opds_paginator import Paginator as OPDS_Paginator
 
+from book_tools.format import __detector as detector
+from book_tools.format.mimetype import Mimetype
+
 from constance import config
 
+
 class AuthFeed(Feed):
     request = None
     def __call__(self,request,*args,**kwargs):
@@ -293,17 +294,18 @@ class CatalogsFeed(AuthFeed):
         if item['is_catalog']:
             return (opdsEnclosure(reverse("opds_catalog:cat_tree", kwargs={"cat_id":item['id']}),"application/atom+xml;profile=opds-catalog;kind=navigation", "subsection"),)
         else:
-            enclosure = [
-                opdsEnclosure(reverse("opds_catalog:download", kwargs={"book_id":item['id'],"zip_flag":0}),"application/%s"%item['format'] ,"http://opds-spec.org/acquisition/open-access"),
-                opdsEnclosure(reverse("opds_catalog:download", kwargs={"book_id":item['id'],"zip_flag":1}),"application/%s+zip"%item['format'], "http://opds-spec.org/acquisition/open-access"),
-                opdsEnclosure(reverse("opds_catalog:cover", kwargs={"book_id":item['id']}),"image/jpeg", "http://opds-spec.org/image"),
-                opdsEnclosure(reverse("opds_catalog:thumb", kwargs={"book_id": item['id']}), "image/jpeg","http://opds-spec.org/thumbnail"),
-
-            ]
-            if (config.SOPDS_FB2TOEPUB!="") and (item['format']=='fb2'):
-                enclosure += [opdsEnclosure(reverse("opds_catalog:convert", kwargs={"book_id":item['id'],"convert_type":"epub"}),"application/epub+zip","http://opds-spec.org/acquisition/open-access")]
-            if (config.SOPDS_FB2TOMOBI!="") and (item['format']=='fb2'):
-                enclosure += [opdsEnclosure(reverse("opds_catalog:convert", kwargs={"book_id":item['id'],"convert_type":"mobi"}),"application/mobi","http://opds-spec.org/acquisition/open-access")]
+            mime = detector.format(item['format'])
+            enclosure = [opdsEnclosure(reverse("opds_catalog:download", kwargs={"book_id": item['id'], "zip_flag": 0}), mime, "http://opds-spec.org/acquisition/open-access"),]
+            if not item['format'] in settings.NOZIP_FORMATS:
+                mimezip = Mimetype.FB2_ZIP if mime == Mimetype.FB2 else "%s+zip" % mime
+                enclosure += [opdsEnclosure(reverse("opds_catalog:download", kwargs={"book_id": item['id'], "zip_flag": 1}), mimezip, "http://opds-spec.org/acquisition/open-access")]
+            enclosure += [opdsEnclosure(reverse("opds_catalog:cover", kwargs={"book_id": item['id']}), "image/jpeg","http://opds-spec.org/image"),
+                          opdsEnclosure(reverse("opds_catalog:thumb", kwargs={"book_id": item['id']}), "image/jpeg","http://opds-spec.org/thumbnail"),
+                          ]
+            if (config.SOPDS_FB2TOEPUB != "") and (item['format'] == 'fb2'):
+                enclosure += [opdsEnclosure(reverse("opds_catalog:convert", kwargs={"book_id": item['id'], "convert_type": "epub"}),Mimetype.EPUB, "http://opds-spec.org/acquisition/open-access")]
+            if (config.SOPDS_FB2TOMOBI != "") and (item['format'] == 'fb2'):
+                enclosure += [opdsEnclosure(reverse("opds_catalog:convert", kwargs={"book_id": item['id'], "convert_type": "mobi"}),Mimetype.MOBI, "http://opds-spec.org/acquisition/open-access")]
 
             return enclosure
     
@@ -539,17 +541,21 @@ class SearchBooksFeed(AuthFeed):
         return item['registerdate'] 
          
     def item_enclosures(self, item):
+        mime = detector.format(item['format'])
         enclosure = [
-            opdsEnclosure(reverse("opds_catalog:download", kwargs={"book_id":item['id'],"zip_flag":0}),"application/%s"%item['format'] ,"http://opds-spec.org/acquisition/open-access"),
-            opdsEnclosure(reverse("opds_catalog:download", kwargs={"book_id":item['id'],"zip_flag":1}),"application/%s+zip"%item['format'], "http://opds-spec.org/acquisition/open-access"),
-            opdsEnclosure(reverse("opds_catalog:cover", kwargs={"book_id":item['id']}),"image/jpeg", "http://opds-spec.org/image"),
-            opdsEnclosure(reverse("opds_catalog:thumb", kwargs={"book_id": item['id']}), "image/jpeg","http://opds-spec.org/thumbnail"),
-
-        ]
-        if (config.SOPDS_FB2TOEPUB!="") and (item['format']=='fb2'):
-            enclosure += [opdsEnclosure(reverse("opds_catalog:convert", kwargs={"book_id":item['id'],"convert_type":"epub"}),"application/epub+zip","http://opds-spec.org/acquisition/open-access")] 
-        if (config.SOPDS_FB2TOMOBI!="") and (item['format']=='fb2'):
-            enclosure += [opdsEnclosure(reverse("opds_catalog:convert", kwargs={"book_id":item['id'],"convert_type":"mobi"}),"application/mobi","http://opds-spec.org/acquisition/open-access")] 
+            opdsEnclosure(reverse("opds_catalog:download", kwargs={"book_id": item['id'], "zip_flag": 0}), mime, "http://opds-spec.org/acquisition/open-access"), ]
+        if not item['format'] in settings.NOZIP_FORMATS:
+            mimezip = Mimetype.FB2_ZIP if mime==Mimetype.FB2 else "%s+zip"%mime
+            enclosure += [opdsEnclosure(reverse("opds_catalog:download", kwargs={"book_id": item['id'], "zip_flag": 1}), mimezip, "http://opds-spec.org/acquisition/open-access")]
+        enclosure += [opdsEnclosure(reverse("opds_catalog:cover", kwargs={"book_id": item['id']}), "image/jpeg", "http://opds-spec.org/image"),
+                      opdsEnclosure(reverse("opds_catalog:thumb", kwargs={"book_id": item['id']}), "image/jpeg", "http://opds-spec.org/thumbnail"),
+                      ]
+        if (config.SOPDS_FB2TOEPUB != "") and (item['format'] == 'fb2'):
+            enclosure += [
+                opdsEnclosure(reverse("opds_catalog:convert", kwargs={"book_id": item['id'], "convert_type": "epub"}), Mimetype.EPUB, "http://opds-spec.org/acquisition/open-access")]
+        if (config.SOPDS_FB2TOMOBI != "") and (item['format'] == 'fb2'):
+            enclosure += [
+                opdsEnclosure(reverse("opds_catalog:convert", kwargs={"book_id": item['id'], "convert_type": "mobi"}), Mimetype.MOBI, "http://opds-spec.org/acquisition/open-access")]
 
         return enclosure