diff --git a/xvaga/xvaga.cpp b/xvaga/xvaga.cpp
index 1512683c8..b5fd034e1 100755
--- a/xvaga/xvaga.cpp
+++ b/xvaga/xvaga.cpp
@@ -173,11 +173,14 @@ const wxCursor* GetCursorResource(int rid)
 		case CURSOR_IBEAM: cursor = new wxCursor(wxCURSOR_IBEAM);	break;
 		default:
 			{
-				wxString strName = ::GetResourceName("Cursor", rid);
+				const wxString strName = ::GetResourceName("Cursor", rid);
 				if (::wxFileExists(strName))
 				{
-#ifdef WIN32				
-					cursor = new wxCursor(strName, wxBITMAP_TYPE_CUR);
+#ifdef WIN32
+          if (strName.EndsWith(".ico"))
+            cursor = new wxCursor(strName, wxBITMAP_TYPE_ICO);
+          else
+					  cursor = new wxCursor(strName, wxBITMAP_TYPE_CUR);
 #else
     			cursor = wxSTANDARD_CURSOR;
 #endif
@@ -670,7 +673,6 @@ wxFont& TFontCache::FindOrCreate(int pointSize, int family, int style, int weigh
 }
 
 ///////////////////////////////////////////////////////////
-
 // Generic window class
 ///////////////////////////////////////////////////////////
 
@@ -717,7 +719,8 @@ protected:
   virtual void OnClose(wxCloseEvent& e);
   virtual void OnKeyDown(wxKeyEvent& e);
   virtual void OnKillFocus(wxFocusEvent& e);
-  virtual void OnMenu(wxCommandEvent& event);
+  virtual void OnMenu(wxCommandEvent& e);
+  virtual void OnMouseCaptureLost(wxMouseCaptureLostEvent& e);
   virtual void OnMouseDouble(wxMouseEvent& e);
   virtual void OnMouseDown(wxMouseEvent& e);
   virtual void OnMouseMove(wxMouseEvent& e);
@@ -731,7 +734,7 @@ protected:
 
 public:
 	void DoXvtEvent(EVENT& e);
-	virtual void OnPaint(wxPaintEvent& event);
+	virtual void OnPaint(wxPaintEvent& e);
 
 public:
 	WIN_TYPE _type;
@@ -760,12 +763,12 @@ class TTaskWin : public wxFrame
 	wxWindow* m_MenuOwner;
 
 protected:
-  virtual void OnClose(wxCloseEvent& event);
-  virtual void OnMenu(wxCommandEvent& event);
-  virtual void OnSize(wxSizeEvent& event);
+  virtual void OnClose(wxCloseEvent& e);
+  virtual void OnMenu(wxCommandEvent& e);
+  virtual void OnSize(wxSizeEvent& e);
   
 public:
-  virtual void OnPaint(wxPaintEvent& event);
+  virtual void OnPaint(wxPaintEvent& e);
 
 public:
   void SetMenuTree(const MENU_ITEM* tree);
@@ -797,6 +800,7 @@ BEGIN_EVENT_TABLE(TwxWindow, TwxWindowBase)
   EVT_MIDDLE_DOWN(TwxWindow::OnMouseDown)
   EVT_MIDDLE_UP(TwxWindow::OnMouseUp)
 	EVT_MOTION(TwxWindow::OnMouseMove)
+  EVT_MOUSE_CAPTURE_LOST(TwxWindow::OnMouseCaptureLost)
   EVT_MOUSEWHEEL(TwxWindow::OnMouseWheel)
   EVT_PAINT(TwxWindow::OnPaint)
   EVT_RIGHT_DOWN(TwxWindow::OnMouseDown)
@@ -814,7 +818,7 @@ void TwxWindow::DoXvtEvent(EVENT& e)
   	_eh((WINDOW)this, &e);
 }
 
-void TwxWindow::OnChar(wxKeyEvent& event)
+void TwxWindow::OnChar(wxKeyEvent& evt)
 {
   static int nSkipNextDotKey = -883; // Valore indefinito
   if (nSkipNextDotKey == -883)       // Devo stabilire se attivare la gestione o no
@@ -823,19 +827,18 @@ void TwxWindow::OnChar(wxKeyEvent& event)
     char str[2];
     xvt_sys_get_profile_string(campoini, "Main", "Point2Comma", "1", str, sizeof(str));
     nSkipNextDotKey = strchr("1XY", *str) != NULL ? 0 : -1; // Dis/Abilita conversione punto in virgola
-
   }
 
   EVENT e; memset(&e, 0, sizeof(EVENT));
 	e.type = E_CHAR;
-	int k = event.GetKeyCode();
+	int k = evt.GetKeyCode();
 
 	if (nSkipNextDotKey == 1)
 	{
     nSkipNextDotKey = 0;
 		if (k == '.')
 		{
-		  event.Skip();
+		  evt.Skip();
 		  return;
 		}
 	}
@@ -854,7 +857,7 @@ void TwxWindow::OnChar(wxKeyEvent& event)
   case WXK_NUMPAD7:
   case WXK_NUMPAD8:
   case WXK_NUMPAD9:
-		event.Skip();
+		evt.Skip();
 		return;
   case WXK_NUMPAD_DECIMAL:   // Arriva solo dalla 3.6.3 in poi
 	case WXK_DECIMAL:          // ??? Arriva sia '.' sia WXK_DECIMAL=340
@@ -874,7 +877,7 @@ void TwxWindow::OnChar(wxKeyEvent& event)
 	case WXK_RIGHT: k = K_RIGHT; break;
 	case WXK_UP   : k = K_UP;	   break;
 	case WXK_TAB:
-    if (event.ShiftDown())
+    if (evt.ShiftDown())
 			k = K_BTAB;
 		break;
 	default:
@@ -883,9 +886,9 @@ void TwxWindow::OnChar(wxKeyEvent& event)
 		break;
 	}
 	
