diff --git a/scripts/Frequency_Domain_Analysis.py b/scripts/Frequency_Domain_Analysis.py
index c8eefe082472f1bbfda9193831dbf26ff84ae6c8..fd35ff4ca14b2cb3d892c3196dffac8f1d860b03 100644
--- a/scripts/Frequency_Domain_Analysis.py
+++ b/scripts/Frequency_Domain_Analysis.py
@@ -5,27 +5,26 @@ import sys
 
 import PyQt4.QtGui as QtGui
 
-from Muon import model_constructor
-from Muon import transform_presenter
-from Muon import transform_view
-from Muon import view_constructor
+from Muon.GUI.FrequencyDomainAnalysis.Transform.transform_widget import TransformWidget
+from Muon.GUI.Common import load_utils
+from Muon.GUI.Common import message_box
 
 
 class FrequencyDomainAnalysisGui(QtGui.QMainWindow):
     def __init__(self,parent=None):
         super(FrequencyDomainAnalysisGui,self).__init__(parent)
 
-        groupedViews = view_constructor.ViewConstructor(True,self)
-        groupedModels = model_constructor.ModelConstructor(True)
-        view =transform_view.TransformView(groupedViews,self)
-        self.presenter =transform_presenter.TransformPresenter(view,groupedModels)
+        load = load_utils.LoadUtils()
+        if not load.MuonAnalysisExists:
+            return
+        self.transform = TransformWidget(load = load, parent = self)
 
-        self.setCentralWidget(view)
+        self.setCentralWidget(self.transform.widget)
         self.setWindowTitle("Frequency Domain Analysis")
 
     # cancel algs if window is closed
     def closeEvent(self,event):
-        self.presenter.close()
+        self.transform.closeEvent(event)
 
 
 def qapp():
@@ -43,5 +42,4 @@ try:
     ex.show()
     app.exec_()
 except RuntimeError as error:
-    ex = QtGui.QWidget()
-    QtGui.QMessageBox.warning(ex,"Frequency Domain Analysis",str(error))
+    message_box.warning(str(error))
diff --git a/scripts/Muon/GUI/dock/__init__.py b/scripts/Muon/GUI/Common/__init__.py
similarity index 100%
rename from scripts/Muon/GUI/dock/__init__.py
rename to scripts/Muon/GUI/Common/__init__.py
diff --git a/scripts/Muon/GUI/dummy/__init__.py b/scripts/Muon/GUI/Common/dock/__init__.py
similarity index 100%
rename from scripts/Muon/GUI/dummy/__init__.py
rename to scripts/Muon/GUI/Common/dock/__init__.py
diff --git a/scripts/Muon/GUI/dock/dock_view.py b/scripts/Muon/GUI/Common/dock/dock_view.py
similarity index 100%
rename from scripts/Muon/GUI/dock/dock_view.py
rename to scripts/Muon/GUI/Common/dock/dock_view.py
diff --git a/scripts/Muon/GUI/dummy_label/__init__.py b/scripts/Muon/GUI/Common/dummy/__init__.py
similarity index 100%
rename from scripts/Muon/GUI/dummy_label/__init__.py
rename to scripts/Muon/GUI/Common/dummy/__init__.py
diff --git a/scripts/Muon/GUI/dummy/dummy_presenter.py b/scripts/Muon/GUI/Common/dummy/dummy_presenter.py
similarity index 100%
rename from scripts/Muon/GUI/dummy/dummy_presenter.py
rename to scripts/Muon/GUI/Common/dummy/dummy_presenter.py
diff --git a/scripts/Muon/GUI/dummy/dummy_view.py b/scripts/Muon/GUI/Common/dummy/dummy_view.py
similarity index 100%
rename from scripts/Muon/GUI/dummy/dummy_view.py
rename to scripts/Muon/GUI/Common/dummy/dummy_view.py
diff --git a/scripts/Muon/GUI/dummy/dummy_widget.py b/scripts/Muon/GUI/Common/dummy/dummy_widget.py
similarity index 77%
rename from scripts/Muon/GUI/dummy/dummy_widget.py
rename to scripts/Muon/GUI/Common/dummy/dummy_widget.py
index 099436c505253174630787625d37ee15b5e6eb18..b3a3cfcb49ee44fbae42ce62dee7871477a4fef1 100644
--- a/scripts/Muon/GUI/dummy/dummy_widget.py
+++ b/scripts/Muon/GUI/Common/dummy/dummy_widget.py
@@ -1,8 +1,8 @@
 from __future__ import (absolute_import, division, print_function)
 
 
-from Muon.GUI.dummy.dummy_view import DummyView
-from Muon.GUI.dummy.dummy_presenter import DummyPresenter
+from Muon.GUI.Common.dummy.dummy_view import DummyView
+from Muon.GUI.Common.dummy.dummy_presenter import DummyPresenter
 
 
 class DummyWidget(object):
@@ -14,7 +14,7 @@ class DummyWidget(object):
         self.presenter = DummyPresenter(view,model)
 
     @property
-    def presneter(self):
+    def presenter(self):
         return self.presenter
 
     @property
diff --git a/scripts/Muon/GUI/Common/dummy_label/__init__.py b/scripts/Muon/GUI/Common/dummy_label/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/scripts/Muon/GUI/dummy_label/dummy_label_presenter.py b/scripts/Muon/GUI/Common/dummy_label/dummy_label_presenter.py
similarity index 100%
rename from scripts/Muon/GUI/dummy_label/dummy_label_presenter.py
rename to scripts/Muon/GUI/Common/dummy_label/dummy_label_presenter.py
diff --git a/scripts/Muon/GUI/dummy_label/dummy_label_view.py b/scripts/Muon/GUI/Common/dummy_label/dummy_label_view.py
similarity index 100%
rename from scripts/Muon/GUI/dummy_label/dummy_label_view.py
rename to scripts/Muon/GUI/Common/dummy_label/dummy_label_view.py
diff --git a/scripts/Muon/GUI/dummy_label/dummy_label_widget.py b/scripts/Muon/GUI/Common/dummy_label/dummy_label_widget.py
similarity index 75%
rename from scripts/Muon/GUI/dummy_label/dummy_label_widget.py
rename to scripts/Muon/GUI/Common/dummy_label/dummy_label_widget.py
index be5ecff4d691829a8034f7b67d7d3d598287084c..f8b67d7fb6ac3e09361b82698e5c87a8375ae241 100644
--- a/scripts/Muon/GUI/dummy_label/dummy_label_widget.py
+++ b/scripts/Muon/GUI/Common/dummy_label/dummy_label_widget.py
@@ -1,7 +1,7 @@
 from __future__ import (absolute_import, division, print_function)
 
-from Muon.GUI.dummy_label.dummy_label_view import DummyLabelView
-from Muon.GUI.dummy_label.dummy_label_presenter import DummyLabelPresenter
+from Muon.GUI.Common.dummy_label.dummy_label_view import DummyLabelView
+from Muon.GUI.Common.dummy_label.dummy_label_presenter import DummyLabelPresenter
 
 
 class DummyLabelWidget(object):
diff --git a/scripts/Muon/load_utils.py b/scripts/Muon/GUI/Common/load_utils.py
similarity index 100%
rename from scripts/Muon/load_utils.py
rename to scripts/Muon/GUI/Common/load_utils.py
diff --git a/scripts/Muon/message_box.py b/scripts/Muon/GUI/Common/message_box.py
similarity index 100%
rename from scripts/Muon/message_box.py
rename to scripts/Muon/GUI/Common/message_box.py
diff --git a/scripts/Muon/GUI/Common/mock_widget.py b/scripts/Muon/GUI/Common/mock_widget.py
new file mode 100644
index 0000000000000000000000000000000000000000..62fc5eed705f7732f84d4ab25d7b4d0d782c024a
--- /dev/null
+++ b/scripts/Muon/GUI/Common/mock_widget.py
@@ -0,0 +1,10 @@
+
+import PyQt4.QtGui as QtGui
+
+
+def mockQapp():
+    qapp = QtGui.QApplication.instance()
+    if qapp is None:
+        return QtGui.QApplication([''])
+    else:
+        return qapp
diff --git a/scripts/Muon/table_utils.py b/scripts/Muon/GUI/Common/table_utils.py
similarity index 100%
rename from scripts/Muon/table_utils.py
rename to scripts/Muon/GUI/Common/table_utils.py
diff --git a/scripts/Muon/thread_model.py b/scripts/Muon/GUI/Common/thread_model.py
similarity index 97%
rename from scripts/Muon/thread_model.py
rename to scripts/Muon/GUI/Common/thread_model.py
index 4008d79a9f5d8bfac51d28ce9cd25f602ad6a6b6..f3b616d6efbc5bb8ad1c7bfefd8c8dcff5f2a04f 100644
--- a/scripts/Muon/thread_model.py
+++ b/scripts/Muon/GUI/Common/thread_model.py
@@ -2,7 +2,7 @@ from __future__ import (absolute_import, division, print_function)
 
 from PyQt4.QtCore import QThread
 from PyQt4 import QtCore
-from Muon import message_box
+from Muon.GUI.Common import message_box
 
 
 class ThreadModel(QThread):
