Index: src/sas/qtgui/Utilities/GuiUtils.py
===================================================================
--- src/sas/qtgui/Utilities/GuiUtils.py	(revision 88e1f57e340b062a07d1e5693c8b7b8a4edc4b32)
+++ src/sas/qtgui/Utilities/GuiUtils.py	(revision b3e8629bf18b74f4214d6552e620fcbc4e73a28c)
@@ -9,5 +9,5 @@
 import warnings
 import webbrowser
-import urlparse
+import urllib.parse
 
 warnings.simplefilter("ignore")
@@ -86,5 +86,5 @@
         #logging.error("Error loading %s/%s: %s" % (path, confg_file, sys.exc_value))
     except ValueError:
-        print "Value error"
+        print("Value error")
         pass
     finally:
@@ -242,6 +242,7 @@
     """
     assert isinstance(item, QtGui.QStandardItem)
-    assert isinstance(update_data, QtCore.QVariant)
-    py_update_data = update_data.toPyObject()
+    #assert isinstance(update_data, QtCore.QVariant)
+    #py_update_data = update_data.toPyObject()
+    py_update_data = update_data
 
     # Check if data with the same ID is already present
@@ -249,5 +250,5 @@
         plot_item = item.child(index)
         if plot_item.isCheckable():
-            plot_data = plot_item.child(0).data().toPyObject()
+            plot_data = plot_item.child(0).data() #.toPyObject()
             if plot_data.id is not None and plot_data.id == py_update_data.id:
                 # replace data section in item
@@ -270,6 +271,7 @@
     Adds QVariant 'update_data' to that row.
     """
-    assert isinstance(update_data, QtCore.QVariant)
-    py_update_data = update_data.toPyObject()
+    #assert isinstance(update_data, QtCore.QVariant)
+    #py_update_data = update_data.toPyObject()
+    py_update_data = update_data
 
     checkbox_item = QtGui.QStandardItem()
@@ -309,5 +311,6 @@
     object_item = QtGui.QStandardItem()
     object_item.setText(name)
-    object_item.setData(QtCore.QVariant(update_data))
+    #object_item.setData(QtCore.QVariant(update_data))
+    object_item.setData(update_data)
 
     # Append the new row to the main item
@@ -319,9 +322,8 @@
     """
     assert isinstance(model_item, QtGui.QStandardItemModel)
-    assert isinstance(filename, basestring)
+    assert isinstance(filename, str)
 
     # Iterate over model looking for named items
-    item = list(filter(lambda i: str(i.text()) == filename,
-                  [model_item.item(index) for index in range(model_item.rowCount())]))
+    item = list([i for i in [model_item.item(index) for index in range(model_item.rowCount())] if str(i.text()) == filename])
     return item[0] if len(item)>0 else None
 
@@ -331,5 +333,5 @@
     """
     assert isinstance(model_item, QtGui.QStandardItemModel)
-    assert isinstance(filename, basestring)
+    assert isinstance(filename, str)
 
     plot_data = []
@@ -339,5 +341,5 @@
         if str(item.text()) == filename:
             # TODO: assure item type is correct (either data1/2D or Plotter)
-            plot_data.append(item.child(0).data().toPyObject())
+            plot_data.append(item.child(0).data()) #.toPyObject())
             # Going 1 level deeper only
             for index_2 in range(item.rowCount()):
@@ -345,5 +347,5 @@
                 if item_2 and item_2.isCheckable():
                     # TODO: assure item type is correct (either data1/2D or Plotter)
-                    plot_data.append(item_2.child(0).data().toPyObject())
+                    plot_data.append(item_2.child(0).data()) #.toPyObject())
 
     return plot_data
@@ -361,5 +363,5 @@
         if item.isCheckable() and item.checkState() == QtCore.Qt.Checked:
             # TODO: assure item type is correct (either data1/2D or Plotter)
-            plot_data.append((item, item.child(0).data().toPyObject()))
+            plot_data.append((item, item.child(0).data())) #.toPyObject()))
         # Going 1 level deeper only
         for index_2 in range(item.rowCount()):
@@ -367,5 +369,5 @@
             if item_2 and item_2.isCheckable() and item_2.checkState() == QtCore.Qt.Checked:
                 # TODO: assure item type is correct (either data1/2D or Plotter)
-                plot_data.append((item_2, item_2.child(0).data().toPyObject()))
+                plot_data.append((item_2, item_2.child(0).data())) #.toPyObject()))
 
     return plot_data
@@ -419,10 +421,10 @@
     Check the URL first, though.
     """
-    parsed_url = urlparse.urlparse(url)
+    parsed_url = urllib.parse.urlparse(url)
     if parsed_url.scheme:
         webbrowser.open(url)
     else:
         msg = "Attempt at opening an invalid URL"
-        raise AttributeError, msg
+        raise AttributeError(msg)
 
 def retrieveData1d(data):
@@ -433,5 +435,5 @@
     if not isinstance(data, Data1D):
         msg = "Incorrect type passed to retrieveData1d"
-        raise AttributeError, msg
+        raise AttributeError(msg)
     try:
         xmin = min(data.x)
@@ -441,5 +443,5 @@
                     data.filename
         #logging.error(msg)
-        raise ValueError, msg
+        raise ValueError(msg)
 
     text = data.__str__()
@@ -485,5 +487,5 @@
     if not isinstance(data, Data2D):
         msg = "Incorrect type passed to retrieveData2d"
-        raise AttributeError, msg
+        raise AttributeError(msg)
 
     text = data.__str__()
@@ -499,5 +501,5 @@
     dy_val = 0.0
     len_data = len(data.qx_data)
-    for index in xrange(0, len_data):
+    for index in range(0, len_data):
         x_val = data.qx_data[index]
         y_val = data.qy_data[index]
@@ -756,5 +758,5 @@
     The assumption - data stored in SasView standard, in child 0
     """
-    return item.child(0).data().toPyObject()
+    return item.child(0).data() #.toPyObject()
 
 def formatNumber(value, high=False):
