diff --git a/app/lint.xml b/app/lint.xml
index f09a57bfc..a2eed735d 100644
--- a/app/lint.xml
+++ b/app/lint.xml
@@ -6,7 +6,9 @@
     
     
+
     
+    
 
     
     
diff --git a/app/src/main/java/kellinwood/security/zipsigner/DefaultResourceAdapter.java b/app/src/main/java/kellinwood/security/zipsigner/DefaultResourceAdapter.java
index 35a82532a..90d0235e8 100644
--- a/app/src/main/java/kellinwood/security/zipsigner/DefaultResourceAdapter.java
+++ b/app/src/main/java/kellinwood/security/zipsigner/DefaultResourceAdapter.java
@@ -1,6 +1,8 @@
 
 package kellinwood.security.zipsigner;
 
+import java.util.Locale;
+
 /**
  * Default resource adapter.
  */
@@ -25,7 +27,7 @@ public class DefaultResourceAdapter implements ResourceAdapter {
             case GENERATING_SIGNATURE_BLOCK:
                 return "Generating signature block file";
             case COPYING_ZIP_ENTRY:
-                return String.format("Copying zip entry %d of %d", args[0], args[1]);
+                return String.format(Locale.ENGLISH, "Copying zip entry %d of %d", args[0], args[1]);
             default:
                 throw new IllegalArgumentException("Unknown item " + item);
         }
diff --git a/app/src/main/java/kellinwood/security/zipsigner/optional/Fingerprint.java b/app/src/main/java/kellinwood/security/zipsigner/optional/Fingerprint.java
index c9d4be21b..7107b931f 100644
--- a/app/src/main/java/kellinwood/security/zipsigner/optional/Fingerprint.java
+++ b/app/src/main/java/kellinwood/security/zipsigner/optional/Fingerprint.java
@@ -7,6 +7,7 @@ import kellinwood.security.zipsigner.Base64;
 import org.bouncycastle.util.encoders.HexTranslator;
 
 import java.security.MessageDigest;
+import java.util.Locale;
 
 /**
  * User: ken
@@ -41,7 +42,7 @@ public class Fingerprint {
                 builder.append((char) hex[i + 1]);
                 if (i != (hex.length - 2)) builder.append(':');
             }
-            return builder.toString().toUpperCase();
+            return builder.toString().toUpperCase(Locale.ENGLISH);
         } catch (Exception x) {
             logger.error(x.getMessage(), x);
         }
diff --git a/app/src/main/java/kellinwood/security/zipsigner/optional/JKS.java b/app/src/main/java/kellinwood/security/zipsigner/optional/JKS.java
index 024a46aa8..fd919ab0f 100644
--- a/app/src/main/java/kellinwood/security/zipsigner/optional/JKS.java
+++ b/app/src/main/java/kellinwood/security/zipsigner/optional/JKS.java
@@ -23,7 +23,6 @@ power to enforce restrictions on reverse-engineering of their software,
 and it is irresponsible for them to claim they can.  */
 
 
-
 package kellinwood.security.zipsigner.optional;
 
 import javax.crypto.EncryptedPrivateKeyInfo;
