Index: src/sas/qtgui/DataExplorer.py
===================================================================
--- src/sas/qtgui/DataExplorer.py	(revision 8548d7394b7d5bccb2adcbf40bfba40d97186d70)
+++ src/sas/qtgui/DataExplorer.py	(revision ef01be48d93733bf0b5ac6ff7ccce2ac92d368b6)
@@ -410,5 +410,4 @@
                 raise AttributeError, msg
 
-
         if plots and \
            hasattr(new_plot, 'data') and \
@@ -765,9 +764,11 @@
         data = GuiUtils.dataFromItem(model_item)
 
-        dimension = 1 if isinstance(data, Data1D) else 2
+        method_name = 'Plotter'
+        if isinstance(data, Data2D):
+            method_name='Plotter2D'
 
         # TODO: Replace this with the proper MaskPlotPanel from plottools
-        new_plot = Plotter(self)
-        new_plot.data(data)
+        new_plot = globals()[method_name](self, quickplot=True)
+        new_plot.data = data
         new_plot.plot(marker='o', linestyle='')
 
Index: src/sas/qtgui/PlotHelper.py
===================================================================
--- src/sas/qtgui/PlotHelper.py	(revision 8cb6cd6e52ab1f1031a89aeaad89921ef6ed9e98)
+++ src/sas/qtgui/PlotHelper.py	(revision ef01be48d93733bf0b5ac6ff7ccce2ac92d368b6)
@@ -28,6 +28,6 @@
     Deletes an existing plot from the dictionary
     """
-    assert plot_id in this._plots
-    del this._plots[plot_id]
+    if plot_id in this._plots:
+        del this._plots[plot_id]
 
 def currentPlots():
@@ -41,7 +41,5 @@
     Returns the plot referenced by the ID
     """
-    assert plot_id in this._plots
-
-    return this._plots[plot_id]
+    return this._plots[plot_id] if plot_id in this._plots else None
 
 def idOfPlot(plot):
Index: src/sas/qtgui/Plotter.py
===================================================================
--- src/sas/qtgui/Plotter.py	(revision 31c5b583d8c577c4ed72be87d22d34ec2ed50c04)
+++ src/sas/qtgui/Plotter.py	(revision ef01be48d93733bf0b5ac6ff7ccce2ac92d368b6)
@@ -10,48 +10,15 @@
 from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar
 import matplotlib.pyplot as plt
+import matplotlib as mpl
 
 import sas.qtgui.PlotHelper as PlotHelper
+from sas.qtgui.PlotterBase import PlotterBase
 
-class Plotter(QtGui.QDialog):
-    def __init__(self, parent=None):
-        super(Plotter, self).__init__(parent)
-
-        # Required for the communicator
-        self.parent = parent
-
-        # a figure instance to plot on
-        self.figure = plt.figure()
-
-        # this is the Canvas Widget that displays the `figure`
-        # it takes the `figure` instance as a parameter to __init__
-        self.canvas = FigureCanvas(self.figure)
-
-        # this is the Navigation widget
-        # it takes the Canvas widget and a parent
-        self.toolbar = NavigationToolbar(self.canvas, self)
-
-        # set the layout
-        layout = QtGui.QVBoxLayout()
-        layout.addWidget(self.canvas)
-        layout.addWidget(self.toolbar)
-        self.setLayout(layout)
-
-        # defaults
-        self._current_plot = 111
-        self._data = []
-        self._title = "Plot"
-        self._id = ""
-        self._xlabel = "X"
-        self._ylabel = "Y"
-        self._ax = self.figure.add_subplot(self._current_plot)
-
-        # Notify the helper
-        PlotHelper.addPlot(self)
-        # Notify the listeners
-        self.parent.communicator.activeGraphsSignal.emit(PlotHelper.currentPlots())
+class Plotter(PlotterBase):
+    def __init__(self, parent=None, quickplot=False):
+        super(Plotter, self).__init__(parent, quickplot=quickplot)
 
     @property
     def data(self):
