diff --git FL/Enumerations.H FL/Enumerations.H
index 2a1908f..3f029e9 100644
--- FL/Enumerations.H
+++ FL/Enumerations.H
@@ -650,6 +650,18 @@ enum Fl_Boxtype { // boxtypes (if you change these you must also change fl_boxty
   _FL_GLEAM_THIN_DOWN_BOX,	///< gleam version of FL_THIN_DOWN_BOX, use FL_GLEAM_THIN_DOWN_BOX
   _FL_GLEAM_ROUND_UP_BOX,	///< gleam version of FL_ROUND_UP_BOX, use FL_GLEAM_ROUND_UP_BOX
   _FL_GLEAM_ROUND_DOWN_BOX,	///< gleam version of FL_ROUND_DOWN_BOX, use FL_GLEAM_ROUND_DOWN_BOX
+  _FL_OXY_UP_BOX,		///< oxy version of FL_UP_BOX
+  _FL_OXY_DOWN_BOX,		///< oxy version of FL_DOWN_BOX
+  _FL_OXY_UP_FRAME,		///< oxy version of FL_UP_FRAME
+  _FL_OXY_DOWN_FRAME,		///< oxy version of FL_DOWN_FRAME
+  _FL_OXY_THIN_UP_BOX,		///< oxy version of FL_THIN_UP_BOX
+  _FL_OXY_THIN_DOWN_BOX,	///< oxy version of FL_THIN_DOWN_BOX
+  _FL_OXY_THIN_UP_FRAME,	///< oxy version of FL_THIN_UP_FRAME
+  _FL_OXY_THIN_DOWN_FRAME,	///< oxy version of FL_THIN_DOWN_FRAME
+  _FL_OXY_ROUND_UP_BOX,		///< oxy version of FL_ROUND_UP_BOX
+  _FL_OXY_ROUND_DOWN_BOX,	///< oxy version of FL_ROUND_DOWN_BOX
+  _FL_OXY_BUTTON_UP_BOX,	///< FL_OXY_BUTTON_UP_BOX (new boxtype ?)
+  _FL_OXY_BUTTON_DOWN_BOX,	///< FL_OXY_BUTTON_DOWN_BOX (new boxtype ?)
   FL_FREE_BOXTYPE		///< the first free box type for creation of new box types
 };
 extern FL_EXPORT Fl_Boxtype fl_define_FL_ROUND_UP_BOX();
@@ -706,6 +718,20 @@ extern FL_EXPORT Fl_Boxtype fl_define_FL_GLEAM_UP_BOX();
 #define FL_GLEAM_ROUND_UP_BOX (Fl_Boxtype)(fl_define_FL_GLEAM_UP_BOX()+6)
 #define FL_GLEAM_ROUND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GLEAM_UP_BOX()+7)
 
+extern FL_EXPORT Fl_Boxtype fl_define_FL_OXY_UP_BOX();
+#define FL_OXY_UP_BOX fl_define_FL_OXY_UP_BOX()
+#define FL_OXY_DOWN_BOX (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+1)
+#define FL_OXY_UP_FRAME (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+2)
+#define FL_OXY_DOWN_FRAME (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+3)
+#define FL_OXY_THIN_UP_BOX (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+4)
+#define FL_OXY_THIN_DOWN_BOX (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+5)
+#define FL_OXY_THIN_UP_FRAME (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+6)
+#define FL_OXY_THIN_DOWN_FRAME (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+7)
+#define FL_OXY_ROUND_UP_BOX (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+8)
+#define FL_OXY_ROUND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+9)
+#define FL_OXY_BUTTON_UP_BOX (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+10)
+#define FL_OXY_BUTTON_DOWN_BOX (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+11)
+
 // conversions of box types to other boxtypes:
 /**
   Get the filled version of a frame.
@@ -1225,6 +1251,55 @@ enum Fl_Damage {
 #    define inactive	fl_inactive
 #  endif // FLTK_1_0_COMPAT
 
+/** Arrow types define the type of arrow drawing function.
+
+  FLTK Schemes can draw several graphical elements in their particular way.
+  One of these elements is an arrow type that can be in different GUI
+  elements like scrollbars, choice buttons, and FLTK's Fl_Return_Button.
+
+  \note	This enum is not yet stable (as of FLTK 1.4.0) and may be changed
+    without notice as necessary.
+
+  \since 1.4.0
+*/
+
+enum Fl_Arrow_Type {
+  FL_ARROW_SINGLE = 0x01, ///< Single arrow, e.g. in Fl_Scrollbar
+  FL_ARROW_DOUBLE = 0x02, ///< Double arrow, e.g. in Fl_Counter
+  FL_ARROW_CHOICE = 0x03, ///< Dropdown box, e.g. in Fl_Choice
+  FL_ARROW_RETURN = 0x04  ///< Return arrow, e.g. in Fl_Return_Button
+};
+
+/** Fl_Orientation describes the orientation of a GUI element.
+
+  FLTK Schemes can draw several graphical elements, for instance arrows,
+  pointing at different directions. This enum defines the direction
+  to use for drawing a particular GUI element.
+
+  The definition of this enum was chosen such that the enum value can
+  be multiplied with 90 to get a rotation angle in degrees starting
+  at the horizontal axis (0 = right, 1 = up, ...) that can be used
+  with fl_rotate(). Note: angle is counter-clockwise in degrees.
+
+  The 'unspecified' value \b FL_ORIENT_NONE shall be used for elements
+  that would usually not be rotated, like the return arrow of the
+  Fl_Return_Button. It can still be used as an angle though since it is
+  the same value as \p FL_ORIENT_RIGHT (0 degrees).
+
+  \note	This enum is not yet stable (as of FLTK 1.4.0) and may be changed
+    without notice as necessary.
+
+  \since 1.4.0
+*/
+
+enum Fl_Orientation {
+  FL_ORIENT_NONE  = 0x00, ///< GUI element direction is unspecified
+  FL_ORIENT_RIGHT = 0x00, ///< GUI element pointing right
+  FL_ORIENT_UP    = 0x01, ///< GUI element pointing up
+  FL_ORIENT_LEFT  = 0x02, ///< GUI element pointing left
+  FL_ORIENT_DOWN  = 0x03  ///< GUI element pointing down
+};
+
 #endif
 
 //
diff --git FL/fl_draw.H FL/fl_draw.H
index 11a7f3b..c97d8aa 100644
--- FL/fl_draw.H
+++ FL/fl_draw.H
@@ -24,8 +24,9 @@
 #ifndef fl_draw_H
 #define fl_draw_H
 
-#include <FL/Enumerations.H>  // for the color names
-#include <FL/Fl_Graphics_Driver.H>     // for fl_graphics_driver + Fl_Region
+#include <FL/Enumerations.H>        // for the color names
+#include <FL/Fl_Graphics_Driver.H>  // for fl_graphics_driver + Fl_Region
+#include <FL/Fl_Rect.H>
 
 // Image class...
 class Fl_Image;
@@ -696,6 +697,10 @@ FL_EXPORT void fl_frame(const char* s, int x, int y, int w, int h);
 FL_EXPORT void fl_frame2(const char* s, int x, int y, int w, int h);
 FL_EXPORT void fl_draw_box(Fl_Boxtype, int x, int y, int w, int h, Fl_Color);
 
