Index: src/sas/qtgui/MainWindow/DataExplorer.py
===================================================================
--- src/sas/qtgui/MainWindow/DataExplorer.py	(revision fd7ef366aae1676b62ef944659ae3d38556a61fb)
+++ src/sas/qtgui/MainWindow/DataExplorer.py	(revision 339e22b9f5c08262b1d5b0b551ce467bcf83178c)
@@ -42,5 +42,4 @@
         # Main model for keeping loaded data
         self.model = QtGui.QStandardItemModel(self)
-
         # Secondary model for keeping frozen data sets
         self.theory_model = QtGui.QStandardItemModel(self)
@@ -98,4 +97,5 @@
         self.communicator.plotUpdateSignal.connect(self.updatePlot)
         self.communicator.maskEditorSignal.connect(self.showEditDataMask)
+        self.communicator.extMaskEditorSignal.connect(self.extShowEditDataMask)
 
         self.cbgraph.editTextChanged.connect(self.enableGraphCombo)
@@ -1059,15 +1059,36 @@
         self.new_plot.show()
 
+    def extShowEditDataMask(self):
+        self.showEditDataMask()
+
     def showEditDataMask(self, data=None):
         """
         Mask Editor for 2D plots
         """
-        if data is None or not isinstance(data, Data2D):
-            index = self.current_view.selectedIndexes()[0]
-            proxy = self.current_view.model()
-            model = proxy.sourceModel()
-            model_item = model.itemFromIndex(proxy.mapToSource(index))
-
-            data = GuiUtils.dataFromItem(model_item)
+        try:
+            if data is None or not isinstance(data, Data2D):
+                index = self.current_view.selectedIndexes()[0]
+                proxy = self.current_view.model()
+                model = proxy.sourceModel()
+                model_item = model.itemFromIndex(proxy.mapToSource(index))
+
+                data = GuiUtils.dataFromItem(model_item)
+
+            if data is None or not isinstance(data, Data2D):
+                msg = QtWidgets.QMessageBox()
+                msg.setIcon(QtWidgets.QMessageBox.Information)
+                msg.setText("Error: cannot apply mask. \
+                                Please select a 2D dataset.")
+                msg.setStandardButtons(QtWidgets.QMessageBox.Cancel)
+                msg.exec_()
+                return
+        except:
+            msg = QtWidgets.QMessageBox()
+            msg.setIcon(QtWidgets.QMessageBox.Information)
+            msg.setText("Error: No dataset selected. \
+                            Please select a 2D dataset.")
+            msg.setStandardButtons(QtWidgets.QMessageBox.Cancel)
+            msg.exec_()
+            return
 
         mask_editor = MaskEditor(self, data)
Index: src/sas/qtgui/MainWindow/GuiManager.py
===================================================================
--- src/sas/qtgui/MainWindow/GuiManager.py	(revision f84d793343c420fd47b44c3b601e90f9e82ea451)
+++ src/sas/qtgui/MainWindow/GuiManager.py	(revision 339e22b9f5c08262b1d5b0b551ce467bcf83178c)
@@ -422,5 +422,4 @@
         self._workspace.actionExcel.triggered.connect(self.actionExcel)
         self._workspace.actionLatex.triggered.connect(self.actionLatex)
-
         # View
         self._workspace.actionShow_Grid_Window.triggered.connect(self.actionShow_Grid_Window)
@@ -452,4 +451,6 @@
         self._workspace.actionManage_Custom_Models.triggered.connect(self.actionManage_Custom_Models)
         self._workspace.actionAddMult_Models.triggered.connect(self.actionAddMult_Models)
+        self._workspace.actionEditMask.triggered.connect(self.actionEditMask)
+
         # Window
         self._workspace.actionCascade.triggered.connect(self.actionCascade)
@@ -781,4 +782,8 @@
         self.add_mult_editor.show()
 
+    def actionEditMask(self):
+
+        self.communicate.extMaskEditorSignal.emit()
+
     #============ ANALYSIS =================
     def actionFitting(self):
Index: src/sas/qtgui/MainWindow/UI/MainWindowUI.ui
===================================================================
--- src/sas/qtgui/MainWindow/UI/MainWindowUI.ui	(revision dda8f16d5052858e8e3b59357f178cbd74fe3664)
+++ src/sas/qtgui/MainWindow/UI/MainWindowUI.ui	(revision 339e22b9f5c08262b1d5b0b551ce467bcf83178c)
@@ -113,4 +113,6 @@
     <addaction name="actionManage_Custom_Models"/>
     <addaction name="actionAddMult_Models"/>
+    <addaction name="separator"/>
+    <addaction name="EditMask"/>
    </widget>
    <widget class="QMenu" name="menuWindow">
@@ -413,4 +415,9 @@
    </property>
   </action>
+    <action name="EditMask">
+   <property name="text">
+    <string>Edit Mask</string>
+   </property>
+  </action>
   <action name="actionCascade">
    <property name="text">
Index: src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision f84d793343c420fd47b44c3b601e90f9e82ea451)
+++ src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 339e22b9f5c08262b1d5b0b551ce467bcf83178c)
@@ -48,5 +48,4 @@
 from sas.qtgui.Perspectives.Fitting.ReportPageLogic import ReportPageLogic
 
-
 TAB_MAGNETISM = 4
 TAB_POLY = 3
@@ -188,4 +187,5 @@
 
         # Overwrite data type descriptor
+
         self.is2D = True if isinstance(self.logic.data, Data2D) else False
 
@@ -3213,2 +3213,4 @@
         self._poly_model.blockSignals(False)
 
+
+
Index: src/sas/qtgui/Utilities/GuiUtils.py
===================================================================
--- src/sas/qtgui/Utilities/GuiUtils.py	(revision 0eff6153f4208fa47673e1006f3be34f6a55724a)
+++ src/sas/qtgui/Utilities/GuiUtils.py	(revision 339e22b9f5c08262b1d5b0b551ce467bcf83178c)
@@ -265,4 +265,7 @@
     # Mask Editor requested
     maskEditorSignal = QtCore.pyqtSignal(Data2D)
+
+    #second Mask Editor for external
+    extMaskEditorSignal = QtCore.pyqtSignal()
 
     # Fitting parameter copy to clipboard
