Index: sansview/perspectives/fitting/basepage.py
===================================================================
--- sansview/perspectives/fitting/basepage.py	(revision 646c97a8fec9145a83bb85517b7e3a143d0cb784)
+++ sansview/perspectives/fitting/basepage.py	(revision 6f2c9193ff21395eb08572d7152be3a0fb7a1c39)
@@ -116,4 +116,31 @@
         self.set_layout()
        
+    class ModelTextCtrl(wx.TextCtrl):
+        """
+            Text control for model and fit parameters.
+            Binds the appropriate events for user interactions.
+            Default callback methods can be overwritten on initialization
+            
+            @param kill_focus_callback: callback method for EVT_KILL_FOCUS event
+            @param set_focus_callback:  callback method for EVT_SET_FOCUS event
+            @param mouse_up_callback:   callback method for EVT_LEFT_UP event
+            @param text_enter_callback: callback method for EVT_TEXT_ENTER event
+        """
+        def __init__(self, parent, id=-1, value=wx.EmptyString, pos=wx.DefaultPosition, 
+                     size=wx.DefaultSize, style=0, validator=wx.DefaultValidator, name=wx.TextCtrlNameStr,
+                     kill_focus_callback = None, set_focus_callback  = None,
+                     mouse_up_callback   = None, text_enter_callback = None):
+            
+            wx.TextCtrl.__init__(self, parent, id, value, pos, size, style, validator, name)
+            
+            # Bind appropriate events
+            self.Bind(wx.EVT_SET_FOCUS,  parent.onSetFocus \
+                      if set_focus_callback is None else set_focus_callback)
+            self.Bind(wx.EVT_KILL_FOCUS, parent._onparamEnter \
+                      if kill_focus_callback is None else kill_focus_callback)
+            self.Bind(wx.EVT_TEXT_ENTER, parent._onparamEnter \
+                      if text_enter_callback is None else text_enter_callback)
+            self.Bind(wx.EVT_LEFT_UP,    parent._highlight_text \
+                      if mouse_up_callback is None else mouse_up_callback)
        
     def onContextMenu(self, event): 
@@ -455,10 +482,23 @@
                     item[4].Hide()
         self.Layout()
-        # Get a handle to the TextCtrl
-        widget = evt.GetEventObject()
-        # Select the whole control, after this event resolves
-        wx.CallAfter(widget.SetSelection, -1,-1)
         return
     
+    def _highlight_text(self, event):
+        """
+            Highlight text of a TextCtrl only of no text has be selected
+            @param event: mouse event
+        """
+        control  = event.GetEventObject()
+        # Check that we have a TextCtrl
+        if issubclass(control.__class__, wx.TextCtrl):
+            # Check whether text has been selected, 
+            # if not, select the whole string
+
+            (start, end) = control.GetSelection()
+            if start==end:
+                control.SetSelection(-1,-1)
+                
+        # Make sure the mouse event is available to other listeners
+        event.Skip()
     
     def read_file(self, path):
@@ -1491,5 +1531,6 @@
     def _set_range_sizer(self, title, object1=None,object=None):
         """
-            Fill the 
+            TODO: object1 and object are NOT proper parameter names.
+            Please clean up your code.
         """
         self.sizer5.Clear(True)
@@ -1497,17 +1538,11 @@
         boxsizer1 = wx.StaticBoxSizer(box_description, wx.VERTICAL)
         #--------------------------------------------------------------
-        self.qmin    = wx.TextCtrl(self, -1,size=(_BOX_WIDTH,20))
+        self.qmin    = BasicPage.ModelTextCtrl(self, -1,size=(_BOX_WIDTH,20))
         self.qmin.SetValue(str(self.qmin_x))
         self.qmin.SetToolTipString("Minimun value of Q in linear scale.")
-        self.qmin.Bind(wx.EVT_SET_FOCUS, self.onSetFocus)
-        self.qmin.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
-        self.qmin.Bind(wx.EVT_TEXT_ENTER, self._onparamEnter)
      
-        self.qmax    = wx.TextCtrl(self, -1,size=(_BOX_WIDTH,20))
+        self.qmax    = BasicPage.ModelTextCtrl(self, -1,size=(_BOX_WIDTH,20))
         self.qmax.SetValue(str(self.qmax_x))
         self.qmax.SetToolTipString("Maximum value of Q in linear scale.")
-        self.qmax.Bind(wx.EVT_SET_FOCUS, self.onSetFocus)
-        self.qmax.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
-        self.qmax.Bind(wx.EVT_TEXT_ENTER, self._onparamEnter)
      
         sizer_horizontal=wx.BoxSizer(wx.HORIZONTAL)
