diff --git a/gui/resources.hpp b/gui/resources.hpp
new file mode 100644
index 0000000..6cb5da2
--- /dev/null
+++ b/gui/resources.hpp
@@ -0,0 +1,87 @@
+// resources.hpp - Base classes for resource management of GUI
+
+#ifndef _RESOURCE_HEADER
+#define _RESOURCE_HEADER
+
+// Base Objects
+class Resource
+{
+public:
+    Resource(xml_node<>* node, ZipArchive* pZip);
+    virtual ~Resource()         {}
+
+public:
+    virtual void* GetResource(void) = 0;
+    std::string GetName(void) { return mName; }
+
+private:
+    std::string mName;
+
+protected:
+    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_HOLD = 3,
+	TOUCH_REPEAT = 4
+} TOUCH_STATE;
+
+class FontResource : public Resource
+{
+public:
+    FontResource(xml_node<>* node, ZipArchive* pZip);
+    virtual ~FontResource();
+
+public:
+    virtual void* GetResource(void) { return mFont; }
+
+protected:
+    void* mFont;
+};
+
+class ImageResource : public Resource
+{
+public:
+    ImageResource(xml_node<>* node, ZipArchive* pZip);
+    virtual ~ImageResource();
+
+public:
+    virtual void* GetResource(void) { return mSurface; }
+
+protected:
+    gr_surface mSurface;
+};
+
+class AnimationResource : public Resource
+{
+public:
+    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(); }
+
+protected:
+    std::vector<gr_surface> mSurfaces;
+};
+
+class ResourceManager
+{
+public:
+    ResourceManager(xml_node<>* resList, ZipArchive* pZip);
+    virtual ~ResourceManager();
+
+public:
+    Resource* FindResource(std::string name);
+
+private:
+    std::vector<Resource*> mResources;
+};
+
+#endif  // _RESOURCE_HEADER
+
