diff --git a/modules/gui/src/tools/tool_option.cc b/modules/gui/src/tools/tool_option.cc
index 970c8f7797627b550cdea84f80fed4213a07174f..8f54a6c060d0390dab39f6d9c2c4a35230571d6b 100644
--- a/modules/gui/src/tools/tool_option.cc
+++ b/modules/gui/src/tools/tool_option.cc
@@ -59,5 +59,18 @@ void ToolOptionEnum::Add(const String& text, int tag)
   tuples_.back().tag=tag;
 }
 
+ToolOptionButton::ToolOptionButton(const String& key,
+                                   const String& verbose_name,
+                                   QObject* receiver,
+                                   const char *slot_method):
+    ToolOption(key, verbose_name, ToolOption::BUTTON), slot_method_(slot_method), receiver_(receiver)
+{
+
+}
+
+void ToolOptionButton::RunMe()
+{
+  std::cout << "TOOL RUN ME RUN ME" << std::endl;
+}
 
 }}
diff --git a/modules/gui/src/tools/tool_option.hh b/modules/gui/src/tools/tool_option.hh
index 700cac3c6ad846a70772b4d8f3266e05c64bcb74..ac035559eabcdd6fe2b5c95ddb898b3e92c89348 100644
--- a/modules/gui/src/tools/tool_option.hh
+++ b/modules/gui/src/tools/tool_option.hh
@@ -25,6 +25,7 @@
 
 #include <limits>
 #include <vector>
+#include <iostream>
 
 
 #include <ost/gui/module_config.hh>
@@ -37,7 +38,7 @@ class DLLEXPORT_OST_GUI ToolOption : public QObject {
   Q_OBJECT
 public:
   typedef enum {
-    INT, FLOAT, ENUM
+    INT, FLOAT, ENUM, BUTTON
   } Type;  
 protected:
   ToolOption(const String& key, const String& verbose_name, Type type);
@@ -116,11 +117,29 @@ public:
   ConstIterator Begin() const { return tuples_.begin(); }
   ConstIterator End() const { return tuples_.end(); }  
   size_t Size() { return tuples_.size(); }
+
 private:  
   std::vector<Tuple>  tuples_;
   int                 index_;
 };
 
+class DLLEXPORT_OST_GUI ToolOptionButton : public ToolOption {
+  Q_OBJECT
+public:
+  ToolOptionButton(const String& key,
+                   const String& verbose_name,
+                   QObject* receiver,
+                   const char *slot_method);
+  const char* GetSlotMethod() const { return slot_method_; }
+  QObject* GetReceiver() const { return receiver_; }
+public slots:
+  void RunMe();
+private:
+  const char *slot_method_;
+  QObject* receiver_;
+};
+
+
 typedef std::vector<ToolOption*> ToolOptionList;
 
 }}
diff --git a/modules/gui/src/tools/tool_options_widget.cc b/modules/gui/src/tools/tool_options_widget.cc
index 58c175493c4a827125936191e09b4aeeae15f319..8798685556a4f455140cc32780e8456911cb2dbb 100644
--- a/modules/gui/src/tools/tool_options_widget.cc
+++ b/modules/gui/src/tools/tool_options_widget.cc
@@ -26,6 +26,7 @@
 #include <QIntValidator>
 #include <QDoubleValidator>
 #include <QSpacerItem>
+#include <QPushButton>
 
 namespace ost { namespace gui {
 
@@ -74,6 +75,14 @@ QWidget* ToolOptionsWidget::MakeFloatWidget(ToolOptionFloat* opts)
   return line;
 }
 
+QWidget* ToolOptionsWidget::MakeButtonWidget(ToolOptionButton* opts)
+{
+  QPushButton* button=new QPushButton();
+  button->setText(QString(opts->GetVerboseName().c_str()));
+  connect(button, SIGNAL(released()), opts->GetReceiver(), opts->GetSlotMethod());
+  return button;
+}
+
 void ToolOptionsWidget::Populate()
 {
   QGridLayout* grid=new QGridLayout(this);
@@ -105,6 +114,9 @@ void ToolOptionsWidget::Populate()
         case ToolOption::ENUM:
           widget=MakeEnumWidget(dynamic_cast<ToolOptionEnum*>(opt));
           break;
+        case ToolOption::BUTTON:
+          widget=MakeButtonWidget(dynamic_cast<ToolOptionButton*>(opt));
+          break;
       }
 #if defined(__APPLE__)
       opt_label->setAttribute(Qt::WA_MacSmallSize, true);
diff --git a/modules/gui/src/tools/tool_options_widget.hh b/modules/gui/src/tools/tool_options_widget.hh
index 42cc48cd1f0b216fe51c1e94e1e24f33477f1f77..24e309f566d54fe2c6ffc7ff317f197e8a0dce50 100644
--- a/modules/gui/src/tools/tool_options_widget.hh
+++ b/modules/gui/src/tools/tool_options_widget.hh
@@ -87,6 +87,7 @@ private:
   QWidget* MakeIntWidget(ToolOptionInt* opts);
   QWidget* MakeEnumWidget(ToolOptionEnum* opts);  
   QWidget* MakeFloatWidget(ToolOptionFloat* opts);  
+  QWidget* MakeButtonWidget(ToolOptionButton* opts);
   ToolOptions* options_;
 };