Index: src/sas/qtgui/MainWindow/GuiManager.py
===================================================================
--- src/sas/qtgui/MainWindow/GuiManager.py	(revision 06ce180b727eae5865431e7ab8252438e6178a15)
+++ src/sas/qtgui/MainWindow/GuiManager.py	(revision a6cd8d1a828b75a953f9152686a51ac648be67ee)
@@ -624,5 +624,4 @@
         """
         """
-        print("actionGPU_Options TRIGGERED")
         if getattr(self._current_perspective, "gpu_options_widget"):
             self._current_perspective.gpu_options_widget.show()
Index: src/sas/qtgui/Perspectives/Fitting/GPUOptions.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/GPUOptions.py	(revision 14fa5426b32b70cb507f13bbc8859bfdffec00b6)
+++ src/sas/qtgui/Perspectives/Fitting/GPUOptions.py	(revision a6cd8d1a828b75a953f9152686a51ac648be67ee)
@@ -1,3 +1,6 @@
 # global
+import os
+import sys
+import sasmodels
 
 from PyQt4 import QtGui, QtCore
@@ -24,52 +27,138 @@
     """
 
+    clicked = False
+    checkBoxes = None
+    sas_open_cl = None
+
     def __init__(self, parent=None):
         super(GPUOptions, self).__init__(parent)
+        self.parent = parent
         self.setupUi(self)
+        self.addOpenCLOptions()
+        self.createLinks()
 
+    def addOpenCLOptions(self):
+        """
+        Populate the window with a list of OpenCL options
+        """
         # Get list of openCL options and add to GUI
-        cl_tuple = self._get_clinfo()
+        cl_tuple = _get_clinfo()
         i = 0
+        self.sas_open_cl = os.environ.get("SAS_OPENCL", "")
+        self.checkBoxes = []
         for title, descr in cl_tuple:
-            button = QtGui.QRadioButton(self.openCLButtonGroup)
-            button.setGeometry(20, 20 + i, 351, 30)
-            button.setObjectName(_fromUtf8(title))
-            button.setText(_translate("GPUOptions", descr, None))
+            checkBox = QtGui.QCheckBox(self.openCLCheckBoxGroup)
+            checkBox.setGeometry(20, 20 + i, 351, 30)
+            checkBox.setObjectName(_fromUtf8(descr))
+            checkBox.setText(_translate("GPUOptions", descr, None))
+            if (descr == self.sas_open_cl) or (title == "None" and not self.clicked):
+                checkBox.click()
+                self.clicked = True
+            self.checkBoxes.append(checkBox)
             # Expand group and shift items down as more are added
-            self.openCLButtonGroup.resize(391, 60 + i)
-            self.pushButton.setGeometry(QtCore.QRect(220, 90 + i, 93, 28))
-            self.TestButton.setGeometry(QtCore.QRect(20, 90 + i, 193, 28))
-            self.pushButton_2.setGeometry(QtCore.QRect(320, 90 + i, 93, 28))
+            self.openCLCheckBoxGroup.resize(391, 60 + i)
+            self.okButton.setGeometry(QtCore.QRect(20, 90 + i, 93, 28))
+            self.resetButton.setGeometry(QtCore.QRect(120, 90 + i, 93, 28))
+            self.testButton.setGeometry(QtCore.QRect(220, 90 + i, 93, 28))
+            self.helpButton.setGeometry(QtCore.QRect(320, 90 + i, 93, 28))
             self.resize(440, 130 + i)
             i += 30
 
-    def _get_clinfo(self):
+    def createLinks(self):
         """