diff --git a/scripts/Muon/GUI/FrequencyDomainAnalysis/FFT/__init__.py b/scripts/Muon/GUI/FrequencyDomainAnalysis/FFT/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/scripts/Muon/GUI/FrequencyDomainAnalysis/FFT/fft_model.py b/scripts/Muon/GUI/FrequencyDomainAnalysis/FFT/fft_model.py
new file mode 100644
index 0000000000000000000000000000000000000000..d07c1060568831e608ecc3c403c25e241179ee57
--- /dev/null
+++ b/scripts/Muon/GUI/FrequencyDomainAnalysis/FFT/fft_model.py
@@ -0,0 +1,159 @@
+from __future__ import (absolute_import, division, print_function)
+
+from six import iteritems
+
+import mantid.simpleapi as mantid
+
+
+class FFTWrapper(object):
+
+    """
+    A class to wrap the different parts
+    of the FFT and its preprocessing.
+    This keeps the main FFT class simple.
+    """
+
+    def __init__(self, FFT):
+        self.name = "FFT"
+        self.model = FFT
+        self.phaseTable = None
+        self.preRe = None
+        self.preIm = None
+        self.FFT = None
+
+    def cancel(self):
+        self.model.cancel()
+
+    def loadData(self, inputs):
+        """
+        store the data in the wrapper for later
+        """
+        if "phaseTable" in inputs:
+            self.phaseTable = inputs["phaseTable"]
+        else:
+            self.phaseTable = None
+        if "preRe" in inputs:
+            self.preRe = inputs["preRe"]
+        else:
+            self.preRe = None
+        if "preIm" in inputs:
+            self.preIm = inputs["preIm"]
+        else:
+            self.preIm = None
+        if "FFT" in inputs:
+            self.FFT = inputs["FFT"]
+        else:
+            self.FFT = None
+        self.model.setRun(inputs["Run"])
+
+    def execute(self):
+        """
+        runs the relevant parts of the FFT and the preprocessing
+        """
+        if self.phaseTable is not None:
+            if self.phaseTable["newTable"]:
+                self.model.makePhaseQuadTable(self.phaseTable)
+            self.model.PhaseQuad()
+
+        if self.preRe is not None:
+            self.model.preAlg(self.preRe)
+
+        if self.preIm is not None:
+            self.model.preAlg(self.preIm)
+
+        if self.FFT is not None:
+            self.model.FFTAlg(self.FFT)
+
+    def output(self):
+        return
+
+
+class FFTModel(object):
+
+    """
+    A simple class which executes
+    the relevant algorithms for
+    the analysis.
+    """
+
+    def __init__(self):
+        self.name = "FFT"
+        self.alg = None
+
+    def cancel(self):
+        if self.alg is not None:
+            self.alg.cancel()
+
+    def setRun(self, run):
+        self.runName = run
+
+    def preAlg(self, preInputs):
+        """
+        PaddingAndApodization alg on the data
+        """
+        self.alg = mantid.AlgorithmManager.create("PaddingAndApodization")
+        self.alg.initialize()
+        self.alg.setAlwaysStoreInADS(False)
+        for name, value in iteritems(preInputs):
+            self.alg.setProperty(name, value)
+        self.alg.execute()
+        mantid.AnalysisDataService.addOrReplace(
+            preInputs["OutputWorkspace"],
+            self.alg.getProperty("OutputWorkspace").value)
+        self.alg = None
+
+    def FFTAlg(self, FFTInputs):
+        """
+        Use the FFT alg
+        """
+        self.alg = mantid.AlgorithmManager.create("FFT")
+        self.alg.initialize()
+        self.alg.setAlwaysStoreInADS(False)
+        for name, value in iteritems(FFTInputs):
+            self.alg.setProperty(name, value)
+        self.alg.execute()
+        mantid.AnalysisDataService.addOrReplace(
+            FFTInputs["OutputWorkspace"],
+            self.alg.getProperty("OutputWorkspace").value)
+
+        ws = self.alg.getPropertyValue("OutputWorkspace")
+        group = mantid.AnalysisDataService.retrieve(self.runName)
+        group.add(ws)
+        self.alg = None
+
+    def makePhaseQuadTable(self, inputs):
+        """
+        generates a phase table from CalMuonDetectorPhases
+        """
+        self.alg = mantid.AlgorithmManager.create("CalMuonDetectorPhases")
+        self.alg.initialize()
+        self.alg.setAlwaysStoreInADS(False)
+
+        self.alg.setProperty("FirstGoodData", inputs["FirstGoodData"])
+        self.alg.setProperty("LastGoodData", inputs["LastGoodData"])
+
+        self.alg.setProperty("InputWorkspace", "MuonAnalysis")
+        self.alg.setProperty("DetectorTable", "PhaseTable")
+        self.alg.setProperty("DataFitted", "fits")
+        self.alg.execute()
+        mantid.AnalysisDataService.addOrReplace(
+            "PhaseTable",
+            self.alg.getProperty("DetectorTable").value)
+        self.alg = None
+
+    def PhaseQuad(self):
+        """
+        do the phaseQuad algorithm
+        groups data into a single set
+        """
+        self.alg = mantid.AlgorithmManager.create("PhaseQuad")
+        self.alg.initialize()
+        self.alg.setChild(False)
+        self.alg.setProperty("InputWorkspace", "MuonAnalysis")
+        self.alg.setProperty("PhaseTable", "PhaseTable")
+        self.alg.setProperty("OutputWorkspace", "__phaseQuad__")
+        self.alg.execute()
+        self.alg = None
+
+    def getName(self):
+        return self.name
diff --git a/scripts/Muon/fft_presenter.py b/scripts/Muon/GUI/FrequencyDomainAnalysis/FFT/fft_presenter.py
similarity index 51%
rename from scripts/Muon/fft_presenter.py
rename to scripts/Muon/GUI/FrequencyDomainAnalysis/FFT/fft_presenter.py
index 085c399f0c167dd592b8d60aee437ac34ea98579..f9929e1ffb9a5fb0c15953f719c18f10b84d3f41 100644
--- a/scripts/Muon/fft_presenter.py
+++ b/scripts/Muon/GUI/FrequencyDomainAnalysis/FFT/fft_presenter.py
@@ -3,25 +3,35 @@ from __future__ import (absolute_import, division, print_function)
 
 import mantid.simpleapi as mantid
 
-from Muon import thread_model
+from Muon.GUI.Common import thread_model
 
 
 class FFTPresenter(object):
+
     """
     This class links the FFT model to the GUI
     """
-    def __init__(self,view,alg,load):
-        self.view=view
-        self.alg=alg
-        self.load=load
+
+    def __init__(self, view, alg, load):
+        self.view = view
+        self.alg = alg
+        self.load = load
         self.thread = None
         # set data
         self.getWorkspaceNames()
-        #connect
+        # connect
         self.view.tableClickSignal.connect(self.tableClicked)
         self.view.buttonSignal.connect(self.handleButton)
         self.view.phaseCheckSignal.connect(self.phaseCheck)
 
+    def cancel(self):
+        if self.thread is not None:
+            self.thread.cancel()
+
+    @property
+    def widget(self):
+        return self.view
+
     # turn on button
     def activate(self):
         self.view.activateButton()
@@ -31,21 +41,25 @@ class FFTPresenter(object):
         self.view.deactivateButton()
 
     def getWorkspaceNames(self):
-        final_options=self.load.getWorkspaceNames()
+        final_options = self.load.getWorkspaceNames()
         self.view.addItems(final_options)
 
-    #functions
+    # functions
     def phaseCheck(self):
         self.view.phaseQuadChanged()
-        #check if a phase table exists
+        # check if a phase table exists
         if mantid.AnalysisDataService.doesExist("PhaseTable"):
             self.view.setPhaseBox()
 
-    def tableClicked(self,row,col):
-        if row == self.view.getImBoxRow() and col == 1 and self.view.getWS() !="PhaseQuad":
-            self.view.changedHideUnTick(self.view.getImBox(),self.view.getImBoxRow()+1)
-        elif  row == self.view.getShiftBoxRow() and col == 1:
-            self.view.changed(self.view.getShiftBox(),self.view.getShiftBoxRow()+1)
+    def tableClicked(self, row, col):
+        if row == self.view.getImBoxRow() and col == 1 and self.view.getWS() != "PhaseQuad":
+            self.view.changedHideUnTick(
+                self.view.getImBox(),
+                self.view.getImBoxRow() + 1)
+        elif row == self.view.getShiftBoxRow() and col == 1:
+            self.view.changed(
+                self.view.getShiftBox(),
+                self.view.getShiftBoxRow() + 1)
 
     def createThread(self):
         return thread_model.ThreadModel(self.alg)
@@ -58,50 +72,49 @@ class FFTPresenter(object):
             self.getWorkspaceNames()
             return
         # put this on its own thread so not to freeze Mantid
-        self.thread=self.createThread()
-        self.thread.started.connect(self.deactivate)
-        self.thread.finished.connect(self.handleFinished)
+        self.thread = self.createThread()
+        self.thread.threadWrapperSetUp(self.deactivate,self.handleFinished)
 
         # make some inputs
-        inputs={}
-        inputs["Run"]=self.load.getRunName()
+        inputs = {}
+        inputs["Run"] = self.load.getRunName()
 
-        #do apodization and padding to real data
+        # do apodization and padding to real data
 