-	e.v.chr.shift = event.ShiftDown();
-	e.v.chr.control = event.ControlDown();
-	if (event.AltDown())
+	e.v.chr.shift = evt.ShiftDown();
+	e.v.chr.control = evt.ControlDown();
+	if (evt.AltDown())
 	{
 		e.v.chr.control = TRUE;
     if (xvt_chr_is_alnum(k))
@@ -894,7 +897,7 @@ void TwxWindow::OnChar(wxKeyEvent& event)
 		{
       if (strchr("+-", k) == NULL) // Aggiungere qui vari testi eventuali
       {
-			  event.Skip();
+			  evt.Skip();
 			  return;
       }
 		}
@@ -904,30 +907,30 @@ void TwxWindow::OnChar(wxKeyEvent& event)
 	DoXvtEvent(e);
 }
 
-void TwxWindow::OnKeyDown(wxKeyEvent& event)
+void TwxWindow::OnKeyDown(wxKeyEvent& e)
 {
 #ifdef WIN32
   // Triste necessita' per gestire corretamente Alt+'+' del tasterino
-	const int k = event.GetKeyCode();
+	const int k = e.GetKeyCode();
   if (k == WXK_NUMPAD_ADD)
   {
-    if (event.AltDown())
+    if (e.AltDown())
     {
-      OnChar(event);
+      OnChar(e);
       return;
     }
   }
 #else
-  if (event.AltDown() || event.ControlDown())
+  if (e.AltDown() || e.ControlDown())
   {
     OnChar(event);
     return;
   }
 #endif
-  event.Skip();
+  e.Skip();
 }
 
-void TwxWindow::OnClose(wxCloseEvent& event)
+void TwxWindow::OnClose(wxCloseEvent& WXUNUSED(e))
 {
   EVENT e; memset(&e, 0, sizeof(EVENT));
 	e.type = E_DESTROY;
@@ -935,7 +938,7 @@ void TwxWindow::OnClose(wxCloseEvent& event)
   Destroy();
 }
 
-void TwxWindow::OnKillFocus(wxFocusEvent& event)
+void TwxWindow::OnKillFocus(wxFocusEvent& WXUNUSED(e))
 {
   if (_TheCaret.Owner() == (WINDOW)this)
     _TheCaret.Hide();
@@ -946,78 +949,83 @@ void TwxWindow::OnKillFocus(wxFocusEvent& event)
 	DoXvtEvent(e);
 }
 