Index: sansview/perspectives/fitting/fitpage.py
===================================================================
--- sansview/perspectives/fitting/fitpage.py	(revision ba95543c6b0536ab59c24273b531510223feef7d)
+++ sansview/perspectives/fitting/fitpage.py	(revision 6f2c9193ff21395eb08572d7152be3a0fb7a1c39)
@@ -303,10 +303,7 @@
                         ix = 1
                         value= self.model.getParam(name1)
-                        ctl1 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20),
+                        ctl1 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH,20),
                                             style=wx.TE_PROCESS_ENTER)
                         ctl1.SetValue(str (format_number(value)))
-                        ctl1.Bind(wx.EVT_SET_FOCUS, self.onSetFocus)
-                        ctl1.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
-                        ctl1.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter)
                         self.sizer4_4.Add(ctl1, (iy,ix),(1,1),wx.EXPAND)
                         ## text to show error sign
@@ -326,11 +323,8 @@
                             ix = 4
                             value= self.model.getParam(name2)
-                            Tctl = wx.TextCtrl(self, -1, size=(_BOX_WIDTH/2,20),
+                            Tctl = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20),
                                                 style=wx.TE_PROCESS_ENTER)
                             
                             Tctl.SetValue(str (format_number(value)))
-                            Tctl.Bind(wx.EVT_SET_FOCUS, self.onSetFocus)
-                            Tctl.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
-                            Tctl.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter)
                             self.sizer4_4.Add(Tctl, (iy,ix),(1,1),
                                                wx.EXPAND|wx.ADJUST_MINSIZE, 0)
@@ -340,10 +334,7 @@
                             ix = 5
                             value= self.model.getParam(name3)
-                            Tctl = wx.TextCtrl(self, -1, size=(_BOX_WIDTH/2,20),
+                            Tctl = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20),
                                                 style=wx.TE_PROCESS_ENTER)
                             Tctl.SetValue(str (format_number(value)))
-                            Tctl.Bind(wx.EVT_SET_FOCUS, self.onSetFocus)
-                            Tctl.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
-                            Tctl.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter)
                             self.sizer4_4.Add(Tctl, (iy,ix),(1,1),
                                                wx.EXPAND|wx.ADJUST_MINSIZE, 0)
@@ -378,5 +369,5 @@
                         ix = 1
                         value= self.model.getParam(name1)
-                        ctl1 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20),
+                        ctl1 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH,20),
                                             style=wx.TE_PROCESS_ENTER)
                         ctl1.SetValue(str (format_number(value)))
@@ -385,7 +376,4 @@
                         else:
                             ctl1.Disable()
-                        ctl1.Bind(wx.EVT_SET_FOCUS, self.onSetFocus)
-                        ctl1.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
-                        ctl1.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter)
                         self.sizer4_4.Add(ctl1, (iy,ix),(1,1),wx.EXPAND)
                         ## text to show error sign
@@ -411,5 +399,5 @@
                             ix = 4
                             value= self.model.getParam(name2)
-                            Tctl = wx.TextCtrl(self, -1, size=(_BOX_WIDTH/2,20),
+                            Tctl = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20),
                                                 style=wx.TE_PROCESS_ENTER)
                             
@@ -419,7 +407,4 @@
                             else:
                                 Tctl.Disable()
-                            Tctl.Bind(wx.EVT_SET_FOCUS, self.onSetFocus)
-                            Tctl.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
-                            Tctl.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter)
                             self.sizer4_4.Add(Tctl, (iy,ix),(1,1),
                                                wx.EXPAND|wx.ADJUST_MINSIZE, 0)
@@ -431,5 +416,5 @@
                             ix = 5
                             value= self.model.getParam(name3)
-                            Tctl = wx.TextCtrl(self, -1, size=(_BOX_WIDTH/2,20),
+                            Tctl = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20),
                                                 style=wx.TE_PROCESS_ENTER)
                             Tctl.SetValue(str (format_number(value)))
@@ -438,7 +423,4 @@
                             else:
                                 Tctl.Disable()
-                            Tctl.Bind(wx.EVT_SET_FOCUS, self.onSetFocus)
-                            Tctl.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
-                            Tctl.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter)
                             self.sizer4_4.Add(Tctl, (iy,ix),(1,1),
                                                wx.EXPAND|wx.ADJUST_MINSIZE, 0)
@@ -1082,11 +1064,8 @@
                 ix += 1
                 value= self.model.getParam(item)
-                ctl1 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20),
+                ctl1 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH,20),
                                     style=wx.TE_PROCESS_ENTER)
                 
                 ctl1.SetValue(format_number(value))
-                ctl1.Bind(wx.EVT_SET_FOCUS, self.onSetFocus)
-                ctl1.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
-                ctl1.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter)
                 sizer.Add(ctl1, (iy,ix),(1,1), wx.EXPAND)
                 ## text to show error sign
