diff --git a/data.hpp b/data.hpp
index ff50373..ef201d7 100644
--- a/data.hpp
+++ b/data.hpp
@@ -5,7 +5,7 @@
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *    http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
@@ -26,32 +26,32 @@
 class DataManager
 {
 public:
-    static int ResetDefaults();
-    static int LoadValues(const string filename);
-    static int Flush();
+	static int ResetDefaults();
+	static int LoadValues(const string filename);
+	static int Flush();
 
-    // Core get routines
-    static int GetValue(const string varName, string& value);
-    static int GetValue(const string varName, int& value);
+	// Core get routines
+	static int GetValue(const string varName, string& value);
+	static int GetValue(const string varName, int& value);
 	static int GetValue(const string varName, float& value);
-    static unsigned long long GetValue(const string varName, unsigned long long& 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);
+	// 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);
 
-    // Helper functions
-    static string GetStrValue(const string varName);
-    static int GetIntValue(const string varName);
+	// Helper functions
+	static string GetStrValue(const string varName);
+	static int GetIntValue(const string varName);
 
-    // Core set routines
-    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);
+	// Core set routines
+	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 int SetProgress(float Fraction);
 	static int ShowProgress(float Portion, float Seconds);
 
-    static void DumpValues();
+	static void DumpValues();
 	static void update_tz_environment_variables();
 	static void SetBackupFolder();
 	static void SetDefaultValues();
@@ -64,20 +64,20 @@
 	static string& CGetSettingsStoragePath();
 
 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;
+	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;
 
-    static map<string, string> mConstValues;
+	static map<string, string> mConstValues;
 
 protected:
-    static int SaveValues();
+	static int SaveValues();
 
-    static int GetMagicValue(string varName, string& value);
+	static int GetMagicValue(string varName, string& value);
 
 private:
 	static void sanitize_device_id(char* device_id);