+// arrows:
+FL_EXPORT void fl_draw_arrow(Fl_Rect bb, Fl_Arrow_Type t, Fl_Orientation o,
+			     bool ac, Fl_Color c, Fl_Color hc);
+
 // images:
 
 /**
diff --git fluid/Fl_Widget_Type.cxx fluid/Fl_Widget_Type.cxx
index 5552a25..e961e93 100644
--- fluid/Fl_Widget_Type.cxx
+++ fluid/Fl_Widget_Type.cxx
@@ -690,6 +690,14 @@ Fl_Menu_Item boxmenu[] = {
 {"GLEAM_THIN_DOWN_BOX",0,0,(void *)FL_GLEAM_THIN_DOWN_BOX},
 {"GLEAM_ROUND_UP_BOX",0,0,(void *)FL_GLEAM_ROUND_UP_BOX},
 {"GLEAM_ROUND_DOWN_BOX",0,0,(void *)FL_GLEAM_ROUND_DOWN_BOX},
+{"OXY_UP_BOX",0,0,(void *)FL_OXY_UP_BOX},
+{"OXY_DOWN_BOX",0,0,(void *)FL_OXY_DOWN_BOX},
+{"OXY_THIN_UP_BOX",0,0,(void *)FL_OXY_THIN_UP_BOX},
+{"OXY_THIN_DOWN_BOX",0,0,(void *)FL_OXY_THIN_DOWN_BOX},
+{"OXY_ROUND_UP_BOX",0,0,(void *)FL_OXY_ROUND_UP_BOX},
+{"OXY_ROUND_DOWN_BOX",0,0,(void *)FL_OXY_ROUND_DOWN_BOX},
+{"OXY_BUTTON_UP_BOX",0,0,(void *)FL_OXY_BUTTON_UP_BOX},
+{"OXY_BUTTON_DOWN_BOX",0,0,(void *)FL_OXY_BUTTON_DOWN_BOX},
 {0},
 {"frames",0,0,0,FL_SUBMENU},
 {"UP_FRAME",0,0,(void *)FL_UP_FRAME},
@@ -710,6 +718,10 @@ Fl_Menu_Item boxmenu[] = {
 {"GTK_THIN_DOWN_FRAME",0,0,(void *)FL_GTK_THIN_DOWN_FRAME},
 {"GLEAM_UP_FRAME",0,0,(void *)FL_GLEAM_UP_FRAME},
 {"GLEAM_DOWN_FRAME",0,0,(void *)FL_GLEAM_DOWN_FRAME},
+{"OXY_UP_FRAME",0,0,(void *)FL_OXY_UP_FRAME},
+{"OXY_DOWN_FRAME",0,0,(void *)FL_OXY_DOWN_FRAME},
+{"OXY_THIN_UP_FRAME",0,0,(void *)FL_OXY_THIN_UP_FRAME},
+{"OXY_THIN_DOWN_FRAME",0,0,(void *)FL_OXY_THIN_DOWN_FRAME},
 {0},
 {0}};
 
diff --git fluid/alignment_panel.cxx fluid/alignment_panel.cxx
index 1b31227..8eac6a9 100644
--- fluid/alignment_panel.cxx
+++ fluid/alignment_panel.cxx
@@ -154,6 +154,7 @@ Fl_Menu_Item menu_scheme_choice[] = {
  {"Plastic", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
  {"GTK+", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
  {"Gleam", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
+ {"Oxy", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
  {0,0,0,0,0,0,0,0,0}
 };
 
diff --git fluid/alignment_panel.fl fluid/alignment_panel.fl
index 3bc3197..22a1edd 100644
--- fluid/alignment_panel.fl
+++ fluid/alignment_panel.fl
@@ -199,6 +199,10 @@ Function {make_settings_window()} {} {
         label Gleam
         xywh {20 20 35 25}
       }
+      MenuItem {} {
+        label Oxy
+        xywh {30 30 35 25}
+      }
     }
     Fl_Group {} {open
       xywh {20 43 330 161} labelfont 1 align 0
diff --git fluid/fluid.cxx fluid/fluid.cxx
index e13a171..daeb2ae 100644
--- fluid/fluid.cxx
+++ fluid/fluid.cxx
@@ -1156,6 +1156,9 @@ void scheme_cb(Fl_Choice *, void *) {
     case 4 : // Gleam
       Fl::scheme("gleam");
       break;
+    case 5 : // Oxy
+      Fl::scheme("oxy");
+      break;
   }
 
   fluid_prefs.set("scheme", scheme_choice->value());
diff --git src/CMakeLists.txt src/CMakeLists.txt
index 38fed7b..5ef0a53 100644
--- src/CMakeLists.txt
+++ src/CMakeLists.txt
@@ -145,6 +145,7 @@ set (CPPFILES
   fl_oval_box.cxx
   fl_overlay.cxx
   fl_overlay_visual.cxx
+  fl_oxy.cxx
   fl_plastic.cxx
   fl_read_image.cxx
   fl_rect.cxx
diff --git src/Fl_Choice.cxx src/Fl_Choice.cxx
index 4bf4e7d..b561ecc 100644
--- src/Fl_Choice.cxx
+++ src/Fl_Choice.cxx
@@ -57,6 +57,18 @@ void Fl_Choice::draw() {
       // Show larger up/down arrows...
       fl_polygon(x1, y1 + 3, x1 + w1, y1 + w1 + 3, x1 + 2 * w1, y1 + 3);
       fl_polygon(x1, y1 + 1, x1 + w1, y1 - w1 + 1, x1 + 2 * w1, y1 + 1);
+    } else if (Fl::is_scheme("oxy")) {
+      // Show "oxy" arrows with a divider...
+      Fl_Rect bb(X, Y, W, H);
+      // draw down arrow
+      fl_draw_arrow(bb, FL_ARROW_CHOICE, FL_ORIENT_DOWN, active_r(), color(), FL_BLACK);
+      // draw the divider
+      Fl_Color hlcol = fl_color_average(color(), FL_BLACK, 0.88);
+      fl_color(active_r()?hlcol:fl_inactive(hlcol));
+      fl_yxline(X, y()+dy, y()+h()-dx-2);
+      hlcol = fl_lighter(color());
+      fl_color(active_r()?hlcol:fl_inactive(hlcol));
+      fl_yxline(X+1, y()+dy, y()+h()-dx-2);
     } else {
       // Show smaller up/down arrows with a divider...
       x1 = x() + w() - 13 - dx;
diff --git src/Fl_Counter.cxx src/Fl_Counter.cxx
index f27743d..cff1692 100644
--- src/Fl_Counter.cxx
+++ src/Fl_Counter.cxx
@@ -66,15 +66,34 @@ void Fl_Counter::draw() {
 
   if (type() == FL_NORMAL_COUNTER) {
     draw_box(boxtype[1], xx[1], y(), ww[1], h(), color());
-    fl_draw_symbol("@-4<<", xx[1], y(), ww[1], h(), selcolor);
+    if (Fl::is_scheme("oxy"))
+      fl_draw_arrow(Fl_Rect(xx[1],y(),ww[1],h()), FL_ARROW_DOUBLE, FL_ORIENT_LEFT,
+		    active_r(), color(), selcolor);
+    else
+      fl_draw_symbol("@-4<<", xx[1], y(), ww[1], h(), selcolor);
   }
+
   draw_box(boxtype[2], xx[2], y(), ww[2], h(), color());
-  fl_draw_symbol("@-4<",  xx[2], y(), ww[2], h(), selcolor);
+  if (Fl::is_scheme("oxy"))
+    fl_draw_arrow(Fl_Rect(xx[2],y(),ww[2],h()), FL_ARROW_SINGLE, FL_ORIENT_LEFT,
+		  active_r(), color(), selcolor);
+  else
+    fl_draw_symbol("@-4<",  xx[2], y(), ww[2], h(), selcolor);
+
   draw_box(boxtype[3], xx[3], y(), ww[3], h(), color());
-  fl_draw_symbol("@-4>",  xx[3], y(), ww[3], h(), selcolor);
+  if (Fl::is_scheme("oxy"))
+    fl_draw_arrow(Fl_Rect(xx[3],y(),ww[3],h()), FL_ARROW_SINGLE, FL_ORIENT_RIGHT,
+		  active_r(), color(), selcolor);
+  else
+    fl_draw_symbol("@-4>",  xx[3], y(), ww[3], h(), selcolor);
+
   if (type() == FL_NORMAL_COUNTER) {
     draw_box(boxtype[4], xx[4], y(), ww[4], h(), color());
-    fl_draw_symbol("@-4>>", xx[4], y(), ww[4], h(), selcolor);
+    if (Fl::is_scheme("oxy"))
+      fl_draw_arrow(Fl_Rect(xx[4],y(),ww[4],h()), FL_ARROW_DOUBLE, FL_ORIENT_RIGHT,
+		    active_r(), color(), selcolor);
+    else
+      fl_draw_symbol("@-4>>", xx[4], y(), ww[4], h(), selcolor);
   }
 }
 
diff --git src/Fl_Menu.cxx src/Fl_Menu.cxx
index a943a6b..cf3bb63 100644
--- src/Fl_Menu.cxx
+++ src/Fl_Menu.cxx
@@ -472,7 +472,16 @@ void menuwindow::drawentry(const Fl_Menu_Item* m, int n, int eraseit) {
     int sz = (hh-7)&-2;
     int y1 = yy+(hh-sz)/2;
     int x1 = xx+ww-sz-3;
-    fl_polygon(x1+2, y1, x1+2, y1+sz, x1+sz/2+2, y1+sz/2);
+    // draw arrows for the oxy theme
+    if (Fl::is_scheme("oxy")) {
+      x1 += (sz/2-BW*2-1);
+      y1 = yy+hh/2-4; // 4 is half of arrow height
+      Fl_Rect bb = Fl_Rect(xx + ww - hh, yy, hh, hh);
+      fl_draw_arrow(bb, FL_ARROW_SINGLE, FL_ORIENT_RIGHT,
+		    active_r(), color(), (n==selected) ? selection_color() : FL_BLACK);
+    } else {
+      fl_polygon(x1+2, y1, x1+2, y1+sz, x1+sz/2+2, y1+sz/2);
+    }
   } else if (m->shortcut_) {
     Fl_Font f = m->labelsize_ || m->labelfont_ ? (Fl_Font)m->labelfont_ :
                     button ? button->textfont() : FL_HELVETICA;
diff --git src/Fl_Menu_Button.cxx src/Fl_Menu_Button.cxx
index 74bf624..a3d76dc 100644
--- src/Fl_Menu_Button.cxx
+++ src/Fl_Menu_Button.cxx
@@ -3,7 +3,7 @@
 //
 // Menu button widget for the Fast Light Tool Kit (FLTK).
 //
-// Copyright 1998-2010 by Bill Spitzak and others.
+// Copyright 1998-2018 by Bill Spitzak and others.
 //
 // This library is free software. Distribution and use rights are outlined in
 // the file "COPYING" which should have been included with this file.  If this
@@ -33,10 +33,15 @@ void Fl_Menu_Button::draw() {
   draw_label(x()+Fl::box_dx(box()), y(), X-x()+2, h());
   if (Fl::focus() == this) draw_focus();
   // ** if (box() == FL_FLAT_BOX) return; // for XForms compatibility
-  fl_color(active_r() ? FL_DARK3 : fl_inactive(FL_DARK3));
-  fl_line(X+H/2, Y+H, X, Y, X+H, Y);
-  fl_color(active_r() ? FL_LIGHT3 : fl_inactive(FL_LIGHT3));
-  fl_line(X+H, Y, X+H/2, Y+H);
+  if (Fl::is_scheme("oxy")) {
+    Fl_Rect bb(X, y()+1, h()-2, h()-2);
+    fl_draw_arrow(bb, FL_ARROW_CHOICE, FL_ORIENT_NONE, active_r(), color(), FL_BLACK);
+  } else {
+    fl_color(active_r() ? FL_DARK3 : fl_inactive(FL_DARK3));
+    fl_line(X+H/2, Y+H, X, Y, X+H, Y);
+    fl_color(active_r() ? FL_LIGHT3 : fl_inactive(FL_LIGHT3));
+    fl_line(X+H, Y, X+H/2, Y+H);
+  }
 }
 
 
@@ -102,7 +107,7 @@ int Fl_Menu_Button::handle(int e) {
 /**
   Creates a new Fl_Menu_Button widget using the given position,
   size, and label string. The default boxtype is FL_UP_BOX.
-  <P>The constructor sets menu() to NULL.  See 
+  <P>The constructor sets menu() to NULL.  See
   Fl_Menu_ for the methods to set or change the menu.
 */
 Fl_Menu_Button::Fl_Menu_Button(int X,int Y,int W,int H,const char *l)
