diff --git a/controls/button.c b/controls/button.c
new file mode 100644
index 0000000..3a65bc0
--- /dev/null
+++ b/controls/button.c
@@ -0,0 +1,86 @@
+/*
+ * Interface code to button widgets
+ *
+ * Copyright  David W. Metcalfe, 1993
+ *
+ */
+
+static char Copyright[] = "Copyright  David W. Metcalfe, 1993";
+
+#include <X11/Intrinsic.h>
+#include <X11/StringDefs.h>
+#include "WinButton.h"
+#include "windows.h"
+#include "heap.h"
+#include "win.h"
+
+static void BUTTON_WinButtonCallback(Widget w, XtPointer client_data,
+				               XtPointer call_data);
+
+void BUTTON_CreateButton(LPSTR className, LPSTR buttonLabel, HWND hwnd)
+{
+    WND *wndPtr    = WIN_FindWndPtr(hwnd);
+    WND *parentPtr = WIN_FindWndPtr(wndPtr->hwndParent);
+    DWORD style;
+    char widgetName[15];
+
+#ifdef DEBUG_BUTTON
+    printf("button: label = %s, x = %d, y = %d\n", buttonLabel,
+	   wndPtr->rectClient.left, wndPtr->rectClient.top);
+    printf("        width = %d, height = %d\n",
+	   wndPtr->rectClient.right - wndPtr->rectClient.left,
+	   wndPtr->rectClient.bottom - wndPtr->rectClient.top);
+#endif
+
+    if (!wndPtr)
+	return;
+
+    style = wndPtr->dwStyle & 0x0000000F;
+
+    switch (style)
+    {
+    case BS_PUSHBUTTON:
+    case BS_DEFPUSHBUTTON:
+	sprintf(widgetName, "%s%d", className, wndPtr->wIDmenu);
+	wndPtr->winWidget = XtVaCreateManagedWidget(widgetName,
+				      winButtonWidgetClass,
+				      parentPtr->winWidget,
+				      XtNlabel, buttonLabel,
+				      XtNx, wndPtr->rectClient.left,
+				      XtNy, wndPtr->rectClient.top,
+				      XtNwidth, wndPtr->rectClient.right -
+					        wndPtr->rectClient.left,
+				      XtNheight, wndPtr->rectClient.bottom -
+					         wndPtr->rectClient.top,
+				      XtVaTypedArg, XtNbackground, XtRString,
+					      "grey70", strlen("grey75")+1,
+				      NULL);
+
+	XtAddCallback(wndPtr->winWidget, XtNcallback,
+		      BUTTON_WinButtonCallback, (XtPointer) hwnd);
+	break;
+
+    default:
+	printf("CreateButton: Unsupported button style %lX\n", 
+	                                         wndPtr->dwStyle);
+    }
+
+    GlobalUnlock(hwnd);
+    GlobalUnlock(wndPtr->hwndParent);
+}
+
+static void BUTTON_WinButtonCallback(Widget w, XtPointer client_data,
+				               XtPointer call_data)
+{
+    HWND hwnd = (HWND) client_data;
+    WND  *wndPtr;
+    wndPtr = WIN_FindWndPtr(hwnd);
+
+    CallWindowProc(wndPtr->lpfnWndProc, wndPtr->hwndParent, WM_COMMAND,
+		   wndPtr->wIDmenu, MAKELPARAM(hwnd, BN_CLICKED));
+
+    GlobalUnlock(hwnd);
+}
+
+
+
