diff -Nur Filezilla3/src/interface/Mainfrm.cpp Filezilla3.patch/src/interface/Mainfrm.cpp
--- Filezilla3/src/interface/Mainfrm.cpp	Mon Aug 13 22:03:58 2007
+++ Filezilla3.patch/src/interface/Mainfrm.cpp	Mon Aug 13 22:07:20 2007
@@ -29,6 +29,7 @@
 #include "export.h"
 #include "import.h"
 #include "recursive_operation.h"
+#include <wx/tokenzr.h>
 
 #ifndef __WXMSW__
 #include "resources/filezilla.xpm"
@@ -189,11 +190,11 @@
 
 	m_pLocalSplitter = new wxSplitterWindow(m_pViewSplitter, -1, wxDefaultPosition, wxDefaultSize, wxSP_NOBORDER  | wxSP_LIVE_UPDATE);
 	m_pLocalSplitter->SetMinimumPaneSize(20);
-	m_pLocalSplitter->SetSashGravity(0.7);
+	m_pLocalSplitter->SetSashGravity(0.0);
 
 	m_pRemoteSplitter = new wxSplitterWindow(m_pViewSplitter, -1, wxDefaultPosition, wxDefaultSize, wxSP_NOBORDER  | wxSP_LIVE_UPDATE);
 	m_pRemoteSplitter->SetMinimumPaneSize(20);
-	m_pRemoteSplitter->SetSashGravity(0.7);
+	m_pRemoteSplitter->SetSashGravity(0.0);
 
 	m_pStatusView = new CStatusView(m_pTopSplitter, -1);
 	m_pQueuePane = new CQueue(m_pBottomSplitter, this, m_pAsyncRequestQueue);
@@ -275,6 +276,40 @@
 
 	Layout();
 
+    // is_maximized win_x win_y win_width win_height top_pos bottom_height view_pos view_height_width local_pos remote_pos
+    wxString posString = COptions::Get()->GetOption(OPTION_WINDOW_POSITION);
+    wxStringTokenizer tokens(posString, _T(" "));
+    int count = tokens.CountTokens();
+    if (count == 11) {
+        unsigned long * aPosValues = new unsigned long[count];
+        for (int i = 0; i < count; i++) {
+            wxString token = tokens.GetNextToken();
+            token.ToULong(aPosValues + i);
+        }
+
+        m_pTopSplitter->SetSashPosition(aPosValues[5]);
+
+        int x, y;
+        m_pBottomSplitter->GetClientSize(&x, &y);
+        y -= aPosValues[6];
+        if (y < 100) y = 100;
+        m_pBottomSplitter->SetSashPosition(y);
+
+        m_ViewSplitterSashPos = (float)aPosValues[7]/aPosValues[8];
+        m_pViewSplitter->SetSashPosition(aPosValues[7]);
+
+        if (aPosValues[0])
+            Maximize();
+        else {
+            Move(aPosValues[1], aPosValues[2]);
+            SetClientSize(aPosValues[3], aPosValues[4]);
+        }
+
+        m_pLocalSplitter->SetSashPosition(aPosValues[9]);
+        m_pRemoteSplitter->SetSashPosition(aPosValues[10]);
+        delete [] aPosValues;
+    }
+
 	wxString localDir = COptions::Get()->GetOption(OPTION_LASTLOCALDIR);
 	if (!m_pState->SetLocalDir(localDir))
 		m_pState->SetLocalDir(_T("/"));
@@ -750,6 +785,35 @@
 
 void CMainFrame::OnClose(wxCloseEvent &event)
 {
+    wxString posString;
+    // is_maximized
+    posString += wxString::Format(_T("%d "), IsMaximized() ? 1 : 0);
+    int x, y;
+    // pos_x pos_y
+    GetPosition(&x, &y);
+    posString += wxString::Format(_T("%d %d "), x, y);
+    // pos_width pos_height
+    GetClientSize(&x, &y);
+    posString += wxString::Format(_T("%d %d "), x, y);
+    // top_pos
+    posString += wxString::Format(_T("%d "), m_pTopSplitter->GetSashPosition());
+    // bottom_height
+    m_pBottomSplitter->GetClientSize(&x, &y);
+    posString += wxString::Format(_T("%d "), y - m_pBottomSplitter->GetSashPosition());
+    // view_pos
+    posString += wxString::Format(_T("%d "), m_pViewSplitter->GetSashPosition());
+    // view_height_width
+    m_pViewSplitter->GetClientSize(&x, &y);
+    if (COptions::Get()->GetOptionVal(OPTION_FILEPANE_LAYOUT) != 1)
+        posString += wxString::Format(_T("%d "), x);
+    else
+        posString += wxString::Format(_T("%d "), y);
+    // local_pos
+    posString += wxString::Format(_T("%d "), m_pLocalSplitter->GetSashPosition());
+    // remote_pos
+    posString += wxString::Format(_T("%d "), m_pRemoteSplitter->GetSashPosition());
+    COptions::Get()->SetOption(OPTION_WINDOW_POSITION, posString);
+
 	Show(false);
 	m_bQuit = true;
 	delete m_pSendLed;
diff -Nur Filezilla3/src/interface/Options.cpp Filezilla3.patch/src/interface/Options.cpp
--- Filezilla3/src/interface/Options.cpp	Mon Aug 13 22:03:58 2007
+++ Filezilla3.patch/src/interface/Options.cpp	Mon Aug 13 22:07:20 2007
@@ -81,7 +81,8 @@
 	{ "Queue successful autoclear", number, _T("0") },
 	{ "Queue column widths", string, _T("") },
 	{ "Local filelist colwidths", string, _T("") },
-	{ "Remote filelist colwidths", string, _T("") }
+	{ "Remote filelist colwidths", string, _T("") },
+	{ "Window position and size", string, _T("") }
 };
 
 COptions::COptions()
diff -Nur Filezilla3/src/interface/Options.h Filezilla3.patch/src/interface/Options.h
--- Filezilla3/src/interface/Options.h	Mon Aug 13 22:03:55 2007
+++ Filezilla3.patch/src/interface/Options.h	Mon Aug 13 22:07:20 2007
@@ -35,6 +35,7 @@
 	OPTION_QUEUE_COLUMN_WIDTHS,
 	OPTION_LOCALFILELIST_COLUMN_WIDTHS,
 	OPTION_REMOTEFILELIST_COLUMN_WIDTHS,
+	OPTION_WINDOW_POSITION,
 
 	// Has to be last element
 	OPTIONS_NUM
