Index: trunk/src/defs/class_id.h
===================================================================
--- trunk/src/defs/class_id.h	(revision 5362)
+++ trunk/src/defs/class_id.h	(revision 5363)
@@ -174,8 +174,10 @@
   // GL-GUI
   CL_GLGUI_WIDGET               =    0x00501901,
-
-
-
-  CL_GLMENU_IMAGE_SCREEN        =    0x00000902,
+  CL_GLGUI_BUTTON               =    0x00502902,
+  CL_GLGUI_PUSHBUTTON           =    0x00502903,
+  CL_GLGUI_CHECKBUTTON          =    0x00502904,
+  CL_GLGUI_RADIOBUTTON          =    0x00502905,
+
+  CL_GLMENU_IMAGE_SCREEN        =    0x00000920,
 
   // sound stuff (range from 0x00000a00 to 0x00000aff)
Index: trunk/src/lib/gui/gl_gui/Makefile.am
===================================================================
--- trunk/src/lib/gui/gl_gui/Makefile.am	(revision 5362)
+++ trunk/src/lib/gui/gl_gui/Makefile.am	(revision 5363)
@@ -10,9 +10,12 @@
 
 libORXglgui_a_SOURCES = glmenu/glmenu_imagescreen.cc \
-                        glgui_widget.cc
+                        glgui_widget.cc \
+                        glgui_button.cc
 
 noinst_HEADERS= glmenu/glmenu_imagescreen.h \
 		glgui.h \
-		glgui_widget.h
+		glgui_widget.h \
+		glgui_button.h
+
 
 
Index: trunk/src/lib/gui/gl_gui/Makefile.in
===================================================================
--- trunk/src/lib/gui/gl_gui/Makefile.in	(revision 5362)
+++ trunk/src/lib/gui/gl_gui/Makefile.in	(revision 5363)
@@ -55,10 +55,12 @@
 libORXglgui_a_LIBADD =
 am_libORXglgui_a_OBJECTS = libORXglgui_a-glmenu_imagescreen.$(OBJEXT) \
-	libORXglgui_a-glgui_widget.$(OBJEXT)
+	libORXglgui_a-glgui_widget.$(OBJEXT) \
+	libORXglgui_a-glgui_button.$(OBJEXT)
 libORXglgui_a_OBJECTS = $(am_libORXglgui_a_OBJECTS)
 DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
-@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/libORXglgui_a-glgui_widget.Po \
+@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/libORXglgui_a-glgui_button.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/libORXglgui_a-glgui_widget.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/libORXglgui_a-glmenu_imagescreen.Po
 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
@@ -186,9 +188,11 @@
 libORXglgui_a_CPPFLAGS = -DBUILD_ORXONOX
 libORXglgui_a_SOURCES = glmenu/glmenu_imagescreen.cc \
-                        glgui_widget.cc
+                        glgui_widget.cc \
+                        glgui_button.cc
 
 noinst_HEADERS = glmenu/glmenu_imagescreen.h \
 		glgui.h \
-		glgui_widget.h
+		glgui_widget.h \
+		glgui_button.h
 
 EXTRA_DIST = 