@@ -1104,20 +1083,18 @@
                 param_min, param_max= self.model.details[item][1:]
                 ix += 1
-                ctl3 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER)
+                ctl3 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER,
+                                               kill_focus_callback = self._onparamRangeEnter,
+                                               set_focus_callback  = self._onparamRangeEnter)
                 if param_min ==None:
                     ctl3.SetValue("")
                 else:
                     ctl3.SetValue(str(param_min))
-                ctl3.Bind(wx.EVT_SET_FOCUS, self.onSetFocus)
-                ctl3.Bind(wx.EVT_KILL_FOCUS, self._onparamRangeEnter)
-                ctl3.Bind(wx.EVT_TEXT_ENTER,self._onparamRangeEnter)
                 sizer.Add(ctl3, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0)
                 ctl3.Hide()
         
                 ix += 1
-                ctl4 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER)
-                ctl4.Bind(wx.EVT_SET_FOCUS, self.onSetFocus)
-                ctl4.Bind(wx.EVT_KILL_FOCUS, self._onparamRangeEnter)
-                ctl4.Bind(wx.EVT_TEXT_ENTER,self._onparamRangeEnter)
+                ctl4 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER,
+                                               kill_focus_callback = self._onparamRangeEnter,
+                                               set_focus_callback  = self._onparamRangeEnter)
                 sizer.Add(ctl4, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0)
                 if param_max==None:
@@ -1162,5 +1139,5 @@
                 ix += 1
                 value= self.model.getParam(item)
-                ctl1 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20),
+                ctl1 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH,20),
                                     style=wx.TE_PROCESS_ENTER)
                 
@@ -1170,7 +1147,4 @@
                 else:
                     ctl1.Disable()
-                ctl1.Bind(wx.EVT_SET_FOCUS, self.onSetFocus)
-                ctl1.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
-                ctl1.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter)
                 sizer.Add(ctl1, (iy,ix),(1,1), wx.EXPAND)
                 ## text to show error sign
@@ -1191,12 +1165,11 @@
                 param_min, param_max= self.model.details[item][1:]
                 ix += 1
-                ctl3 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER)
+                ctl3 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER,
+                                               kill_focus_callback = self._onparamRangeEnter,
+                                               set_focus_callback  = self._onparamRangeEnter)
                 if param_min ==None:
                     ctl3.SetValue("")
                 else:
                     ctl3.SetValue(str(param_min))
-                ctl3.Bind(wx.EVT_SET_FOCUS, self.onSetFocus)
-                ctl3.Bind(wx.EVT_KILL_FOCUS, self._onparamRangeEnter)
-                ctl3.Bind(wx.EVT_TEXT_ENTER,self._onparamRangeEnter)
                 sizer.Add(ctl3, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0)
                 ctl3.Hide()
@@ -1206,8 +1179,7 @@
                     ctl3.Disable()
                 ix += 1
-                ctl4 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER)
-                ctl4.Bind(wx.EVT_SET_FOCUS, self.onSetFocus)
-                ctl4.Bind(wx.EVT_KILL_FOCUS, self._onparamRangeEnter)
-                ctl4.Bind(wx.EVT_TEXT_ENTER,self._onparamRangeEnter)
+                ctl4 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER,
+                                               kill_focus_callback = self._onparamRangeEnter,
+                                               set_focus_callback  = self._onparamRangeEnter)
                 sizer.Add(ctl4, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0)
                 if param_max ==None:
