diff -ur KindleUnpack_v072x_test/lib/kindleunpack.py KindleUnpack_v072x_test_new/lib/kindleunpack.py
--- KindleUnpack_v072x_test/lib/kindleunpack.py	2014-07-08 15:45:28.000000000 -0400
+++ KindleUnpack_v072x_test_new/lib/kindleunpack.py	2014-07-09 14:22:03.000000000 -0400
@@ -335,19 +335,16 @@
 
 # spine information from the original content.opf
 def processRESC(i, files, imgnames, sect, data, resc):
-    print "******* RESC **********"
     global DUMP
     if DUMP:
         rescname = "RESC%05d.dat" % i
         print "Extracting Resource: ", rescname
         outrsc = os.path.join(files.outdir, rescname)
         open(pathof(outrsc), 'wb').write(data)
-    # almost all of the following should be moved to mobi_k8resc and not be here
-    # try:
-    if True:
-        # Retrieve a spine and metadata from RESC; link the spine to part in K8Processor.
-        k8resc = K8RESCProcessor(data[16:])
-    else:
+    try:
+        # parse the spine and metadata from RESC
+        k8resc = K8RESCProcessor(data[16:],DUMP)
+    except:
         print "Warning: cannot extract information from RESC."
         k8resc = None
     imgnames.append(None)
@@ -504,7 +501,10 @@
         cover = CoverProcessor(files, metadata, imgnames)
         cover_img = cover.getImageName()
         if cover_img is not None:
-            cover_page = cover.getXHTMLName()
+            if k8resc.hasSpine and "coverpage" not in k8resc.spine_idrefs.keys():
+                part = k8proc.getPart(int(k8resc.spine_order[0]))
+                if part.find(cover_img) == -1:
+                    k8resc.prepend_to_spine("coverpage", "inserted", "no", None)
             if "coverpage" in k8resc.spine_idrefs.keys() and k8resc.spine_order[0] == "coverpage":
                 filename = cover.getXHTMLName()
                 fileinfo.append(["coverpage", 'Text', filename])
Only in KindleUnpack_v072x_test/lib: kindleunpack.py.orig
diff -ur KindleUnpack_v072x_test/lib/mobi_k8resc.py KindleUnpack_v072x_test_new/lib/mobi_k8resc.py
--- KindleUnpack_v072x_test/lib/mobi_k8resc.py	2014-07-08 15:37:56.000000000 -0400
+++ KindleUnpack_v072x_test_new/lib/mobi_k8resc.py	2014-07-09 14:21:25.000000000 -0400
@@ -4,32 +4,22 @@
 import sys, re
 from mobi_utils import fromBase32
 
-        # rp = RESCProcessor(resc_data)
-        # rp.parseData()
-        # print "cover name: ", rp.cover_name
-        # print "extra metadata"
-        # for tname, tattr, tcontent in rp.extrameta:
-        #     print "    ", tname, tattr, tcontent
-        # print "spine ppd: ",rp.spine_ppd
-        # for key in rp.spine_order:
-        #     print key, rp.spine_idrefs[key], rp.spine_pageprops[key]
-
-_DEBUG = False
 _OPF_PARENT_TAGS = ['xml', 'package', 'metadata', 'dc-metadata', 'x-metadata', 'manifest', 'spine', 'tours', 'guide']
 
 class K8RESCProcessor(object):
 
-    def __init__(self, data):
+    def __init__(self, data, debug = False):
         self.resc = None
         self.opos = 0
         self.extrameta = []
         self.cover_name = None
-        self.cover_attributes = {}
         self.spine_idrefs = {}
         self.spine_order = []
         self.spine_pageprops = {}
+        self.spine_linear = {}
         self.spine_ppd = None
         self.hasSpine = False
+        self._debug = debug
         m_header = re.match(r'^\w+=(\w+)\&\w+=(\d+)&\w+=(\d+)',data)
         self.resc_header = m_header.group()
         resc_size = fromBase32(m_header.group(1))