-        Reading in information about available OpenCL infrastructure
-        :return:
+        Link actions to function calls
         """
-        clinfo = []
-        platforms = []
-        try:
-            import pyopencl as cl
-            platforms = cl.get_platforms()
-        except ImportError:
-            print("pyopencl import failed. Using only CPU computations")
+        self.testButton.clicked.connect(lambda: self.testButtonClicked())
+        self.helpButton.clicked.connect(lambda: self.helpButtonClicked())
+        self.openCLCheckBoxGroup.clicked.connect(lambda: self.checked())
 
-        p_index = 0
-        for platform in platforms:
-            d_index = 0
-            devices = platform.get_devices()
-            for device in devices:
-                if len(devices) > 1 and len(platforms) > 1:
-                    combined_index = ":".join([str(p_index), str(d_index)])
-                elif len(platforms) > 1:
-                    combined_index = str(p_index)
-                else:
-                    combined_index = str(d_index)
-                clinfo.append((combined_index, ":".join([platform.name, device.name])))
-                d_index += 1
-            p_index += 1
+    def checked(self):
+        """
+        Action triggered when box is selected
+        """
+        selected_box = None
+        for box in self.checkBoxes:
+            if box.isChecked() and box.getText() != self.sas_open_cl:
+                selected_box = box
+            else:
+                box.setChecked(False)
+        if selected_box.getText():
+            self.sas_open_cl = self.option_button[selected_box.title]
+        else:
+            self.sas_open_cl = None
 
-        clinfo.append(("None", "No OpenCL"))
-        return clinfo
+    def testButtonClicked(self):
+        """
+        Run the model tests when the test button is clicked
+        """
+        pass
+
+    def helpButtonClicked(self):
+        """
+        Open the help menu when the help button is clicked
+        """
+        pass
+
+    def reject(self):
+        """
+        Close the window without modifying SAS_OPENCL
+        """
+        self.close()
+        self.parent.gpu_options_widget = GPUOptions(self)
+        self.open()
+
+    def accept(self):
+        """
+        Close the window after modifying the SAS_OPENCL value
+        """
+        # If statement added to handle Reset
+        if self.sas_open_cl:
+            os.environ["SAS_OPENCL"] = self.sas_open_cl
+        else:
+            if "SAS_OPENCL" in os.environ:
+                del os.environ["SAS_OPENCL"]
+
+        # Sasmodels kernelcl doesn't exist when initiated with None
+        if 'sasmodels.kernelcl' in sys.modules:
+            sasmodels.kernelcl.ENV = None
+
+        reload(sasmodels.core)
+        super(GPUOptions, self).accept()
+
+    def closeEvent(self, event):
+        """
+        Overwrite QDialog close method to allow for custom widget close
+        """
+        self.reject()
+
+
+def _get_clinfo():
+    """
+    Reading in information about available OpenCL infrastructure
+    :return:
+    """
+    clinfo = []
+    platforms = []
+    try:
+        import pyopencl as cl
+        platforms = cl.get_platforms()
+    except ImportError:
+        print("pyopencl import failed. Using only CPU computations")
+
+    p_index = 0
+    for platform in platforms:
+        d_index = 0
+        devices = platform.get_devices()
+        for device in devices:
+            if len(devices) > 1 and len(platforms) > 1:
+                combined_index = ":".join([str(p_index), str(d_index)])
+            elif len(platforms) > 1:
+                combined_index = str(p_index)
+            else:
+                combined_index = str(d_index)
+            clinfo.append((combined_index, ":".join([platform.name, device.name])))
+            d_index += 1
+        p_index += 1
+
+    clinfo.append(("None", "No OpenCL"))
+    return clinfo
Index: src/sas/qtgui/Perspectives/Fitting/UI/GPUOptionsUI.ui
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/UI/GPUOptionsUI.ui	(revision 14fa5426b32b70cb507f13bbc8859bfdffec00b6)
+++ src/sas/qtgui/Perspectives/Fitting/UI/GPUOptionsUI.ui	(revision a6cd8d1a828b75a953f9152686a51ac648be67ee)
@@ -14,5 +14,5 @@
    <string>Dialog</string>
   </property>
-  <widget class="QPushButton" name="pushButton">
+  <widget class="QPushButton" name="testButton">
    <property name="geometry">
     <rect>
@@ -27,18 +27,5 @@
    </property>
   </widget>
-  <widget class="QDialogButtonBox" name="TestButton">
-   <property name="geometry">
-    <rect>
-     <x>20</x>
-     <y>140</y>
-     <width>193</width>
-     <height>28</height>
-    </rect>
-   </property>
-   <property name="standardButtons">
-    <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-   </property>
-  </widget>
-  <widget class="QPushButton" name="pushButton_2">
+  <widget class="QPushButton" name="helpButton">
    <property name="geometry">
     <rect>
@@ -50,8 +37,11 @@
    </property>
    <property name="text">
-    <string>Reset</string>
+    <string>Help</string>
+   </property>
+   <property name="autoDefault">
+    <bool>true</bool>
    </property>
   </widget>
-  <widget class="QGroupBox" name="openCLButtonGroup">
+  <widget class="QGroupBox" name="openCLCheckBoxGroup">
    <property name="geometry">
     <rect>
@@ -66,6 +56,65 @@
    </property>
   </widget>
+  <widget class="QPushButton" name="resetButton">
+   <property name="geometry">
+    <rect>
+     <x>120</x>
+     <y>140</y>
+     <width>93</width>
+     <height>28</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Reset</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="okButton">
+   <property name="geometry">
+    <rect>
+     <x>20</x>
+     <y>140</y>
+     <width>93</width>
+     <height>28</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>OK</string>
+   </property>
+  </widget>
  </widget>
  <resources/>
- <connections/>
+ <connections>
+  <connection>
+   <sender>okButton</sender>
+   <signal>clicked()</signal>
+   <receiver>GPUOptions</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>66</x>
+     <y>153</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>219</x>
+     <y>88</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>resetButton</sender>
+   <signal>clicked()</signal>
+   <receiver>GPUOptions</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>166</x>
+     <y>153</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>219</x>
+     <y>88</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
 </ui>