Index: sansview/perspectives/fitting/fitpanel.py
===================================================================
--- sansview/perspectives/fitting/fitpanel.py	(revision 5612152a474593913aafad78e8ea22c0bb70d80b)
+++ sansview/perspectives/fitting/fitpanel.py	(revision 6f2c9193ff21395eb08572d7152be3a0fb7a1c39)
@@ -180,8 +180,4 @@
         """
         selected_page = self.GetPage(self.GetSelection())
-        ## removing about page
-        if selected_page==self.about_page:
-            self.about_page=None
-            return 
         ## removing sim_page
         if selected_page == self.sim_page:
Index: sansview/perspectives/fitting/modelpage.py
===================================================================
--- sansview/perspectives/fitting/modelpage.py	(revision e7b1ccfa5365f2136687848d65d9b0d0274e66bc)
+++ sansview/perspectives/fitting/modelpage.py	(revision 6f2c9193ff21395eb08572d7152be3a0fb7a1c39)
@@ -84,10 +84,7 @@
         sizer_npts= wx.GridSizer(1, 1,5, 5)
     
-        self.npts    = wx.TextCtrl(self, -1,size=(_BOX_WIDTH,20))
+        self.npts    = BasicPage.ModelTextCtrl(self, -1,size=(_BOX_WIDTH,20))
         self.npts.SetValue(format_number(self.num_points))
         self.npts.SetToolTipString("Number of point to plot.")
-        self.npts.Bind(wx.EVT_SET_FOCUS, self.onSetFocus)
-        self.npts.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
-        self.npts.Bind(wx.EVT_TEXT_ENTER, self._onparamEnter)
         
         sizer_npts.Add(wx.StaticText(self, -1, 'Npts'),1, wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 5)        
@@ -173,10 +170,7 @@
                         ix = 1
                         value= self.model.getParam(name1)
-                        ctl1 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20),
+                        ctl1 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH,20),
                                             style=wx.TE_PROCESS_ENTER)
                         ctl1.SetValue(str (format_number(value)))
-                        ctl1.Bind(wx.EVT_SET_FOCUS, self.onSetFocus)
-                        ctl1.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
-                        ctl1.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter)
                         self.sizer4_4.Add(ctl1, (iy,ix),(1,1), wx.EXPAND)
                         self.fittable_param.append([None,name1,ctl1,None,
@@ -185,10 +179,7 @@
                             ix =2
                             value= self.model.getParam(name2)
-                            Tctl1 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH/2,20),
+                            Tctl1 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20),
                                                 style=wx.TE_PROCESS_ENTER)
                             Tctl1.SetValue(str (format_number(value)))
-                            Tctl1.Bind(wx.EVT_SET_FOCUS, self.onSetFocus)
-                            Tctl1.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
-                            Tctl1.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter)
                             self.sizer4_4.Add(Tctl1, (iy,ix),(1,1),
                                                wx.EXPAND|wx.ADJUST_MINSIZE, 0)
@@ -198,10 +189,7 @@
                             ix =3 
                             value= self.model.getParam(name3)
-                            Tctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH/2,20),
+                            Tctl2 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20),
                                                 style=wx.TE_PROCESS_ENTER)
                             Tctl2.SetValue(str (format_number(value)))
-                            Tctl2.Bind(wx.EVT_SET_FOCUS, self.onSetFocus)
-                            Tctl2.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
-                            Tctl2.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter)
                             self.sizer4_4.Add(Tctl2, (iy,ix),(1,1),
                                                wx.EXPAND|wx.ADJUST_MINSIZE, 0)
@@ -226,10 +214,7 @@
                         ix = 1
                         value= self.model.getParam(name1)
-                        ctl1 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20),
+                        ctl1 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH,20),
                                             style=wx.TE_PROCESS_ENTER)
                         ctl1.SetValue(str (format_number(value)))
-                        ctl1.Bind(wx.EVT_SET_FOCUS, self.onSetFocus)
-                        ctl1.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
-                        ctl1.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter)
                         if not self.enable2D:
                             ctl1.Disable()
@@ -244,10 +229,7 @@
                             ix =2
                             value= self.model.getParam(name2)
-                            Tctl1 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH/2,20),
+                            Tctl1 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20),
                                                 style=wx.TE_PROCESS_ENTER)
                             Tctl1.SetValue(str (format_number(value)))
-                            Tctl1.Bind(wx.EVT_SET_FOCUS, self.onSetFocus)
-                            Tctl1.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
-                            Tctl1.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter)
                             if not self.enable2D:
                                 Tctl1.Disable()
@@ -263,10 +245,7 @@
                             ix =3 
                             value= self.model.getParam(name3)
-                            Tctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH/2,20),
+                            Tctl2 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20),
                                                 style=wx.TE_PROCESS_ENTER)
                             Tctl2.SetValue(str (format_number(value)))
-                            Tctl2.Bind(wx.EVT_SET_FOCUS, self.onSetFocus)
-                            Tctl2.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
-                            Tctl2.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter)
                             if not self.enable2D:
                                 Tctl2.Disable()
@@ -506,11 +485,8 @@
                 ix += 1
                 value= self.model.getParam(item)
-                ctl1 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20),
+                ctl1 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH,20),
                     style=wx.TE_PROCESS_ENTER)
                 
                 ctl1.SetValue(str (format_number(value)))
-                ctl1.Bind(wx.EVT_SET_FOCUS, self.onSetFocus)
-                ctl1.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
-                ctl1.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter)
                 
                 sizer.Add(ctl1, (iy,ix),(1,1), wx.EXPAND)
@@ -537,5 +513,5 @@
                 ix += 1
                 value= self.model.getParam(item)
-                ctl1 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20),
+                ctl1 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH,20),
                     style=wx.TE_PROCESS_ENTER)
                 
@@ -545,7 +521,4 @@
                 else:
                     ctl1.Enable()
-                ctl1.Bind(wx.EVT_SET_FOCUS, self.onSetFocus)
-                ctl1.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
-                ctl1.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter)
                 
                 sizer.Add(ctl1, (iy,ix),(1,1), wx.EXPAND)
