diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist
index 51d226d..a18d8e4 100644
--- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist
+++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist
@@ -24,7 +24,7 @@
 	<key>CFBundleExecutable</key>
 	<string>droplet</string>
 	<key>CFBundleGetInfoString</key>
-	<string>DeDRM AppleScript 6.3.3 Written 2010–2015 by Apprentice Alf et al.</string>
+	<string>DeDRM AppleScript 6.3.4 Written 2010–2015 by Apprentice Alf et al.</string>
 	<key>CFBundleIconFile</key>
 	<string>DeDRM</string>
 	<key>CFBundleIdentifier</key>
@@ -36,7 +36,7 @@
 	<key>CFBundlePackageType</key>
 	<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-	<string>6.3.3</string>
+	<string>6.3.4</string>
 	<key>CFBundleSignature</key>
 	<string>dplt</string>
 	<key>LSRequiresCarbon</key>
diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/__init__.py b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/__init__.py
index 1f34cfe..53b1200 100644
--- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/__init__.py
+++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/__init__.py
@@ -45,6 +45,7 @@ __docformat__ = 'restructuredtext en'
 #   6.3.1 - Version number bump for clarity
 #   6.3.2 - Fixed Kindle for Android help file
 #   6.3.3 - Bug fix for Kindle for PC support
+#   6.3.4 - Fixes for Kindle for Android, Linux, and Kobo 3.17
 
 
 """
@@ -52,7 +53,7 @@ Decrypt DRMed ebooks.
 """
 
 PLUGIN_NAME = u"DeDRM"
-PLUGIN_VERSION_TUPLE = (6, 3, 3)
+PLUGIN_VERSION_TUPLE = (6, 3, 4)
 PLUGIN_VERSION = u".".join([unicode(str(x)) for x in PLUGIN_VERSION_TUPLE])
 # Include an html helpfile in the plugin's zipfile with the following name.
 RESOURCE_NAME = PLUGIN_NAME + '_Help.htm'
@@ -148,7 +149,7 @@ class DeDRM(FileTypePlugin):
                     try:
                         open(file_path,'wb').write(data)
                     except:
-                        print u"{0} v{1}: Exception when copying needed library files after {2:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION, time.time()-self.starttime)
+                        print u"{0} v{1}: Exception when copying needed library files".format(PLUGIN_NAME, PLUGIN_VERSION)
                         traceback.print_exc()
                         pass
 
diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/androidkindlekey.py b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/androidkindlekey.py
index 2c539ee..ff8d1ee 100644
--- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/androidkindlekey.py
+++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/androidkindlekey.py
@@ -16,16 +16,18 @@ from __future__ import with_statement
 #        - and added in unicode command line support
 #  1.3   - added in TkInter interface, output to a file
 #  1.4   - Fix some problems identified by Aldo Bleeker
+#  1.5   - Fix another problem identified by Aldo Bleeker
 
 """
 Retrieve Kindle for Android Serial Number.
 """
 
 __license__ = 'GPL v3'
-__version__ = '1.4'
+__version__ = '1.5'
 
 import os
 import sys
+import traceback
 import getopt
 import tempfile
 import zlib
@@ -220,20 +222,30 @@ def get_serials2(path=STORAGE2):
     userdata_keys = cursor.fetchall()
     dsns = []
     for userdata_row in userdata_keys:
-        if userdata_row:
-            userdata_utf8 = userdata_row[0].encode('utf8')
-            if len(userdata_utf8) > 0:
-                dsns.append(userdata_utf8)
+        try:
+            if userdata_row and userdata_row[0]:
+                userdata_utf8 = userdata_row[0].encode('utf8')
+                if len(userdata_utf8) > 0:
+                    dsns.append(userdata_utf8)
+        except:
+            print "Error getting one of the device serial name keys"
+            traceback.print_exc()
+            pass
     dsns = list(set(dsns))
 
     cursor.execute('''select userdata_value from userdata where userdata_key like '%/%kindle.account.tokens%' ''')
     userdata_keys = cursor.fetchall()
     tokens = []
     for userdata_row in userdata_keys:
-        if userdata_row:
-            userdata_utf8 = userdata_row[0].encode('utf8')
-            if len(userdata_utf8) > 0:
-                tokens.append(userdata_utf8)
+        try:
+            if userdata_row and userdata_row[0]:
+                userdata_utf8 = userdata_row[0].encode('utf8')
+                if len(userdata_utf8) > 0:
+                    tokens.append(userdata_utf8)
+        except:
+            print "Error getting one of the account token keys"
+            traceback.print_exc()
+            pass
     tokens = list(set(tokens))
  
     serials = []