-        preInputs=self.view.initAdvanced()
+        preInputs = self.view.initAdvanced()
 
         if self.view.getWS() == "PhaseQuad":
-            phaseTable={}
-            phaseTable["newTable"]= self.view.isNewPhaseTable()
-            phaseTable["FirstGoodData"]=self.view.getFirstGoodData()
-            phaseTable["LastGoodData"]=self.view.getLastGoodData()
-            phaseTable["Instrument"]=self.load.getInstrument()
-            inputs["phaseTable"]=phaseTable
+            phaseTable = {}
+            phaseTable["newTable"] = self.view.isNewPhaseTable()
+            phaseTable["FirstGoodData"] = self.view.getFirstGoodData()
+            phaseTable["LastGoodData"] = self.view.getLastGoodData()
+            phaseTable["Instrument"] = self.load.getInstrument()
+            inputs["phaseTable"] = phaseTable
             self.view.RePhaseAdvanced(preInputs)
         else:
             self.view.ReAdvanced(preInputs)
             if self.view.isRaw():
-                self.view.addRaw(preInputs,"InputWorkspace")
-        inputs["preRe"]=preInputs
+                self.view.addRaw(preInputs, "InputWorkspace")
+        inputs["preRe"] = preInputs
 
-        #do apodization and padding to complex data
-        if self.view.isComplex() and self.view.getWS()!="PhaseQuad":
-            ImPreInputs=self.view.initAdvanced()
+        # do apodization and padding to complex data
+        if self.view.isComplex() and self.view.getWS() != "PhaseQuad":
+            ImPreInputs = self.view.initAdvanced()
             self.view.ImAdvanced(ImPreInputs)
             if self.view.isRaw():
-                self.view.addRaw(ImPreInputs,"InputWorkspace")
-            inputs["preIm"]=ImPreInputs
+                self.view.addRaw(ImPreInputs, "InputWorkspace")
+            inputs["preIm"] = ImPreInputs
 
-        #do FFT to transformed data
+        # do FFT to transformed data
         FFTInputs = self.get_FFT_input()
-        if self.view.getWS()=="PhaseQuad":
+        if self.view.getWS() == "PhaseQuad":
             self.view.getFFTRePhase(FFTInputs)
             if self.view.isComplex():
                 self.view.getFFTImPhase(FFTInputs)
         else:
             if self.view.isRaw():
-                self.view.addRaw(FFTInputs,"OutputWorkspace")
-        inputs["FFT"]=FFTInputs
+                self.view.addRaw(FFTInputs, "OutputWorkspace")
+        inputs["FFT"] = FFTInputs
         try:
             self.thread.loadData(inputs)
             self.thread.start()
@@ -112,13 +125,14 @@ class FFTPresenter(object):
     # kills the thread at end of execution
     def handleFinished(self):
         self.activate()
+        self.thread.threadWrapperTearDown(self.deactivate,self.handleFinished)
         self.thread.deleteLater()
-        self.thread=None
+        self.thread = None
 
     def get_FFT_input(self):
-        FFTInputs=self.view.initFFTInput()
-        if  self.view.isAutoShift():
-            FFTInputs["AutoShift"]=True
+        FFTInputs = self.view.initFFTInput()
+        if self.view.isAutoShift():
+            FFTInputs["AutoShift"] = True
         else:
             self.view.addFFTShift(FFTInputs)
         if self.view.isComplex():
diff --git a/scripts/Muon/fft_view.py b/scripts/Muon/GUI/FrequencyDomainAnalysis/FFT/fft_view.py
similarity index 52%
rename from scripts/Muon/fft_view.py
rename to scripts/Muon/GUI/FrequencyDomainAnalysis/FFT/fft_view.py
index e57d107b55a6b19b5e6c4eccfcf0e7fbba30e13d..00fd76639c3897b7bc2946b34f622cc5d98ce9a6 100644
--- a/scripts/Muon/fft_view.py
+++ b/scripts/Muon/GUI/FrequencyDomainAnalysis/FFT/fft_view.py
@@ -4,119 +4,136 @@ from PyQt4 import QtCore, QtGui
 
 import mantid.simpleapi as mantid
 
-from Muon import table_utils
+from Muon.GUI.Common import table_utils
 
 
 class FFTView(QtGui.QWidget):
+
     """
     creates the layout for the FFT GUI
     """
     # signals
     buttonSignal = QtCore.pyqtSignal()
-    tableClickSignal = QtCore.pyqtSignal(object,object)
+    tableClickSignal = QtCore.pyqtSignal(object, object)
     phaseCheckSignal = QtCore.pyqtSignal()
 
-    def __init__(self, parent = None):
+    def __init__(self, parent=None):
         super(FFTView, self).__init__(parent)
         self.grid = QtGui.QGridLayout(self)
 
-        #make table
+        # add splitter for resizing
+        splitter = QtGui.QSplitter(QtCore.Qt.Vertical)
+
+        # make table
         self.FFTTable = QtGui.QTableWidget(self)
         self.FFTTable.resize(800, 800)
         self.FFTTable.setRowCount(9)
         self.FFTTable.setColumnCount(2)
-        self.FFTTable.setColumnWidth(0,300)
-        self.FFTTable.setColumnWidth(1,300)
+        self.FFTTable.setColumnWidth(0, 300)
+        self.FFTTable.setColumnWidth(1, 300)
         self.FFTTable.verticalHeader().setVisible(False)
         self.FFTTable.horizontalHeader().setStretchLastSection(True)
-        self.FFTTable.setHorizontalHeaderLabels(("FFT Property;Value").split(";"))
+        self.FFTTable.setHorizontalHeaderLabels(
+            ("FFT Property;Value").split(";"))
         # populate table
         options = ['test']
 
-        table_utils.setRowName(self.FFTTable,0,"Workspace")
-        self.ws = table_utils.addComboToTable(self.FFTTable,0,options)
+        table_utils.setRowName(self.FFTTable, 0, "Workspace")
+        self.ws = table_utils.addComboToTable(self.FFTTable, 0, options)
         self.Im_box_row = 1
-        table_utils.setRowName(self.FFTTable,self.Im_box_row,"Imaginary Data")
-        self.Im_box = table_utils.addCheckBoxToTable(self.FFTTable,True,self.Im_box_row)
+        table_utils.setRowName(
+            self.FFTTable,
+            self.Im_box_row,
+            "Imaginary Data")
+        self.Im_box = table_utils.addCheckBoxToTable(
+            self.FFTTable, True, self.Im_box_row)
 
-        table_utils.setRowName(self.FFTTable,2,"Imaginary Workspace")
-        self.Im_ws= table_utils.addComboToTable(self.FFTTable,2,options)
+        table_utils.setRowName(self.FFTTable, 2, "Imaginary Workspace")
+        self.Im_ws = table_utils.addComboToTable(self.FFTTable, 2, options)
 
         self.shift_box_row = 3
-        table_utils.setRowName(self.FFTTable,self.shift_box_row,"Auto shift")
-        self.shift_box = table_utils.addCheckBoxToTable(self.FFTTable,True,self.shift_box_row)
+        table_utils.setRowName(self.FFTTable, self.shift_box_row, "Auto shift")
+        self.shift_box = table_utils.addCheckBoxToTable(
+            self.FFTTable, True, self.shift_box_row)
 
-        table_utils.setRowName(self.FFTTable,4,"Shift")
-        self.shift = table_utils.addDoubleToTable(self.FFTTable,0.0,4)
+        table_utils.setRowName(self.FFTTable, 4, "Shift")
+        self.shift = table_utils.addDoubleToTable(self.FFTTable, 0.0, 4)
         self.FFTTable.hideRow(4)
 
-        table_utils.setRowName(self.FFTTable,5,"Use Raw data")
-        self.Raw_box = table_utils.addCheckBoxToTable(self.FFTTable,True,5)
+        table_utils.setRowName(self.FFTTable, 5, "Use Raw data")
+        self.Raw_box = table_utils.addCheckBoxToTable(self.FFTTable, True, 5)
 
-        table_utils.setRowName(self.FFTTable,6,"First Good Data")
-        self.x0 = table_utils.addDoubleToTable(self.FFTTable,0.1,6)
+        table_utils.setRowName(self.FFTTable, 6, "First Good Data")
+        self.x0 = table_utils.addDoubleToTable(self.FFTTable, 0.1, 6)
         self.FFTTable.hideRow(6)
 
-        table_utils.setRowName(self.FFTTable,7,"Last Good Data")
-        self.xN = table_utils.addDoubleToTable(self.FFTTable,15.0,7)
+        table_utils.setRowName(self.FFTTable, 7, "Last Good Data")
+        self.xN = table_utils.addDoubleToTable(self.FFTTable, 15.0, 7)
         self.FFTTable.hideRow(7)
 
-        table_utils.setRowName(self.FFTTable,8,"Construct Phase Table")
-        self.phaseTable_box = table_utils.addCheckBoxToTable(self.FFTTable,True,8)
+        table_utils.setRowName(self.FFTTable, 8, "Construct Phase Table")
+        self.phaseTable_box = table_utils.addCheckBoxToTable(
+            self.FFTTable, True, 8)
         self.FFTTable.hideRow(8)
 
         self.FFTTable.resizeRowsToContents()