-void TwxWindow::OnMenu(wxCommandEvent& event)
+void TwxWindow::OnMenu(wxCommandEvent& evt)
 {
 	EVENT e; memset(&e, 0, sizeof(EVENT));
 	e.type = E_COMMAND;
 	e.v.cmd.control = 0; e.v.cmd.shift = 0;
-	e.v.cmd.tag = event.GetId();
+	e.v.cmd.tag = evt.GetId();
 	DoXvtEvent(e);
 }
 
-void TwxWindow::OnMouseDouble(wxMouseEvent& event)
+void TwxWindow::OnMouseCaptureLost(wxMouseCaptureLostEvent& WXUNUSED(e))
+{
+  xvt_win_release_pointer();
+}
+
+void TwxWindow::OnMouseDouble(wxMouseEvent& evt)
 {
   EVENT e; memset(&e, 0, sizeof(EVENT));
 	e.type = E_MOUSE_DBL;
-	e.v.mouse.button = (event.RightDown() ? 1 : 0) + (event.MiddleDown() ? 2 : 0);
-	e.v.mouse.control = event.ControlDown();
-	e.v.mouse.shift = event.ShiftDown();
-	e.v.mouse.where.h = event.GetX();
-	e.v.mouse.where.v = event.GetY();
+	e.v.mouse.button = (evt.RightDown() ? 1 : 0) + (evt.MiddleDown() ? 2 : 0);
+	e.v.mouse.control = evt.ControlDown();
+	e.v.mouse.shift = evt.ShiftDown();
+	e.v.mouse.where.h = evt.GetX();
+	e.v.mouse.where.v = evt.GetY();
 	DoXvtEvent(e);
 }
 
-void TwxWindow::OnMouseDown(wxMouseEvent& event)
+void TwxWindow::OnMouseDown(wxMouseEvent& evt)
 {
   EVENT e; memset(&e, 0, sizeof(EVENT));
   e.type = E_MOUSE_DOWN;
-  e.v.mouse.button = (event.RightDown() ? 1 : 0) + (event.MiddleDown() ? 2 : 0);
-  e.v.mouse.control = event.ControlDown();
-  e.v.mouse.shift = event.ShiftDown();
-  e.v.mouse.where.h = event.GetX();
-  e.v.mouse.where.v = event.GetY();
+  e.v.mouse.button = (evt.RightDown() ? 1 : 0) + (evt.MiddleDown() ? 2 : 0);
+  e.v.mouse.control = evt.ControlDown();
+  e.v.mouse.shift = evt.ShiftDown();
+  e.v.mouse.where.h = evt.GetX();
+  e.v.mouse.where.v = evt.GetY();
   DoXvtEvent(e);
   SetFocus();   // Triste necessita'
 }
 
-void TwxWindow::OnMouseMove(wxMouseEvent& event)
+void TwxWindow::OnMouseMove(wxMouseEvent& evt)
 {
   EVENT e; memset(&e, 0, sizeof(EVENT));
 	e.type = E_MOUSE_MOVE;
-	e.v.mouse.button = (event.RightIsDown() ? 1 : 0) + (event.MiddleIsDown() ? 2 : 0);
-	e.v.mouse.control = event.ControlDown();
-	e.v.mouse.shift = event.m_shiftDown;
-	e.v.mouse.where.h = event.GetX();
-	e.v.mouse.where.v = event.GetY();
+	e.v.mouse.button = (evt.RightIsDown() ? 1 : 0) + (evt.MiddleIsDown() ? 2 : 0);
+	e.v.mouse.control = evt.ControlDown();
+	e.v.mouse.shift = evt.m_shiftDown;
+	e.v.mouse.where.h = evt.GetX();
+	e.v.mouse.where.v = evt.GetY();
 	DoXvtEvent(e);
 }
 
-void TwxWindow::OnMouseUp(wxMouseEvent& event)
+void TwxWindow::OnMouseUp(wxMouseEvent& evt)
 {
   EVENT e; memset(&e, 0, sizeof(EVENT));
 	e.type = E_MOUSE_UP;
-	e.v.mouse.button = (event.RightUp() ? 1 : 0) + (event.MiddleUp() ? 2 : 0);
-	e.v.mouse.control = event.ControlDown();
-	e.v.mouse.shift = event.ShiftDown();
-	e.v.mouse.where.h = event.GetX();
-	e.v.mouse.where.v = event.GetY();
+	e.v.mouse.button = (evt.RightUp() ? 1 : 0) + (evt.MiddleUp() ? 2 : 0);
+	e.v.mouse.control = evt.ControlDown();
+	e.v.mouse.shift = evt.ShiftDown();
+	e.v.mouse.where.h = evt.GetX();
+	e.v.mouse.where.v = evt.GetY();
 	DoXvtEvent(e);
 }
 
