Index: src/sas/sasgui/guiframe/config.py
===================================================================
--- src/sas/sasgui/guiframe/config.py	(revision ea45bfe4e68bda8abf0866aa2c51cfcf4cf63e36)
+++ src/sas/sasgui/guiframe/config.py	(revision a1b8fee73528559155793dd74cda07d0c32e9d72)
@@ -2,4 +2,6 @@
     Application settings
 """
+from __future__ import print_function
+
 import time
 import os
@@ -150,5 +152,5 @@
         :TODO - Need method doc string
         """
-        print "%g:  %s" % (time.clock(), message)
+        print("%g:  %s" % (time.clock(), message))
 
         if __EVT_DEBUG_2_FILE__:
Index: src/sas/sasgui/guiframe/data_panel.py
===================================================================
--- src/sas/sasgui/guiframe/data_panel.py	(revision 959eb0181ad06828a748f04512f953aad5b31659)
+++ src/sas/sasgui/guiframe/data_panel.py	(revision a1b8fee73528559155793dd74cda07d0c32e9d72)
@@ -11,4 +11,6 @@
 This module provides Graphic interface for the data_manager module.
 """
+from __future__ import print_function
+
 import wx
 from wx.build import build_options
@@ -514,5 +516,5 @@
                 self.parent.save_data2d(data, default_name)
             else:
-                print "unable to save this type of data"
+                print("unable to save this type of data")
 
     def layout_data_list(self):
@@ -1497,5 +1499,5 @@
     except:
         # raise
-        print "error", sys.exc_value
+        print("error", sys.exc_value)
 
     app.MainLoop()
Index: src/sas/sasgui/guiframe/data_processor.py
===================================================================
--- src/sas/sasgui/guiframe/data_processor.py	(revision 7432acb919f4013119ca918a73350297e0d4c93f)
+++ src/sas/sasgui/guiframe/data_processor.py	(revision a1b8fee73528559155793dd74cda07d0c32e9d72)
@@ -18,4 +18,6 @@
 
 """
+from __future__ import print_function
+
 import os
 import sys
@@ -2035,5 +2037,5 @@
         frame.Show(True)
     except:
-        print sys.exc_value
+        print(sys.exc_value)
 
     app.MainLoop()
Index: src/sas/sasgui/guiframe/dummyapp.py
===================================================================
--- src/sas/sasgui/guiframe/dummyapp.py	(revision 959eb0181ad06828a748f04512f953aad5b31659)
+++ src/sas/sasgui/guiframe/dummyapp.py	(revision a1b8fee73528559155793dd74cda07d0c32e9d72)
@@ -3,4 +3,6 @@
 Allows the user to set an external data manager
 """
+from __future__ import print_function
+
 import sas.sasgui.guiframe.gui_manager as gui_manager
 
@@ -32,5 +34,5 @@
         plug_menu.Append(id, '&Do something')
         def _on_do_something(event):
-            print "Do something"
+            print("Do something")
         wx.EVT_MENU(self.parent, id, _on_do_something)
     
Index: src/sas/sasgui/guiframe/gui_manager.py
===================================================================
--- src/sas/sasgui/guiframe/gui_manager.py	(revision 49165488dcf1dbf657666bc78e3d4b4904d1c094)
+++ src/sas/sasgui/guiframe/gui_manager.py	(revision 2f22db96dce134a5ac8f4dba0b22c4df370c5431)
@@ -77,9 +77,9 @@
     # clean all these module variables and put them into a config class
     # that can be passed by sasview.py.
-    logger.info(sys.executable)
-    logger.info(str(sys.argv))
+    logger.debug(sys.executable)
+    logger.debug(str(sys.argv))
     from sas import sasview as sasview
     app_path = os.path.dirname(sasview.__file__)
-    logger.info("Using application path: %s", app_path)
+    logger.debug("Using application path: %s", app_path)
     return app_path
 
@@ -109,5 +109,5 @@
         if fObj is not None:
             fObj.close()
-    logger.info("GuiManager loaded %s/%s" % (path, file))
+    logger.debug("GuiManager loaded %s/%s" % (path, file))
     return config_module
 
@@ -126,9 +126,9 @@
         # Didn't find local config, load the default
         import sas.sasgui.guiframe.config as config
-        logger.info("using default local_config")
+        logger.debug("using default local_config")
     else:
-        logger.info("found local_config in %s" % os.getcwd())
+        logger.debug("found local_config in %s" % os.getcwd())
 else:
-    logger.info("found local_config in %s" % PATH_APP)
+    logger.debug("found local_config in %s" % PATH_APP)
 
 from sas.sasgui.guiframe.customdir import SetupCustom
@@ -139,9 +139,9 @@
     if custom_config is None:
         msgConfig = "Custom_config file was not imported"
-        logger.info(msgConfig)
+        logger.debug(msgConfig)
     else:
-        logger.info("using custom_config in %s" % os.getcwd())
+        logger.debug("using custom_config in %s" % os.getcwd())
 else:
-    logger.info("using custom_config from %s" % c_conf_dir)
+    logger.debug("using custom_config from %s" % c_conf_dir)
 
 # read some constants from config
@@ -2129,7 +2129,8 @@
                 if "SAS_OPENCL" in line:
                     if sas_opencl:
-                        new_config_lines.append("SAS_OPENCL = \""+sas_opencl+"\"")
+                        new_config_lines.append("SAS_OPENCL = \"" + sas_opencl
+                                                + "\"\n")
                     else:
-                        new_config_lines.append("SAS_OPENCL = None")
+                        new_config_lines.append("SAS_OPENCL = \"None\"\n")
                 else:
                     new_config_lines.append(line)
@@ -2156,8 +2157,6 @@
         if response is not None:
             try:
-                # 
                 content = response.read().strip()
-                logger.info("Connected to www.sasview.org. Latest version: %s"
-                             % (content))
+                logger.info("Connected to www.sasview.org. Latest version: %s", content)
                 version_info = json.loads(content)
             except:
Index: src/sas/sasgui/guiframe/gui_style.py
===================================================================
--- src/sas/sasgui/guiframe/gui_style.py	(revision 959eb0181ad06828a748f04512f953aad5b31659)
+++ src/sas/sasgui/guiframe/gui_style.py	(revision a1b8fee73528559155793dd74cda07d0c32e9d72)
@@ -3,4 +3,6 @@
 Provide the style for guiframe
 """
