Index: invariantview/perspectives/invariant/invariant.py
===================================================================
--- invariantview/perspectives/invariant/invariant.py	(revision f1e06a8e320c878e4938b288125a59701ad41ad5)
+++ invariantview/perspectives/invariant/invariant.py	(revision cacbd7de169702116a4b0ccec86be839ab061e65)
@@ -17,5 +17,4 @@
 import copy
 import logging
-
 
 from DataLoader.data_info import Data1D as LoaderData1D
@@ -184,7 +183,19 @@
         """
         if len(data_list) > 1:
-            msg = "invariant panel does not allow more than one value"
-            msg += " at this time"
-            raise ValueError, msg
+            msg = "invariant panel does not allow multiple data!\n"
+            msg += "Please select one.\n"
+            from invariant_widgets import DataDialog
+            dlg = DataDialog(data_list=data_list, text=msg)
+            if dlg.ShowModal() == wx.ID_OK:
+                data = dlg.get_data()
+                if issubclass(data.__class__, LoaderData1D):
+                    self.compute_helper(data_list[0])
+                    wx.PostEvent(self.parent, NewPlotEvent(plot=data_list[0],
+                                               title=data_list[0].title))
+                else:    
+                    msg = "invariant cannot be computed for data of "
+                    msg += "type %s" % (data_list[0].__class__.__name__)
+                    wx.PostEvent(self.parent, 
+                             StatusEvent(status=msg, info='error'))
         elif len(data_list) == 1:
             if issubclass(data_list[0].__class__, LoaderData1D):
@@ -195,5 +206,6 @@
                 msg = "invariant cannot be computed for"
                 msg += " data of type %s" % (data_list[0].__class__.__name__)
-                raise ValueError, msg
+                wx.PostEvent(self.parent, 
+                             StatusEvent(status=msg, info='error'))
             
             
Index: invariantview/perspectives/invariant/invariant_widgets.py
===================================================================
--- invariantview/perspectives/invariant/invariant_widgets.py	(revision 4a2b054ce1972d8c903cf87a9d285cad450d5353)
+++ invariantview/perspectives/invariant/invariant_widgets.py	(revision cacbd7de169702116a4b0ccec86be839ab061e65)
@@ -14,8 +14,9 @@
 
 import wx
-#import os
-#from invariant_state import InvariantState as IState
-#import copy
+from wx.lib.scrolledpanel import ScrolledPanel
 
+WIDTH = 400
+HEIGHT = 200
+        
 class InvTextCtrl(wx.TextCtrl):
     """
@@ -90,4 +91,80 @@
         pass
     
+class DataDialog(wx.Dialog):
+    """
+    Allow file selection at loading time
+    """
+    def __init__(self, data_list, parent=None, text='', *args, **kwds):
+        wx.Dialog.__init__(self, parent, *args, **kwds)
+        self.SetTitle("Data Selection")
+        self.SetSize((WIDTH, HEIGHT))
+        self.list_of_ctrl = []
+        if not data_list:
+            return 
+        self._sizer_main = wx.BoxSizer(wx.VERTICAL)
+        self._sizer_txt = wx.BoxSizer(wx.VERTICAL)
+        self._sizer_button = wx.BoxSizer(wx.HORIZONTAL)
+        self._choice_sizer = wx.GridBagSizer(5, 5)
+        self._panel = ScrolledPanel(self, style=wx.RAISED_BORDER,
+                               size=(WIDTH-20, HEIGHT-50))
+        self._panel.SetupScrolling()
+        self.__do_layout(data_list, text=text)
+        
+    def __do_layout(self, data_list, text=''):
+        """
+        layout the dialog
+        """
+        if not data_list or len(data_list) <= 1:
+            return 
+        #add text
+        if text.strip() == "":
+            text = "This Perspective does not allow multiple data !\n"
+            text += "Please select only one Data.\n"
+        text_ctrl = wx.StaticText(self, -1, str(text))
+        self._sizer_txt.Add(text_ctrl)
+        iy = 0
+        ix = 0
+        rbox = wx.RadioButton(self._panel, -1, str(data_list[0].name), 
+                                  (10, 10), style= wx.RB_GROUP)
+        rbox.SetValue(True)
+        self.list_of_ctrl.append((rbox, data_list[0]))
+        self._choice_sizer.Add(rbox, (iy, ix), (1, 1),
+                         wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
+        for i in range(1, len(data_list)):
+            iy += 1
+            rbox = wx.RadioButton(self._panel, -1, 
+                                  str(data_list[i].name), (10, 10))
+            rbox.SetValue(False)
+            self.list_of_ctrl.append((rbox, data_list[i]))
+            self._choice_sizer.Add(rbox, (iy, ix),
+                           (1, 1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
+        self._panel.SetSizer(self._choice_sizer)
+        #add sizer
+        self._sizer_button.Add((20, 20), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
+        button_cancel = wx.Button(self, wx.ID_CANCEL, "Cancel")
+        self._sizer_button.Add(button_cancel, 0,
+                          wx.LEFT|wx.RIGHT|wx.ADJUST_MINSIZE, 10)
+        button_OK = wx.Button(self, wx.ID_OK, "Ok")
+        button_OK.SetFocus()
+        self._sizer_button.Add(button_OK, 0,
+                                wx.LEFT|wx.RIGHT|wx.ADJUST_MINSIZE, 10)
+        static_line = wx.StaticLine(self, -1)
+        
+        self._sizer_txt.Add(self._panel, 1, wx.EXPAND|wx.LEFT|wx.RIGHT, 5)
+        self._sizer_main.Add(self._sizer_txt, 1, wx.EXPAND|wx.ALL, 10)
+        self._sizer_main.Add(static_line, 0, wx.EXPAND, 0)
+        self._sizer_main.Add(self._sizer_button, 0, wx.EXPAND|wx.ALL, 10)
+        self.SetSizer(self._sizer_main)
+        self.Layout()
+        
+    def get_data(self):
+        """
+        return the selected data
+        """
+        for item in self.list_of_ctrl:
+            rbox, data = item
+            if rbox.GetValue():
+                return data 
+
     
 