-void TwxWindow::OnMouseWheel(wxMouseEvent& event)
+void TwxWindow::OnMouseWheel(wxMouseEvent& evt)
 {
-  const int nRot = event.GetWheelRotation();
+  const int nRot = evt.GetWheelRotation();
   if (nRot != 0)
   {
     EVENT e; memset(&e, 0, sizeof(EVENT));
     e.type = E_VSCROLL;
-	  e.v.scroll.pos = event.GetY();
+	  e.v.scroll.pos = evt.GetY();
     e.v.scroll.what = nRot > 0 ? SC_LINE_UP : SC_LINE_DOWN;
 	  DoXvtEvent(e);
   }
 }
 
-void TwxWindow::OnPaint(wxPaintEvent& WXUNUSED(event))
+void TwxWindow::OnPaint(wxPaintEvent& WXUNUSED(evt))
 {
   EVENT e; memset(&e, 0, sizeof(EVENT));
 	e.type = E_UPDATE;
@@ -1058,42 +1066,42 @@ static SCROLL_CONTROL ConvertScrollToXVT(wxEventType et)
 	return SC_NONE;
 }
 
-void TwxWindow::OnScroll(wxScrollEvent& event)
+void TwxWindow::OnScroll(wxScrollEvent& evt)
 {
-  SCROLL_CONTROL sc = ConvertScrollToXVT(event.GetEventType());
+  SCROLL_CONTROL sc = ConvertScrollToXVT(evt.GetEventType());
   if (sc != SC_NONE)
   {
     EVENT e; memset(&e, 0, sizeof(EVENT));
 
-    const wxScrollBar* sb = (wxScrollBar*)event.GetEventObject();
+    const wxScrollBar* sb = (wxScrollBar*)evt.GetEventObject();
 	  const wxSize sz = sb->GetSize();
 
     e.type = E_CONTROL;
-	  e.v.ctl.id = event.GetId();
+	  e.v.ctl.id = evt.GetId();
 	  e.v.ctl.ci.type = sz.x > sz.y ? WC_HSCROLL : WC_VSCROLL;
 	  e.v.ctl.ci.win = (WINDOW)sb;
-	  e.v.ctl.ci.v.scroll.pos = event.GetPosition();
+	  e.v.ctl.ci.v.scroll.pos = evt.GetPosition();
     e.v.ctl.ci.v.scroll.what = sc;
 	  DoXvtEvent(e);
   }
 }
 
-void TwxWindow::OnScrollWin(wxScrollWinEvent& event)
+void TwxWindow::OnScrollWin(wxScrollWinEvent& evt)
 {
-	wxEventType et = event.GetEventType();
+	wxEventType et = evt.GetEventType();
   et -= (wxEVT_SCROLLWIN_TOP - wxEVT_SCROLL_TOP);
   const SCROLL_CONTROL sc = ConvertScrollToXVT(et);
   if (sc != SC_NONE)
   {
     EVENT e; memset(&e, 0, sizeof(EVENT));
-    e.type = event.GetOrientation() == wxHORIZONTAL ? E_HSCROLL : E_VSCROLL;
-	  e.v.scroll.pos = event.GetPosition();
+    e.type = evt.GetOrientation() == wxHORIZONTAL ? E_HSCROLL : E_VSCROLL;
+	  e.v.scroll.pos = evt.GetPosition();
 	  e.v.scroll.what = sc;
 	  DoXvtEvent(e);
   }
 }
 
-void TwxWindow::OnSetFocus(wxFocusEvent& event)
+void TwxWindow::OnSetFocus(wxFocusEvent& WXUNUSED(e))
 {
   EVENT e; memset(&e, 0, sizeof(EVENT));
 	e.type = E_FOCUS;
@@ -1101,16 +1109,16 @@ void TwxWindow::OnSetFocus(wxFocusEvent& event)
 	DoXvtEvent(e);
 }
 