+from __future__ import print_function
+
 import wx
 import os
@@ -79,12 +81,12 @@
 if __name__ == "__main__":
   
-    print GUIFRAME.DEFAULT_STYLE
-    print GUIFRAME.FLOATING_PANEL
-    print GUIFRAME.SINGLE_APPLICATION
+    print(GUIFRAME.DEFAULT_STYLE)
+    print(GUIFRAME.FLOATING_PANEL)
+    print(GUIFRAME.SINGLE_APPLICATION)
     style = GUIFRAME.MULTIPLE_APPLICATIONS
     style &= GUIFRAME.PLOTTING_ON
-    print style == GUIFRAME.PLOTTING_ON
+    print(style == GUIFRAME.PLOTTING_ON)
     style1 = GUIFRAME.MULTIPLE_APPLICATIONS
     style1 &= (~GUIFRAME.MANAGER_ON)
-    print style1 == GUIFRAME.DEFAULT_STYLE
-    print style1
+    print(style1 == GUIFRAME.DEFAULT_STYLE)
+    print(style1)
Index: src/sas/sasgui/guiframe/proxy.py
===================================================================
--- src/sas/sasgui/guiframe/proxy.py	(revision 463e7ffce130ae386f93cd18b87a1120743e88b5)
+++ src/sas/sasgui/guiframe/proxy.py	(revision a1b8fee73528559155793dd74cda07d0c32e9d72)
@@ -1,4 +1,6 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
+from __future__ import print_function
+
 import urllib2
 import sys
@@ -157,5 +159,5 @@
     response = c.connect()
     if response is not None:
-        print 50 * '-'
+        print(50 * '-')
         content = json.loads(response.read().strip())
         pprint(content)
Index: src/sas/sasgui/perspectives/calculator/detector_editor.py
===================================================================
--- src/sas/sasgui/perspectives/calculator/detector_editor.py	(revision 959eb0181ad06828a748f04512f953aad5b31659)
+++ src/sas/sasgui/perspectives/calculator/detector_editor.py	(revision a1b8fee73528559155793dd74cda07d0c32e9d72)
@@ -1,2 +1,3 @@
+from __future__ import print_function
 
 import wx
@@ -34,5 +35,5 @@
             self.set_values()
         except:
-            print "error", sys.exc_value
+            print("error", sys.exc_value)
 
     def _define_structure(self):