-        """ data getter """
         return self._data
 
@@ -60,27 +27,8 @@
         """ data setter """
         self._data = value
-
-    def title(self, title=""):
-        """ title setter """
-        self._title = title
-
-    def id(self, id=""):
-        """ id setter """
-        self._id = id
-
-    def x_label(self, xlabel=""):
-        """ x-label setter """
-        self._xlabel = xlabel
-
-    def y_label(self, ylabel=""):
-        """ y-label setter """
-        self._ylabel = ylabel
-
-    def clean(self):
-        """
-        Redraw the graph
-        """
-        self.figure.delaxes(self._ax)
-        self._ax = self.figure.add_subplot(self._current_plot)
+        self.label=value.name
+        self.xLabel(xlabel="%s(%s)"%(value._xaxis, value._xunit))
+        self.yLabel(ylabel="%s(%s)"%(value._yaxis, value._yunit))
+        self.title(title=value.title)
 
     def plot(self, marker=None, linestyle=None):
@@ -89,5 +37,5 @@
         """
         # create an axis
-        ax = self._ax
+        ax = self.ax
 
         if marker == None:
@@ -98,11 +46,14 @@
 
         # plot data with legend
-        ax.plot(self._data.x, self._data.y, marker=marker, linestyle=linestyle, label=self._title)
+        ax.plot(self._data.x, self._data.y, marker=marker, linestyle=linestyle, label=self.title)
 
         # Now add the legend with some customizations.
-        legend = ax.legend(loc='lower left', shadow=True)
+        legend = ax.legend(loc='upper right', shadow=True)
 
-        ax.set_ylabel(self._ylabel)
-        ax.set_xlabel(self._xlabel)
+        ax.set_ylabel(self.y_label)
+        ax.set_xlabel(self.x_label)
+        # Title only for regular charts
+        if not self.quickplot:
+            ax.set_title(label=self.title)
 
         ax.set_yscale('log')
@@ -112,12 +63,2 @@
         self.canvas.draw()
 
-    def closeEvent(self, event):
-        """
-        Overwrite the close event adding helper notification
-        """
-        # Please remove me from your database.
-        PlotHelper.deletePlot(PlotHelper.idOfPlot(self))
-        # Notify the listeners
-        self.parent.communicator.activeGraphsSignal.emit(PlotHelper.currentPlots())
-        event.accept()
-
Index: src/sas/qtgui/Plotter2D.py
===================================================================
--- src/sas/qtgui/Plotter2D.py	(revision 31c5b583d8c577c4ed72be87d22d34ec2ed50c04)
+++ src/sas/qtgui/Plotter2D.py	(revision ef01be48d93733bf0b5ac6ff7ccce2ac92d368b6)
@@ -18,47 +18,9 @@
 import sas.qtgui.PlotUtilities as PlotUtilities
 import sas.qtgui.PlotHelper as PlotHelper
+from sas.qtgui.PlotterBase import PlotterBase
 
-class Plotter2D(QtGui.QDialog):
-    def __init__(self, parent=None):
-        super(Plotter2D, self).__init__(parent)
-
-        # Required for the communicator
-        self.parent = parent
-
-        # a figure instance to plot on
-        self.figure = plt.figure()
-
-        # this is the Canvas Widget that displays the `figure`
-        # it takes the `figure` instance as a parameter to __init__
-        self.canvas = FigureCanvas(self.figure)
-
-        # this is the Navigation widget
-        # it takes the Canvas widget and a parent
-        self.toolbar = NavigationToolbar(self.canvas, self)
-
-        # set the layout
-        layout = QtGui.QVBoxLayout()
-        layout.addWidget(self.canvas)
-        layout.addWidget(self.toolbar)
-        self.setLayout(layout)
-
-        # defaults
-        self._current_plot = 111
-        self._data = []
-        self._qx_data = []
-        self._qy_data = []
-        self._color=0
-        self._symbol=0
-        self._scale = 'linear'
-
-        # default color map
-        self._cmap = DEFAULT_CMAP
-
-        self._ax = self.figure.add_subplot(self._current_plot)
-
-        # Notify the helper
-        PlotHelper.addPlot(self)
-        # Notify the listeners
-        self.parent.communicator.activeGraphsSignal.emit(PlotHelper.currentPlots())
+class Plotter2D(PlotterBase):
+    def __init__(self, parent=None, quickplot=False):
+        super(Plotter2D, self).__init__(parent, quickplot=quickplot)
 
     @property
@@ -70,39 +32,16 @@
         """ data setter """
         self._data = data
-        self._qx_data=data.qx_data
-        self._qy_data=data.qy_data
-        self._xmin=data.xmin
-        self._xmax=data.xmax
-        self._ymin=data.ymin
-        self._ymax=data.ymax
-        self._zmin=data.zmin
-        self._zmax=data.zmax
-        self._label=data.name
-        self.x_label(xlabel=data._xaxis + data._xunit)
-        self.y_label(ylabel=data._yaxis + data._yunit)
+        self.qx_data=data.qx_data
+        self.qy_data=data.qy_data
+        self.xmin=data.xmin
+        self.xmax=data.xmax
+        self.ymin=data.ymin
+        self.ymax=data.ymax
+        self.zmin=data.zmin
+        self.zmax=data.zmax
+        self.label=data.name
+        self.xLabel(xlabel="%s(%s)"%(data._xaxis, data._xunit))
+        self.yLabel(ylabel="%s(%s)"%(data._yaxis, data._yunit))
         self.title(title=data.title)
-
-    def title(self, title=""):
-        """ title setter """
-        self._title = title
-
-    def id(self, id=""):
-        """ id setter """
-        self._id = id
-
-    def x_label(self, xlabel=""):
-        """ x-label setter """
-        self._xlabel = r'$%s$'% xlabel
-
-    def y_label(self, ylabel=""):
-        """ y-label setter """
-        self._ylabel = r'$%s$'% ylabel
-
-    def clean(self):
-        """
-        Redraw the graph
-        """
-        self.figure.delaxes(self._ax)
-        self._ax = self.figure.add_subplot(self._current_plot)
 
     def plot(self, marker=None, linestyle=None):
@@ -110,24 +49,26 @@
         Plot 2D self._data
         """
