diff --git a/data.cpp b/data.cpp
index 9e9120c..6566bcd 100644
--- a/data.cpp
+++ b/data.cpp
@@ -358,6 +358,17 @@
     return 0;
 }
 
+unsigned long long DataManager::GetValue(const string varName, unsigned long long& value)
+{
+    string data;
+
+    if (GetValue(varName,data) != 0)
+        return -1;
+
+    value = strtoull(data.c_str(), NULL, 10);
+    return 0;
+}
+
 // This is a dangerous function. It will create the value if it doesn't exist so it has a valid c_str
 string& DataManager::GetValueRef(const string varName)
 {
@@ -458,6 +469,13 @@
     return SetValue(varName, valStr.str(), persist);;
 }
 
+int DataManager::SetValue(const string varName, unsigned long long value, int persist /* = 0 */)
+{
+	ostringstream valStr;
+    valStr << value;
+    return SetValue(varName, valStr.str(), persist);;
+}
+
 void DataManager::DumpValues()
 {
     map<string, TStrIntPair>::iterator iter;
diff --git a/data.hpp b/data.hpp
index 42c7220..55966a1 100644
--- a/data.hpp
+++ b/data.hpp
@@ -33,6 +33,7 @@
     // Core get routines
     static int GetValue(const string varName, string& value);
     static int GetValue(const string varName, int& value);
+    static unsigned long long GetValue(const string varName, unsigned long long& value);
 
     // This is a dangerous function. It will create the value if it doesn't exist so it has a valid c_str
     static string& GetValueRef(const string varName);
@@ -45,6 +46,7 @@
     static int SetValue(const string varName, string value, int persist = 0);
     static int SetValue(const string varName, int value, int persist = 0);
     static int SetValue(const string varName, float value, int persist = 0);
+    static int SetValue(const string varName, unsigned long long value, int persist = 0);
 
     static void DumpValues();
 	static void update_tz_environment_variables();
@@ -52,7 +54,7 @@
 	static void SetDefaultValues();
 	static void Output_Version(void); // Outputs the version to a file in the TWRP folder
 	static void ReadSettingsFile(void);
-	
+
 	static string GetCurrentStoragePath(void);
 	static string& CGetCurrentStoragePath();
 	static string GetCurrentStorageMount(void);
@@ -64,8 +66,10 @@
 
 protected:
     typedef pair<string, int> TStrIntPair;
+    typedef pair<string, unsigned long long> TStrULLPair;
     typedef pair<string, TStrIntPair> TNameValuePair;
     static map<string, TStrIntPair> mValues;
+    static map<string, TStrULLPair> mULLValues;
     static string mBackingFile;
     static int mInitialized;
 
diff --git a/partitionmanager.cpp b/partitionmanager.cpp
index 19efd42..bcabb1c 100644
--- a/partitionmanager.cpp
+++ b/partitionmanager.cpp
@@ -521,7 +521,8 @@
 
 bool TWPartitionManager::Backup_Partition(TWPartition* Part, string Backup_Folder, bool generate_md5, unsigned long long* img_bytes_remaining, unsigned long long* file_bytes_remaining, unsigned long *img_time, unsigned long *file_time, unsigned long long *img_bytes, unsigned long long *file_bytes) {
 	time_t start, stop;
-	int img_bps, file_bps;
+	int img_bps;
+	unsigned long long file_bps;
 	unsigned long total_time, remain_time, section_time;
 	int use_compression, backup_time;
 	float pos;
@@ -644,8 +645,9 @@
 		backup_sys = Find_Partition_By_Path("/system");
 		if (backup_sys != NULL) {
 			partition_count++;
-			if (backup_sys->Backup_Method == 1)
+			if (backup_sys->Backup_Method == 1) {
 				file_bytes += backup_sys->Backup_Size;
+			}
 			else
 				img_bytes += backup_sys->Backup_Size;
 		} else {
@@ -852,9 +854,9 @@
 	if (file_time == 0)
 		file_time = 1;
 	int img_bps = (int)img_bytes / (int)img_time;
-	int file_bps = (int)file_bytes / (int)file_time;
+	unsigned long long file_bps = file_bytes / (int)file_time;
 
-	ui_print("Average backup rate for file systems: %lu MB/sec\n", (file_bps / (1024 * 1024)));
+	ui_print("Average backup rate for file systems: %llu MB/sec\n", (file_bps / (1024 * 1024)));
 	ui_print("Average backup rate for imaged drives: %lu MB/sec\n", (img_bps / (1024 * 1024)));
 
 	time(&total_stop);
@@ -862,7 +864,8 @@
 	unsigned long long actual_backup_size = TWFunc::Get_Folder_Size(Full_Backup_Path, true);
     actual_backup_size /= (1024LLU * 1024LLU);
 
-	int prev_img_bps, prev_file_bps, use_compression;
+	int prev_img_bps, use_compression;
+	unsigned long long prev_file_bps;
 	DataManager::GetValue(TW_BACKUP_AVG_IMG_RATE, prev_img_bps);
 	img_bps += (prev_img_bps * 4);
     img_bps /= 5;