Index: src/sas/sasgui/perspectives/calculator/gen_scatter_panel.py
===================================================================
--- src/sas/sasgui/perspectives/calculator/gen_scatter_panel.py	(revision 7432acb919f4013119ca918a73350297e0d4c93f)
+++ src/sas/sasgui/perspectives/calculator/gen_scatter_panel.py	(revision a1b8fee73528559155793dd74cda07d0c32e9d72)
@@ -3,4 +3,5 @@
 This module relies on guiframe manager.
 """
+from __future__ import print_function
 
 import wx
@@ -1998,5 +1999,5 @@
             self.panel.set_volume_ctl_val(str(val))
         except:
-            print "self.panel is not initialized yet"
+            print("self.panel is not initialized yet")
 
     def set_omfpanel_default_shap(self, shape):
Index: src/sas/sasgui/perspectives/calculator/image_viewer.py
===================================================================
--- src/sas/sasgui/perspectives/calculator/image_viewer.py	(revision 7432acb919f4013119ca918a73350297e0d4c93f)
+++ src/sas/sasgui/perspectives/calculator/image_viewer.py	(revision a1b8fee73528559155793dd74cda07d0c32e9d72)
@@ -1,2 +1,4 @@
+from __future__ import print_function
+
 import os
 import sys
@@ -78,5 +80,5 @@
                 wx.PostEvent(parent, StatusEvent(status=err_msg, info="error"))
             else:
-                print err_msg
+                print(err_msg)
 
     def choose_data_file(self, location=None):
@@ -301,5 +303,5 @@
                                                     info="error"))
             else:
-                print err_msg
+                print(err_msg)
         return flag
 
@@ -332,5 +334,5 @@
                                                     info="error"))
             else:
-                print err_msg
+                print(err_msg)
         return flag
 
@@ -361,5 +363,5 @@
                                                     info="error"))
             else:
-                print err_msg
+                print(err_msg)
 
         self.OnClose(event)
Index: src/sas/sasgui/perspectives/calculator/model_editor.py
===================================================================
--- src/sas/sasgui/perspectives/calculator/model_editor.py	(revision 7432acb919f4013119ca918a73350297e0d4c93f)
+++ src/sas/sasgui/perspectives/calculator/model_editor.py	(revision a1b8fee73528559155793dd74cda07d0c32e9d72)
@@ -23,4 +23,6 @@
 #copyright 2009, University of Tennessee
 ################################################################################
+from __future__ import print_function
+
 import wx
 import sys
@@ -871,5 +873,5 @@
         # Put the cursor at appropriate position
         length = len(label)
-        print length
+        print(length)
         if label[length-1] == ')':
             length -= 1
Index: src/sas/sasgui/perspectives/calculator/sld_panel.py
===================================================================
--- src/sas/sasgui/perspectives/calculator/sld_panel.py	(revision 7432acb919f4013119ca918a73350297e0d4c93f)
+++ src/sas/sasgui/perspectives/calculator/sld_panel.py	(revision fe09e9bb0ad6caa9284d13a5c7dfdfc420d0c28b)
@@ -60,5 +60,6 @@
         # Object that receive status event
         self.base = base
-        self.wavelength = WAVELENGTH
+        self.neutron_wavelength = WAVELENGTH
+        self.xray_source_input = WAVELENGTH
         self.parent = parent
         #layout attribute
@@ -67,19 +68,21 @@
         self.compound = ""
         self.density = ""
-        self.wavelength_ctl = None
+        self.neutron_wavelength_ctl = None
+        self.xray_source_input_ctl = None
+        self.xray_cbox = None
         self.neutron_sld_real_ctl = None
         self.neutron_sld_im_ctl = None
-        self.mo_ka_sld_real_ctl = None
-        self.mo_ka_sld_im_ctl = None
-        self.cu_ka_sld_real_ctl = None
-        self.cu_ka_sld_im_ctl = None
+        self.xray_sld_real_ctl = None
+        self.xray_sld_im_ctl = None
         self.neutron_abs_ctl = None
         self.neutron_inc_ctl = None
         self.neutron_length_ctl = None
         self.button_calculate = None
+        self.xray_source = None
         #Draw the panel
         self._do_layout()
         self.SetAutoLayout(True)
         self.Layout()
+        self.fill_xray_cbox()
 
     def _do_layout(self):
@@ -108,8 +111,17 @@
         self.density_ctl = wx.TextCtrl(self, -1, size=(_BOX_WIDTH, -1))
         unit_density_txt = wx.StaticText(self, -1, unit_density)
-        wavelength_txt = wx.StaticText(self, -1, 'Wavelength ')
-        self.wavelength_ctl = wx.TextCtrl(self, -1, size=(_BOX_WIDTH, -1))
-        self.wavelength_ctl.SetValue(str(self.wavelength))
-        unit_a_txt = wx.StaticText(self, -1, unit_a)
+        neutron_wavelength_txt = wx.StaticText(self, -1, 'Neutron wavelength')
+        self.neutron_wavelength_ctl = wx.TextCtrl(self, -1, size=(_BOX_WIDTH, -1))
+        self.neutron_wavelength_ctl.SetValue(str(self.neutron_wavelength))
+        self.xray_source_input_txt = wx.StaticText(self, -1, 'X-ray wavelength')
+        self.xray_source_input_ctl = wx.TextCtrl(self, -1, size=(_BOX_WIDTH, -1))
+        self.xray_source_input_ctl.SetValue(str(self.xray_source_input))
+        neutron_unit_a_txt = wx.StaticText(self, -1, unit_a)
+
+        self.xray_cbox = wx.ComboBox(self, -1, size=(70, 20), style=wx.CB_READONLY)
+        xray_cbox_tip = "Select an element, wavelength or energy"
+        self.xray_cbox.SetToolTipString(xray_cbox_tip)
+        wx.EVT_COMBOBOX(self.xray_cbox, -1, self.on_select_xray)
+
         iy = 0
         ix = 0
@@ -131,11 +143,21 @@
         iy += 1
         ix = 0
-        sizer_input.Add(wavelength_txt, (iy, ix), (1, 1),
-                             wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
-        ix += 1
-        sizer_input.Add(self.wavelength_ctl, (iy, ix), (1, 1),
-                            wx.EXPAND | wx.ADJUST_MINSIZE, 0)
-        ix += 1
-        sizer_input.Add(unit_a_txt, (iy, ix), (1, 1),
+        sizer_input.Add(neutron_wavelength_txt, (iy, ix), (1, 1),
+                             wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
+        ix += 1
+        sizer_input.Add(self.neutron_wavelength_ctl, (iy, ix), (1, 1),
+                            wx.EXPAND | wx.ADJUST_MINSIZE, 0)
+        ix += 1
+        sizer_input.Add(neutron_unit_a_txt, (iy, ix), (1, 1),
+                            wx.EXPAND | wx.ADJUST_MINSIZE, 0)
+        iy += 1
+        ix = 0
+        sizer_input.Add(self.xray_source_input_txt, (iy, ix), (1, 1),
+                             wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
+        ix += 1
+        sizer_input.Add(self.xray_source_input_ctl, (iy, ix), (1, 1),
+                            wx.EXPAND | wx.ADJUST_MINSIZE, 0)
+        ix += 1
+        sizer_input.Add(self.xray_cbox, (iy, ix), (1, 1),
                             wx.EXPAND | wx.ADJUST_MINSIZE, 0)
         boxsizer1.Add(sizer_input)
@@ -151,32 +173,21 @@
                                                  size=(_BOX_WIDTH, -1))
         self.neutron_sld_real_ctl.SetEditable(False)
-        self.neutron_sld_real_ctl.SetToolTipString("Neutron SLD real.")
+        self.neutron_sld_real_ctl.SetToolTipString("Neutron SLD real")
         self.neutron_sld_im_ctl = wx.TextCtrl(self, -1,
                                               size=(_BOX_WIDTH, -1))
         self.neutron_sld_im_ctl.SetEditable(False)
-        self.neutron_sld_im_ctl.SetToolTipString("Neutron SLD imaginary.")
+        self.neutron_sld_im_ctl.SetToolTipString("Neutron SLD imaginary")
         neutron_sld_units_txt = wx.StaticText(self, -1, unit_sld)
 
-        cu_ka_sld_txt = wx.StaticText(self, -1, 'Cu Ka SLD')
-        self.cu_ka_sld_real_ctl = wx.TextCtrl(self, -1,
+        xray_sld_txt = wx.StaticText(self, -1, 'X-ray SLD')
+        self.xray_sld_real_ctl = wx.TextCtrl(self, -1,
                                                size=(_BOX_WIDTH, -1))
-        self.cu_ka_sld_real_ctl.SetEditable(False)
-        self.cu_ka_sld_real_ctl.SetToolTipString("Cu Ka SLD real.")
-        self.cu_ka_sld_im_ctl = wx.TextCtrl(self, -1,
+        self.xray_sld_real_ctl.SetEditable(False)
+        self.xray_sld_real_ctl.SetToolTipString("X-ray SLD real")
+        self.xray_sld_im_ctl = wx.TextCtrl(self, -1,
                                             size=(_BOX_WIDTH, -1))
-        self.cu_ka_sld_im_ctl.SetEditable(False)
-        self.cu_ka_sld_im_ctl.SetToolTipString("Cu Ka SLD imaginary.")
-        cu_ka_sld_units_txt = wx.StaticText(self, -1, unit_sld)
-
-        mo_ka_sld_txt = wx.StaticText(self, -1, 'Mo Ka SLD')
-        self.mo_ka_sld_real_ctl = wx.TextCtrl(self, -1,
-                                               size=(_BOX_WIDTH, -1))
-        self.mo_ka_sld_real_ctl.SetEditable(False)
-        self.mo_ka_sld_real_ctl.SetToolTipString("Mo Ka SLD real.")
-        self.mo_ka_sld_im_ctl = wx.TextCtrl(self, -1,
-                                             size=(_BOX_WIDTH, -1))
-        self.mo_ka_sld_im_ctl.SetEditable(False)
-        self.mo_ka_sld_im_ctl.SetToolTipString("Mo Ka SLD imaginary.")
-        mo_ka_sld_units_txt = wx.StaticText(self, -1, unit_sld)
+        self.xray_sld_im_ctl.SetEditable(False)
+        self.xray_sld_im_ctl.SetToolTipString("X-ray SLD imaginary")
+        xray_sld_units_txt = wx.StaticText(self, -1, unit_sld)
 
         neutron_inc_txt = wx.StaticText(self, -1, 'Neutron Inc. Xs')
@@ -219,8 +230,8 @@
         iy += 1
         ix = 0
-        sizer_output.Add(cu_ka_sld_txt, (iy, ix), (1, 1),
-                             wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
-        ix += 1
-        sizer_output.Add(self.cu_ka_sld_real_ctl, (iy, ix), (1, 1),
+        sizer_output.Add(xray_sld_txt, (iy, ix), (1, 1),
+                             wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
+        ix += 1
+        sizer_output.Add(self.xray_sld_real_ctl, (iy, ix), (1, 1),
                             wx.EXPAND | wx.ADJUST_MINSIZE, 0)
         ix += 1
@@ -228,24 +239,8 @@
                          (iy, ix), (1, 1), wx.EXPAND | wx.ADJUST_MINSIZE, 0)
         ix += 1
-        sizer_output.Add(self.cu_ka_sld_im_ctl,
+        sizer_output.Add(self.xray_sld_im_ctl,
                          (iy, ix), (1, 1), wx.EXPAND | wx.ADJUST_MINSIZE, 0)
         ix += 1
-        sizer_output.Add(cu_ka_sld_units_txt,
-                         (iy, ix), (1, 1), wx.EXPAND | wx.ADJUST_MINSIZE, 0)
-        iy += 1
-        ix = 0
-        sizer_output.Add(mo_ka_sld_txt, (iy, ix), (1, 1),
-                             wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
-        ix += 1
-        sizer_output.Add(self.mo_ka_sld_real_ctl, (iy, ix), (1, 1),
-                            wx.EXPAND | wx.ADJUST_MINSIZE, 0)
-        ix += 1
-        sizer_output.Add(wx.StaticText(self, -1, i_complex),
-                         (iy, ix), (1, 1), wx.EXPAND | wx.ADJUST_MINSIZE, 0)
-        ix += 1
-        sizer_output.Add(self.mo_ka_sld_im_ctl,
-                         (iy, ix), (1, 1), wx.EXPAND | wx.ADJUST_MINSIZE, 0)
-        ix += 1
-        sizer_output.Add(mo_ka_sld_units_txt,
+        sizer_output.Add(xray_sld_units_txt,
                          (iy, ix), (1, 1), wx.EXPAND | wx.ADJUST_MINSIZE, 0)
         iy += 1
@@ -310,4 +305,29 @@
         self.SetSizer(vbox)
 
+    def fill_xray_cbox(self):
+        """
+        fill the x-ray combobox with the sources
+        """
+        source_list = ['[A]', '[keV]', 'Element']
+        for source in source_list:
+            pos = self.xray_cbox.Append(str(source))
+            self.xray_cbox.SetClientData(pos, str(source.strip()))
+        self.xray_cbox.SetSelection(0)
+        self.xray_source = source_list[0]
+
+    def on_select_xray(self, event=None):
+        """
+        On Selecting a source
+        """
+        item = event.GetEventObject()
+        self.xray_source = item.GetValue().strip()
+
+        if self.xray_source == "[A]":
+            self.xray_source_input_txt.SetLabel("X-ray wavelength")
+        elif self.xray_source == "[keV]":
+            self.xray_source_input_txt.SetLabel("X-ray energy")
+        elif self.xray_source == "Element":
+            self.xray_source_input_txt.SetLabel("X-ray source")
+
     def on_help(self, event):
         """