-void TwxWindow::OnSize(wxSizeEvent& event)
+void TwxWindow::OnSize(wxSizeEvent& evt)
 {
   EVENT e; memset(&e, 0, sizeof(EVENT));
 	e.type = E_SIZE;
-	e.v.size.height = event.GetSize().x;
-	e.v.size.width = event.GetSize().y;
+	e.v.size.height = evt.GetSize().x;
+	e.v.size.width = evt.GetSize().y;
 	DoXvtEvent(e);
 }
 
-void TwxWindow::OnTimer(wxTimerEvent& event)
+void TwxWindow::OnTimer(wxTimerEvent& WXUNUSED(evt))
 {
   EVENT e; memset(&e, 0, sizeof(EVENT));
 	e.type = E_TIMER;
@@ -1165,25 +1173,25 @@ BEGIN_EVENT_TABLE(TTaskWin, wxFrame)
 	EVT_SIZE(TTaskWin::OnSize)
 END_EVENT_TABLE()
 
-void TTaskWin::OnClose(wxCloseEvent& event)
+void TTaskWin::OnClose(wxCloseEvent& evt)
 {
-	if (event.CanVeto())
+	if (evt.CanVeto())
 	{
 	  EVENT e; memset(&e, 0, sizeof(EVENT));
 	  e.type = E_CLOSE;
 	  int veto = _task_win_handler((WINDOW)this, &e);
-		event.Veto(veto != 0);
+		evt.Veto(veto != 0);
 	}
 	else
-		event.Skip();
+		evt.Skip();
 }
 
-void TTaskWin::OnMenu(wxCommandEvent& event)
+void TTaskWin::OnMenu(wxCommandEvent& evt)
 {
 	EVENT e; memset(&e, 0, sizeof(EVENT));
 	e.type = E_COMMAND;
 	e.v.cmd.control = 0; e.v.cmd.shift = 0;
-	e.v.cmd.tag = event.GetId();
+	e.v.cmd.tag = evt.GetId();
 
 	if (m_MenuOwner == NULL || m_MenuOwner == this)
   	_task_win_handler((WINDOW)this, &e);
@@ -1191,7 +1199,7 @@ void TTaskWin::OnMenu(wxCommandEvent& event)
 		((TwxWindow*)m_MenuOwner)->_eh((WINDOW)m_MenuOwner, &e);
 }
 
-void TTaskWin::OnPaint(wxPaintEvent& WXUNUSED(event))
+void TTaskWin::OnPaint(wxPaintEvent& WXUNUSED(evt))
 {
   EVENT e; memset(&e, 0, sizeof(EVENT));
 	e.type = E_UPDATE;
@@ -1209,12 +1217,12 @@ void TTaskWin::OnPaint(wxPaintEvent& WXUNUSED(event))
 	dc.KillDC();
 }
 
-void TTaskWin::OnSize(wxSizeEvent& event)
+void TTaskWin::OnSize(wxSizeEvent& evt)
 {
   EVENT e; memset(&e, 0, sizeof(EVENT));
 	e.type = E_SIZE;
-	e.v.size.height = event.GetSize().x;
-	e.v.size.width = event.GetSize().y;
+	e.v.size.height = evt.GetSize().x;
+	e.v.size.width = evt.GetSize().y;
 	_task_win_handler((WINDOW)this, &e);
 }
 
@@ -1763,7 +1771,7 @@ class TwxCalendarDlg : public wxDialog
 
 protected:
   virtual bool TransferDataFromWindow();
-  void OnCalendar(wxCalendarEvent& event);
+  void OnCalendar(wxCalendarEvent& e);
 
 public:
   TwxCalendarDlg(wxWindow* parent, const wxPoint& pnt, wxDateTime& date);
@@ -1775,7 +1783,7 @@ BEGIN_EVENT_TABLE(TwxCalendarDlg, wxDialog)
   EVT_CALENDAR(wxID_ANY, TwxCalendarDlg::OnCalendar)
 END_EVENT_TABLE()
 
-void TwxCalendarDlg::OnCalendar(wxCalendarEvent& event)
+void TwxCalendarDlg::OnCalendar(wxCalendarEvent& e)
 {
   wxCommandEvent evt(wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK);
   AddPendingEvent(evt);