diff --git a/gui/Android.mk b/gui/Android.mk
index 29d99f7..40b67d8 100644
--- a/gui/Android.mk
+++ b/gui/Android.mk
@@ -15,7 +15,7 @@
     fileselector.cpp \
     progressbar.cpp \
     animation.cpp \
-    conditional.cpp \
+    object.cpp \
     slider.cpp \
     slidervalue.cpp \
     listbox.cpp \
diff --git a/gui/action.cpp b/gui/action.cpp
index 9c785d1..951feb1 100644
--- a/gui/action.cpp
+++ b/gui/action.cpp
@@ -67,7 +67,7 @@
 void curtainClose(void);
 
 GUIAction::GUIAction(xml_node<>* node)
-	: Conditional(node)
+	: GUIObject(node)
 {
 	xml_node<>* child;
 	xml_node<>* actions;
diff --git a/gui/animation.cpp b/gui/animation.cpp
index 8c92278..771e1c1 100644
--- a/gui/animation.cpp
+++ b/gui/animation.cpp
@@ -26,7 +26,7 @@
 #include "objects.hpp"
 
 
-GUIAnimation::GUIAnimation(xml_node<>* node)
+GUIAnimation::GUIAnimation(xml_node<>* node) : GUIObject(node)
 {
 	xml_node<>* child;
 	xml_attribute<>* attr;
@@ -101,6 +101,9 @@
 
 int GUIAnimation::Render(void)
 {
+	if(!isConditionTrue())
+		return 0;
+
 	if (!mAnimation || !mAnimation->GetResource(mFrame))	return -1;
 
 	gr_blit(mAnimation->GetResource(mFrame), 0, 0, mRenderW, mRenderH, mRenderX, mRenderY);
@@ -109,6 +112,9 @@
 
 int GUIAnimation::Update(void)
 {
+	if(!isConditionTrue())
+		return 0;
+
 	if (!mAnimation)		return -1;
 
 	// Handle the "end-of-animation" state
diff --git a/gui/button.cpp b/gui/button.cpp
index b14e675..097bf71 100644
--- a/gui/button.cpp
+++ b/gui/button.cpp
@@ -43,7 +43,7 @@
 #include "objects.hpp"
 
 GUIButton::GUIButton(xml_node<>* node)
-	: Conditional(node)
+	: GUIObject(node)
 {
 	xml_attribute<>* attr;
 	xml_node<>* child;
diff --git a/gui/checkbox.cpp b/gui/checkbox.cpp
index 8739c9c..fe5f557 100644
--- a/gui/checkbox.cpp
+++ b/gui/checkbox.cpp
@@ -26,7 +26,7 @@
 #include "objects.hpp"
 
 GUICheckbox::GUICheckbox(xml_node<>* node)
-	: Conditional(node)
+	: GUIObject(node)
 {
 	xml_attribute<>* attr;
 	xml_node<>* child;
diff --git a/gui/console.cpp b/gui/console.cpp
index 517a7c2..5d0ed3e 100644
--- a/gui/console.cpp
+++ b/gui/console.cpp
@@ -103,7 +103,7 @@
 	return;
 }
 
-GUIConsole::GUIConsole(xml_node<>* node)
+GUIConsole::GUIConsole(xml_node<>* node) : GUIObject(node)
 {
 	xml_attribute<>* attr;
 	xml_node<>* child;
@@ -242,6 +242,9 @@
 
 int GUIConsole::Render(void)
 {
+	if(!isConditionTrue())
+		return 0;
+
 	if (mSlideout && mSlideoutState == hidden)
 		return RenderSlideout();
 
@@ -250,6 +253,9 @@
 
 int GUIConsole::Update(void)
 {
+	if(!isConditionTrue())
+		return 0;
+
 	if (mSlideout && mSlideoutState != visible)
 	{
 		if (mSlideoutState == hidden)
@@ -326,6 +332,9 @@
 //  Return 0 on success, >0 to ignore remainder of touch, and <0 on error
 int GUIConsole::NotifyTouch(TOUCH_STATE state, int x, int y)
 {
+	if(!isConditionTrue())
+		return -1;
+
 	if (mSlideout && mSlideoutState == hidden)
 	{
 		if (state == TOUCH_START)
diff --git a/gui/fileselector.cpp b/gui/fileselector.cpp
index 1c2a8cc..484bcff 100644
--- a/gui/fileselector.cpp
+++ b/gui/fileselector.cpp
@@ -55,7 +55,7 @@
 
 int GUIFileSelector::mSortOrder = 0;
 
-GUIFileSelector::GUIFileSelector(xml_node<>* node)
+GUIFileSelector::GUIFileSelector(xml_node<>* node) : GUIObject(node)
 {
 	xml_attribute<>* attr;
 	xml_node<>* child;
@@ -392,6 +392,9 @@
 
 int GUIFileSelector::Render(void)
 {
+	if(!isConditionTrue())
+		return 0;
+
 	// First step, fill background
 	gr_color(mBackgroundColor.red, mBackgroundColor.green, mBackgroundColor.blue, 255);
 	gr_fill(mRenderX, mRenderY + mHeaderH, mRenderW, mRenderH - mHeaderH);
@@ -577,6 +580,9 @@
 
 int GUIFileSelector::Update(void)
 {
+	if(!isConditionTrue())
+		return 0;
+
 	if (!mHeaderIsStatic) {
 		std::string newValue = gui_parse_text(mHeaderText);
 		if (mLastValue != newValue) {
@@ -659,6 +665,9 @@
 
 int GUIFileSelector::NotifyTouch(TOUCH_STATE state, int x, int y)
 {
+	if(!isConditionTrue())
+		return -1;
+
 	static int lastY = 0, last2Y = 0, fastScroll = 0;
 	int selection = 0;
 
@@ -858,6 +867,9 @@
 
 int GUIFileSelector::NotifyVarChange(std::string varName, std::string value)
 {
+	if(!isConditionTrue())
+		return 0;
+
 	if (varName.empty()) {
 		// Always clear the data variable so we know to use it
 		DataManager::SetValue(mVariable, "");
diff --git a/gui/fill.cpp b/gui/fill.cpp
index ad1f4e0..1ddefaa 100644
--- a/gui/fill.cpp
+++ b/gui/fill.cpp
@@ -25,7 +25,7 @@
 #include "rapidxml.hpp"
 #include "objects.hpp"
 
-GUIFill::GUIFill(xml_node<>* node)
+GUIFill::GUIFill(xml_node<>* node) : GUIObject(node)
 {
 	xml_attribute<>* attr;
 	xml_node<>* child;
@@ -50,6 +50,9 @@
 
 int GUIFill::Render(void)
 {
+	if(!isConditionTrue())
+		return 0;
+
 	gr_color(mColor.red, mColor.green, mColor.blue, mColor.alpha);
 	gr_fill(mRenderX, mRenderY, mRenderW, mRenderH);
 	return 0;
diff --git a/gui/image.cpp b/gui/image.cpp
index 31d9418..2cf3b68 100644
--- a/gui/image.cpp
+++ b/gui/image.cpp
@@ -25,7 +25,7 @@
 #include "rapidxml.hpp"
 #include "objects.hpp"
 
-GUIImage::GUIImage(xml_node<>* node) : Conditional(node)
+GUIImage::GUIImage(xml_node<>* node) : GUIObject(node)
 {
 	xml_attribute<>* attr;
 	xml_node<>* child;
diff --git a/gui/input.cpp b/gui/input.cpp
index 4fd1d0e..e402074 100644
--- a/gui/input.cpp
+++ b/gui/input.cpp
@@ -47,7 +47,7 @@
 #include "../data.hpp"
 
 GUIInput::GUIInput(xml_node<>* node)
-	: Conditional(node)
+	: GUIObject(node)
 {
 	xml_attribute<>* attr;
 	xml_node<>* child;
diff --git a/gui/keyboard.cpp b/gui/keyboard.cpp
index 36106c7..f08d714 100644
--- a/gui/keyboard.cpp
+++ b/gui/keyboard.cpp
@@ -43,7 +43,7 @@
 #include "objects.hpp"
 
 GUIKeyboard::GUIKeyboard(xml_node<>* node)
-	: Conditional(node)
+	: GUIObject(node)
 {
 	int layoutindex, rowindex, keyindex, Xindex, Yindex, keyHeight = 0, keyWidth = 0;
 	rowY = colX = -1;
diff --git a/gui/listbox.cpp b/gui/listbox.cpp
index 626cbac..99e2ded 100644
--- a/gui/listbox.cpp
+++ b/gui/listbox.cpp
@@ -51,7 +51,7 @@
 #define SCROLLING_FLOOR 10
 #define SCROLLING_MULTIPLIER 6
 
-GUIListBox::GUIListBox(xml_node<>* node)
+GUIListBox::GUIListBox(xml_node<>* node) : GUIObject(node)
 {
 	xml_attribute<>* attr;
 	xml_node<>* child;
@@ -352,6 +352,9 @@
 
 int GUIListBox::Render(void)
 {
+	if(!isConditionTrue())
+		return 0;
+
 	// First step, fill background
 	gr_color(mBackgroundColor.red, mBackgroundColor.green, mBackgroundColor.blue, 255);
 	gr_fill(mRenderX, mRenderY + mHeaderH, mRenderW, mRenderH - mHeaderH);
@@ -522,6 +525,9 @@
 
 int GUIListBox::Update(void)
 {
+	if(!isConditionTrue())
+		return 0;
+
 	if (!mHeaderIsStatic) {
 		std::string newValue = gui_parse_text(mHeaderText);
 		if (mLastValue != newValue) {
@@ -602,6 +608,9 @@
 
 int GUIListBox::NotifyTouch(TOUCH_STATE state, int x, int y)
 {
+	if(!isConditionTrue())
+		return -1;
+
 	static int lastY = 0, last2Y = 0, fastScroll = 0;
 	int selection = 0;
 
@@ -753,6 +762,9 @@
 
 int GUIListBox::NotifyVarChange(std::string varName, std::string value)
 {
+	if(!isConditionTrue())
+		return 0;
+
 	if (!mHeaderIsStatic) {
 		std::string newValue = gui_parse_text(mHeaderText);
 		if (mLastValue != newValue) {
diff --git a/gui/conditional.cpp b/gui/object.cpp
similarity index 92%
rename from gui/conditional.cpp
rename to gui/object.cpp
index 5ea8d17..b6010d7 100644
--- a/gui/conditional.cpp
+++ b/gui/object.cpp
@@ -27,7 +27,7 @@
 #include "objects.hpp"
 #include "../data.hpp"
 
-Conditional::Conditional(xml_node<>* node)
+GUIObject::GUIObject(xml_node<>* node)
 {
 	// Break out early, it's too hard to check if valid every step
 	if (!node)		return;
@@ -61,7 +61,11 @@
 	}
 }
 
-bool Conditional::IsConditionVariable(std::string var)
+GUIObject::~GUIObject()
+{
+}
+
+bool GUIObject::IsConditionVariable(std::string var)
 {
 	std::vector<Condition>::iterator iter;
 	for (iter = mConditions.begin(); iter != mConditions.end(); iter++)
@@ -72,7 +76,7 @@
 	return false;
 }
 
-bool Conditional::isConditionTrue()
+bool GUIObject::isConditionTrue()
 {
 	std::vector<Condition>::iterator iter;
 	for (iter = mConditions.begin(); iter != mConditions.end(); iter++)
@@ -83,7 +87,7 @@
 	return true;
 }
 
-bool Conditional::isConditionTrue(Condition* condition)
+bool GUIObject::isConditionTrue(Condition* condition)
 {
 	// This is used to hold the proper value of "true" based on the '!' NOT flag
 	bool bTrue = true;
@@ -150,12 +154,12 @@
 	return !bTrue;
 }
 
-bool Conditional::isConditionValid()
+bool GUIObject::isConditionValid()
 {
 	return !mConditions.empty();
 }
 
-void Conditional::NotifyPageSet()
+void GUIObject::NotifyPageSet()
 {
 	std::vector<Condition>::iterator iter;
 	for (iter = mConditions.begin(); iter != mConditions.end(); iter++)
@@ -175,7 +179,7 @@
 	}
 }
 
-bool Conditional::isMounted(string vol)
+bool GUIObject::isMounted(string vol)
 {
 	FILE *fp;
 	char tmpOutput[255];
diff --git a/gui/objects.hpp b/gui/objects.hpp
index e8110b0..42dfb1f 100644
--- a/gui/objects.hpp
+++ b/gui/objects.hpp
@@ -122,10 +122,11 @@
 	int mActionX, mActionY, mActionW, mActionH;
 };
 
-class Conditional
+class GUIObject
 {
 public:
-	Conditional(xml_node<>* node);
+	GUIObject(xml_node<>* node);
+	virtual ~GUIObject();
 
 public:
 	bool IsConditionVariable(std::string var);
@@ -169,7 +170,7 @@
 
 // Derived Objects
 // GUIText - Used for static text
-class GUIText : public RenderObject, public ActionObject, public Conditional
+class GUIText : public GUIObject, public RenderObject, public ActionObject
 {
 public:
 	// w and h may be ignored, in which case, no bounding box is applied
@@ -217,7 +218,7 @@
 };
 
 // GUIImage - Used for static image
-class GUIImage : public RenderObject, public Conditional
+class GUIImage : public GUIObject, public RenderObject
 {
 public:
 	GUIImage(xml_node<>* node);
@@ -240,7 +241,7 @@
 };
 
 // GUIFill - Used for fill colors
-class GUIFill : public RenderObject
+class GUIFill : public GUIObject, public RenderObject
 {
 public:
 	GUIFill(xml_node<>* node);
@@ -255,7 +256,7 @@
 };
 
 // GUIAction - Used for standard actions
-class GUIAction : public ActionObject, public Conditional
+class GUIAction : public GUIObject, public ActionObject
 {
 public:
 	GUIAction(xml_node<>* node);
@@ -289,7 +290,7 @@
 	time_t Start;
 };
 
-class GUIConsole : public RenderObject, public ActionObject
+class GUIConsole : public GUIObject, public RenderObject, public ActionObject
 {
 public:
 	GUIConsole(xml_node<>* node);
@@ -347,7 +348,7 @@
 	virtual int RenderConsole(void);
 };
 
-class GUIButton : public RenderObject, public ActionObject, public Conditional
+class GUIButton : public GUIObject, public RenderObject, public ActionObject
 {
 public:
 	GUIButton(xml_node<>* node);
@@ -386,7 +387,7 @@
 	Placement TextPlacement;
 };
 
-class GUICheckbox: public RenderObject, public ActionObject, public Conditional
+class GUICheckbox: public GUIObject, public RenderObject, public ActionObject
 {
 public:
 	GUICheckbox(xml_node<>* node);
@@ -420,7 +421,7 @@
 	std::string mVarName;
 };
 
-class GUIFileSelector : public RenderObject, public ActionObject
+class GUIFileSelector : public GUIObject, public RenderObject, public ActionObject
 {
 public:
 	GUIFileSelector(xml_node<>* node);
@@ -524,7 +525,7 @@
 	bool updateFileList;
 };
 
-class GUIListBox : public RenderObject, public ActionObject
+class GUIListBox : public GUIObject, public RenderObject, public ActionObject
 {
 public:
 	GUIListBox(xml_node<>* node);
@@ -612,7 +613,7 @@
 	int touchDebounce;
 };
 
-class GUIPartitionList : public RenderObject, public ActionObject
+class GUIPartitionList : public GUIObject, public RenderObject, public ActionObject
 {
 public:
 	GUIPartitionList(xml_node<>* node);
@@ -697,7 +698,7 @@
 };
 
 // GUIAnimation - Used for animations
-class GUIAnimation : public RenderObject
+class GUIAnimation : public GUIObject, public RenderObject
 {
 public:
 	GUIAnimation(xml_node<>* node);
@@ -720,7 +721,7 @@
 	int mUpdateCount;
 };
 
-class GUIProgressBar : public RenderObject, public ActionObject
+class GUIProgressBar : public GUIObject, public RenderObject, public ActionObject
 {
 public:
 	GUIProgressBar(xml_node<>* node);
@@ -753,7 +754,7 @@
 	virtual int RenderInternal(void);	   // Does the actual render
 };
 
-class GUISlider : public RenderObject, public ActionObject
+class GUISlider : public GUIObject, public RenderObject, public ActionObject
 {
 public:
 	GUISlider(xml_node<>* node);
@@ -798,7 +799,7 @@
 #define KEYBOARD_SPECIAL_KEYS 245
 #define KEYBOARD_BACKSPACE 8
 
-class GUIKeyboard : public RenderObject, public ActionObject, public Conditional
+class GUIKeyboard : public GUIObject, public RenderObject, public ActionObject
 {
 public:
 	GUIKeyboard(xml_node<>* node);
@@ -836,7 +837,7 @@
 };
 
 // GUIInput - Used for keyboard input
-class GUIInput : public RenderObject, public ActionObject, public Conditional, public InputObject
+class GUIInput : public GUIObject, public RenderObject, public ActionObject, public InputObject
 {
 public:
 	// w and h may be ignored, in which case, no bounding box is applied
@@ -912,7 +913,7 @@
 	virtual int KeyRepeat(void);
 };
 
-class GUISliderValue: public RenderObject, public ActionObject, public Conditional
+class GUISliderValue: public GUIObject, public RenderObject, public ActionObject
 {
 public:
 	GUISliderValue(xml_node<>* node);
diff --git a/gui/partitionlist.cpp b/gui/partitionlist.cpp
index 35bf702..cb9011f 100644
--- a/gui/partitionlist.cpp
+++ b/gui/partitionlist.cpp
@@ -52,7 +52,7 @@
 #define SCROLLING_FLOOR 10
 #define SCROLLING_MULTIPLIER 6
 
-GUIPartitionList::GUIPartitionList(xml_node<>* node)
+GUIPartitionList::GUIPartitionList(xml_node<>* node) : GUIObject(node)
 {
 	xml_attribute<>* attr;
 	xml_node<>* child;
@@ -344,6 +344,9 @@
 
 int GUIPartitionList::Render(void)
 {
+	if(!isConditionTrue())
+		return 0;
+
 	// First step, fill background
 	gr_color(mBackgroundColor.red, mBackgroundColor.green, mBackgroundColor.blue, 255);
 	gr_fill(mRenderX, mRenderY + mHeaderH, mRenderW, mRenderH - mHeaderH);
@@ -525,6 +528,9 @@
 
 int GUIPartitionList::Update(void)
 {
+	if(!isConditionTrue())
+		return 0;
+
 	if (!mHeaderIsStatic) {
 		std::string newValue = gui_parse_text(mHeaderText);
 		if (mLastValue != newValue) {
@@ -619,6 +625,9 @@
 
 int GUIPartitionList::NotifyTouch(TOUCH_STATE state, int x, int y)
 {
+	if(!isConditionTrue())
+		return -1;
+
 	static int lastY = 0, last2Y = 0;
 	int selection = 0;
 
@@ -820,6 +829,9 @@
 
 int GUIPartitionList::NotifyVarChange(std::string varName, std::string value)
 {
+	if(!isConditionTrue())
+		return 0;
+
 	if (!mHeaderIsStatic) {
 		std::string newValue = gui_parse_text(mHeaderText);
 		if (mLastValue != newValue) {
diff --git a/gui/progressbar.cpp b/gui/progressbar.cpp
index d53fdc1..9c80eb4 100644
--- a/gui/progressbar.cpp
+++ b/gui/progressbar.cpp
@@ -25,7 +25,7 @@
 #include "rapidxml.hpp"
 #include "objects.hpp"
 
-GUIProgressBar::GUIProgressBar(xml_node<>* node)
+GUIProgressBar::GUIProgressBar(xml_node<>* node) : GUIObject(node)
 {
 	xml_attribute<>* attr;
 	xml_node<>* child;
@@ -82,6 +82,9 @@
 
 int GUIProgressBar::Render(void)
 {
+	if(!isConditionTrue())
+		return 0;
+
 	// This handles making sure timing updates occur
 	Update();
 	return RenderInternal();
@@ -102,6 +105,9 @@
 
 int GUIProgressBar::Update(void)
 {
+	if(!isConditionTrue())
+		return 0;
+
 	std::string str;
 	int min, max, cur, pos;
 
@@ -168,6 +174,9 @@
 
 int GUIProgressBar::NotifyVarChange(std::string varName, std::string value)
 {
+	if(!isConditionTrue())
+		return 0;
+
 	static int nextPush = 0;
 
 	if (varName.empty())
diff --git a/gui/slider.cpp b/gui/slider.cpp
index af0c542..6926765 100644
--- a/gui/slider.cpp
+++ b/gui/slider.cpp
@@ -27,7 +27,7 @@
 #include "rapidxml.hpp"
 #include "objects.hpp"
 
-GUISlider::GUISlider(xml_node<>* node)
+GUISlider::GUISlider(xml_node<>* node) : GUIObject(node)
 {
 	xml_attribute<>* attr;
 	xml_node<>* child;
@@ -93,6 +93,9 @@
 
 int GUISlider::Render(void)
 {
+	if(!isConditionTrue())
+		return 0;
+
 	if (!sSlider || !sSlider->GetResource())
 		return -1;
 
@@ -113,6 +116,9 @@
 
 int GUISlider::Update(void)
 {
+	if(!isConditionTrue())
+		return 0;
+
 	if (sUpdate)
 		return 2;
 	return 0;
@@ -120,6 +126,9 @@
 
 int GUISlider::NotifyTouch(TOUCH_STATE state, int x, int y)
 {
+	if(!isConditionTrue())
+		return -1;
+
 	static bool dragging = false;
 
 	switch (state)
diff --git a/gui/slidervalue.cpp b/gui/slidervalue.cpp
index d369ace..c83456b 100644
--- a/gui/slidervalue.cpp
+++ b/gui/slidervalue.cpp
@@ -25,7 +25,7 @@
 #include "rapidxml.hpp"
 #include "objects.hpp"
 
-GUISliderValue::GUISliderValue(xml_node<>* node) : Conditional(node)
+GUISliderValue::GUISliderValue(xml_node<>* node) : GUIObject(node)
 {
 	xml_attribute<>* attr;
 	xml_node<>* child;
diff --git a/gui/text.cpp b/gui/text.cpp
index 7eb6c18..715880b 100644
--- a/gui/text.cpp
+++ b/gui/text.cpp
@@ -26,7 +26,7 @@
 #include "objects.hpp"
 
 GUIText::GUIText(xml_node<>* node)
-	: Conditional(node)
+	: GUIObject(node)
 {
 	xml_attribute<>* attr;
 	xml_node<>* child;