@@ -363,17 +383,42 @@
             msg += "Error for Density value :expect float"
 
-        self.wavelength = self.wavelength_ctl.GetValue()
-        if str(self.wavelength).lstrip().rstrip() == "":
-            self.wavelength = WAVELENGTH
-            self.wavelength_ctl.SetValue(str(WAVELENGTH))
-            self.wavelength_ctl.SetBackgroundColour(wx.WHITE)
-            self.wavelength_ctl.Refresh()
+        self.neutron_wavelength = self.neutron_wavelength_ctl.GetValue()
+        self.xray_source_input = self.xray_source_input_ctl.GetValue()
+
+        if str(self.neutron_wavelength).lstrip().rstrip() == "":
+            self.neutron_wavelength = WAVELENGTH
+            self.neutron_wavelength_ctl.SetValue(str(WAVELENGTH))
+            self.neutron_wavelength_ctl.SetBackgroundColour(wx.WHITE)
+            self.neutron_wavelength_ctl.Refresh()
             msg += "Default value for wavelength is 6.0"
         else:
-            if check_float(self.wavelength_ctl):
-                self.wavelength = float(self.wavelength)
+            if check_float(self.neutron_wavelength_ctl):
+                self.neutron_wavelength = float(self.neutron_wavelength)
             else:
                 flag = False
                 msg += "Error for wavelength value :expect float"