-        # create an axis
-        ax = self._ax
+        # create an axis object
+        ax = self.ax
 
         # graph properties
-        ax.set_xlabel(self._xlabel)
-        ax.set_ylabel(self._ylabel)
-        ax.set_title(label=self._title)
+        ax.set_xlabel(self.x_label)
+        ax.set_ylabel(self.y_label)
+        # Title only for regular charts
+        if not self.quickplot:
+            ax.set_title(label=self.title)
 
         # Re-adjust colorbar
-        # self.figure.subplots_adjust(left=0.2, right=.8, bottom=.2)
+        self.figure.subplots_adjust(left=0.2, right=.8, bottom=.2)
 
-        output = PlotUtilities.build_matrix(self._data.data, self._qx_data, self._qy_data)
+        output = PlotUtilities.build_matrix(self._data.data, self.qx_data, self.qy_data)
 
         im = ax.imshow(output,
                        interpolation='nearest',
                        origin='lower',
-                       vmin=self._zmin, vmax=self._zmax,
-                       cmap=self._cmap,
-                       extent=(self._xmin, self._xmax,
-                               self._ymin, self._ymax))
+                       vmin=self.zmin, vmax=self.zmax,
+                       cmap=self.cmap,
+                       extent=(self.xmin, self.xmax,
+                               self.ymin, self.ymax))
 
         cbax = self.figure.add_axes([0.84, 0.2, 0.02, 0.7])
