Index: invariantview/perspectives/invariant/invariant.py
===================================================================
--- invariantview/perspectives/invariant/invariant.py	(revision cb463b40545bccbeac64d10c722c2076b6c27aa0)
+++ invariantview/perspectives/invariant/invariant.py	(revision 343fdb6870f22efec4877463ffecba665a7e05a7)
@@ -228,9 +228,16 @@
                 else:
                     data = plottable
-                # Store reference to data
-                self.__data = data
-                # Set the data set to be user for invariant calculation
-                self.invariant_panel.set_current_data(data=data)
+                self.compute_helper(data=data)
                 
+    def compute_helper(self, data):
+        """
+        """
+        if data is None:
+            return 
+        # Store reference to data
+        self.__data = data
+        # Set the data set to be user for invariant calculation
+        self.invariant_panel.set_current_data(data=data)
+        
     def save_file(self, filepath, state=None):
         """
Index: invariantview/perspectives/invariant/invariant_panel.py
===================================================================
--- invariantview/perspectives/invariant/invariant_panel.py	(revision a94c4e1f5dd2a18f8217845243a60b0b773415e1)
+++ invariantview/perspectives/invariant/invariant_panel.py	(revision 343fdb6870f22efec4877463ffecba665a7e05a7)
@@ -82,5 +82,5 @@
         self.new_state = False
         self.is_power_out = False
-
+        
         #container of invariant value
         self.inv_container = None
@@ -96,5 +96,5 @@
         ## Default file location for save
         self._default_save_location = os.getcwd()
-        
+ 
     def err_check_on_data(self):
         """
@@ -114,31 +114,35 @@
         return flag
     
+    def on_select_data(self, event=None):
+        """
+        """
+        n = self.data_cbbox.GetCurrentSelection()
+        data, path = self.data_cbbox.GetClientData(n)
+        self._manager.compute_helper(data=data)
+        title = os.path.basename(path)
+        if hasattr(data,"title"):
+            title = str(data.title.lstrip().rstrip())
+            if title == "":
+                title = str(data.name)
+        else:
+            title = str(data.name)
+        wx.PostEvent(self.parent, NewPlotEvent(plot=data, title=title))
+    
     def set_data(self, list=[], state=None):
         """
         Receive  a list of data from gui_manager to compute invariant
         """
-        if list==[]:
-            msg = "Please select data for Invariant perspective.\n"
-            dial = wx.MessageDialog(None, msg, 'Error Loading File', 
-                                    wx.OK | wx.ICON_EXCLAMATION)
-            dial.ShowModal() 
-            return
-        elif len(list) == 1:
-            data, filepath = list[0]
-            if data.__class__.__name__ == "Data2D":
-                msg = "Invariant cannot be computed for Data2D.\n"
-                msg += "Please load another file.\n"
-                dial = wx.MessageDialog(None, msg, 'Error Loading File', 
-                                        wx.OK | wx.ICON_EXCLAMATION)
-                dial.ShowModal() 
-            else:
-                 self.set_current_data(data=data)
-        else:
-            msg = " Invariant cannot be computed for more than one data.\n"
-            msg += "Please load only file.\n"
-            dial = wx.MessageDialog(None, msg, 'Error Loading File', 
-                                    wx.OK | wx.ICON_EXCLAMATION)
-            dial.ShowModal() 
-    
+        if not list:
+            return 
+        for data, path in list:
+            if data.__class__.__name__ != "Data2D" and \
+                data.name not in self.data_cbbox.GetItems():
+                self.data_cbbox.Insert(item=data.name, pos=0,
+                                    clientData=(data, path))
+        if self.data_cbbox.GetCount() >0:
+            self.data_cbbox.SetSelection(0)
+            self.data_cbbox.Enable()
+            self.on_select_data(event=None)
+            
     def set_current_data(self, data):
         """
@@ -206,5 +210,4 @@
             self.state = IState()
         else:
-            
             if not self.set_current_data(data):
                 return
@@ -213,4 +216,5 @@
 
             num = self.state.saved_state['state_num']
+            self.get_state_by_num(state_num=num)
             
             if num > 0 :
@@ -219,7 +223,7 @@
                 self._redo_enable()
                 
+            
             # get bookmarks
             self.bookmark_num = len(self.state.bookmark_list)
-
             total_bookmark_num = self.bookmark_num+1
             for ind in range(1,total_bookmark_num):
@@ -230,9 +234,10 @@
                 id = wx.NewId()
                 self.popUpMenu.Append(id,name,str(''))
-                wx.EVT_MENU(self, id, self._back_to_bookmark) 
+                 wx.EVT_MENU(self, id, self._back_to_bookmark) 
 
             self.get_state_by_num(state_num=str(num))
             
             self._get_input_list() 
+          
             
             self.new_state = False 
@@ -502,5 +507,4 @@
             msg= "\n\nStarting a new invariant computation..."            
             wx.PostEvent(self.parent, StatusEvent(status=msg))
-            
 
         if self._data is None or self.err_check_on_data():
@@ -589,5 +593,5 @@
             self.is_power_out = False
             wx.PostEvent(self.parent, StatusEvent(status = msg ))
-
+        
         #enable the button_ok for more details
         self.button_details.Enable()
@@ -596,5 +600,5 @@
             self.button_report.Enable(True)
             wx.PostEvent(self.parent, StatusEvent(status = '\nFinished invariant computation...'))
-        
+    
     def undo(self,event=None):
         """