+
+        if str(self.xray_source_input).lstrip().rstrip() == "":
+            self.xray_source_input = WAVELENGTH
+            self.xray_source_input_ctl.SetValue(str(WAVELENGTH))
+            self.xray_source_input_ctl.SetBackgroundColour(wx.WHITE)
+            self.xray_source_input_ctl.Refresh()
+            msg += "Default value for wavelength is 6.0"
+        else:
+            if (self.xray_source == '[A]') or (self.xray_source == '[keV]'):
+                if check_float(self.xray_source_input_ctl):
+                    self.xray_source_input = float(self.xray_source_input)
+                else:
+                    flag = False
+                    msg += "Error for wavelength value :expect float"
+            elif (self.xray_source == 'Element'):
+                try:
+                    import periodictable
+                    exec("periodictable." + self.xray_source_input)
+                except AttributeError:
+                    flag = False
+                    msg += "X-ray element supplied isn't in the database"
+
+
 
         self.compound = self.compound_ctl.GetValue().lstrip().rstrip()
@@ -410,5 +455,4 @@
         return xray_sld_from_atoms(atom, density=density, energy=energy)
 
-
     def calculateSld(self, event):
         """
@@ -430,11 +474,18 @@
                         length = neutron_scattering(compound=self.compound,
                                    density=self.density,
-                                   wavelength=self.wavelength)
-            cu_real, cu_im = self.calculate_sld_helper(element="Cu",
-                                                 density=self.density,
-                                        molecule_formula=self.sld_formula)
-            mo_real, mo_im = self.calculate_sld_helper(element="Mo",
-                                                       density=self.density,
-                                     molecule_formula=self.sld_formula)
+                                   wavelength=self.neutron_wavelength)
+            if self.xray_source == "[A]":
+                energy = xray_energy(self.xray_source_input)
+                xray_real, xray_im = xray_sld_from_atoms(self.sld_formula.atoms,
+                                                         density=self.density,
+                                                         energy=energy)
+            elif self.xray_source == "[keV]":
+                xray_real, xray_im = xray_sld_from_atoms(self.sld_formula.atoms,
+                                                         density=self.density,
+                                                         energy=self.xray_source_input)
+            elif self.xray_source == "Element":
+                xray_real, xray_im = self.calculate_sld_helper(element=self.xray_source_input,
+                                                               density=self.density,
+                                                               molecule_formula=self.sld_formula)
             # set neutron sld values
             val = format_number(sld_real * _SCALE)
@@ -443,11 +494,7 @@
             self.neutron_sld_im_ctl.SetValue(val)
             # Compute the Cu SLD
-            self.cu_ka_sld_real_ctl.SetValue(format_number(cu_real * _SCALE))
-            val = format_number(math.fabs(cu_im) * _SCALE)
-            self.cu_ka_sld_im_ctl.SetValue(val)
-            # Compute the Mo SLD
-            self.mo_ka_sld_real_ctl.SetValue(format_number(mo_real * _SCALE))
-            val = format_number(math.fabs(mo_im) * _SCALE)
-            self.mo_ka_sld_im_ctl.SetValue(val)
+            self.xray_sld_real_ctl.SetValue(format_number(xray_real * _SCALE))
+            val = format_number(math.fabs(xray_im) * _SCALE)
+            self.xray_sld_im_ctl.SetValue(val)
             # set incoherence and absorption
             self.neutron_inc_ctl.SetValue(format_number(incoh))
@@ -456,5 +503,6 @@
             self.neutron_length_ctl.SetValue(format_number(length))
             # display wavelength
-            self.wavelength_ctl.SetValue(str(self.wavelength))
+            #self.wavelength_ctl.SetValue(str(self.wavelength))
+            #self.wavelength_ctl.SetValue(str(self.wavelength))
         except:
             if self.base is not None:
@@ -470,8 +518,6 @@
         self.neutron_sld_real_ctl.SetValue("")
         self.neutron_sld_im_ctl.SetValue("")
-        self.mo_ka_sld_real_ctl.SetValue("")
-        self.mo_ka_sld_im_ctl.SetValue("")
-        self.cu_ka_sld_real_ctl.SetValue("")
-        self.cu_ka_sld_im_ctl.SetValue("")
+        self.xray_sld_real_ctl.SetValue("")
+        self.xray_sld_im_ctl.SetValue("")
         self.neutron_abs_ctl.SetValue("")
         self.neutron_inc_ctl.SetValue("")
Index: src/sas/sasgui/perspectives/fitting/basepage.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/basepage.py	(revision 463e7ffce130ae386f93cd18b87a1120743e88b5)
+++ src/sas/sasgui/perspectives/fitting/basepage.py	(revision a1b8fee73528559155793dd74cda07d0c32e9d72)
@@ -2,4 +2,6 @@
 Base Page for fitting
 """