@@ -240,4 +244,5 @@
 	-rm -f *.tab.c
 
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libORXglgui_a-glgui_button.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libORXglgui_a-glgui_widget.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libORXglgui_a-glmenu_imagescreen.Po@am__quote@
@@ -290,4 +295,20 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libORXglgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libORXglgui_a-glgui_widget.obj `if test -f 'glgui_widget.cc'; then $(CYGPATH_W) 'glgui_widget.cc'; else $(CYGPATH_W) '$(srcdir)/glgui_widget.cc'; fi`
+
+libORXglgui_a-glgui_button.o: glgui_button.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libORXglgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libORXglgui_a-glgui_button.o -MD -MP -MF "$(DEPDIR)/libORXglgui_a-glgui_button.Tpo" -c -o libORXglgui_a-glgui_button.o `test -f 'glgui_button.cc' || echo '$(srcdir)/'`glgui_button.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/libORXglgui_a-glgui_button.Tpo" "$(DEPDIR)/libORXglgui_a-glgui_button.Po"; else rm -f "$(DEPDIR)/libORXglgui_a-glgui_button.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='glgui_button.cc' object='libORXglgui_a-glgui_button.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/libORXglgui_a-glgui_button.Po' tmpdepfile='$(DEPDIR)/libORXglgui_a-glgui_button.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libORXglgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libORXglgui_a-glgui_button.o `test -f 'glgui_button.cc' || echo '$(srcdir)/'`glgui_button.cc
+
+libORXglgui_a-glgui_button.obj: glgui_button.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libORXglgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libORXglgui_a-glgui_button.obj -MD -MP -MF "$(DEPDIR)/libORXglgui_a-glgui_button.Tpo" -c -o libORXglgui_a-glgui_button.obj `if test -f 'glgui_button.cc'; then $(CYGPATH_W) 'glgui_button.cc'; else $(CYGPATH_W) '$(srcdir)/glgui_button.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/libORXglgui_a-glgui_button.Tpo" "$(DEPDIR)/libORXglgui_a-glgui_button.Po"; else rm -f "$(DEPDIR)/libORXglgui_a-glgui_button.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='glgui_button.cc' object='libORXglgui_a-glgui_button.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/libORXglgui_a-glgui_button.Po' tmpdepfile='$(DEPDIR)/libORXglgui_a-glgui_button.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libORXglgui_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libORXglgui_a-glgui_button.obj `if test -f 'glgui_button.cc'; then $(CYGPATH_W) 'glgui_button.cc'; else $(CYGPATH_W) '$(srcdir)/glgui_button.cc'; fi`
 uninstall-info-am:
 
Index: trunk/src/lib/gui/gl_gui/glgui_button.cc
===================================================================
--- trunk/src/lib/gui/gl_gui/glgui_button.cc	(revision 5362)
+++ trunk/src/lib/gui/gl_gui/glgui_button.cc	(revision 5363)
@@ -16,5 +16,5 @@
 #define DEBUG_SPECIAL_MODULE DEBUG_MODULE_GUI
 
-#include "glgui_.h"
+#include "glgui_button.h"
 
 using namespace std;
@@ -23,5 +23,5 @@
  * standard constructor
 */
-GLGui::GLGui ()
+GLGuiButton::GLGuiButton ()
 {
   this->init();
@@ -33,5 +33,5 @@
  * standard deconstructor
 */
-GLGui::~GLGui()
+GLGuiButton::~GLGuiButton()
 {
 
@@ -41,14 +41,14 @@
  * initializes the GUI-element
  */
-GLGui::init()
+void GLGuiButton::init()
 {
-  this->setClassID(CL_GLGUI_, "GLGui");
+  this->setClassID(CL_GLGUI_BUTTON, "GLGuiButton");
 
 }
 
 /**
- * draws the GLGui
+ * draws the GLGuiButton
  */
-void GLGui::draw()
+void GLGuiButton::draw()
 {
 
Index: trunk/src/lib/gui/gl_gui/glgui_button.h
===================================================================
--- trunk/src/lib/gui/gl_gui/glgui_button.h	(revision 5362)
+++ trunk/src/lib/gui/gl_gui/glgui_button.h	(revision 5363)
@@ -1,12 +1,23 @@
 /*!
- * @file glgui_.h
- * The gl_ widget of th openglGUI
+ * @file glgui_button.h
+ * The gl_BUTTON widget of th openglGUI
  *
  */
 
-#ifndef _GLGUI__H
-#define _GLGUI__H
+#ifndef _GLGUI_BUTTON_H
+#define _GLGUI_BUTTON_H
 
-#include "base_object.h"
+#include "glgui_widget.h"
+
+typedef enum
+{
+  GLGui_Button_Active,
+  GLGui_Button_Inactive,
+  GLGui_Button_Pressed,
+  GLGui_Button_Released,
+  GLGui_Button_Activating,
+  GLGui_Button_Deactivating,
+
+} GLGui_ButtonState;
 
 // FORWARD DECLARATION
@@ -16,9 +27,9 @@
  *
  */
-class GLGui : public GLGui {
+class GLGuiButton : public GLGuiWidget {
 
  public:
-  GLGui();
-  virtual ~GLGui();
+  GLGuiButton();
+  virtual ~GLGuiButton();
 
   void init();
@@ -27,4 +38,6 @@
 
  private:
+  char*                text;
+  GLGui_ButtonState    state;
 
 };
Index: trunk/src/lib/gui/gl_gui/glgui_widget.cc
===================================================================
--- trunk/src/lib/gui/gl_gui/glgui_widget.cc	(revision 5362)
+++ trunk/src/lib/gui/gl_gui/glgui_widget.cc	(revision 5363)
@@ -47,19 +47,2 @@
 
 }
-
-
-/**
- * draws the GLGuiWidget
- */
-void GLGuiWidget::draw()
-{
-
-}
-
-/**
- * updates a GLGuiWidget
- */
-void GLGuiWidget::update()
-{
-
-}
Index: trunk/src/lib/gui/gl_gui/glgui_widget.h
===================================================================
--- trunk/src/lib/gui/gl_gui/glgui_widget.h	(revision 5362)
+++ trunk/src/lib/gui/gl_gui/glgui_widget.h	(revision 5363)
@@ -23,7 +23,6 @@
   void init();
 
-  virtual void draw();
-  virtual void update();
-
+  virtual void draw() = 0;
+  virtual void update() = 0;
 
  private:
Index: trunk/src/world_entities/npc2.cc
===================================================================
--- trunk/src/world_entities/npc2.cc	(revision 5362)
+++ trunk/src/world_entities/npc2.cc	(revision 5363)
@@ -45,5 +45,6 @@
 NPC2::~NPC2 ()
 {
-  Shader::unload(this->shader);
+  if (this->shader)
+    Shader::unload(this->shader);
   gluDeleteQuadric(this->obj);
 }