-        #make advanced table options
+        # make advanced table options
         self.advancedLabel = QtGui.QLabel("\n Advanced Options")
         self.FFTTableA = QtGui.QTableWidget(self)
         self.FFTTableA.resize(800, 800)
         self.FFTTableA.setRowCount(4)
         self.FFTTableA.setColumnCount(2)
-        self.FFTTableA.setColumnWidth(0,300)
-        self.FFTTableA.setColumnWidth(1,300)
+        self.FFTTableA.setColumnWidth(0, 300)
+        self.FFTTableA.setColumnWidth(1, 300)
         self.FFTTableA.verticalHeader().setVisible(False)
         self.FFTTableA.horizontalHeader().setStretchLastSection(True)
-        self.FFTTableA.setHorizontalHeaderLabels(("Advanced Property;Value").split(";"))
-
-        table_utils.setRowName(self.FFTTableA,0,"Apodization Function")
-        options = ["None","Lorentz","Gaussian"]
-        self.apodization = table_utils.addComboToTable(self.FFTTableA,0,options)
-
-        table_utils.setRowName(self.FFTTableA,1,"Decay Constant (micro seconds)")
-        self.decay = table_utils.addDoubleToTable(self.FFTTableA,1.4,1)
-
-        table_utils.setRowName(self.FFTTableA,2,"Negative Padding")
-        self.negativePadding = table_utils.addCheckBoxToTable(self.FFTTableA,True,2)
-
-        table_utils.setRowName(self.FFTTableA,3,"Padding")
-        self.padding = table_utils.addSpinBoxToTable(self.FFTTableA,1,3)
+        self.FFTTableA.setHorizontalHeaderLabels(
+            ("Advanced Property;Value").split(";"))
+
+        table_utils.setRowName(self.FFTTableA, 0, "Apodization Function")
+        options = ["None", "Lorentz", "Gaussian"]
+        self.apodization = table_utils.addComboToTable(
+            self.FFTTableA, 0, options)
+
+        table_utils.setRowName(
+            self.FFTTableA,
+            1,
+            "Decay Constant (micro seconds)")
+        self.decay = table_utils.addDoubleToTable(self.FFTTableA, 1.4, 1)
+
+        table_utils.setRowName(self.FFTTableA, 2, "Negative Padding")
+        self.negativePadding = table_utils.addCheckBoxToTable(
+            self.FFTTableA, True, 2)
+
+        table_utils.setRowName(self.FFTTableA, 3, "Padding")
+        self.padding = table_utils.addSpinBoxToTable(self.FFTTableA, 1, 3)
         self.FFTTableA.resizeRowsToContents()
 
-        #make button
+        # make button
         self.button = QtGui.QPushButton('Calculate FFT', self)
         self.button.setStyleSheet("background-color:lightgrey")
-        #connects
+        # connects
         self.FFTTable.cellClicked.connect(self.tableClick)
         self.button.clicked.connect(self.buttonClick)
         self.ws.currentIndexChanged.connect(self.phaseCheck)
         # add to layout
-        self.FFTTable.setMinimumSize(40,158)
-        self.FFTTableA.setMinimumSize(40,127)
+        self.FFTTable.setMinimumSize(40, 158)
+        self.FFTTableA.setMinimumSize(40, 127)
         table_utils.setTableHeaders(self.FFTTable)
         table_utils.setTableHeaders(self.FFTTableA)
 