@@ -51,6 +41,14 @@
         self.parseData()
         self.hasSpine = len(self.spine_order) > 0
 
+
+    def prepend_to_spine(self, key, idref, linear, properties):
+        self.spine_order = [key] + self.spine_order
+        self.spine_idrefs[key] = idref
+        self.spine_linear[key] = linear
+        self.spine_pageprops[key] = properties
+
+
     # RESC tag iterator
     def resc_tag_iter(self):
         tcontent = last_tattr = None
@@ -83,13 +81,9 @@
 
     # now parse the RESC to extract spine and extra metadata info
     def parseData(self):
-        global _DEBUG
         for prefix, tname, tattr, tcontent in self.resc_tag_iter():
-            if _DEBUG:
-                print "  "
-                print prefix, tname
-                print tattr
-                print tcontent
+            if self._debug:
+                print "   Parsing RESC: ", prefix, tname, tattr, tcontent
             if tname == "spine":
                 self.spine_ppd = tattr.get("page-progession-direction", None)
             if tname == "itemref":
@@ -97,13 +91,13 @@
                 if skelid is None and len(self.spine_order) == 0:
                     # assume it was removed initial coverpage
                     skelid = "coverpage"
-                    self.cover_attributes["linear"] = "no"
                 self.spine_order.append(skelid)
                 idref = tattr.get("idref", None)
                 if idref is not None:
                     idref = 'x_' + idref
                 self.spine_idrefs[skelid] = idref
                 self.spine_pageprops[skelid] = tattr.get("properties", None)
+                self.spine_linear[skelid] = tattr.get("linear", None)
             if tname == "meta" or tname.startswith("dc:"):
                 if tattr.get("name","") == "cover":
                     self.cover_name = tattr.get("content",None)
@@ -181,7 +175,6 @@
                     while s[p:p+1] not in ('>', '/', ' ') : p += 1
                     val = s[b:p]
                 tattr[aname] = val
-        if tattr is not None and len(tattr)== 0: tattr = None
         if ttype is None:
             ttype = 'begin'
             if s.find('/',p) >= 0:
Only in KindleUnpack_v072x_test/lib: mobi_k8resc.py.orig
diff -ur KindleUnpack_v072x_test/lib/mobi_opf.py KindleUnpack_v072x_test_new/lib/mobi_opf.py
--- KindleUnpack_v072x_test/lib/mobi_opf.py	2014-07-08 15:41:00.000000000 -0400
+++ KindleUnpack_v072x_test_new/lib/mobi_opf.py	2014-07-09 13:59:28.000000000 -0400
@@ -43,7 +43,7 @@
 import mobi_taglist as taglist
 
 class OPFProcessor(object):
-    def __init__(self, files, metadata, fileinfo, imgnames, isNCX, mh, usedmap, pagemapxml='', guidetext=False, k8resc=None):
+    def __init__(self, files, metadata, fileinfo, imgnames, isNCX, mh, usedmap, pagemapxml='', guidetext='', k8resc=None):
         self.files = files
         self.metadata = metadata
         self.fileinfo = fileinfo
@@ -501,11 +501,15 @@
         data.append(spine_start_tag)
         if hasK8RescSpine:
             for key in k8resc.spine_order:
+                idref = k8resc.spine_idrefs[key]
                 pp = k8resc.spine_pageprops[key]
+                linear = k8resc.spine_linear[key]
+                data.append('<itemref idref="%s"' % idref)
                 if pp is not None:
-                    data.append('<itemref idref="%s" properties="%s" />\n' % (k8resc.spine_idrefs[key], pp))
-                else:
-                    data.append('<itemref idref="%s"/>\n' % k8resc.spine_idrefs[key])
+                    data.append(' properties="%s"' % pp)
+                if linear is not None:
+                    data.append(' linear="%s"' % linear)
+                data.append(' />\n')
         else:
             for entry in spinerefs:
                 data.append('<itemref idref="' + entry + '"/>\n')