@@ -53,6 +52,7 @@ import java.util.Date;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.Locale;
 import java.util.Vector;
 
 /**
@@ -183,7 +183,7 @@ public class JKS extends KeyStoreSpi {
 
     public Key engineGetKey(String alias, char[] password)
             throws NoSuchAlgorithmException, UnrecoverableKeyException {
-        alias = alias.toLowerCase();
+        alias = alias.toLowerCase(Locale.ENGLISH);
 
         if (!privateKeys.containsKey(alias))
             return null;
@@ -204,12 +204,12 @@ public class JKS extends KeyStoreSpi {
     }
 
     public Certificate[] engineGetCertificateChain(String alias) {
-        alias = alias.toLowerCase();
+        alias = alias.toLowerCase(Locale.ENGLISH);
         return (Certificate[]) certChains.get(alias);
     }
 
     public Certificate engineGetCertificate(String alias) {
-        alias = alias.toLowerCase();
+        alias = alias.toLowerCase(Locale.ENGLISH);
         if (engineIsKeyEntry(alias)) {
             Certificate[] certChain = (Certificate[]) certChains.get(alias);
             if (certChain != null && certChain.length > 0) return certChain[0];
@@ -218,7 +218,7 @@ public class JKS extends KeyStoreSpi {
     }
 
     public Date engineGetCreationDate(String alias) {
-        alias = alias.toLowerCase();
+        alias = alias.toLowerCase(Locale.ENGLISH);
         return (Date) dates.get(alias);
     }
 
@@ -226,7 +226,7 @@ public class JKS extends KeyStoreSpi {
 
     public void engineSetKeyEntry(String alias, Key key, char[] passwd, Certificate[] certChain)
             throws KeyStoreException {
-        alias = alias.toLowerCase();
+        alias = alias.toLowerCase(Locale.ENGLISH);
         if (trustedCerts.containsKey(alias))
             throw new KeyStoreException("\"" + alias + " is a trusted certificate entry");
         privateKeys.put(alias, encryptKey(key, charsToBytes(passwd)));
@@ -242,7 +242,7 @@ public class JKS extends KeyStoreSpi {
 
     public void engineSetKeyEntry(String alias, byte[] encodedKey, Certificate[] certChain)
             throws KeyStoreException {
-        alias = alias.toLowerCase();
+        alias = alias.toLowerCase(Locale.ENGLISH);
         if (trustedCerts.containsKey(alias))
             throw new KeyStoreException("\"" + alias + "\" is a trusted certificate entry");
         try {
@@ -263,7 +263,7 @@ public class JKS extends KeyStoreSpi {
 
     public void engineSetCertificateEntry(String alias, Certificate cert)
             throws KeyStoreException {
-        alias = alias.toLowerCase();
+        alias = alias.toLowerCase(Locale.ENGLISH);
         if (privateKeys.containsKey(alias))
             throw new KeyStoreException("\"" + alias + "\" is a private key entry");
         if (cert == null)
@@ -276,7 +276,7 @@ public class JKS extends KeyStoreSpi {
     }
 
     public void engineDeleteEntry(String alias) throws KeyStoreException {
-        alias = alias.toLowerCase();
+        alias = alias.toLowerCase(Locale.ENGLISH);
         aliases.remove(alias);
     }
 
@@ -285,7 +285,7 @@ public class JKS extends KeyStoreSpi {
     }
 
     public boolean engineContainsAlias(String alias) {
-        alias = alias.toLowerCase();
+        alias = alias.toLowerCase(Locale.ENGLISH);
         return aliases.contains(alias);
     }
 
@@ -294,12 +294,12 @@ public class JKS extends KeyStoreSpi {
     }
 
     public boolean engineIsKeyEntry(String alias) {
-        alias = alias.toLowerCase();
+        alias = alias.toLowerCase(Locale.ENGLISH);
         return privateKeys.containsKey(alias);
     }
 
     public boolean engineIsCertificateEntry(String alias) {
-        alias = alias.toLowerCase();
+        alias = alias.toLowerCase(Locale.ENGLISH);
         return trustedCerts.containsKey(alias);
     }
 
diff --git a/app/src/main/java/kellinwood/security/zipsigner/optional/KeyStoreFileManager.java b/app/src/main/java/kellinwood/security/zipsigner/optional/KeyStoreFileManager.java
index 1123704d6..10e67f64c 100644
--- a/app/src/main/java/kellinwood/security/zipsigner/optional/KeyStoreFileManager.java
+++ b/app/src/main/java/kellinwood/security/zipsigner/optional/KeyStoreFileManager.java
@@ -17,6 +17,7 @@ import java.security.KeyStore;
 import java.security.Provider;
 import java.security.Security;
 import java.security.cert.Certificate;
+import java.util.Locale;
 
 
 /**
@@ -60,7 +61,7 @@ public class KeyStoreFileManager {
     public static KeyStore createKeyStore(String keystorePath, char[] password)
             throws Exception {
         KeyStore ks = null;
-        if (keystorePath.toLowerCase().endsWith(".bks")) {
+        if (keystorePath.toLowerCase(Locale.ENGLISH).endsWith(".bks")) {
             ks = KeyStore.getInstance("bks", new BouncyCastleProvider());
         } else ks = new JksKeyStore();
         ks.load(null, password);
@@ -206,7 +207,7 @@ public class KeyStoreFileManager {
 
         try {
             KeyStore ks = loadKeyStore(keystorePath, storePass);
-            if (ks instanceof JksKeyStore) newKeyName = newKeyName.toLowerCase();
+            if (ks instanceof JksKeyStore) newKeyName = newKeyName.toLowerCase(Locale.ENGLISH);
 
             if (ks.containsAlias(newKeyName)) throw new KeyNameConflictException();
 
diff --git a/app/src/main/java/kellinwood/zipio/ZioEntry.java b/app/src/main/java/kellinwood/zipio/ZioEntry.java
index f61cec7c0..e09db6ad9 100644
--- a/app/src/main/java/kellinwood/zipio/ZioEntry.java
+++ b/app/src/main/java/kellinwood/zipio/ZioEntry.java
@@ -27,6 +27,7 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.SequenceInputStream;
 import java.util.Date;
+import java.util.Locale;
 import java.util.zip.CRC32;
 import java.util.zip.Inflater;
 import java.util.zip.InflaterInputStream;
@@ -91,7 +92,7 @@ public class ZioEntry implements Cloneable {
         this.compressedSize = this.size;
 
         if (getLogger().isDebugEnabled())
-            getLogger().debug(String.format("Computing CRC for %s, size=%d", sourceDataFile, size));
+            getLogger().debug(String.format(Locale.ENGLISH, "Computing CRC for %s, size=%d", sourceDataFile, size));
 
         // compute CRC
         CRC32 crc = new CRC32();
@@ -292,10 +293,10 @@ public class ZioEntry implements Cloneable {
             output.writeBytes(alignBytes, 0, numAlignBytes);
         }
 
-        if (debug) getLogger().debug(String.format("Data position 0x%08x", output.getFilePointer()));
+        if (debug) getLogger().debug(String.format(Locale.ENGLISH, "Data position 0x%08x", output.getFilePointer()));
         if (data != null) {
             output.writeBytes(data);
-            if (debug) getLogger().debug(String.format("Wrote %d bytes", data.length));
+            if (debug) getLogger().debug(String.format(Locale.ENGLISH, "Wrote %d bytes", data.length));
         } else {
 
             if (debug) getLogger().debug(String.format("Seeking to position 0x%08x", dataPosition));
@@ -309,10 +310,10 @@ public class ZioEntry implements Cloneable {
                 int numRead = zipInput.in.read(buffer, 0, (int) Math.min(compressedSize - totalCount, bufferSize));
                 if (numRead > 0) {
                     output.writeBytes(buffer, 0, numRead);
-                    if (debug) getLogger().debug(String.format("Wrote %d bytes", numRead));
+                    if (debug) getLogger().debug(String.format(Locale.ENGLISH, "Wrote %d bytes", numRead));
                     totalCount += numRead;
                 } else
-                    throw new IllegalStateException(String.format("EOF reached while copying %s with %d bytes left to go", filename, compressedSize - totalCount));
+                    throw new IllegalStateException(String.format(Locale.ENGLISH, "EOF reached while copying %s with %d bytes left to go", filename, compressedSize - totalCount));
             }
         }
     }
@@ -434,7 +435,7 @@ public class ZioEntry implements Cloneable {
         while (count != size) {
             int numRead = din.read(tmpdata, count, size - count);
             if (numRead < 0)
-                throw new IllegalStateException(String.format("Read failed, expecting %d bytes, got %d instead", size, count));
+                throw new IllegalStateException(String.format(Locale.ENGLISH, "Read failed, expecting %d bytes, got %d instead", size, count));
             count += numRead;
         }
         return tmpdata;
diff --git a/app/src/main/java/kellinwood/zipio/ZioEntryInputStream.java b/app/src/main/java/kellinwood/zipio/ZioEntryInputStream.java
index 7ed226c62..2d01f919c 100644
--- a/app/src/main/java/kellinwood/zipio/ZioEntryInputStream.java
+++ b/app/src/main/java/kellinwood/zipio/ZioEntryInputStream.java
@@ -23,6 +23,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.RandomAccessFile;
+import java.util.Locale;
 
 
 /**
@@ -47,7 +48,7 @@ public class ZioEntryInputStream extends InputStream {
         raf = entry.getZipInput().in;
         long dpos = entry.getDataPosition();
         if (dpos >= 0) {
-            if (debug) log.debug(String.format("Seeking to %d", entry.getDataPosition()));
+            if (debug) log.debug(String.format(Locale.ENGLISH, "Seeking to %d", entry.getDataPosition()));
             raf.seek(entry.getDataPosition());
         } else {
             // seeks to, then reads, the local header, causing the 
@@ -78,7 +79,7 @@ public class ZioEntryInputStream extends InputStream {
     @Override
     public int available() throws IOException {
         int available = size - offset;
-        if (debug) log.debug(String.format("Available = %d", available));
+        if (debug) log.debug(String.format(Locale.ENGLISH, "Available = %d", available));
         if (available == 0 && returnDummyByte) return 1;
         else return available;
     }
@@ -119,7 +120,7 @@ public class ZioEntryInputStream extends InputStream {
             if (monitor != null) monitor.write(b, off, numRead);
             offset += numRead;
         }
-        if (debug) log.debug(String.format("Read %d bytes for read(b,%d,%d)", numRead, off, len));
+        if (debug) log.debug(String.format(Locale.ENGLISH, "Read %d bytes for read(b,%d,%d)", numRead, off, len));
         return numRead;
     }
 
@@ -132,7 +133,7 @@ public class ZioEntryInputStream extends InputStream {
     public long skip(long n) throws IOException {
         long numToSkip = Math.min(n, available());
         raf.seek(raf.getFilePointer() + numToSkip);
-        if (debug) log.debug(String.format("Skipped %d bytes", numToSkip));
+        if (debug) log.debug(String.format(Locale.ENGLISH, "Skipped %d bytes", numToSkip));
         return numToSkip;
     }
 }
diff --git a/app/src/main/java/kellinwood/zipio/ZipInput.java b/app/src/main/java/kellinwood/zipio/ZipInput.java
index 54f2ea101..60aef4c31 100644
--- a/app/src/main/java/kellinwood/zipio/ZipInput.java
+++ b/app/src/main/java/kellinwood/zipio/ZipInput.java
@@ -25,6 +25,7 @@ import java.io.IOException;
 import java.io.RandomAccessFile;
 import java.util.Collection;
 import java.util.LinkedHashMap;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
@@ -149,8 +150,8 @@ public class ZipInput implements Closeable {
 
             boolean debug = getLogger().isDebugEnabled();
             if (debug) {
-                getLogger().debug(String.format("EOCD found in %d iterations", scanIterations));
-                getLogger().debug(String.format("Directory entries=%d, size=%d, offset=%d/0x%08x", centralEnd.totalCentralEntries,
+                getLogger().debug(String.format(Locale.ENGLISH, "EOCD found in %d iterations", scanIterations));
+                getLogger().debug(String.format(Locale.ENGLISH, "Directory entries=%d, size=%d, offset=%d/0x%08x", centralEnd.totalCentralEntries,
                         centralEnd.centralDirectorySize, centralEnd.centralStartOffset, centralEnd.centralStartOffset));
 
                 ZipListingHelper.listHeader(getLogger());
diff --git a/app/src/main/java/kellinwood/zipio/ZipListingHelper.java b/app/src/main/java/kellinwood/zipio/ZipListingHelper.java
index 62812fda2..1f7c74956 100644
--- a/app/src/main/java/kellinwood/zipio/ZipListingHelper.java
+++ b/app/src/main/java/kellinwood/zipio/ZipListingHelper.java
@@ -21,6 +21,7 @@ import kellinwood.logging.LoggerInterface;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.Locale;
 
 /**
  *
@@ -38,7 +39,7 @@ public class ZipListingHelper {
     public static void listEntry(LoggerInterface log, ZioEntry entry) {
         int ratio = 0;
         if (entry.getSize() > 0) ratio = (100 * (entry.getSize() - entry.getCompressedSize())) / entry.getSize();
-        log.debug(String.format("%8d  %6s %8d %4d%% %s  %08x  %s",
+        log.debug(String.format(Locale.ENGLISH, "%8d  %6s %8d %4d%% %s  %08x  %s",
                 entry.getSize(),
                 entry.getCompression() == 0 ? "Stored" : "Defl:N",
                 entry.getCompressedSize(),