@@ -666,5 +670,5 @@
 
         backup_state_list = copy.deepcopy(self.state.state_list)
-        
+
         # get the previous state
         try:
@@ -674,5 +678,5 @@
         except :
             raise ValueError,  "No such state exists in history"
-        
+
         # get the state at pre_compute_num
         comp_state = copy.deepcopy(self.state.state_list[current_compute_num])
@@ -687,5 +691,5 @@
             except:
                 pass
-          
+            
         self.compute_invariant(event=None)
         # set the input params at the state at pre_state_num
@@ -711,6 +715,5 @@
         self.state.saved_state = current_state
         self.state.state_num = state_num
-        
-        
+
         
     def get_bookmark_by_num(self, num=None):
@@ -752,5 +755,5 @@
                 pass
         self.state.saved_state = copy.deepcopy(current_state)
-       
+
         self._enable_high_q_section(event=None)
         self._enable_low_q_section(event=None)
@@ -872,5 +875,4 @@
         self._redo_disable()
         
-        
     def _reset_state_list(self,data=None):
         """
@@ -1140,5 +1142,4 @@
         else:
             return False
-
         
     def _reset_output(self):
@@ -1178,4 +1179,5 @@
         self.data_name_boxsizer.SetMinSize((PANEL_WIDTH,-1))
         self.hint_msg_sizer = wx.BoxSizer(wx.HORIZONTAL)
+        self.loaded_data_name_sizer = wx.BoxSizer(wx.HORIZONTAL)
         self.data_name_sizer = wx.BoxSizer(wx.HORIZONTAL)
         self.data_range_sizer = wx.BoxSizer(wx.HORIZONTAL)
@@ -1223,11 +1225,23 @@
         self.hint_msg_txt.SetToolTipString(msg)
         self.hint_msg_sizer.Add(self.hint_msg_txt)
+        
+        self.data_txt = wx.StaticText(self, -1,"Loaded Data: ")
+        self.data_cbbox = wx.ComboBox(self, -1, size=(260,20))
+        self.data_cbbox.Disable()
+        wx.EVT_COMBOBOX(self.data_cbbox ,-1, self.on_select_data) 
+        
+
         #Data name [string]
         data_name_txt = wx.StaticText(self, -1, 'Data : ')  
        
-        self.data_name_tcl = OutputTextCtrl(self, -1, size=(_BOX_WIDTH*5, 20), style=0, name='data_name_tcl') 
+        self.data_name_tcl = OutputTextCtrl(self, -1,size=(260,20), style=0, 
+                                            name='data_name_tcl') 
         self.data_name_tcl.SetToolTipString("Data's name.")
+        self.loaded_data_name_sizer.AddMany([(self.data_txt, 0,
+                                               wx.LEFT|wx.RIGHT, 10),
+                                      (self.data_cbbox, 0, wx.EXPAND)])
         self.data_name_sizer.AddMany([(data_name_txt, 0, wx.LEFT|wx.RIGHT, 10),
-                                       (self.data_name_tcl, 0, wx.EXPAND)])
+                                       (self.data_name_tcl, 0, wx.EXPAND|wx.LEFT,35)])
+    
         #Data range [string]
         data_range_txt = wx.StaticText(self, -1, 'Total Q Range (1/A): ') 
@@ -1238,4 +1252,5 @@
         self.data_max_tcl = OutputTextCtrl(self, -1, size=(_BOX_WIDTH, 20), style=0, name='data_max_tcl') 
         self.data_max_tcl.SetToolTipString("The maximum value of q range.")
+       
         self.data_range_sizer.AddMany([(data_range_txt, 0, wx.RIGHT, 10),
                                        (data_min_txt, 0, wx.RIGHT, 10),
@@ -1244,6 +1259,7 @@
                                        (self.data_max_tcl, 0, wx.RIGHT, 10)])
         self.data_name_boxsizer.AddMany([(self.hint_msg_sizer, 0 , wx.ALL, 5),
-                                         (self.data_name_sizer, 0 , wx.RIGHT, 10),
-                                         (self.data_range_sizer, 0 , wx.ALL, 10)])
+                            (self.loaded_data_name_sizer, 0 , wx.ALL, 10),
+                                    (self.data_name_sizer, 0 , wx.LEFT|wx.RIGHT, 10),
+                                     (self.data_range_sizer, 0 , wx.ALL, 10)])
     
     def _layout_bkg_scale(self):