@@ -138,13 +79,2 @@
         # Schedule the draw for the next time the event loop is idle.
         self.canvas.draw_idle()
-
-    def closeEvent(self, event):
-        """
-        Overwrite the close event adding helper notification
-        """
-        # Please remove me from your database.
-        PlotHelper.deletePlot(PlotHelper.idOfPlot(self))
-        # Notify the listeners
-        self.parent.communicator.activeGraphsSignal.emit(PlotHelper.currentPlots())
-        event.accept()
-
Index: src/sas/qtgui/PlotterBase.py
===================================================================
--- src/sas/qtgui/PlotterBase.py	(revision ef01be48d93733bf0b5ac6ff7ccce2ac92d368b6)
+++ src/sas/qtgui/PlotterBase.py	(revision ef01be48d93733bf0b5ac6ff7ccce2ac92d368b6)
@@ -0,0 +1,363 @@
+import logging
+import copy
+import numpy
+import pylab
+
+from PyQt4 import QtGui
+from PyQt4 import QtCore
+
+# TODO: Replace the qt4agg calls below with qt5 equivalent.
+# Requires some code modifications.
+# https://www.boxcontrol.net/embedding-matplotlib-plot-on-pyqt5-gui.html
+#
+from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
+from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar
+from matplotlib.backend_bases import NavigationToolbar2
+
+import matplotlib.pyplot as plt
+
+DEFAULT_CMAP = pylab.cm.jet
+from sas.qtgui.ScaleProperties import ScaleProperties
+import sas.qtgui.PlotUtilities as PlotUtilities
+import sas.qtgui.PlotHelper as PlotHelper
+
+class PlotterBase(QtGui.QDialog):
+    def __init__(self, parent=None, quickplot=False):
+        super(PlotterBase, self).__init__(parent)
+
+        # Required for the communicator
+        self.parent = parent
+        self.quickplot = quickplot
+
+        # a figure instance to plot on
+        self.figure = plt.figure()
+
+        # this is the Canvas Widget that displays the `figure`
+        # it takes the `figure` instance as a parameter to __init__
+        self.canvas = FigureCanvas(self.figure)
+
+        # this is the Navigation widget
+        # it takes the Canvas widget and a parent
+        self.toolbar = NavigationToolbar(self.canvas, self)
+
+        self.properties = ScaleProperties(self)
+
+        # set the layout
+        layout = QtGui.QVBoxLayout()
+        layout.addWidget(self.canvas)
+
+        # defaults
+        self.current_plot = 111
+        self._data = []
+        self.qx_data = []
+        self.qy_data = []
+        self.color=0
+        self.symbol=0
+        self.grid_on = False
+        self.scale = 'linear'
+
+        # default color map
+        self.cmap = DEFAULT_CMAP
+
+        self.ax = self.figure.add_subplot(self.current_plot)
+        self.canvas.figure.set_facecolor('#FFFFFF')
+
+        if not quickplot:
+            layout.addWidget(self.toolbar)
+            # Notify the helper
+            PlotHelper.addPlot(self)
+            # Notify the listeners
+            self.parent.communicator.activeGraphsSignal.emit(PlotHelper.currentPlots())
+        else:
+            self.contextMenuQuickPlot()
+
+        self.setLayout(layout)
+
+    @property
+    def data(self):
+        return self._data
+
+    @data.setter
+    def data(self, data=None):
+        """ data setter """
+        pass
+
+    def title(self, title=""):
+        """ title setter """
+        self.title = title
+
+    def id(self, id=""):
+        """ id setter """
+        self.id = id
+
+    def xLabel(self, xlabel=""):
+        """ x-label setter """
+        self.x_label = r'$%s$'% xlabel
+
+    def yLabel(self, ylabel=""):
+        """ y-label setter """
+        self.y_label = r'$%s$'% ylabel
+
+    @property
+    def yscale(self):
+        """ Y-axis scale getter """
+        return self.yscale
+
+    @yscale.setter
+    def yscale(self, scale='linear'):
+        """ Y-axis scale setter """
+        self.subplot.set_yscale(scale, nonposy='clip')
+        self.yscale = scale
+
+    @property
+    def xscale(self):
+        """ X-axis scale getter """
+        return self.xscale
+
+    @xscale.setter
+    def xscale(self, scale='linear'):
+        """ X-axis scale setter """
+        self.subplot.set_xscale(scale)
+        self.xscale = scale
+
+    def contextMenuQuickPlot(self):
+        """
+        Define context menu and associated actions for the MPL widget
+        """
+        # Actions
+        self.contextMenu = QtGui.QMenu(self)
+        self.actionSaveImage = self.contextMenu.addAction("Save Image")
+        self.actionPrintImage = self.contextMenu.addAction("Print Image")
+        self.actionCopyToClipboard = self.contextMenu.addAction("Copy to Clipboard")
+        self.contextMenu.addSeparator()
+        self.actionToggleGrid = self.contextMenu.addAction("Toggle Grid On/Off")
+        self.contextMenu.addSeparator()
+        self.actionChangeScale = self.contextMenu.addAction("Change Scale")
+
+        # Define the callbacks
+        self.actionSaveImage.triggered.connect(self.onImageSave)
+        self.actionPrintImage.triggered.connect(self.onImagePrint)
+        self.actionCopyToClipboard.triggered.connect(self.onClipboardCopy)
+        self.actionToggleGrid.triggered.connect(self.onGridToggle)
+        self.actionChangeScale.triggered.connect(self.onScaleChange)
+
+    def contextMenuEvent(self, event):
+        """
+        Display the context menu
+        """
+        self.contextMenu.exec_( self.canvas.mapToGlobal(event.pos()) )
+
+    def clean(self):
+        """
+        Redraw the graph
+        """
+        self.figure.delaxes(self.ax)
+        self.ax = self.figure.add_subplot(self.current_plot)
+
+    def plot(self, marker=None, linestyle=None):
+        """
+        VIRTUAL
+        Plot the content of self._data
+        """
+        raise ImportError("Plot method must be implemented in derived class.")
+
+    def closeEvent(self, event):
+        """
+        Overwrite the close event adding helper notification
+        """
+        # Please remove me from your database.
+        PlotHelper.deletePlot(PlotHelper.idOfPlot(self))
+        # Notify the listeners
+        self.parent.communicator.activeGraphsSignal.emit(PlotHelper.currentPlots())
+        event.accept()
+
+    def onImageSave(self):
+        """
+        Use the internal MPL method for saving to file
+        """
+        self.toolbar.save_figure()
+
+    def onImagePrint(self):
+        """
+        Display printer dialog and print the MPL widget area
+        """
+        # Define the printer
+        printer = QtGui.QPrinter()
+
+        # Display the print dialog
+        dialog = QtGui.QPrintDialog(printer)
+        dialog.setModal(True)
+        dialog.setWindowTitle("Print")
+        if(dialog.exec_() != QtGui.QDialog.Accepted):
+            return
+
+        painter = QtGui.QPainter(printer)
+        # Create a label with pixmap drawn
+        pmap = QtGui.QPixmap.grabWidget(self)
+        printLabel = QtGui.QLabel()
+        printLabel.setPixmap(pmap)
+
+        # Print the label
+        printLabel.render(painter)
+        painter.end()
+
+    def onClipboardCopy(self):
+        """
+        Copy MPL widget area to buffer
+        """
+        bmp = QtGui.QApplication.clipboard()
+        pixmap = QtGui.QPixmap.grabWidget(self.canvas)
+        bmp.setPixmap(pixmap)
+
+    def onGridToggle(self):
+        """
+        Add/remove grid lines from MPL plot
+        """
+        self.grid_on = (not self.grid_on)
+        self.ax.grid(self.grid_on)
+        self.canvas.draw_idle()
+
+    def onScaleChange(self):
+        """
+        Show a dialog allowing axes rescaling
+        """
+        if self.properties.exec_() == QtGui.QDialog.Accepted:
+            xLabel, yLabel = self.properties.getValues()
+            #self.xyTransform(xLabel, yLabel)
+
+    def xyTransform(self, xLabel="", yLabel=""):
+        """
+        Transforms x and y in View and set the scale
+        """
+        # The logic should be in the right order
+        self.ly = None
+        self.q_ctrl = None
+        # Changing the scale might be incompatible with
+        # currently displayed data (for instance, going
+        # from ln to log when all plotted values have
+        # negative natural logs).
+        # Go linear and only change the scale at the end.
+        self.set_xscale("linear")
+        self.set_yscale("linear")
+        _xscale = 'linear'
+        _yscale = 'linear'
+        # Local data is either 1D or 2D
+        #for item in list:
+        #if item.id == 'fit':
+        #    continue
+        item.setLabel(self.xLabel, self.yLabel)
+        # control axis labels from the panel itself
+        yname, yunits = item.get_yaxis()
+        if self.yaxis_label != None:
+            yname = self.yaxis_label
+            yunits = self.yaxis_unit
+        else:
+            self.yaxis_label = yname
+            self.yaxis_unit = yunits
+        xname, xunits = item.get_xaxis()
+        if self.xaxis_label != None:
+            xname = self.xaxis_label
+            xunits = self.xaxis_unit
+        else:
+            self.xaxis_label = xname
+            self.xaxis_unit = xunits
+        # Goes through all possible scales
+        if self.xLabel == "x":
+            item.transformX(transform.toX, transform.errToX)
+            self.graph._xaxis_transformed("%s" % xname, "%s" % xunits)
+        if self.xLabel == "x^(2)":
+            item.transformX(transform.toX2, transform.errToX2)
+            xunits = convert_unit(2, xunits)
+            self.graph._xaxis_transformed("%s^{2}" % xname, "%s" % xunits)
+        if self.xLabel == "x^(4)":
+            item.transformX(transform.toX4, transform.errToX4)
+            xunits = convert_unit(4, xunits)
+            self.graph._xaxis_transformed("%s^{4}" % xname, "%s" % xunits)
+        if self.xLabel == "ln(x)":
+            item.transformX(transform.toLogX, transform.errToLogX)
+            self.graph._xaxis_transformed("\ln{(%s)}" % xname, "%s" % xunits)
+        if self.xLabel == "log10(x)":
+            item.transformX(transform.toX_pos, transform.errToX_pos)
+            _xscale = 'log'
+            self.graph._xaxis_transformed("%s" % xname, "%s" % xunits)
+        if self.xLabel == "log10(x^(4))":
+            item.transformX(transform.toX4, transform.errToX4)
+            xunits = convert_unit(4, xunits)
+            self.graph._xaxis_transformed("%s^{4}" % xname, "%s" % xunits)
+            _xscale = 'log'
+        if self.yLabel == "ln(y)":
+            item.transformY(transform.toLogX, transform.errToLogX)
+            self.graph._yaxis_transformed("\ln{(%s)}" % yname, "%s" % yunits)
+        if self.yLabel == "y":
+            item.transformY(transform.toX, transform.errToX)
+            self.graph._yaxis_transformed("%s" % yname, "%s" % yunits)
+        if self.yLabel == "log10(y)":
+            item.transformY(transform.toX_pos, transform.errToX_pos)
+            _yscale = 'log'
+            self.graph._yaxis_transformed("%s" % yname, "%s" % yunits)
+        if self.yLabel == "y^(2)":
+            item.transformY(transform.toX2, transform.errToX2)
+            yunits = convert_unit(2, yunits)
+            self.graph._yaxis_transformed("%s^{2}" % yname, "%s" % yunits)
+        if self.yLabel == "1/y":
+            item.transformY(transform.toOneOverX, transform.errOneOverX)
+            yunits = convert_unit(-1, yunits)
+            self.graph._yaxis_transformed("1/%s" % yname, "%s" % yunits)
+        if self.yLabel == "y*x^(2)":
+            item.transformY(transform.toYX2, transform.errToYX2)
+            xunits = convert_unit(2, self.xaxis_unit)
+            self.graph._yaxis_transformed("%s \ \ %s^{2}" % (yname, xname),
+                                            "%s%s" % (yunits, xunits))
+        if self.yLabel == "y*x^(4)":
+            item.transformY(transform.toYX4, transform.errToYX4)
+            xunits = convert_unit(4, self.xaxis_unit)
+            self.graph._yaxis_transformed("%s \ \ %s^{4}" % (yname, xname),
+                                            "%s%s" % (yunits, xunits))
+        if self.yLabel == "1/sqrt(y)":
+            item.transformY(transform.toOneOverSqrtX,
+                            transform.errOneOverSqrtX)
+            yunits = convert_unit(-0.5, yunits)
+            self.graph._yaxis_transformed("1/\sqrt{%s}" % yname,
+                                            "%s" % yunits)
+        if self.yLabel == "ln(y*x)":
+            item.transformY(transform.toLogXY, transform.errToLogXY)
+            self.graph._yaxis_transformed("\ln{(%s \ \ %s)}" % (yname, xname),
+                                            "%s%s" % (yunits, self.xaxis_unit))
+        if self.yLabel == "ln(y*x^(2))":
+            item.transformY(transform.toLogYX2, transform.errToLogYX2)
+            xunits = convert_unit(2, self.xaxis_unit)
+            self.graph._yaxis_transformed("\ln (%s \ \ %s^{2})" % (yname, xname),
+                                            "%s%s" % (yunits, xunits))
+        if self.yLabel == "ln(y*x^(4))":
+            item.transformY(transform.toLogYX4, transform.errToLogYX4)
+            xunits = convert_unit(4, self.xaxis_unit)
+            self.graph._yaxis_transformed("\ln (%s \ \ %s^{4})" % (yname, xname),
+                                            "%s%s" % (yunits, xunits))
+        if self.yLabel == "log10(y*x^(4))":
+            item.transformY(transform.toYX4, transform.errToYX4)
+            xunits = convert_unit(4, self.xaxis_unit)
+            _yscale = 'log'
+            self.graph._yaxis_transformed("%s \ \ %s^{4}" % (yname, xname),
+                                            "%s%s" % (yunits, xunits))
+            item.transformView()
+
+        # set new label and units
+        yname = self.graph.prop["ylabel"]
+        yunits = ''
+        xname = self.graph.prop["xlabel"]
+        xunits = ''
+
+        self.resetFitView()
+        self.prevXtrans = self.xLabel
+        self.prevYtrans = self.yLabel
+        self.graph.render(self)
+        self.set_xscale(_xscale)
+        self.set_yscale(_yscale)
+
+        self.xaxis(xname, xunits, self.xaxis_font,
+                   self.xaxis_color, self.xaxis_tick)
+        self.yaxis(yname, yunits, self.yaxis_font,
+                   self.yaxis_color, self.yaxis_tick)
+        self.subplot.texts = self.textList
+
+        self.canvas.draw_idle()
Index: src/sas/qtgui/ScaleProperties.py
===================================================================
--- src/sas/qtgui/ScaleProperties.py	(revision ef01be48d93733bf0b5ac6ff7ccce2ac92d368b6)
+++ src/sas/qtgui/ScaleProperties.py	(revision ef01be48d93733bf0b5ac6ff7ccce2ac92d368b6)
@@ -0,0 +1,51 @@
+# global
+#import sys
+#import os
+#from PyQt4 import QtCore
+from PyQt4 import QtGui
+
+import sas.sasview
+
+from sas.qtgui.UI.ScalePropertiesUI import Ui_scalePropertiesUI
+
+x_values = ["x", "x^(2)", "x^(4)", "ln(x)", "log10(x)", "log10(x^(4))"]
+y_values = ["y", "1/y", "ln(y)", "y^(2)", "y*x^(2)", "y*x^(4)", "1/sqrt(y)",
+            "log10(y)", "ln(y*x)", "ln(y*x^(2))", "ln(y*x^(4))", "log10(y*x^(4))"]
+view_values = ["--", "Linear y vs x", "Guinier lny vs x^(2)",
+            "XS Guinier ln(y*x) vs x^(2)", "Porod y*x^(4) vs x^(4)", "Kratky y*x^(2) vs x"]
+view_to_xy = {
+    view_values[0]: [None, None], # custom
+    view_values[1]: [0, 0], # linear
+    view_values[2]: [1, 2], # Guinier
+    view_values[3]: [1, 8], # XS Guinier
+    view_values[4]: [2, 5], # Porod
+    view_values[5]: [0, 4], # Kratky
+}
+class ScaleProperties(QtGui.QDialog, Ui_scalePropertiesUI):
+    def __init__(self, parent=None):
+        super(ScaleProperties, self).__init__(parent)
+        self.setupUi(self)
+
+        # Set up comboboxes
+        self.cbX.addItems(x_values)
+        self.cbY.addItems(y_values)
+        self.cbView.addItems(view_values)
+        # Resize the dialog only AFTER the boxes are populated
+        self.setFixedSize(self.minimumSizeHint())
+
+        # Connect combobox index change to a custom method
+        self.cbView.currentIndexChanged.connect(self.viewIndexChanged)
+
+    def getValues(self):
+        """
+        Return current values from comboboxes
+        """
+        return self.cbX.currentText(), self.cbY.currentText()
+
+    def viewIndexChanged(self, index):
+        """
+        Update X and Y labels based on the "View" index
+        """
+        if index > 0:
+            self.cbX.setCurrentIndex(view_to_xy[view_values[index]][0])
+            self.cbY.setCurrentIndex(view_to_xy[view_values[index]][1])
Index: src/sas/qtgui/UI/ScalePropertiesUI.ui
===================================================================
--- src/sas/qtgui/UI/ScalePropertiesUI.ui	(revision ef01be48d93733bf0b5ac6ff7ccce2ac92d368b6)
+++ src/sas/qtgui/UI/ScalePropertiesUI.ui	(revision ef01be48d93733bf0b5ac6ff7ccce2ac92d368b6)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>scalePropertiesUI</class>
+ <widget class="QDialog" name="scalePropertiesUI">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>137</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="windowTitle">
+   <string>Scale Properties</string>
+  </property>
+  <property name="windowIcon">
+   <iconset resource="main_resources.qrc">
+    <normaloff>:/res/ball.ico</normaloff>:/res/ball.ico</iconset>
+  </property>
+  <layout class="QGridLayout" name="gridLayout_2">
+   <item row="0" column="0">
+    <layout class="QGridLayout" name="gridLayout">
+     <item row="0" column="0">
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>X</string>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="1">
+      <widget class="QLabel" name="label_2">
+       <property name="text">
+        <string>Y</string>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="2">
+      <widget class="QLabel" name="label_3">
+       <property name="text">
+        <string>View</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0">
+      <widget class="QComboBox" name="cbX"/>
+     </item>
+     <item row="1" column="1">
+      <widget class="QComboBox" name="cbY"/>
+     </item>
+     <item row="1" column="2">
+      <widget class="QComboBox" name="cbView"/>
+     </item>
+    </layout>
+   </item>
+   <item row="1" column="0">
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>40</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="2" column="0">
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources>
+  <include location="main_resources.qrc"/>
+ </resources>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>scalePropertiesUI</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>scalePropertiesUI</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