+from __future__ import print_function
+
 import sys
 import os
@@ -657,8 +659,8 @@
         # It seems MAC needs wxCallAfter
         if event.GetId() == GUIFRAME_ID.COPYEX_ID:
-            print "copy excel"
+            print("copy excel")
             wx.CallAfter(self.get_copy_excel)
         elif event.GetId() == GUIFRAME_ID.COPYLAT_ID:
-            print "copy latex"
+            print("copy latex")
             wx.CallAfter(self.get_copy_latex)
         else:
@@ -3368,6 +3370,6 @@
         except Exception:
             logger.error(traceback.format_exc())
-            print "Error in BasePage._paste_poly_help: %s" % \
-                  sys.exc_info()[1]
+            print("Error in BasePage._paste_poly_help: %s" % \
+                  sys.exc_info()[1])
 
     def _set_disp_cb(self, isarray, item):
@@ -3398,5 +3400,5 @@
             Moveit; This method doesn't belong here
         """
-        print "BasicPage.update_pinhole_smear was called: skipping"
+        print("BasicPage.update_pinhole_smear was called: skipping")
         return
 
@@ -3574,5 +3576,5 @@
         # check model type to show sizer
         if self.model is not None:
-            print "_set_model_sizer_selection: disabled."
+            print("_set_model_sizer_selection: disabled.")
             # self._set_model_sizer_selection(self.model)
 
Index: src/sas/sasgui/perspectives/fitting/fitting.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/fitting.py	(revision 7432acb919f4013119ca918a73350297e0d4c93f)
+++ src/sas/sasgui/perspectives/fitting/fitting.py	(revision a1b8fee73528559155793dd74cda07d0c32e9d72)
@@ -11,4 +11,6 @@
 #copyright 2009, University of Tennessee
 ################################################################################
+from __future__ import print_function
+
 import re
 import sys
@@ -1253,5 +1255,5 @@
         """
         """
-        print "update_fit result", result
+        print("update_fit result", result)
 
     def _batch_fit_complete(self, result, pars, page_id,
@@ -2046,5 +2048,5 @@
             res = (fn - gn) / en
         except ValueError:
-            print "Unmatch lengths %s, %s, %s" % (len(fn), len(gn), len(en))
+            print("Unmatch lengths %s, %s, %s" % (len(fn), len(gn), len(en)))
             return
 
Index: src/sas/sasgui/perspectives/fitting/media/plugin.rst
===================================================================
--- src/sas/sasgui/perspectives/fitting/media/plugin.rst	(revision 984f3fc674aba45cfbaea60989743bfcf9507987)
+++ src/sas/sasgui/perspectives/fitting/media/plugin.rst	(revision 72100ee7baecfd5d180a35d3c9f34a0b02fa5726)
@@ -538,5 +538,5 @@
     sin, cos, tan, asin, acos, atan:
         Trigonometry functions and inverses, operating on radians.
-    sinh, cos, tanh, asinh, acosh, atanh:
+    sinh, cosh, tanh, asinh, acosh, atanh:
         Hyperbolic trigonometry functions.
     atan2(y,x):
Index: src/sas/sasgui/perspectives/fitting/models.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/models.py	(revision 56a282cafe4912b6aaa6e88b2b92225eb5a897fa)
+++ src/sas/sasgui/perspectives/fitting/models.py	(revision 56a282cafe4912b6aaa6e88b2b92225eb5a897fa)
@@ -2,4 +2,6 @@
     Utilities to manage models
 """