-        self.horizontalSpacer1 = QtGui.QSpacerItem(20, 94, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
-        self.horizontalSpacer2 = QtGui.QSpacerItem(20, 280, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
         # add to layout
-        self.grid.addWidget(self.FFTTable)
-        self.grid.addItem(self.horizontalSpacer1)
-        self.grid.addWidget(self.advancedLabel)
-        self.grid.addWidget(self.FFTTableA)
-        self.grid.addItem(self.horizontalSpacer2)
+        splitter.addWidget(self.FFTTable)
+        splitter.addWidget(self.advancedLabel)
+        splitter.addWidget(self.FFTTableA)
+        self.grid.addWidget(splitter)
         self.grid.addWidget(self.button)
 
-   # add data to view
-    def addItems(self,options):
+    def getLayout(self):
+        return self.grid
+
+  # add data to view
+    def addItems(self, options):
         self.ws.clear()
         self.ws.addItems(options)
         self.ws.addItem("PhaseQuad")
@@ -128,8 +145,8 @@ class FFTView(QtGui.QWidget):
     def phaseCheck(self):
         self.phaseCheckSignal.emit()
 
-    def tableClick(self,row,col):
-        self.tableClickSignal.emit(row,col)
+    def tableClick(self, row, col):
+        self.tableClickSignal.emit(row, col)
 
     def buttonClick(self):
         self.buttonSignal.emit()
@@ -142,20 +159,20 @@ class FFTView(QtGui.QWidget):
         self.button.setEnabled(False)
 
     def setPhaseBox(self):
-        self.FFTTable.setRowHidden(8,self.getWS() != "PhaseQuad")
+        self.FFTTable.setRowHidden(8, self.getWS() != "PhaseQuad")
 
-    def changed(self,box,row ):
-        self.FFTTable.setRowHidden(row,box.checkState() == QtCore.Qt.Checked)
+    def changed(self, box, row):
+        self.FFTTable.setRowHidden(row, box.checkState() == QtCore.Qt.Checked)
 
-    def changedHideUnTick(self,box,row ):
+    def changedHideUnTick(self, box, row):
         self.FFTTable.setRowHidden(row, box.checkState() != QtCore.Qt.Checked)
 
     def phaseQuadChanged(self):
-        #show axis
-        self.FFTTable.setRowHidden(6,self.getWS() != "PhaseQuad")
-        self.FFTTable.setRowHidden(7,self.getWS() != "PhaseQuad")
-        #hide complex ws
-        self.FFTTable.setRowHidden(2,self.getWS() == "PhaseQuad")
+        # show axis
+        self.FFTTable.setRowHidden(6, self.getWS() != "PhaseQuad")
+        self.FFTTable.setRowHidden(7, self.getWS() != "PhaseQuad")
+        # hide complex ws
+        self.FFTTable.setRowHidden(2, self.getWS() == "PhaseQuad")
 
     # these are for getting inputs
     def getRunName(self):
@@ -163,33 +180,34 @@ class FFTView(QtGui.QWidget):
             tmpWS = mantid.AnalysisDataService.retrieve("MuonAnalysis_1")
         else:
             tmpWS = mantid.AnalysisDataService.retrieve("MuonAnalysis")
-        return tmpWS.getInstrument().getName()+str(tmpWS.getRunNumber()).zfill(8)
+        return tmpWS.getInstrument().getName() + str(tmpWS.getRunNumber()).zfill(8)
 
     def initFFTInput(self):
         inputs = {}
-        inputs['InputWorkspace'] = "__ReTmp__"#str( self.ws.currentText()).replace(";","; ")
-        inputs['Real'] = 0 # always zero
-        out = str( self.ws.currentText()).replace(";","; ")
-        inputs['OutputWorkspace'] = self.getRunName()+";"+out+";FFT"
+        inputs[
+            'InputWorkspace'] = "__ReTmp__"  # str( self.ws.currentText()).replace(";","; ")
+        inputs['Real'] = 0  # always zero
+        out = str(self.ws.currentText()).replace(";", "; ")
+        inputs['OutputWorkspace'] = self.getRunName() + ";" + out + ";FFT"
         inputs["AcceptXRoundingErrors"] = True
         return inputs
 
-    def addFFTComplex(self,inputs):
+    def addFFTComplex(self, inputs):
         inputs["InputImagWorkspace"] = "__ImTmp__"
-        inputs["Imaginary"] = 0 #always zero
+        inputs["Imaginary"] = 0  # always zero
 
-    def addFFTShift(self,inputs):
+    def addFFTShift(self, inputs):
         inputs['AutoShift'] = False
         inputs['Shift'] = float(self.shift.text())
 
-    def addRaw(self,inputs,key):
+    def addRaw(self, inputs, key):
         inputs[key] += "_Raw"
 
-    def getFFTRePhase(self,inputs):
+    def getFFTRePhase(self, inputs):
         inputs['InputWorkspace'] = "__ReTmp__"
-        inputs['Real'] = 0 # always zero
+        inputs['Real'] = 0  # always zero
 
-    def getFFTImPhase(self,inputs):
+    def getFFTImPhase(self, inputs):
         inputs['InputImagWorkspace'] = "__ReTmp__"
         inputs['Imaginary'] = 1
 
@@ -201,21 +219,25 @@ class FFTView(QtGui.QWidget):
         inputs["Padding"] = int(self.padding.text())
         return inputs
 
-    def ReAdvanced(self,inputs):
-        inputs['InputWorkspace'] = str( self.ws.currentText()).replace(";","; ")
+    def ReAdvanced(self, inputs):
+        inputs['InputWorkspace'] = str(
+            self.ws.currentText()).replace(";",
+                                           "; ")
         inputs['OutputWorkspace'] = "__ReTmp__"
 
-    def ImAdvanced(self,inputs):
-        inputs['InputWorkspace'] = str( self.Im_ws.currentText()).replace(";","; ")
+    def ImAdvanced(self, inputs):
+        inputs['InputWorkspace'] = str(
+            self.Im_ws.currentText()).replace(";",
+                                              "; ")
         inputs['OutputWorkspace'] = "__ImTmp__"
 
-    def RePhaseAdvanced(self,inputs):
+    def RePhaseAdvanced(self, inputs):
         inputs['InputWorkspace'] = "__phaseQuad__"
         inputs['OutputWorkspace'] = "__ReTmp__"
 
     # get methods (from the GUI)
     def getWS(self):
-        return str( self.ws.currentText()).replace(";","; ")
+        return str(self.ws.currentText()).replace(";", "; ")
 
     def isAutoShift(self):
         return self.shift_box.checkState() == QtCore.Qt.Checked
diff --git a/scripts/Muon/GUI/FrequencyDomainAnalysis/FFT/fft_widget.py b/scripts/Muon/GUI/FrequencyDomainAnalysis/FFT/fft_widget.py
new file mode 100644
index 0000000000000000000000000000000000000000..ab8bbaae54464549c888c11e313a9533f897ef3b
--- /dev/null
+++ b/scripts/Muon/GUI/FrequencyDomainAnalysis/FFT/fft_widget.py
@@ -0,0 +1,30 @@
+from __future__ import (absolute_import, division, print_function)
+
+from Muon.GUI.FrequencyDomainAnalysis.FFT.fft_view import FFTView
+from Muon.GUI.FrequencyDomainAnalysis.FFT.fft_presenter import FFTPresenter
+from Muon.GUI.FrequencyDomainAnalysis.FFT.fft_model import FFTModel, FFTWrapper
+
+from PyQt4 import QtGui
+
+
+class FFTWidget(QtGui.QWidget):
+
+    def __init__(self, load, parent=None):
+        super(FFTWidget, self).__init__(parent)
+        view = FFTView(parent)
+
+        fft = FFTModel()
+        model = FFTWrapper(fft)
+
+        self._presenter = FFTPresenter(view=view, alg=model, load=load)
+
+    @property
+    def presenter(self):
+        return self._presenter
+
+    @property
+    def widget(self):
+        return self._presenter.widget
+
+    def closeEvent(self, event):
+        self._presenter.cancel()
diff --git a/scripts/Muon/GUI/FrequencyDomainAnalysis/MaxEnt/__init__.py b/scripts/Muon/GUI/FrequencyDomainAnalysis/MaxEnt/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/scripts/Muon/maxent_model.py b/scripts/Muon/GUI/FrequencyDomainAnalysis/MaxEnt/maxent_model.py
similarity index 100%
rename from scripts/Muon/maxent_model.py
rename to scripts/Muon/GUI/FrequencyDomainAnalysis/MaxEnt/maxent_model.py
diff --git a/scripts/Muon/maxent_presenter.py b/scripts/Muon/GUI/FrequencyDomainAnalysis/MaxEnt/maxent_presenter.py
similarity index 97%
rename from scripts/Muon/maxent_presenter.py
rename to scripts/Muon/GUI/FrequencyDomainAnalysis/MaxEnt/maxent_presenter.py
index 6b598a1ef9b9c836b2df04210509195e28823a13..37a04879f03bc3f14fba8b85003b7df3bedffb56 100644
--- a/scripts/Muon/maxent_presenter.py
+++ b/scripts/Muon/GUI/FrequencyDomainAnalysis/MaxEnt/maxent_presenter.py
@@ -2,7 +2,7 @@ from __future__ import (absolute_import, division, print_function)
 
 
 import math
-from Muon import thread_model
+from Muon.GUI.Common import thread_model
 
 
 class MaxEntPresenter(object):
@@ -23,6 +23,10 @@ class MaxEntPresenter(object):
         self.view.cancelSignal.connect(self.cancel)
         self.view.phaseSignal.connect(self.handlePhase)
 
+    @property
+    def widget(self):
+        return self.view
+
     # functions
     def getWorkspaceNames(self):
         final_options = self.load.getGroupedWorkspaceNames()
diff --git a/scripts/Muon/maxent_view.py b/scripts/Muon/GUI/FrequencyDomainAnalysis/MaxEnt/maxent_view.py
similarity index 94%
rename from scripts/Muon/maxent_view.py
rename to scripts/Muon/GUI/FrequencyDomainAnalysis/MaxEnt/maxent_view.py
index 1a5b238206b38a4373394d2ec6ada6f68413cc3a..a082b6768d2f0604c2811354f20eab191247d9d0 100644
--- a/scripts/Muon/maxent_view.py
+++ b/scripts/Muon/GUI/FrequencyDomainAnalysis/MaxEnt/maxent_view.py
@@ -2,7 +2,7 @@ from __future__ import (absolute_import, division, print_function)
 
 from PyQt4 import QtCore, QtGui
 
-from Muon import table_utils
+from Muon.GUI.Common import table_utils
 
 
 class MaxEntView(QtGui.QWidget):
@@ -19,6 +19,10 @@ class MaxEntView(QtGui.QWidget):
     def __init__(self, parent=None):
         super(MaxEntView, self).__init__(parent)
         self.grid = QtGui.QVBoxLayout(self)
+
+        # add splitter for resizing
+        splitter = QtGui.QSplitter(QtCore.Qt.Vertical)
+
         self.run = None
         # make table
         self.table = QtGui.QTableWidget(self)
@@ -126,16 +130,7 @@ class MaxEntView(QtGui.QWidget):
         # this is if complex data is unhidden
         self.table.setMinimumSize(40, 203)
         self.tableA.setMinimumSize(40, 207)
-        self.horizontalSpacer1 = QtGui.QSpacerItem(
-            20,
-            30,
-            QtGui.QSizePolicy.Expanding,
-            QtGui.QSizePolicy.Expanding)
-        self.horizontalSpacer2 = QtGui.QSpacerItem(
-            20,
-            70,
-            QtGui.QSizePolicy.Expanding,
-            QtGui.QSizePolicy.Expanding)
+
         # make buttons
         self.button = QtGui.QPushButton('Calculate MaxEnt', self)
         self.button.setStyleSheet("background-color:lightgrey")
@@ -151,13 +146,15 @@ class MaxEntView(QtGui.QWidget):
         self.buttonLayout.addWidget(self.button)
         self.buttonLayout.addWidget(self.cancel)
         # add to layout
-        self.grid.addWidget(self.table)
-        self.grid.addItem(self.horizontalSpacer1)
-        self.grid.addWidget(self.advancedLabel)
-        self.grid.addWidget(self.tableA)
-        self.grid.addItem(self.horizontalSpacer2)
+        splitter.addWidget(self.table)
+        splitter.addWidget(self.advancedLabel)
+        splitter.addWidget(self.tableA)
+        self.grid.addWidget(splitter)
         self.grid.addLayout(self.buttonLayout)
 
+    def getLayout(self):
+        return self.grid
+
     # add data to view
     def addItems(self, options):
         self.ws.clear()
diff --git a/scripts/Muon/GUI/FrequencyDomainAnalysis/MaxEnt/maxent_widget.py b/scripts/Muon/GUI/FrequencyDomainAnalysis/MaxEnt/maxent_widget.py
new file mode 100644
index 0000000000000000000000000000000000000000..246c76d9393b6363af7ff1c5d06accf4bc4db202
--- /dev/null
+++ b/scripts/Muon/GUI/FrequencyDomainAnalysis/MaxEnt/maxent_widget.py
@@ -0,0 +1,29 @@
+from __future__ import (absolute_import, division, print_function)
+
+from Muon.GUI.FrequencyDomainAnalysis.MaxEnt.maxent_view import MaxEntView
+from Muon.GUI.FrequencyDomainAnalysis.MaxEnt.maxent_presenter import MaxEntPresenter
+from Muon.GUI.FrequencyDomainAnalysis.MaxEnt.maxent_model import MaxEntModel, MaxEntWrapper
+
+from PyQt4 import QtGui
+
+
+class MaxEntWidget(QtGui.QWidget):
+
+    def __init__(self, load, parent=None):
+        super(MaxEntWidget, self).__init__(parent)
+        view = MaxEntView(parent)
+
+        maxEnt = MaxEntModel()
+        model = MaxEntWrapper(maxEnt)
+        self._presenter = MaxEntPresenter(view, model, load)
+
+    @property
+    def presenter(self):
+        return self._presenter
+
+    @property
+    def widget(self):
+        return self._presenter.widget
+
+    def closeEvent(self, event):
+        self._presenter.cancel()
diff --git a/scripts/Muon/GUI/FrequencyDomainAnalysis/Transform/__init__.py b/scripts/Muon/GUI/FrequencyDomainAnalysis/Transform/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/scripts/Muon/transform_view.py b/scripts/Muon/GUI/FrequencyDomainAnalysis/Transform/transform_view.py
similarity index 71%
rename from scripts/Muon/transform_view.py
rename to scripts/Muon/GUI/FrequencyDomainAnalysis/Transform/transform_view.py
index 035e93920bfbfa0f9ec53a49d5b6ad4e7df05547..57449884ec25910b296949abcc4b67136d95d83d 100644
--- a/scripts/Muon/transform_view.py
+++ b/scripts/Muon/GUI/FrequencyDomainAnalysis/Transform/transform_view.py
@@ -4,19 +4,21 @@ from PyQt4 import QtGui
 
 
 class TransformView(QtGui.QWidget):
+
     """
     Creates the view for the transformation tab.
     At the top is the transform selection widget
     and below it is the selected GUI (FFT or MaxEnt)
     """
-    def __init__(self,groupedViews,parent=None):
-        super(TransformView,self).__init__(parent)
+
+    def __init__(self, selectorView, groupedViews, parent=None):
+        super(TransformView, self).__init__(parent)
         # set selector
-        self.selection = groupedViews.getTransformSelection()
+        self.selection = selectorView
         self.Layout = QtGui.QGridLayout()
-        self.Layout.addWidget(self.selection,1,0)
+        self.Layout.addWidget(self.selection, 1, 0)
         # add the transform widgets to the tab
-        self.methods = groupedViews.getTransformMethods()
+        self.methods = groupedViews
         for key in self.methods:
             self.Layout.addWidget(self.methods[key])
         self.setLayout(self.Layout)
@@ -24,6 +26,9 @@ class TransformView(QtGui.QWidget):
         methods = list(self.methods.keys())
         self.show(methods[0])
 
+    def getLayout(self):
+        return self.grid
+
     def getMethods(self):
         return [key for key in self.methods]
 
@@ -31,8 +36,8 @@ class TransformView(QtGui.QWidget):
         for key in self.methods:
             self.methods[key].hide()
 
-    def show(self,name):
+    def show(self, name):
         self.methods[name].show()
 
-    def getView(self,name):
+    def getView(self, name):
         return self.methods[name]
diff --git a/scripts/Muon/GUI/FrequencyDomainAnalysis/Transform/transform_widget.py b/scripts/Muon/GUI/FrequencyDomainAnalysis/Transform/transform_widget.py
new file mode 100644
index 0000000000000000000000000000000000000000..547b12d3904be4dda1d0bf7c8546e4abf5e4e33d
--- /dev/null
+++ b/scripts/Muon/GUI/FrequencyDomainAnalysis/Transform/transform_widget.py
@@ -0,0 +1,45 @@
+from __future__ import (absolute_import, division, print_function)
+
+from Muon.GUI.FrequencyDomainAnalysis.Transform.transform_view import TransformView
+
+from Muon.GUI.FrequencyDomainAnalysis.FFT.fft_widget import FFTWidget
+from Muon.GUI.FrequencyDomainAnalysis.MaxEnt.maxent_widget import MaxEntWidget
+from Muon.GUI.FrequencyDomainAnalysis.TransformSelection.transform_selection_widget import TransformSelectionWidget
+
+from PyQt4 import QtGui
+
+
+class TransformWidget(QtGui.QWidget):
+    def __init__(self, load, parent=None):
+        super(TransformWidget,self).__init__(parent)
+        self._fft = FFTWidget(load=load,parent=self)
+        self._maxent = MaxEntWidget(load=load,parent=self)
+        self._selector = TransformSelectionWidget(parent=self)
+
+        groupedViews = self.getViews()
+
+        self._view = TransformView(self._selector.widget, groupedViews,parent)
+
+        self._selector.setSelectionConnection(self.updateDisplay)
+
+    @property
+    def widget(self):
+        return self._view
+
+    def mockWidget(self, mockView):
+        self._view = mockView
+
+    def closeEvent(self,event):
+        self._selector.closeEvent(event)
+        self._fft.closeEvent(event)
+        self._maxent.closeEvent(event)
+
+    def updateDisplay(self,method):
+        self._view.hideAll()
+        self._view.show(method)
+
+    def getViews(self):
+        groupedViews = {}
+        groupedViews["FFT"] = self._fft.widget
+        groupedViews["MaxEnt"] = self._maxent.widget
+        return groupedViews
diff --git a/scripts/Muon/GUI/FrequencyDomainAnalysis/TransformSelection/__init__.py b/scripts/Muon/GUI/FrequencyDomainAnalysis/TransformSelection/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/scripts/Muon/transform_selection_presenter.py b/scripts/Muon/GUI/FrequencyDomainAnalysis/TransformSelection/transform_selection_presenter.py
similarity index 60%
rename from scripts/Muon/transform_selection_presenter.py
rename to scripts/Muon/GUI/FrequencyDomainAnalysis/TransformSelection/transform_selection_presenter.py
index c3bff2f796a18a6cda7cc581d94a2bf8bb436420..ec565273c8a5622fd8de7d578047a95afcf382d5 100644
--- a/scripts/Muon/transform_selection_presenter.py
+++ b/scripts/Muon/GUI/FrequencyDomainAnalysis/TransformSelection/transform_selection_presenter.py
@@ -2,12 +2,18 @@ from __future__ import (absolute_import, division, print_function)
 
 
 class TransformSelectionPresenter(object):
+
     """
     The widget for selecting the widget
     shown in the transformation tab
     """
-    def __init__(self,view):
-        self.view=view
 
-    def setMethodsCombo(self,options):
+    def __init__(self, view):
+        self.view = view
+
+    @property
+    def widget(self):
+        return self.view
+
+    def setMethodsCombo(self, options):
         self.view.setMethodsCombo(options)
diff --git a/scripts/Muon/transform_selection_view.py b/scripts/Muon/GUI/FrequencyDomainAnalysis/TransformSelection/transform_selection_view.py
similarity index 72%
rename from scripts/Muon/transform_selection_view.py
rename to scripts/Muon/GUI/FrequencyDomainAnalysis/TransformSelection/transform_selection_view.py
index 5aa08de1ce173bf15e91efb15d86c8ae9e47284f..d07d510e5355f17902d7e39b2f942d5a7faa92fb 100644
--- a/scripts/Muon/transform_selection_view.py
+++ b/scripts/Muon/GUI/FrequencyDomainAnalysis/TransformSelection/transform_selection_view.py
@@ -4,6 +4,7 @@ from PyQt4 import QtCore, QtGui
 
 
 class TransformSelectionView(QtGui.QWidget):
+
     """
     Create the transformation selection widget's appearance
     """
@@ -15,15 +16,18 @@ class TransformSelectionView(QtGui.QWidget):
         self.grid = QtGui.QGridLayout(self)
         self.methods = QtGui.QComboBox()
         # default to FFT
-        options=["FFT"]
+        options = ["FFT", "MaxEnt"]
         self.methods.addItems(options)
         self.grid.addWidget(self.methods)
         self.methods.currentIndexChanged.connect(self.sendSignal)
 
-    # sets the methods in the selection widget
-    def setMethodsCombo(self,options):
+    def getLayout(self):
+        return self.grid
+
+        # sets the methods in the selection widget
+    def setMethodsCombo(self, options):
         self.methods.clear()
         self.methods.addItems(options)
 
-    def sendSignal(self,index):
-        self.changeMethodSignal.emit(index)
+    def sendSignal(self):
+        self.changeMethodSignal.emit(self.methods.currentText())
diff --git a/scripts/Muon/GUI/FrequencyDomainAnalysis/TransformSelection/transform_selection_widget.py b/scripts/Muon/GUI/FrequencyDomainAnalysis/TransformSelection/transform_selection_widget.py
new file mode 100644
index 0000000000000000000000000000000000000000..7a379289b10bd71c973280efbee5a0ba5da30798
--- /dev/null
+++ b/scripts/Muon/GUI/FrequencyDomainAnalysis/TransformSelection/transform_selection_widget.py
@@ -0,0 +1,26 @@
+from __future__ import (absolute_import, division, print_function)
+
+from Muon.GUI.FrequencyDomainAnalysis.TransformSelection.transform_selection_view import TransformSelectionView
+from Muon.GUI.FrequencyDomainAnalysis.TransformSelection.transform_selection_presenter import TransformSelectionPresenter
+
+from PyQt4 import QtGui
+
+
+class TransformSelectionWidget(QtGui.QWidget):
+
+    def __init__(self, parent=None):
+        super(TransformSelectionWidget, self).__init__(parent)
+        view = TransformSelectionView(parent)
+        self._presenter = TransformSelectionPresenter(view)
+
+    def setSelectionConnection(self, slot):
+        view = self.widget
+        view.changeMethodSignal.connect(slot)
+
+    @property
+    def presenter(self):
+        return self._presenter
+
+    @property
+    def widget(self):
+        return self._presenter.widget
diff --git a/scripts/Muon/GUI/FrequencyDomainAnalysis/__init__.py b/scripts/Muon/GUI/FrequencyDomainAnalysis/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/scripts/Muon/GUI/MuonAnalysis/__init__.py b/scripts/Muon/GUI/MuonAnalysis/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/scripts/Muon/GUI/MuonAnalysis/dock/__init__.py b/scripts/Muon/GUI/MuonAnalysis/dock/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/scripts/Muon/GUI/dock/dock_widget.py b/scripts/Muon/GUI/MuonAnalysis/dock/dock_widget.py
similarity index 88%
rename from scripts/Muon/GUI/dock/dock_widget.py
rename to scripts/Muon/GUI/MuonAnalysis/dock/dock_widget.py
index 3866a008addb454228ac86392bb21ec3620f276b..28ccae93e6c9a7ad8be023ec493be2f6cf27a432 100644
--- a/scripts/Muon/GUI/dock/dock_widget.py
+++ b/scripts/Muon/GUI/MuonAnalysis/dock/dock_widget.py
@@ -2,9 +2,9 @@ from __future__ import (absolute_import, division, print_function)
 
 from PyQt4 import QtGui
 
-from Muon.GUI.dummy.dummy_widget import DummyWidget
-from Muon.GUI.dummy_label.dummy_label_widget import DummyLabelWidget
-from Muon.GUI.dock.dock_view import DockView
+from Muon.GUI.Common.dummy.dummy_widget import DummyWidget
+from Muon.GUI.Common.dummy_label.dummy_label_widget import DummyLabelWidget
+from Muon.GUI.Common.dock.dock_view import DockView
 
 
 class DockWidget(QtGui.QWidget):
diff --git a/scripts/Muon/fft_model.py b/scripts/Muon/fft_model.py
deleted file mode 100644
index 40b0d90d72b640ddead228cc4728b2d1e41cab49..0000000000000000000000000000000000000000
--- a/scripts/Muon/fft_model.py
+++ /dev/null
@@ -1,137 +0,0 @@
-from __future__ import (absolute_import, division, print_function)
-
-from six import iteritems
-
-import mantid.simpleapi as mantid
-
-
-class FFTWrapper(object):
-    """
-    A class to wrap the different parts
-    of the FFT and its preprocessing.
-    This keeps the main FFT class simple.
-    """
-    def __init__(self,FFT):
-        self.name = "FFT"
-        self.model = FFT
-
-    def loadData(self,inputs):
-        """
-        store the data in the wrapper for later
-        """
-        if "phaseTable" in inputs:
-            self.phaseTable = inputs["phaseTable"]
-        else:
-            self.phaseTable = None
-        if "preRe" in inputs:
-            self.preRe = inputs["preRe"]
-        else:
-            self.preRe = None
-        if "preIm" in inputs:
-            self.preIm = inputs["preIm"]
-        else:
-            self.preIm = None
-        if "FFT" in inputs:
-            self.FFT = inputs["FFT"]
-        else:
-            self.FFT = None
-        self.model.setRun(inputs["Run"])
-
-    def execute(self):
-        """
-        runs the relevant parts of the FFT and the preprocessing
-        """
-        try:
-            if self.phaseTable is not None:
-                if self.phaseTable["newTable"]:
-                    self.model.makePhaseQuadTable(self.phaseTable)
-                self.model.PhaseQuad()
-
-            if self.preRe is not None:
-                self.model.preAlg(self.preRe)
-
-            if self.preIm is not None:
-                self.model.preAlg(self.preIm)
-
-            if self.FFT is not None:
-                self.model.FFTAlg(self.FFT)
-        except:
-            pass
-
-    def output(self):
-        return
-
-
-class FFTModel(object):
-    """
-    A simple class which executes
-    the relevant algorithms for
-    the analysis.
-    """
-    def __init__(self):
-        self.name = "FFT"
-
-    def setRun(self,run):
-        self.runName=run
-
-    def preAlg(self,preInputs):
-        """
-        PaddingAndApodization alg on the data
-        """
-        preAlg = mantid.AlgorithmManager.create("PaddingAndApodization")
-        preAlg.initialize()
-        preAlg.setChild(True)
-        for name,value in iteritems(preInputs):
-            preAlg.setProperty(name,value)
-        preAlg.execute()
-        mantid.AnalysisDataService.addOrReplace(preInputs["OutputWorkspace"], preAlg.getProperty("OutputWorkspace").value)
-
-    def FFTAlg(self,FFTInputs):
-        """
-        Use the FFT alg
-        """
-        alg = mantid.AlgorithmManager.create("FFT")
-        alg.initialize()
-        alg.setChild(True)
-        for name,value in iteritems(FFTInputs):
-            alg.setProperty(name,value)
-        alg.execute()
-        mantid.AnalysisDataService.addOrReplace(FFTInputs["OutputWorkspace"],alg.getProperty("OutputWorkspace").value)
-
-        ws = alg.getPropertyValue("OutputWorkspace")
-        group = mantid.AnalysisDataService.retrieve(self.runName)
-        group.add(ws)
-
-    def makePhaseQuadTable(self,inputs):
-        """
-        generates a phase table from CalMuonDetectorPhases
-        """
-        alg = mantid.AlgorithmManager.create("CalMuonDetectorPhases")
-        alg.initialize()
-        alg.setChild(True)
-
-        alg.setProperty("FirstGoodData",inputs["FirstGoodData"])
-        alg.setProperty("LastGoodData",inputs["LastGoodData"])
-
-        alg.setProperty("InputWorkspace","MuonAnalysis")
-        alg.setProperty("DetectorTable","PhaseTable")
-        alg.setProperty("DataFitted","fits")
-        alg.execute()
-        mantid.AnalysisDataService.addOrReplace("PhaseTable",alg.getProperty("DetectorTable").value)
-
-    def PhaseQuad(self):
-        """
-        do the phaseQuad algorithm
-        groups data into a single set
-        """
-        phaseQuad = mantid.AlgorithmManager.create("PhaseQuad")
-        phaseQuad.initialize()
-        phaseQuad.setChild(False)
-        print (self.runName)
-        phaseQuad.setProperty("InputWorkspace","MuonAnalysis")
-        phaseQuad.setProperty("PhaseTable","PhaseTable")
-        phaseQuad.setProperty("OutputWorkspace","__phaseQuad__")
-        phaseQuad.execute()
-
-    def getName(self):
-        return self.name
diff --git a/scripts/Muon/model_constructor.py b/scripts/Muon/model_constructor.py
deleted file mode 100644
index 91392d7a38867aecd4911d0590a6d106f23ac51e..0000000000000000000000000000000000000000
--- a/scripts/Muon/model_constructor.py
+++ /dev/null
@@ -1,30 +0,0 @@
-from __future__ import (absolute_import, division, print_function)
-from Muon import maxent_model
-
-from Muon import fft_model
-
-
-class ModelConstructor(object):
-
-    """
-     simple class to create a single object
-     containing all of the models.
-     Only need to pass a single object to all
-     presenters
-    """
-    def __init__(self,includeTransform):
-        # construct transformation memebers
-        if includeTransform:
-            self.transformModels={}
-            # generate the models
-            MaxEnt =maxent_model.MaxEntModel()
-            MaxEntWrapper =maxent_model.MaxEntWrapper(MaxEnt)
-            FFT =fft_model.FFTModel()
-            FFTWrapper=fft_model.FFTWrapper(FFT)
-            # adds the models to the transformation tab
-            self.transformModels[MaxEnt.getName()]=MaxEntWrapper
-            self.transformModels[FFT.getName()]=FFTWrapper
-
-    # gets the model
-    def getModel(self,name):
-        return self.transformModels[name]
diff --git a/scripts/Muon/transform_presenter.py b/scripts/Muon/transform_presenter.py
deleted file mode 100644
index 58511798914fb96e2f23c593fe0d0a24f2bc4d8a..0000000000000000000000000000000000000000
--- a/scripts/Muon/transform_presenter.py
+++ /dev/null
@@ -1,38 +0,0 @@
-from __future__ import (absolute_import, division, print_function)
-
-from Muon import fft_presenter
-from Muon import load_utils
-from Muon import maxent_presenter
-from Muon import transform_selection_presenter
-
-
-class TransformPresenter(object):
-    """
-    The widget for controlling which method to display
-    in the transformation tab
-    """
-    def __init__(self,view,model):
-        self.view=view
-        self.load=load_utils.LoadUtils()
-        if not self.load.MuonAnalysisExists():
-            return
-
-        # create presenters for the views
-        self.FFTPresenter=fft_presenter.FFTPresenter(self.view.getView("FFT"),model.getModel("FFT"),self.load)
-        self.MaxEntPresenter=maxent_presenter.MaxEntPresenter(self.view.getView("MaxEnt"),model.getModel("MaxEnt"),self.load)
-        # get the transform selection view
-        self.selectionPresenter=transform_selection_presenter.TransformSelectionPresenter(self.view.selection)
-        # gets a list of the views/methods
-        self.methodsList=self.view.getMethods()
-        # sets the transform selection view to have the correct options
-        self.selectionPresenter.setMethodsCombo(self.methodsList)
-        # connect
-        self.view.selection.changeMethodSignal.connect(self.updateDisplay)
-
-    def close(self):
-        self.MaxEntPresenter.cancel()
-
-    #switch the view
-    def updateDisplay(self,index):
-        self.view.hideAll()
-        self.view.show(self.methodsList[index])
diff --git a/scripts/Muon/view_constructor.py b/scripts/Muon/view_constructor.py
deleted file mode 100644
index 44970df2b816b4ee3c2cbb18be5eb4bb65b7fdb1..0000000000000000000000000000000000000000
--- a/scripts/Muon/view_constructor.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from __future__ import (absolute_import, division, print_function)
-
-from Muon import fft_view
-from Muon import maxent_view
-from Muon import transform_selection_view
-
-
-class ViewConstructor(object):
-    """
-     simple class to create a single object
-     containing all of the views.
-     Only need to pass a single object to all
-     presenters
-    """
-
-    def __init__(self,includeTransform,parent=None ):
-        # construct transformation memebers
-        if includeTransform:
-            self.transformMethods = {}
-            self.transformMethods["FFT"] = fft_view.FFTView(parent)
-            self.transformMethods["MaxEnt"] = maxent_view.MaxEntView(parent)
-            # create default transform selection widget
-            self.transformSelector = transform_selection_view.TransformSelectionView(parent)
-
-    def getTransformMethods(self):
-        return self.transformMethods
-
-    def getTransformSelection(self):
-        return self.transformSelector
diff --git a/scripts/Muon_Analysis_2.py b/scripts/Muon_Analysis_2.py
index a355cb5766d624248055c33c56b438065f883801..74284382f744613147277c229d202d0dd7f54b15 100644
--- a/scripts/Muon_Analysis_2.py
+++ b/scripts/Muon_Analysis_2.py
@@ -6,8 +6,8 @@ import sys
 import PyQt4.QtGui as QtGui
 import PyQt4.QtCore as QtCore
 
-from Muon.GUI.dummy_label.dummy_label_widget import DummyLabelWidget
-from Muon.GUI.dock.dock_widget import DockWidget
+from Muon.GUI.Common.dummy_label.dummy_label_widget import DummyLabelWidget
+from Muon.GUI.MuonAnalysis.dock.dock_widget import DockWidget
 
 
 class MuonAnalysis2Gui(QtGui.QMainWindow):
diff --git a/scripts/test/Muon/CMakeLists.txt b/scripts/test/Muon/CMakeLists.txt
index 5eb15b0b9eac3ad3ec99c39a1d61584062c62fe4..cf8bd05406a1a0e5e3b15b5f0b1fa3b9f4686e06 100644
--- a/scripts/test/Muon/CMakeLists.txt
+++ b/scripts/test/Muon/CMakeLists.txt
@@ -7,7 +7,7 @@ set ( TEST_PY_FILES
    FFTModel_test.py
    MaxEntPresenter_test.py
    MaxEntModel_test.py
-   transformPresenter_test.py
+   transformWidget_test.py
 )
 
 check_tests_valid ( ${CMAKE_CURRENT_SOURCE_DIR} ${TEST_PY_FILES} )
diff --git a/scripts/test/Muon/FFTModel_test.py b/scripts/test/Muon/FFTModel_test.py
index 68de091be30a4f90a68d6441819575fd993b1df9..0e6513e02357ee3a7e12c938a781f98916b37d34 100644
--- a/scripts/test/Muon/FFTModel_test.py
+++ b/scripts/test/Muon/FFTModel_test.py
@@ -1,6 +1,6 @@
 import sys
 
-from  Muon import fft_model
+from  Muon.GUI.FrequencyDomainAnalysis.FFT import fft_model
 
 import unittest
 
diff --git a/scripts/test/Muon/FFTPresenter_test.py b/scripts/test/Muon/FFTPresenter_test.py
index 7d30be8b4f2e182600ab925e02ac5fad3594b619..846fd9886c1674570ac08b0205556035121c6b16 100644
--- a/scripts/test/Muon/FFTPresenter_test.py
+++ b/scripts/test/Muon/FFTPresenter_test.py
@@ -1,10 +1,10 @@
 import sys
 
-from Muon import load_utils
-from Muon import fft_presenter
-from Muon import fft_view
-from Muon import fft_model
-from Muon import thread_model
+from Muon.GUI.Common import load_utils
+from Muon.GUI.Common import thread_model
+from Muon.GUI.FrequencyDomainAnalysis.FFT import fft_presenter
+from Muon.GUI.FrequencyDomainAnalysis.FFT import fft_view
+from Muon.GUI.FrequencyDomainAnalysis.FFT import fft_model
 
 import unittest
 
diff --git a/scripts/test/Muon/MaxEntModel_test.py b/scripts/test/Muon/MaxEntModel_test.py
index ebb0884d359efc70fd88461d78b37eb62d811cdd..80b0eb5ad54d50a6c2cadecbcff180ee8520e76c 100644
--- a/scripts/test/Muon/MaxEntModel_test.py
+++ b/scripts/test/Muon/MaxEntModel_test.py
@@ -1,6 +1,6 @@
 import sys
 
-from Muon import maxent_model
+from Muon.GUI.FrequencyDomainAnalysis.MaxEnt import maxent_model
 
 import unittest
 
diff --git a/scripts/test/Muon/MaxEntPresenter_test.py b/scripts/test/Muon/MaxEntPresenter_test.py
index 73156d0ddb10409d486854c657b72216e2445e45..15e73d7830bb285d7d63e94848c7f8dfa2e51e75 100644
--- a/scripts/test/Muon/MaxEntPresenter_test.py
+++ b/scripts/test/Muon/MaxEntPresenter_test.py
@@ -2,11 +2,11 @@ from __future__ import (absolute_import, division, print_function)
 
 import sys
 
-from  Muon import load_utils
-from  Muon import maxent_presenter
-from  Muon import maxent_view
-from  Muon import maxent_model
-from  Muon import thread_model
+from  Muon.GUI.Common import load_utils
+from  Muon.GUI.Common import thread_model
+from  Muon.GUI.FrequencyDomainAnalysis.MaxEnt import maxent_presenter
+from  Muon.GUI.FrequencyDomainAnalysis.MaxEnt import maxent_view
+from  Muon.GUI.FrequencyDomainAnalysis.MaxEnt import maxent_model
 
 import unittest
 if sys.version_info.major == 3:
diff --git a/scripts/test/Muon/transformPresenter_test.py b/scripts/test/Muon/transformPresenter_test.py
deleted file mode 100644
index b184745a590a14e7b0f443af3332b3e371b93207..0000000000000000000000000000000000000000
--- a/scripts/test/Muon/transformPresenter_test.py
+++ /dev/null
@@ -1,43 +0,0 @@
-import sys
-
-import mantid #noqa
-from  Muon import fft_presenter
-from  Muon import load_utils
-from  Muon import transform_presenter
-from  Muon import transform_view
-from  Muon import transform_selection_view
-from  Muon import maxent_presenter
-from  Muon import model_constructor
-
-import unittest
-if sys.version_info.major == 3:
-    from unittest import mock
-else:
-    import mock
-
-
-class FFTTransformTest(unittest.TestCase):
-    def setUp(self):
-        load_utils.LoadUtils=mock.Mock()
-        fft_presenter.FFTPresenter=mock.Mock()
-        maxent_presenter.MaxEntPresenter=mock.Mock()
-        self.view=mock.create_autospec(transform_view.TransformView,spec_set=False)
-        self.view.getView=mock.Mock()
-        self.view.getMethods=mock.Mock(return_value=["FFT","MaxEnt"])
-        self.view.hideAll=mock.Mock()
-        self.view.show=mock.Mock()
-        self.view.selection=mock.create_autospec(transform_selection_view.TransformSelectionView,spec_set=True)
-        self.view.selection.changeMethodSignal=mock.Mock()
-        self.model=mock.create_autospec(model_constructor.ModelConstructor)
-        self.model.getModel=mock.Mock()
-        #set presenter
-        self.presenter=transform_presenter.TransformPresenter(self.view,self.model)
-
-    def test_changeDisplay(self):
-        self.presenter.updateDisplay(1)
-        assert(self.view.hideAll.call_count==1)
-        assert(self.view.show.call_count==1)
-
-
-if __name__ == '__main__':
-    unittest.main()
diff --git a/scripts/test/Muon/transformWidget_test.py b/scripts/test/Muon/transformWidget_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..94c78456a0b014bf7f858b74453ef776cbe06b93
--- /dev/null
+++ b/scripts/test/Muon/transformWidget_test.py
@@ -0,0 +1,46 @@
+import sys
+
+from  Muon.GUI.Common import mock_widget
+from  Muon.GUI.Common import load_utils
+from  Muon.GUI.FrequencyDomainAnalysis.FFT import fft_presenter
+from  Muon.GUI.FrequencyDomainAnalysis.Transform import transform_widget
+from  Muon.GUI.FrequencyDomainAnalysis.Transform import transform_view
+from  Muon.GUI.FrequencyDomainAnalysis.TransformSelection import transform_selection_view
+from  Muon.GUI.FrequencyDomainAnalysis.MaxEnt import maxent_presenter
+
+
+# need to update this
+import unittest
+if sys.version_info.major == 3:
+    from unittest import mock
+else:
+    import mock
+
+class FFTTransformTest(unittest.TestCase):
+    def setUp(self):
+        self._qapp = mock_widget.mockQapp()
+        self.load=  mock.create_autospec( load_utils.LoadUtils,spec_set=True)
+        self.fft=   mock.create_autospec( fft_presenter.FFTPresenter,spec_Set=True)
+        self.maxent=mock.create_autospec( maxent_presenter.MaxEntPresenter,spec_set=True)
+
+        # create widget
+        self.widget=transform_widget.TransformWidget(self.load)
+        # create the view
+        self.view=mock.create_autospec(transform_view.TransformView,spec_set=False)
+        self.view.getView=mock.Mock()
+        self.view.getMethods=mock.Mock(return_value=["FFT","MaxEnt"])
+        self.view.hideAll=mock.Mock()
+        self.view.show=mock.Mock()
+        self.view.selection=mock.create_autospec(transform_selection_view.TransformSelectionView,spec_set=True)
+        self.view.selection.changeMethodSignal=mock.Mock()
+        # set the mocked view to the widget
+        self.widget.mockWidget(self.view)  
+
+    def test_changeDisplay(self):
+        self.widget.updateDisplay(1)
+        assert(self.view.hideAll.call_count==1)
+        assert(self.view.show.call_count==1)
+
+
+if __name__ == '__main__':
+    unittest.main()