diff --git src/Fl_Scrollbar.cxx src/Fl_Scrollbar.cxx
index a659e8e..2df9c38 100644
--- src/Fl_Scrollbar.cxx
+++ src/Fl_Scrollbar.cxx
@@ -204,7 +204,10 @@ void Fl_Scrollbar::draw() {
   int W = w()-Fl::box_dw(box());
   int H = h()-Fl::box_dh(box());
   if (horizontal()) {
-    if (W < 3*H) {Fl_Slider::draw(X,Y,W,H); return;}
+    if (W < 3*H) {
+      Fl_Slider::draw(X,Y,W,H);
+      return;
+    }
     Fl_Slider::draw(X+H,Y,W-2*H,H);
     if (damage()&FL_DAMAGE_ALL) {
       draw_box((pushed_==1) ? fl_down(slider()) : slider(),
@@ -222,6 +225,13 @@ void Fl_Scrollbar::draw() {
 	fl_polygon(x1, yy1+w1, x1+w1, yy1+2*w1, x1+w1-1, yy1+w1, x1+w1, yy1);
 	x1 += (W-H);
 	fl_polygon(x1, yy1, x1+1, yy1+w1, x1, yy1+2*w1, x1+w1, yy1+w1);
+      } else if (Fl::is_scheme("oxy")) {
+	Fl_Rect bb(X, Y, H, H);
+	fl_draw_arrow(bb, FL_ARROW_SINGLE, FL_ORIENT_LEFT, // left arrow
+		      active_r(), color(), FL_BLACK);
+	bb.x(X+W-H);
+	fl_draw_arrow(bb, FL_ARROW_SINGLE, FL_ORIENT_RIGHT, // right arrow
+		      active_r(), color(), FL_BLACK);
       } else {
 	fl_polygon(x1, yy1+w1, x1+w1, yy1+2*w1, x1+w1, yy1);
 	x1 += (W-H);
@@ -229,7 +239,10 @@ void Fl_Scrollbar::draw() {
       }
     }
   } else { // vertical
-    if (H < 3*W) {Fl_Slider::draw(X,Y,W,H); return;}
+    if (H < 3*W) {
+      Fl_Slider::draw(X,Y,W,H);
+      return;
+    }
     Fl_Slider::draw(X,Y+W,W,H-2*W);
     if (damage()&FL_DAMAGE_ALL) {
       draw_box((pushed_==1) ? fl_down(slider()) : slider(),
@@ -248,6 +261,13 @@ void Fl_Scrollbar::draw() {
 	yy1 += H-W;
 	fl_polygon(x1, yy1, x1+w1, yy1+1, x1+w1, yy1+w1);
 	fl_polygon(x1+w1, yy1+1, x1+2*w1, yy1, x1+w1, yy1+w1);
+      } else if (Fl::is_scheme("oxy")) {
+	Fl_Rect bb(X, Y, W, W);
+	fl_draw_arrow(bb, FL_ARROW_SINGLE, FL_ORIENT_UP, // up arrow
+		      active_r(), color(), FL_BLACK);
+	bb.y(Y+H-W);
+	fl_draw_arrow(bb, FL_ARROW_SINGLE, FL_ORIENT_DOWN, // down arrow
+		      active_r(), color(), FL_BLACK);
       } else {
 	fl_polygon(x1, yy1+w1, x1+2*w1, yy1+w1, x1+w1, yy1);
 	yy1 += H-W;
diff --git src/Fl_Tree_Prefs.cxx src/Fl_Tree_Prefs.cxx
index 060d46d..ebe7b6c 100644
--- src/Fl_Tree_Prefs.cxx
+++ src/Fl_Tree_Prefs.cxx
@@ -213,6 +213,8 @@ Fl_Tree_Prefs::Fl_Tree_Prefs() {
     _selectbox = _FL_GTK_THIN_UP_BOX;
   } else if (Fl::is_scheme("plastic")) {
     _selectbox = _FL_PLASTIC_THIN_UP_BOX;
+  } else if (Fl::is_scheme("oxy")) {
+    _selectbox = _FL_OXY_THIN_UP_BOX;
   }
 }
 
diff --git src/Fl_get_system_colors.cxx src/Fl_get_system_colors.cxx
index bd36c9a..b478cbb 100644
--- src/Fl_get_system_colors.cxx
+++ src/Fl_get_system_colors.cxx
@@ -150,6 +150,8 @@ static Fl_Pixmap	tile(tile_xpm);
         - "gleam" - This scheme is inspired by the Clearlooks Glossy scheme.
                     (Colin Jones and Edmanuel Torres).
 
+        - "oxy" - Subset of Dmitrij K's oxy scheme added by Laura Michaels
+
     Uppercase scheme names are equivalent, but the stored scheme name will
     always be lowercase and Fl::scheme() will return this lowercase name.
 
@@ -168,6 +170,7 @@ int Fl::scheme(const char *s) {
     else if (!fl_ascii_strcasecmp(s, "gtk+")) s = strdup("gtk+");
     else if (!fl_ascii_strcasecmp(s, "plastic")) s = strdup("plastic");
     else if (!fl_ascii_strcasecmp(s, "gleam")) s = strdup("gleam");
+    else if (!fl_ascii_strcasecmp(s, "oxy")) s = strdup("oxy");
     else s = 0;
   }
   if (scheme_) free((void*)scheme_);
@@ -188,7 +191,7 @@ int Fl::scheme(const char *s) {
 int Fl::reload_scheme() {
   Fl_Window *win;
 
-  if (scheme_ && !fl_ascii_strcasecmp(scheme_, "plastic")) {
+  if (Fl::is_scheme("plastic")) {
     // Update the tile image to match the background color...
     uchar r, g, b;
     int nr, ng, nb;
@@ -234,7 +237,7 @@ int Fl::reload_scheme() {
 
     // Use standard size scrollbars...
     Fl::scrollbar_size(16);
-  } else if (scheme_ && !fl_ascii_strcasecmp(scheme_, "gtk+")) {
+  } else if (Fl::is_scheme("gtk+")) {
     // Use a GTK+ inspired look-n-feel...
     if (scheme_bg_) {
       delete scheme_bg_;
@@ -255,7 +258,7 @@ int Fl::reload_scheme() {
 
     // Use slightly thinner scrollbars...
     Fl::scrollbar_size(15);
-  } else if (scheme_ && !fl_ascii_strcasecmp(scheme_, "gleam")) {
+  } else if (Fl::is_scheme("gleam")) {
     // Use a GTK+ inspired look-n-feel...
     if (scheme_bg_) {
       delete scheme_bg_;
@@ -276,6 +279,27 @@ int Fl::reload_scheme() {
 
     // Use slightly thinner scrollbars...
     Fl::scrollbar_size(15);
+  } else if (Fl::is_scheme("oxy")) {
+    // Oxy scheme
+    if (scheme_bg_) {
+      delete scheme_bg_;
+      scheme_bg_ = (Fl_Image *)0;
+    }
+
+    set_boxtype(FL_UP_FRAME,        FL_OXY_UP_FRAME);
+    set_boxtype(FL_DOWN_FRAME,      FL_OXY_DOWN_FRAME);
+    set_boxtype(FL_THIN_UP_FRAME,   FL_OXY_THIN_UP_FRAME);
+    set_boxtype(FL_THIN_DOWN_FRAME, FL_OXY_THIN_DOWN_FRAME);
+
+    set_boxtype(FL_UP_BOX,          FL_OXY_UP_BOX);
+    set_boxtype(FL_DOWN_BOX,        FL_OXY_DOWN_BOX);
+    set_boxtype(FL_THIN_UP_BOX,     FL_OXY_THIN_UP_BOX);
+    set_boxtype(FL_THIN_DOWN_BOX,   FL_OXY_THIN_DOWN_BOX);
+    set_boxtype(_FL_ROUND_UP_BOX,   FL_OXY_ROUND_UP_BOX);
+    set_boxtype(_FL_ROUND_DOWN_BOX, FL_OXY_ROUND_DOWN_BOX);
+
+    // Use slightly thinner scrollbars...
+    Fl::scrollbar_size(15);
   } else {
     // Use the standard FLTK look-n-feel...
     if (scheme_bg_) {
diff --git src/Makefile src/Makefile
index 96a769f..fef01d0 100644
--- src/Makefile
+++ src/Makefile
@@ -149,6 +149,7 @@ CPPFILES = \
 	fl_oval_box.cxx \
 	fl_overlay.cxx \
 	fl_overlay_visual.cxx \
+	fl_oxy.cxx \
 	fl_plastic.cxx \
 	fl_read_image.cxx \
 	fl_rect.cxx \
diff --git src/fl_boxtype.cxx src/fl_boxtype.cxx
index 449c01c..44dbd64 100644
--- src/fl_boxtype.cxx
+++ src/fl_boxtype.cxx
@@ -343,6 +343,18 @@ static struct {
   {fl_down_box,		2,2,4,4,0}, // _FL_GLEAM_THIN_DOWN_BOX
   {fl_up_box,	       	2,2,4,4,0}, // _FL_GLEAM_ROUND_UP_BOX
   {fl_down_box,		2,2,4,4,0}, // _FL_GLEAM_ROUND_DOWN_BOX
+  {fl_up_box,		2,2,4,4,0}, // _FL_OXY_UP_BOX,
+  {fl_down_box,		2,2,4,4,0}, // _FL_OXY_DOWN_BOX,
+  {fl_up_frame,		2,2,4,4,0}, // _FL_OXY_UP_FRAME,
+  {fl_down_frame,	2,2,4,4,0}, // _FL_OXY_DOWN_FRAME,
+  {fl_thin_up_box,	1,1,2,2,0}, // _FL_OXY_THIN_UP_BOX,
+  {fl_thin_down_box,	1,1,2,2,0}, // _FL_OXY_THIN_DOWN_BOX,
+  {fl_thin_up_frame,	1,1,2,2,0}, // _FL_OXY_THIN_UP_FRAME,
+  {fl_thin_down_frame,	1,1,2,2,0}, // _FL_OXY_THIN_DOWN_FRAME,
+  {fl_up_box,		4,4,8,8,0}, // _FL_OXY_ROUND_UP_BOX,
+  {fl_down_box,		4,4,8,8,0}, // _FL_OXY_ROUND_DOWN_BOX,
+  {fl_up_box,		2,2,4,4,0}, // _FL_OXY_BUTTON_UP_BOX,
+  {fl_down_box,		2,2,4,4,0}, // _FL_OXY_BUTTON_DOWN_BOX,
   {fl_up_box,		3,3,6,6,0}, // FL_FREE_BOX+0
   {fl_down_box,		3,3,6,6,0}, // FL_FREE_BOX+1
   {fl_up_box,		3,3,6,6,0}, // FL_FREE_BOX+2
diff --git src/fl_draw.cxx src/fl_draw.cxx
index 137dfaf..a9c76fa 100644
--- src/fl_draw.cxx
+++ src/fl_draw.cxx
@@ -31,6 +31,7 @@
 #include "flstring.h"
 #include <ctype.h>
 #include <math.h>
+#include "fl_oxy.h"
 
 
 char fl_draw_shortcut;	// set by fl_labeltypes.cxx
@@ -444,6 +445,18 @@ int fl_height(int font, int size) {
     return(height);
 }
 
+void fl_draw_arrow(Fl_Rect bb, Fl_Arrow_Type t, Fl_Orientation o,
+		   bool ac, Fl_Color c, Fl_Color hc) {
+#define DEBUG_ARROW (0)
+#if (DEBUG_ARROW)
+  fl_color(fl_lighter(FL_RED));
+  fl_rect(bb.x()+2, bb.y()+2, bb.w()-4, bb.h()-4);
+#endif
+  if (Fl::is_scheme("oxy")) {
+    oxy_arrow(bb, t, o, ac, c, hc);
+  }
+}
+
 //
 // End of "$Id$".
 //
diff --git src/fl_oxy.cxx src/fl_oxy.cxx
new file mode 100644
index 0000000..2da6ae4
--- /dev/null
+++ src/fl_oxy.cxx
@@ -0,0 +1,522 @@
+//
+// "Oxy theme" drawing routines for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 2011 by Dmitrij K. e-mail: kdiman at live dot ru
+//
+// This library is free software. Distribution and use rights are outlined in
+// the file "COPYING" which should have been included with this file.  If this
+// file is missing or damaged, see the license at:
+//
+//     http://www.fltk.org/COPYING.php
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+#ifndef fl_oxy_cxx
+#define fl_oxy_cxx
+
+#include <FL/Fl.H>
+#include <FL/fl_draw.H>
+#include <FL/Fl_Rect.H>
+#include "fl_oxy.h"
+
+
+#define GROFF 0.45f // gradients offset
+
+static void arrow_begin(bool ac, Fl_Color c, Fl_Color hc, float av) {
+  Fl_Color col = fl_color_average(c, hc, av);
+  fl_color(ac ? col : fl_inactive(col));
+  fl_begin_line();
+}
+
+static void arrow_end() {
+  fl_end_line();
+}
+
+static void single_arrow(Fl_Rect bb, Fl_Orientation o,
+	       bool ac, Fl_Color c, Fl_Color hc) {
+
+  int x1 = bb.x();
+  int y1 = bb.y();
+  int w1 = bb.w();
+  int h1 = bb.h();
+
+  int dx = w1 / 3;
+  if (h1 < w1) dx = h1 / 3;
+  if (dx > 4) dx = 4;
+  else if (dx < 2) dx = 2;
+
+  // this is for "single" arrows (Fl_Arrow_Type FL_ARROW_SINGLE) only !
+
+  float angle = int(o) * 90.0;
+
+  int tx = x1 + (w1 + 1)/2;
+  int ty = y1 + (h1 + 1)/2;
+
+  fl_push_matrix();
+  fl_translate(tx, ty);
+  fl_rotate(angle);
+
+  int x0 = -(dx+1)/2;
+
+  arrow_begin(ac, c, hc, 0.38);
+  fl_vertex(x0, -dx);
+  fl_vertex(x0 + dx, 0);
+  fl_vertex(x0, dx);
+  arrow_end();
+
+  arrow_begin(ac, c, hc, 0.58);
+  fl_vertex(x0, -dx + 1);
+  fl_vertex(x0 + dx - 1, 0);
+  fl_vertex(x0, dx - 1);
+  arrow_end();
+
+  arrow_begin(ac, c, hc, 0.78);
+  fl_vertex(x0 + 1, -dx);
+  fl_vertex(x0 + dx + 1, 0);
+  fl_vertex(x0 + 1, dx);
+  arrow_end();
+
+  fl_pop_matrix();
+}
+
+void oxy_arrow(Fl_Rect bb, Fl_Arrow_Type t, Fl_Orientation o,
+	       bool ac, Fl_Color c, Fl_Color hc) {
+
+  switch(t) {
+
+    case FL_ARROW_DOUBLE:
+
+      switch (int(o)) {
+	case FL_ORIENT_DOWN:
+	case FL_ORIENT_UP:
+	  bb.y(bb.y() - 2); // shift upwards
+	  bb.h(bb.h() - 4); // reduce size
+	  single_arrow(bb, o, ac, c, hc);
+	  bb.y(bb.y() + 4); // shift down
+	  single_arrow(bb, o, ac, c, hc);
+	  break;
+	default:
+	  bb.x(bb.x() - 2); // shift left
+	  bb.w(bb.w() - 4); // reduce size
+	  single_arrow(bb, o, ac, c, hc);
+	  bb.x(bb.x() + 4); // shift right
+	  single_arrow(bb, o, ac, c, hc);
+	  break;
+      }
+      break;
+
+    case FL_ARROW_CHOICE:
+
+      bb.y(bb.y() - 2); // shift upwards
+      bb.h(bb.h() - 4); // reduce size
+      single_arrow(bb, FL_ORIENT_DOWN, ac, c, hc);
+      bb.y(bb.y() + 4); // shift down
+      single_arrow(bb, FL_ORIENT_DOWN, ac, c, hc);
+      break;
+
+    default:
+
+      single_arrow(bb, o, ac, c, hc);
+      break;
+
+  }
+
+}
+
+
+// draw gradient from South to North
+static void _oxy_up_box_(int x, int y, int w, int h, Fl_Color bg) {
+  float groff = GROFF;
+  if (groff < 0.0) {
+    groff = 0.0f;
+  }
+  float gradoffset = groff;
+  float stepoffset = (1.0 / (float)h);
+  int xw = x + w - 1;
+  //    from bottom to top
+  for (int _y = y; _y < y + h; _y++) {
+    fl_color(fl_color_average(bg, FL_WHITE, (gradoffset < 1.0) ? gradoffset : 1.0));
+    fl_line(x, _y, xw, _y);
+    gradoffset += stepoffset;
+  }
+}
+
+
+// draw gradient from North to South
+static void _oxy_down_box_(int x, int y, int w, int h, Fl_Color bg) {
+  float groff = GROFF;
+  if (groff < 0.0) {
+    groff = 0.0f;
+  }
+  float gradoffset = groff;
+  float stepoffset = (1.0 / (float)h);
+  int xw = x + w - 1;
+  //    from top to bottom
+  for (int _y = y + h - 1; _y >= y; _y--) {
+    fl_color(fl_color_average(bg, FL_WHITE, (gradoffset < 1.0) ? gradoffset : 1.0));
+    fl_line(x, _y, xw, _y);
+    gradoffset += stepoffset;
+  }
+}
+
+// draw gradient for button up box
+static void _oxy_button_up_box_(int x, int y, int w, int h, Fl_Color bg) {
+  int half_h = h / 2;
+  float gradoffset = 0.15f;
+  float stepoffset = (1.0 / (float)half_h);
+  Fl_Color c = fl_color_average(bg, FL_WHITE, 0.5);
+  int xw = x + w - 1;
+  for (int _y = y; _y <= y + half_h; _y++) {
+    fl_color(fl_color_average(c, FL_WHITE, (gradoffset < 1.0) ? gradoffset : 1.0));
+    fl_line(x, _y, xw, _y);
+    gradoffset += stepoffset;
+  }
+  gradoffset = 0.0f;
+  c = bg;
+  for (int _y = y + h - 1; _y >= y + half_h - 1; _y--) {
+    fl_color(fl_color_average(c, FL_WHITE, (gradoffset < 1.0) ? gradoffset : 1.0));
+    fl_line(x, _y, xw, _y);
+    gradoffset += stepoffset;
+  }
+}
+
+
+// draw gradient for button down box
+static void _oxy_button_down_box_(int x, int y, int w, int h, Fl_Color bg) {
+  bg = fl_color_average(bg, FL_BLACK, 0.88);
+  int half_h = h / 2, xw = x + w - 1;
+  float gradoffset = 0.15f, stepoffset = (1.0 / (float)half_h);
+  Fl_Color c = fl_color_average(bg, FL_WHITE, 0.5);
+  for (int _y = y; _y <= y + half_h; _y++) {
+    fl_color(fl_color_average(c, FL_WHITE, (gradoffset < 1.0) ? gradoffset : 1.0));
+    fl_line(x, _y, xw, _y);
+    gradoffset += stepoffset;
+  }
+  gradoffset = 0.0f;
+  c = bg;
+  for (int _y = y + h - 1; _y >= y + half_h - 1; _y--) {
+    fl_color(fl_color_average(c, FL_WHITE, (gradoffset < 1.0) ? gradoffset : 1.0));
+    fl_line(x, _y, xw, _y);
+    gradoffset += stepoffset;
+  }
+}
+
+
+// draw rounded box
+static void _oxy_rounded_box_(int x, int y, int w, int h, Fl_Color bg) {
+  fl_color(bg);
+  if (w > h) {
+    fl_pie(x, y, h, h, 90.0, 270.0);          // right half of circle
+    fl_rectf(x + h / 2, y, w - h, h);         // rectangle between left and right half-circle
+    fl_pie(x + w - h, y, h, h, 0.0, 90.0);    // top-left quarter of circle
+    fl_pie(x + w - h, y, h, h, 270.0, 360.0); // bottom-left quarter of circle
+  } else {
+    fl_pie(x, y, w, w, 0.0, 180.0);           // top half of circle
+    fl_rectf(x, y + w / 2, w, h - w);         // rectangle between top and bottom half-circle
+    fl_pie(x, y + h - w, w, w, 180.0, 360.0); // bottom half of circle
+  }
+}
+
+
+static Fl_Color oxy_color(Fl_Color c) {
+  if (Fl::draw_box_active()) {
+    return c;
+  } else {
+    return fl_inactive(c);
+  }
+}
+
+
+static void oxy_draw(int x, int y, int w, int h, Fl_Color c, int typebox, bool is_shadow) {
+
+  if (w < 1 || h < 1)
+    return;
+  int X, Y, W, H, X1, Y1;
+
+  // draw bg
+  if (typebox != _FL_OXY_UP_FRAME && typebox != _FL_OXY_DOWN_FRAME) {
+
+    X = x + 1;
+    Y = y + 1;
+    W = w - 2;
+    H = h - 2;
+
+    switch (typebox) {
+      case _FL_OXY_UP_BOX: {
+	_oxy_up_box_(X, Y, W, H, oxy_color(c));
+	break;
+      }
+      case _FL_OXY_DOWN_BOX: {
+	_oxy_down_box_(X, Y, W, H, oxy_color(c));
+	break;
+      }
+      case _FL_OXY_BUTTON_UP_BOX: {
+	_oxy_button_up_box_(X, Y, W, H, oxy_color(c));
+	break;
+      }
+      case _FL_OXY_BUTTON_DOWN_BOX: {
+	_oxy_button_down_box_(X, Y, W, H, oxy_color(c));
+	break;
+      }
+      case _FL_OXY_ROUND_UP_BOX:
+      case _FL_OXY_ROUND_DOWN_BOX:
+	_oxy_rounded_box_(x, y, w, h, oxy_color(fl_color_average(c, FL_WHITE, 0.82)));
+	break;
+      default: { break; }
+    }
+  }
+
+  Fl_Color leftline = c, topline = c, rightline = c, bottomline = c;
+
+  if (typebox == _FL_OXY_ROUND_UP_BOX || typebox == _FL_OXY_ROUND_DOWN_BOX) {
+    leftline = fl_color_average(c, FL_WHITE, 0.88);
+    leftline = topline = rightline = bottomline = fl_color_average(leftline, FL_BLACK, 0.97);
+  }
+
+  else if (typebox == _FL_OXY_UP_BOX || typebox == _FL_OXY_UP_FRAME) {
+    topline = fl_color_average(c, FL_BLACK, 0.95);
+    leftline = fl_color_average(c, FL_BLACK, 0.85);
+    rightline = leftline;
+    bottomline = fl_color_average(c, FL_BLACK, 0.88);
+  }
+
+  else if (typebox == _FL_OXY_DOWN_BOX || typebox == _FL_OXY_DOWN_FRAME) {
+    topline = fl_color_average(c, FL_BLACK, 0.88);
+    leftline = fl_color_average(c, FL_BLACK, 0.85);
+    rightline = leftline;
+    bottomline = fl_color_average(c, FL_BLACK, 0.95);
+  }
+
+  else if (typebox == _FL_OXY_BUTTON_UP_BOX || typebox == _FL_OXY_BUTTON_DOWN_BOX) {
+    topline = leftline = rightline = bottomline = fl_color_average(c, FL_BLACK, 0.85);
+  }
+
+  // draw border
+  if (typebox != _FL_OXY_ROUND_UP_BOX && typebox != _FL_OXY_ROUND_DOWN_BOX) {
+    // bottom side
+    fl_color(oxy_color(bottomline));
+    fl_line(x + 1, y + h - 1, x + w - 2, y + h - 1);
+    // right side
+    fl_color(oxy_color(rightline));
+    fl_line(x + w - 1, y + 1, x + w - 1, y + h - 2);
+    // top side
+    fl_color(oxy_color(topline));
+    fl_line(x + 1, y, x + w - 2, y);
+    // left side
+    fl_color(oxy_color(leftline));
+    fl_line(x, y + 1, x, y + h - 2);
+  }
+
+  // draw shadow
+  if (is_shadow) {
+
+    if (typebox == _FL_OXY_ROUND_UP_BOX) {
+      topline = fl_color_average(c, FL_WHITE, 0.35);
+      bottomline = fl_color_average(c, FL_BLACK, 0.94);
+    }
+
+    else if (typebox == _FL_OXY_ROUND_DOWN_BOX) {
+      topline = fl_color_average(c, FL_BLACK, 0.94);
+      bottomline = fl_color_average(c, FL_WHITE, 0.35);
+    }
+
+    else if (typebox == _FL_OXY_UP_BOX || typebox == _FL_OXY_UP_FRAME) {
+      topline = fl_color_average(c, FL_WHITE, 0.35);
+      leftline = fl_color_average(c, FL_WHITE, 0.4);
+      rightline = leftline;
+      bottomline = fl_color_average(c, FL_BLACK, 0.8);
+    }
+
+    else if (typebox == _FL_OXY_DOWN_BOX || typebox == _FL_OXY_DOWN_FRAME) {
+      topline = fl_color_average(c, FL_BLACK, 0.8);
+      leftline = fl_color_average(c, FL_BLACK, 0.94);
+      rightline = leftline;
+      bottomline = fl_color_average(c, FL_WHITE, 0.35);
+    }
+
+    int xw1 = x + w - 1;
+    int xw2 = x + w - 2;
+    int xw3 = x + w - 3;
+    int yh2 = y + h - 2;
+    int yh1 = y + h - 1;
+
+    if (typebox == _FL_OXY_UP_BOX || typebox == _FL_OXY_UP_FRAME) {
+      fl_color(oxy_color(topline));
+      X = x + 1;
+      Y = y + 1;
+      X1 = xw2;
+      Y1 = y + 1;
+      fl_line(X, Y, X1, Y1); // top line
+
+      fl_color(oxy_color(leftline));
+      X = x + 1;
+      Y = yh2;
+      X1 = x + 1;
+      Y1 = y + 2;
+      fl_line(X, Y, X1, Y1); // left line
+
+      fl_color(oxy_color(rightline));
+      X = xw2;
+      Y = y + 2;
+      X1 = xw2;
+      Y1 = yh2;
+      fl_line(X, Y, X1, Y1); // right line
+
+      fl_color(oxy_color(bottomline));
+      X = xw2;
+      Y = yh2;
+      X1 = x + 1;
+      Y1 = yh2;
+      fl_line(X, Y, X1, Y1); // bottom line
+    }
+
+    else if (typebox == _FL_OXY_DOWN_BOX || typebox == _FL_OXY_DOWN_FRAME) {
+      fl_color(oxy_color(topline));
+      X = x + 1;
+      Y = y + 1;
+      X1 = xw2;
+      Y1 = y + 1;
+      fl_line(X, Y, X1, Y1); // top line
+
+      fl_color(oxy_color(leftline));
+      X = x + 1;
+      Y = yh2;
+      X1 = x + 1;
+      Y1 = y + 2;
+      fl_line(X, Y, X1, Y1); // left line
+
+      fl_color(oxy_color(rightline));
+      X = xw2;
+      Y = y + 2;
+      X1 = xw2;
+      Y1 = yh2;
+      fl_line(X, Y, X1, Y1); // right line
+
+      fl_color(oxy_color(bottomline));
+      X = xw3;
+      Y = yh2;
+      X1 = x + 2;
+      Y1 = yh2;
+      fl_line(X, Y, X1, Y1); // bottom line
+    }
+
+    else if (typebox == _FL_OXY_ROUND_UP_BOX || typebox == _FL_OXY_ROUND_DOWN_BOX) {
+
+      int Radius, smooth;
+      int r_offset2; // quarter of smooth and half of smooth
+
+      if (w > h) {
+	smooth = w;
+      } else {
+	smooth = h;
+      }
+
+      // correcting `smooth'
+      if (smooth > 0 && (smooth * 3 > w || smooth * 3 > h)) {
+	if (h < w) {
+	  smooth = h / 3;
+	} else {
+	  smooth = w / 3;
+	}
+      }
+
+      r_offset2 = smooth / 2;
+
+      Radius = smooth * 3;
+      if (Radius == 3) {
+	Radius = 4;
+      }
+
+      fl_color(oxy_color(topline));
+      fl_line(x + 1, yh1 - smooth - r_offset2, x + 1, y + r_offset2 + smooth); // left side
+      fl_arc(x + 1, y + 1, Radius, Radius, 90.0, 180.0);                       // left-top corner
+      if (typebox == _FL_OXY_ROUND_DOWN_BOX) {
+	fl_arc(x + 1, y + 1, Radius + 1, Radius + 1, 90.0, 180.0);
+      }                                                                        // left-top corner (DOWN_BOX)
+      fl_line(x + smooth + r_offset2, y + 1, xw1 - smooth - r_offset2, y + 1); // top side
+      fl_arc(xw1 - Radius, y + 1, Radius, Radius, 00.0, 90.0);                 // right-top corner
+      if (typebox == _FL_OXY_ROUND_DOWN_BOX) {
+	fl_arc(xw1 - Radius, y + 1, Radius + 1, Radius + 1, 00.0, 90.0);
+      }                                                                    // right-top corner (DOWN_BOX)
+      fl_line(xw2, y + smooth + r_offset2, xw2, yh1 - smooth - r_offset2); // right side
+      fl_arc(x + 1, yh1 - Radius, Radius, Radius, 180.0, 200.0);           // left-bottom corner
+      fl_arc(xw1 - Radius, yh1 - Radius, Radius, Radius, 340.0, 360.0);    // right-bottom
+      fl_color(oxy_color(bottomline));
+      fl_arc(x + 1, yh1 - Radius, Radius, Radius, 200.0, 270.0); // left-bottom corner
+      if (typebox == _FL_OXY_ROUND_UP_BOX) {
+	fl_arc(x + 1, yh1 - Radius, Radius + 1, Radius + 1, 200.0, 270.0);
+      }                                                                    // left-bottom corner (UP_BOX)
+      fl_line(xw1 - smooth - r_offset2, yh2, x + smooth + r_offset2, yh2); // bottom side
+      fl_arc(xw1 - Radius, yh1 - Radius, Radius, Radius, 270.0, 340.0);    // right-bottom corner
+      if (typebox == _FL_OXY_ROUND_UP_BOX) {
+	fl_arc(xw1 - Radius, yh1 - Radius, Radius + 1, Radius + 1, 270.0, 340.0);
+      } // right-bottom corner
+    }
+
+  } // end `if (is_shadow)'
+
+} // end `static void oxy_draw(...)'
+
+
+void button_up_box(int x, int y, int w, int h, Fl_Color c) {
+  oxy_draw(x, y, w, h, c, _FL_OXY_BUTTON_UP_BOX, true);
+}
+void button_down_box(int x, int y, int w, int h, Fl_Color c) {
+  oxy_draw(x, y, w, h, c, _FL_OXY_BUTTON_DOWN_BOX, true);
+}
+void up_box(int x, int y, int w, int h, Fl_Color c) {
+  oxy_draw(x, y, w, h, c, _FL_OXY_UP_BOX, true);
+}
+void down_box(int x, int y, int w, int h, Fl_Color c) {
+  oxy_draw(x, y, w, h, c, _FL_OXY_DOWN_BOX, true);
+}
+void thin_up_box(int x, int y, int w, int h, Fl_Color c) {
+  oxy_draw(x, y, w, h, c, _FL_OXY_UP_BOX, false);
+}
+void thin_down_box(int x, int y, int w, int h, Fl_Color c) {
+  oxy_draw(x, y, w, h, c, _FL_OXY_DOWN_BOX, false);
+}
+void up_frame(int x, int y, int w, int h, Fl_Color c) {
+  oxy_draw(x, y, w, h, c, _FL_OXY_UP_FRAME, true);
+}
+void down_frame(int x, int y, int w, int h, Fl_Color c) {
+  oxy_draw(x, y, w, h, c, _FL_OXY_DOWN_FRAME, true);
+}
+void thin_up_frame(int x, int y, int w, int h, Fl_Color c) {
+  oxy_draw(x, y, w, h, c, _FL_OXY_UP_FRAME, false);
+}
+void thin_down_frame(int x, int y, int w, int h, Fl_Color c) {
+  oxy_draw(x, y, w, h, c, _FL_OXY_DOWN_FRAME, false);
+}
+void round_up_box(int x, int y, int w, int h, Fl_Color c) {
+  oxy_draw(x, y, w, h, c, _FL_OXY_ROUND_UP_BOX, true);
+}
+void round_down_box(int x, int y, int w, int h, Fl_Color c) {
+  oxy_draw(x, y, w, h, c, _FL_OXY_ROUND_DOWN_BOX, true);
+}
+
+
+extern void fl_internal_boxtype(Fl_Boxtype, Fl_Box_Draw_F *);
+
+Fl_Boxtype fl_define_FL_OXY_UP_BOX() {
+
+  fl_internal_boxtype(_FL_OXY_UP_BOX, up_box);
+  fl_internal_boxtype(_FL_OXY_DOWN_BOX, down_box);
+  fl_internal_boxtype(_FL_OXY_UP_FRAME, up_frame);
+  fl_internal_boxtype(_FL_OXY_DOWN_FRAME, down_frame);
+  fl_internal_boxtype(_FL_OXY_THIN_UP_BOX, thin_up_box);
+  fl_internal_boxtype(_FL_OXY_THIN_DOWN_BOX, thin_down_box);
+  fl_internal_boxtype(_FL_OXY_THIN_UP_FRAME, thin_up_frame);
+  fl_internal_boxtype(_FL_OXY_THIN_DOWN_FRAME, thin_down_frame);
+  fl_internal_boxtype(_FL_OXY_ROUND_UP_BOX, round_up_box);
+  fl_internal_boxtype(_FL_OXY_ROUND_DOWN_BOX, round_down_box);
+  fl_internal_boxtype(_FL_OXY_BUTTON_UP_BOX, button_up_box);
+  fl_internal_boxtype(_FL_OXY_BUTTON_DOWN_BOX, button_down_box);
+
+  return _FL_OXY_UP_BOX;
+}
+
+#endif
diff --git src/fl_oxy.h src/fl_oxy.h
new file mode 100644
index 0000000..471a302
--- /dev/null
+++ src/fl_oxy.h
@@ -0,0 +1,26 @@
+//
+// "Oxy theme" drawing routines for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 2011 by Dmitrij K. e-mail: kdiman at live dot ru
+//
+// This library is free software. Distribution and use rights are outlined in
+// the file "COPYING" which should have been included with this file.  If this
+// file is missing or damaged, see the license at:
+//
+//     http://www.fltk.org/COPYING.php
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+#ifndef fl_oxy_h
+#define fl_oxy_h
+
+#include <FL/Fl.H>
+
+// to draw arrow, a - direction the arrow, ac - active widget?, c - color the arrow, hc - lighting the arrrow
+extern FL_EXPORT void oxy_arrow(Fl_Rect bb, Fl_Arrow_Type t, Fl_Orientation o,
+	       bool ac, Fl_Color c, Fl_Color hc = FL_BLACK);
+
+#endif
diff --git test/demo.cxx test/demo.cxx
index e6497aa..8fc19a1 100644
--- test/demo.cxx
+++ test/demo.cxx
@@ -97,13 +97,15 @@ void create_the_forms() {
   choice->add("none");
   choice->add("gtk+");
   choice->add("gleam");
+  choice->add("oxy");
   choice->add("plastic");
   choice->callback((Fl_Callback *)doscheme);
   Fl::scheme(NULL);
   if (!Fl::scheme()) choice->value(0);
   else if (!strcmp(Fl::scheme(), "gtk+")) choice->value(1);
   else if (!strcmp(Fl::scheme(), "gleam")) choice->value(2);
-  else if (!strcmp(Fl::scheme(), "plastic")) choice->value(3);
+  else if (!strcmp(Fl::scheme(), "oxy")) choice->value(3);
+  else if (!strcmp(Fl::scheme(), "plastic")) choice->value(4);
   else choice->value(0);
   obj = new Fl_Button(10,15,330,380); obj->type(FL_HIDDEN_BUTTON);
   obj->callback(doback);
diff --git test/unittest_schemes.cxx test/unittest_schemes.cxx
index 6c1d727..3d0a0da 100644
--- test/unittest_schemes.cxx
+++ test/unittest_schemes.cxx
@@ -3,7 +3,7 @@
 //
 // Unit tests for the Fast Light Tool Kit (FLTK).
 //
-// Copyright 1998-2017 by Bill Spitzak and others.
+// Copyright 1998-2018 by Bill Spitzak and others.
 //
 // Nods to Edmanuel Torres for the widget layout (STR#2672)
 //
@@ -64,6 +64,7 @@ public:
     schemechoice->add("plastic");
     schemechoice->add("gtk+");
     schemechoice->add("gleam");
+    schemechoice->add("oxy");
     schemechoice->value(0);
     schemechoice->labelfont(FL_HELVETICA_BOLD);
     const char *name = Fl::scheme();
@@ -71,6 +72,7 @@ public:
            if ( strcmp(name, "plastic") == 0) { schemechoice->value(1); }
       else if ( strcmp(name, "gtk+")    == 0) { schemechoice->value(2); }
       else if ( strcmp(name, "gleam")   == 0) { schemechoice->value(3); }
+      else if ( strcmp(name, "oxy")     == 0) { schemechoice->value(4); }
     }
     schemechoice->callback(SchemeChoice_CB, (void*)this);
 