+from __future__ import print_function
+
 import traceback
 import os
@@ -141,5 +143,5 @@
         type, value, tb = sys.exc_info()
         if type is not None and issubclass(type, py_compile.PyCompileError):
-            print "Problem with", repr(value)
+            print("Problem with", repr(value))
             raise type, value, tb
         return 1
Index: src/sas/sasgui/perspectives/pr/pr.py
===================================================================
--- src/sas/sasgui/perspectives/pr/pr.py	(revision 7432acb919f4013119ca918a73350297e0d4c93f)
+++ src/sas/sasgui/perspectives/pr/pr.py	(revision a1b8fee73528559155793dd74cda07d0c32e9d72)
@@ -15,4 +15,5 @@
 # Make sure the option of saving each curve is available
 # Use the I(q) curve as input and compare the output to P(r)
+from __future__ import print_function
 
 import sys
@@ -230,5 +231,5 @@
         out, cov = pr.pr_fit()
         for i in range(len(out)):
-            print "%g +- %g" % (out[i], math.sqrt(cov[i][i]))
+            print("%g +- %g" % (out[i], math.sqrt(cov[i][i])))
 
         # Show input P(r)
@@ -318,5 +319,5 @@
             except:
                 err[i] = 1.0
-                print "Error getting error", value, x[i]
+                print("Error getting error", value, x[i])
 
         new_plot = Data1D(x, y)
Index: src/sas/sasgui/perspectives/simulation/ShapeParameters.py
===================================================================
--- src/sas/sasgui/perspectives/simulation/ShapeParameters.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
+++ src/sas/sasgui/perspectives/simulation/ShapeParameters.py	(revision a1b8fee73528559155793dd74cda07d0c32e9d72)
@@ -8,4 +8,6 @@
 copyright 2009, University of Tennessee
 """
+from __future__ import print_function
+
 import wx
 import sys
@@ -312,5 +314,5 @@
             self.parent.GetSizer().Layout()
         except:
-            print "TODO: move the Layout call of editShape up to the caller"
+            print("TODO: move the Layout call of editShape up to the caller")
 
     def _readCtrlFloat(self, ctrl):
@@ -392,6 +394,6 @@
                     self.current_shape.params[item[0]] = tmp 
         except:
-            print "Could not create"
-            print sys.exc_value
+            print("Could not create")
+            print(sys.exc_value)
                 
     def _onCreate(self, evt):
@@ -485,5 +487,5 @@
         indices = self.shape_listbox.GetSelections()
         if len(indices)>0:
-            print "NOT YET IMPLMENTED"
-            print "renaming", self.shape_listbox.GetString(indices[0])
-                
+            print("NOT YET IMPLMENTED")
+            print("renaming", self.shape_listbox.GetString(indices[0]))
+                
Index: src/sas/sasgui/plottools/PlotPanel.py
===================================================================
--- src/sas/sasgui/plottools/PlotPanel.py	(revision 7432acb919f4013119ca918a73350297e0d4c93f)
+++ src/sas/sasgui/plottools/PlotPanel.py	(revision a1b8fee73528559155793dd74cda07d0c32e9d72)
@@ -2,4 +2,6 @@
     Plot panel.
 """
+from __future__ import print_function
+
 import logging
 import traceback
@@ -38,5 +40,5 @@
 def show_tree(obj, d=0):
     """Handy function for displaying a tree of graph objects"""
-    print "%s%s" % ("-"*d, obj.__class__.__name__)
+    print("%s%s" % ("-"*d, obj.__class__.__name__))
     if 'get_children' in dir(obj):
         for a in obj.get_children(): show_tree(a, d + 1)
@@ -2014,5 +2016,5 @@
             self.toolbar.copy_figure(self.canvas)
         except:
-            print "Error in copy Image"
+            print("Error in copy Image")
 
 
Index: src/sas/sasgui/plottools/binder.py
===================================================================
--- src/sas/sasgui/plottools/binder.py	(revision 463e7ffce130ae386f93cd18b87a1120743e88b5)
+++ src/sas/sasgui/plottools/binder.py	(revision a1b8fee73528559155793dd74cda07d0c32e9d72)
@@ -2,4 +2,6 @@
 Extension to MPL to support the binding of artists to key/mouse events.
 """
+from __future__ import print_function
+
 import sys
 import logging
@@ -63,5 +65,5 @@
             ]
         except:
-            print "bypassing scroll_event: wrong matplotlib version"
+            print("bypassing scroll_event: wrong matplotlib version")
             self._connections = [
                 canvas.mpl_connect('motion_notify_event', self._onMotion),
Index: src/sas/sasgui/plottools/convert_units.py
===================================================================
--- src/sas/sasgui/plottools/convert_units.py	(revision 959eb0181ad06828a748f04512f953aad5b31659)
+++ src/sas/sasgui/plottools/convert_units.py	(revision a1b8fee73528559155793dd74cda07d0c32e9d72)
@@ -3,4 +3,6 @@
     This is a cleaned up version of unitConverter.py
 """
+from __future__ import print_function
+
 import re
 import string
@@ -68,11 +70,11 @@
     unit8 = "m/s^{4}"  #         x^2               (m/s^{4})^{2}
 
-    print "this unit1 %s ,its powerer %s , and value %s" % (unit1, 1, convert_unit(1, unit1))
-    print "this unit2 %s ,its powerer %s , and value %s" % (unit2, 1, convert_unit(1, unit2))
-    print "this unit3 %s ,its powerer %s , and value %s" % (unit3, 2, convert_unit(2, unit3))
-    print "this unit4 %s ,its powerer %s , and value %s" % (unit4, -1, convert_unit(-1, unit4))
-    print "this unit5 %s ,its powerer %s , and value %s" % (unit5, 2, convert_unit(2, unit5))
-    print "this unit6 %s ,its powerer %s , and value %s" % (unit6, 2, convert_unit(2, unit6))
-    print "this unit7 %s ,its powerer %s , and value %s" % (unit7, -1, convert_unit(-1, unit7))
-    print "this unit8 %s ,its powerer %s , and value %s" % (unit8, 2, convert_unit(2, unit8))
-    print "this unit9 %s ,its powerer %s , and value %s" % (unit9, 2, convert_unit(2, unit9))
+    print("this unit1 %s ,its powerer %s , and value %s" % (unit1, 1, convert_unit(1, unit1)))
+    print("this unit2 %s ,its powerer %s , and value %s" % (unit2, 1, convert_unit(1, unit2)))
+    print("this unit3 %s ,its powerer %s , and value %s" % (unit3, 2, convert_unit(2, unit3)))
+    print("this unit4 %s ,its powerer %s , and value %s" % (unit4, -1, convert_unit(-1, unit4)))
+    print("this unit5 %s ,its powerer %s , and value %s" % (unit5, 2, convert_unit(2, unit5)))
+    print("this unit6 %s ,its powerer %s , and value %s" % (unit6, 2, convert_unit(2, unit6)))
+    print("this unit7 %s ,its powerer %s , and value %s" % (unit7, -1, convert_unit(-1, unit7)))
+    print("this unit8 %s ,its powerer %s , and value %s" % (unit8, 2, convert_unit(2, unit8)))
+    print("this unit9 %s ,its powerer %s , and value %s" % (unit9, 2, convert_unit(2, unit9)))
Index: src/sas/sasgui/plottools/fittings.py
===================================================================
--- src/sas/sasgui/plottools/fittings.py	(revision ac07a3acc20dbf79c564bf642aece71a02c2c862)
+++ src/sas/sasgui/plottools/fittings.py	(revision a1b8fee73528559155793dd74cda07d0c32e9d72)
@@ -14,4 +14,6 @@
 
 """
+from __future__ import print_function
+
 from scipy import optimize
 
@@ -106,4 +108,4 @@
     chisqr, out, cov = sasfit(line, [cstA, cstB], event.x, y, 0)
     # print "Output parameters:", out
-    print "The right answer is [70.0, 1.0]"
-    print chisqr, out, cov
+    print("The right answer is [70.0, 1.0]")
+    print(chisqr, out, cov)
Index: src/sas/sasgui/plottools/plottable_interactor.py
===================================================================
--- src/sas/sasgui/plottools/plottable_interactor.py	(revision 45dffa69cb5935e2da7c77a2f040debb07ceb1c6)
+++ src/sas/sasgui/plottools/plottable_interactor.py	(revision a1b8fee73528559155793dd74cda07d0c32e9d72)
@@ -2,5 +2,8 @@
     This module allows more interaction with the plot
 """
+from __future__ import print_function
+
 from BaseInteractor import _BaseInteractor
+
 
 class PointInteractor(_BaseInteractor):
@@ -156,5 +159,5 @@
 
     def clear(self):
-        print "plottable_interactor.clear()"
+        print("plottable_interactor.clear()")
 
     def _on_click(self, evt):
