diff --git a/gui/resources.hpp b/gui/resources.hpp
index 6cb5da2..4e05e41 100644
--- a/gui/resources.hpp
+++ b/gui/resources.hpp
@@ -7,24 +7,24 @@
 class Resource
 {
 public:
-    Resource(xml_node<>* node, ZipArchive* pZip);
-    virtual ~Resource()         {}
+	Resource(xml_node<>* node, ZipArchive* pZip);
+	virtual ~Resource() {}
 
 public:
-    virtual void* GetResource(void) = 0;
-    std::string GetName(void) { return mName; }
+	virtual void* GetResource(void) = 0;
+	std::string GetName(void) { return mName; }
 
 private:
-    std::string mName;
+	std::string mName;
 
 protected:
-    static int ExtractResource(ZipArchive* pZip, std::string folderName, std::string fileName, std::string fileExtn, std::string destFile);
+	static int ExtractResource(ZipArchive* pZip, std::string folderName, std::string fileName, std::string fileExtn, std::string destFile);
 };
 
 typedef enum {
-    TOUCH_START = 0, 
-    TOUCH_DRAG = 1,
-    TOUCH_RELEASE = 2,
+	TOUCH_START = 0, 
+	TOUCH_DRAG = 1,
+	TOUCH_RELEASE = 2,
 	TOUCH_HOLD = 3,
 	TOUCH_REPEAT = 4
 } TOUCH_STATE;
@@ -32,56 +32,55 @@
 class FontResource : public Resource
 {
 public:
-    FontResource(xml_node<>* node, ZipArchive* pZip);
-    virtual ~FontResource();
+	FontResource(xml_node<>* node, ZipArchive* pZip);
+	virtual ~FontResource();
 
 public:
-    virtual void* GetResource(void) { return mFont; }
+	virtual void* GetResource(void) { return mFont; }
 
 protected:
-    void* mFont;
+	void* mFont;
 };
 
 class ImageResource : public Resource
 {
 public:
-    ImageResource(xml_node<>* node, ZipArchive* pZip);
-    virtual ~ImageResource();
+	ImageResource(xml_node<>* node, ZipArchive* pZip);
+	virtual ~ImageResource();
 
 public:
-    virtual void* GetResource(void) { return mSurface; }
+	virtual void* GetResource(void) { return mSurface; }
 
 protected:
-    gr_surface mSurface;
+	gr_surface mSurface;
 };
 
 class AnimationResource : public Resource
 {
 public:
-    AnimationResource(xml_node<>* node, ZipArchive* pZip);
-    virtual ~AnimationResource();
+	AnimationResource(xml_node<>* node, ZipArchive* pZip);
+	virtual ~AnimationResource();
 
 public:
-    virtual void* GetResource(void)         { return mSurfaces.at(0); }
-    virtual void* GetResource(int entry)    { return mSurfaces.at(entry); }
-    virtual int GetResourceCount(void)      { return mSurfaces.size(); }
+	virtual void* GetResource(void) { return mSurfaces.at(0); }
+	virtual void* GetResource(int entry) { return mSurfaces.at(entry); }
+	virtual int GetResourceCount(void) { return mSurfaces.size(); }
 
 protected:
-    std::vector<gr_surface> mSurfaces;
+	std::vector<gr_surface> mSurfaces;
 };
 
 class ResourceManager
 {
 public:
-    ResourceManager(xml_node<>* resList, ZipArchive* pZip);
-    virtual ~ResourceManager();
+	ResourceManager(xml_node<>* resList, ZipArchive* pZip);
+	virtual ~ResourceManager();
 
 public:
-    Resource* FindResource(std::string name);
+	Resource* FindResource(std::string name);
 
 private:
-    std::vector<Resource*> mResources;
+	std::vector<Resource*> mResources;
 };
 
 #endif  // _RESOURCE_HEADER
-
