diff --git a/app/src/main/java/masquerade/substratum/services/JobService.java b/app/src/main/java/masquerade/substratum/services/JobService.java
index cff682f..001ca03 100644
--- a/app/src/main/java/masquerade/substratum/services/JobService.java
+++ b/app/src/main/java/masquerade/substratum/services/JobService.java
@@ -290,7 +290,7 @@
                     null,
                     UserHandle.USER_SYSTEM);
         } catch (Exception e) {
-            e.printStackTrace();
+            Log.e(TAG, "", e);
         }
     }
 
@@ -299,7 +299,7 @@
         try {
             getPM().deletePackageAsUser(packageName, observer, 0, UserHandle.USER_SYSTEM);
         } catch (Exception e) {
-            e.printStackTrace();
+            Log.e(TAG, "", e);
         }
     }
 
@@ -307,7 +307,7 @@
         try {
             getOMS().setEnabled(packageName, enable, UserHandle.USER_SYSTEM, false);
         } catch (RemoteException e) {
-            e.printStackTrace();
+            Log.e(TAG, "", e);
         }
     }
 
@@ -321,7 +321,7 @@
                 log("OverlayInfo is null.");
             }
         } catch (RemoteException e) {
-            e.printStackTrace();
+            Log.e(TAG, "", e);
         }
         return enabled;
     }
@@ -354,7 +354,7 @@
                     .getAbsolutePath() + "/FontCache/" + zipFileName);
             IOUtils.bufferedCopy(inputStream, outputStream);
         } catch (Exception e) {
-            e.printStackTrace();
+            Log.e(TAG, "", e);
         }
 
         // Unzip new fonts and delete zip file, overwriting any system fonts
@@ -375,7 +375,7 @@
                 IOUtils.bufferedCopy(inputStream, outputStream);
             }
         } catch (Exception e) {
-            e.printStackTrace();
+            Log.e(TAG, "", e);
         }
 
         // Prepare system theme fonts folder and copy new fonts folder from our cache
@@ -437,7 +437,7 @@
                     .getAbsolutePath() + "/SoundsCache/" + zipFileName);
             IOUtils.bufferedCopy(inputStream, outputStream);
         } catch (Exception e) {
-            e.printStackTrace();
+            Log.e(TAG, "", e);
         }
 
         // Unzip new sounds and delete zip file
@@ -674,7 +674,7 @@
             IOUtils.setPermissions(dest,
                     FileUtils.S_IRWXU | FileUtils.S_IRGRP | FileUtils.S_IROTH);
         } catch (Exception e) {
-            e.printStackTrace();
+            Log.e(TAG, "", e);
         }
     }
 
@@ -686,7 +686,7 @@
                 if (!deleted) log("Could not delete themed boot animation...");
             }
         } catch (Exception e) {
-            e.printStackTrace();
+            Log.e(TAG, "", e);
         }
     }
 
@@ -709,7 +709,7 @@
                 }
             }
         } catch (Exception e) {
-            e.printStackTrace();
+            Log.e(TAG, "", e);
         }
     }
 
@@ -723,7 +723,7 @@
             ctx = getApplicationContext().createPackageContext(packageName,
                     Context.CONTEXT_IGNORE_SECURITY);
         } catch (NameNotFoundException e) {
-            e.printStackTrace();
+            Log.e(TAG, "", e);
         }
         return ctx;
     }
@@ -1041,7 +1041,7 @@
                     getOMS().setPriority(packageName, parentName, UserHandle.USER_SYSTEM);
                 }
             } catch (RemoteException e) {
-                e.printStackTrace();
+                Log.e(TAG, "", e);
             }
             Message message = mJobHandler.obtainMessage(JobHandler.MESSAGE_DEQUEUE,
                     PriorityJob.this);
@@ -1269,7 +1269,7 @@
                 config.userSetLocale = true;
                 ActivityManagerNative.getDefault().updateConfiguration(config);
             } catch (RemoteException e) {
-                e.printStackTrace();
+                Log.e(TAG, "", e);
             }
         }
 
@@ -1283,7 +1283,7 @@
                 config.userSetLocale = true;
                 ActivityManagerNative.getDefault().updateConfiguration(config);
             } catch (RemoteException e) {
-                e.printStackTrace();
+                Log.e(TAG, "", e);
                 return;
             }
             Message message = mJobHandler.obtainMessage(JobHandler.MESSAGE_DEQUEUE,
diff --git a/app/src/main/java/masquerade/substratum/utils/IOUtils.java b/app/src/main/java/masquerade/substratum/utils/IOUtils.java
index acbb0fc..e982128 100644
--- a/app/src/main/java/masquerade/substratum/utils/IOUtils.java
+++ b/app/src/main/java/masquerade/substratum/utils/IOUtils.java
@@ -98,7 +98,7 @@
         try {
             deleteRecursive(new File(SYSTEM_THEME_FONT_PATH));
         } catch (Exception e) {
-            e.printStackTrace();
+            Log.e("DeleteThemedAudio", "", e);
         }
     }
 
@@ -106,7 +106,7 @@
         try {
             deleteRecursive(new File(SYSTEM_THEME_AUDIO_PATH));
         } catch (Exception e) {
-            e.printStackTrace();
+            Log.e("DeleteThemedAudio", "", e);
         }
     }
 
@@ -126,7 +126,7 @@
                     copyFolder(file, newFile);
                 }
             } catch (Exception e) {
-                e.printStackTrace();
+                Log.e("CopyFolder", "", e);
             }
         }
     }
@@ -155,7 +155,7 @@
                 }
             }
         } catch (Exception e) {
-            e.printStackTrace();
+            Log.e("unzip", "", e);
         }
     }
 
@@ -163,7 +163,7 @@
         try {
             bufferedCopy(new FileInputStream(source), new FileOutputStream(dest));
         } catch (Exception e) {
-            e.printStackTrace();
+            Log.e("BufferedCopy", "", e);
         }
     }
 
@@ -171,7 +171,7 @@
         try {
             bufferedCopy(new FileInputStream(source), new FileOutputStream(dest));
         } catch (Exception e) {
-            e.printStackTrace();
+            Log.e("BufferedCopy", "", e);
         }
     }
 
@@ -188,7 +188,7 @@
             in.close();
             out.close();
         } catch (Exception e) {
-            e.printStackTrace();
+            Log.e("BufferedCopy", "", e);
         }
     }
 
diff --git a/app/src/main/java/masquerade/substratum/utils/SoundUtils.java b/app/src/main/java/masquerade/substratum/utils/SoundUtils.java
index 73999ce..967cef5 100644
--- a/app/src/main/java/masquerade/substratum/utils/SoundUtils.java
+++ b/app/src/main/java/masquerade/substratum/utils/SoundUtils.java
@@ -179,7 +179,7 @@
         try {
             RingtoneManager.setActualDefaultRingtoneUri(context, type, newUri);
         } catch (Exception e) {
-            e.printStackTrace();
+            Log.e("SetUIAudible", "", e);
             return false;
         }
         return true;