@@ -377,7 +389,6 @@ def gui_main():
         import Tkconstants
         import tkMessageBox
         import tkFileDialog
-        import traceback
     except:
         print "Tkinter not installed"
         return cli_main()
diff --git a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/DeDRM_App.pyw b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/DeDRM_App.pyw
index 45c9e06..87b8634 100644
--- a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/DeDRM_App.pyw
+++ b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/DeDRM_App.pyw
@@ -18,8 +18,9 @@
 #   6.3.1 - Version bump for clarity
 #   6.3.2 - Version bump to match plugin
 #   6.3.3 - Version bump to match plugin
+#   6.3.4 - Version bump to match plugin
 
-__version__ = '6.3.3'
+__version__ = '6.3.4'
 
 import sys
 import os, os.path
diff --git a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/__init__.py b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/__init__.py
index 1f34cfe..53b1200 100644
--- a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/__init__.py
+++ b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/__init__.py
@@ -45,6 +45,7 @@ __docformat__ = 'restructuredtext en'
 #   6.3.1 - Version number bump for clarity
 #   6.3.2 - Fixed Kindle for Android help file
 #   6.3.3 - Bug fix for Kindle for PC support
+#   6.3.4 - Fixes for Kindle for Android, Linux, and Kobo 3.17
 
 
 """
@@ -52,7 +53,7 @@ Decrypt DRMed ebooks.
 """
 
 PLUGIN_NAME = u"DeDRM"
-PLUGIN_VERSION_TUPLE = (6, 3, 3)
+PLUGIN_VERSION_TUPLE = (6, 3, 4)
 PLUGIN_VERSION = u".".join([unicode(str(x)) for x in PLUGIN_VERSION_TUPLE])
 # Include an html helpfile in the plugin's zipfile with the following name.
 RESOURCE_NAME = PLUGIN_NAME + '_Help.htm'
@@ -148,7 +149,7 @@ class DeDRM(FileTypePlugin):
                     try:
                         open(file_path,'wb').write(data)
                     except:
-                        print u"{0} v{1}: Exception when copying needed library files after {2:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION, time.time()-self.starttime)
+                        print u"{0} v{1}: Exception when copying needed library files".format(PLUGIN_NAME, PLUGIN_VERSION)
                         traceback.print_exc()
                         pass
 
diff --git a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/androidkindlekey.py b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/androidkindlekey.py
index 2c539ee..ff8d1ee 100644
--- a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/androidkindlekey.py
+++ b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/androidkindlekey.py
@@ -16,16 +16,18 @@ from __future__ import with_statement
 #        - and added in unicode command line support
 #  1.3   - added in TkInter interface, output to a file
 #  1.4   - Fix some problems identified by Aldo Bleeker
+#  1.5   - Fix another problem identified by Aldo Bleeker
 
 """
 Retrieve Kindle for Android Serial Number.
 """
 
 __license__ = 'GPL v3'
-__version__ = '1.4'
+__version__ = '1.5'
 
 import os
 import sys
+import traceback
 import getopt
 import tempfile
 import zlib
@@ -220,20 +222,30 @@ def get_serials2(path=STORAGE2):
     userdata_keys = cursor.fetchall()
     dsns = []
     for userdata_row in userdata_keys:
-        if userdata_row:
-            userdata_utf8 = userdata_row[0].encode('utf8')
-            if len(userdata_utf8) > 0:
-                dsns.append(userdata_utf8)
+        try:
+            if userdata_row and userdata_row[0]:
+                userdata_utf8 = userdata_row[0].encode('utf8')
+                if len(userdata_utf8) > 0:
+                    dsns.append(userdata_utf8)
+        except:
+            print "Error getting one of the device serial name keys"
+            traceback.print_exc()
+            pass
     dsns = list(set(dsns))
 
     cursor.execute('''select userdata_value from userdata where userdata_key like '%/%kindle.account.tokens%' ''')
     userdata_keys = cursor.fetchall()
     tokens = []
     for userdata_row in userdata_keys:
-        if userdata_row:
-            userdata_utf8 = userdata_row[0].encode('utf8')
-            if len(userdata_utf8) > 0:
-                tokens.append(userdata_utf8)
+        try:
+            if userdata_row and userdata_row[0]:
+                userdata_utf8 = userdata_row[0].encode('utf8')
+                if len(userdata_utf8) > 0:
+                    tokens.append(userdata_utf8)
+        except:
+            print "Error getting one of the account token keys"
+            traceback.print_exc()
+            pass
     tokens = list(set(tokens))
  
     serials = []
@@ -377,7 +389,6 @@ def gui_main():
         import Tkconstants
         import tkMessageBox
         import tkFileDialog
-        import traceback
     except:
         print "Tkinter not installed"
         return cli_main()
diff --git a/DeDRM_calibre_plugin/DeDRM_plugin.zip b/DeDRM_calibre_plugin/DeDRM_plugin.zip
index 082e508..a64da23 100644
Binary files a/DeDRM_calibre_plugin/DeDRM_plugin.zip and b/DeDRM_calibre_plugin/DeDRM_plugin.zip differ
diff --git a/DeDRM_calibre_plugin/DeDRM_plugin/__init__.py b/DeDRM_calibre_plugin/DeDRM_plugin/__init__.py
index 1f34cfe..53b1200 100644
--- a/DeDRM_calibre_plugin/DeDRM_plugin/__init__.py
+++ b/DeDRM_calibre_plugin/DeDRM_plugin/__init__.py
@@ -45,6 +45,7 @@ __docformat__ = 'restructuredtext en'
 #   6.3.1 - Version number bump for clarity
 #   6.3.2 - Fixed Kindle for Android help file
 #   6.3.3 - Bug fix for Kindle for PC support
+#   6.3.4 - Fixes for Kindle for Android, Linux, and Kobo 3.17
 
 
 """
@@ -52,7 +53,7 @@ Decrypt DRMed ebooks.
 """
 
 PLUGIN_NAME = u"DeDRM"
-PLUGIN_VERSION_TUPLE = (6, 3, 3)
+PLUGIN_VERSION_TUPLE = (6, 3, 4)
 PLUGIN_VERSION = u".".join([unicode(str(x)) for x in PLUGIN_VERSION_TUPLE])
 # Include an html helpfile in the plugin's zipfile with the following name.
 RESOURCE_NAME = PLUGIN_NAME + '_Help.htm'
@@ -148,7 +149,7 @@ class DeDRM(FileTypePlugin):
                     try:
                         open(file_path,'wb').write(data)
                     except:
-                        print u"{0} v{1}: Exception when copying needed library files after {2:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION, time.time()-self.starttime)
+                        print u"{0} v{1}: Exception when copying needed library files".format(PLUGIN_NAME, PLUGIN_VERSION)
                         traceback.print_exc()
                         pass
 
diff --git a/DeDRM_calibre_plugin/DeDRM_plugin/androidkindlekey.py b/DeDRM_calibre_plugin/DeDRM_plugin/androidkindlekey.py
index 2c539ee..ff8d1ee 100644
--- a/DeDRM_calibre_plugin/DeDRM_plugin/androidkindlekey.py
+++ b/DeDRM_calibre_plugin/DeDRM_plugin/androidkindlekey.py
@@ -16,16 +16,18 @@ from __future__ import with_statement
 #        - and added in unicode command line support
 #  1.3   - added in TkInter interface, output to a file
 #  1.4   - Fix some problems identified by Aldo Bleeker
+#  1.5   - Fix another problem identified by Aldo Bleeker
 
 """
 Retrieve Kindle for Android Serial Number.
 """
 
 __license__ = 'GPL v3'
-__version__ = '1.4'
+__version__ = '1.5'
 
 import os
 import sys
+import traceback
 import getopt
 import tempfile
 import zlib
@@ -220,20 +222,30 @@ def get_serials2(path=STORAGE2):
     userdata_keys = cursor.fetchall()
     dsns = []
     for userdata_row in userdata_keys:
-        if userdata_row:
-            userdata_utf8 = userdata_row[0].encode('utf8')
-            if len(userdata_utf8) > 0:
-                dsns.append(userdata_utf8)
+        try:
+            if userdata_row and userdata_row[0]:
+                userdata_utf8 = userdata_row[0].encode('utf8')
+                if len(userdata_utf8) > 0:
+                    dsns.append(userdata_utf8)
+        except:
+            print "Error getting one of the device serial name keys"
+            traceback.print_exc()
+            pass
     dsns = list(set(dsns))
 
     cursor.execute('''select userdata_value from userdata where userdata_key like '%/%kindle.account.tokens%' ''')
     userdata_keys = cursor.fetchall()
     tokens = []
     for userdata_row in userdata_keys:
-        if userdata_row:
-            userdata_utf8 = userdata_row[0].encode('utf8')
-            if len(userdata_utf8) > 0:
-                tokens.append(userdata_utf8)
+        try:
+            if userdata_row and userdata_row[0]:
+                userdata_utf8 = userdata_row[0].encode('utf8')
+                if len(userdata_utf8) > 0:
+                    tokens.append(userdata_utf8)
+        except:
+            print "Error getting one of the account token keys"
+            traceback.print_exc()
+            pass
     tokens = list(set(tokens))
  
     serials = []
@@ -377,7 +389,6 @@ def gui_main():
         import Tkconstants
         import tkMessageBox
         import tkFileDialog
-        import traceback
     except:
         print "Tkinter not installed"
         return cli_main()
diff --git a/Other_Tools/DRM_Key_Scripts/Kindle_for_Android/androidkindlekey.pyw b/Other_Tools/DRM_Key_Scripts/Kindle_for_Android/androidkindlekey.pyw
index 2c539ee..ff8d1ee 100644
--- a/Other_Tools/DRM_Key_Scripts/Kindle_for_Android/androidkindlekey.pyw
+++ b/Other_Tools/DRM_Key_Scripts/Kindle_for_Android/androidkindlekey.pyw
@@ -16,16 +16,18 @@ from __future__ import with_statement
 #        - and added in unicode command line support
 #  1.3   - added in TkInter interface, output to a file
 #  1.4   - Fix some problems identified by Aldo Bleeker
+#  1.5   - Fix another problem identified by Aldo Bleeker
 
 """
 Retrieve Kindle for Android Serial Number.
 """
 
 __license__ = 'GPL v3'
-__version__ = '1.4'
+__version__ = '1.5'
 
 import os
 import sys
+import traceback
 import getopt
 import tempfile
 import zlib
@@ -220,20 +222,30 @@ def get_serials2(path=STORAGE2):
     userdata_keys = cursor.fetchall()
     dsns = []
     for userdata_row in userdata_keys:
-        if userdata_row:
-            userdata_utf8 = userdata_row[0].encode('utf8')
-            if len(userdata_utf8) > 0:
-                dsns.append(userdata_utf8)
+        try:
+            if userdata_row and userdata_row[0]:
+                userdata_utf8 = userdata_row[0].encode('utf8')
+                if len(userdata_utf8) > 0:
+                    dsns.append(userdata_utf8)
+        except:
+            print "Error getting one of the device serial name keys"
+            traceback.print_exc()
+            pass
     dsns = list(set(dsns))
 
     cursor.execute('''select userdata_value from userdata where userdata_key like '%/%kindle.account.tokens%' ''')
     userdata_keys = cursor.fetchall()
     tokens = []
     for userdata_row in userdata_keys:
-        if userdata_row:
-            userdata_utf8 = userdata_row[0].encode('utf8')
-            if len(userdata_utf8) > 0:
-                tokens.append(userdata_utf8)
+        try:
+            if userdata_row and userdata_row[0]:
+                userdata_utf8 = userdata_row[0].encode('utf8')
+                if len(userdata_utf8) > 0:
+                    tokens.append(userdata_utf8)
+        except:
+            print "Error getting one of the account token keys"
+            traceback.print_exc()
+            pass
     tokens = list(set(tokens))
  
     serials = []
@@ -377,7 +389,6 @@ def gui_main():
         import Tkconstants
         import tkMessageBox
         import tkFileDialog
-        import traceback
     except:
         print "Tkinter not installed"
         return cli_main()
diff --git a/ReadMe_First.txt b/ReadMe_First.txt
index 5e3ad45..beb7287 100644
--- a/ReadMe_First.txt
+++ b/ReadMe_First.txt
@@ -1,7 +1,7 @@
 Welcome to the tools!
 =====================
 
-This ReadMe_First.txt is meant to give users a quick overview of what is available and how to get started. This document is part of the Tools v6.3.1 archive from Apprentice Alf's Blog: http://apprenticealf.wordpress.com/
+This ReadMe_First.txt is meant to give users a quick overview of what is available and how to get started. This document is part of the Tools v6.3.4 archive from Apprentice Alf's Blog: http://apprenticealf.wordpress.com/
 
 The is archive includes tools to remove DRM from: