Index: .hgignore
===================================================================
--- .hgignore	(revision 758)
+++ .hgignore	(revision 442)
@@ -9,5 +9,2 @@
 src/mlx/gui/dcdata.py
 xplra.py
-chromedriver.exe
-debug.log
-moodlesetup.txt
Index: .hgtags
===================================================================
--- .hgtags	(revision 776)
+++ .hgtags	(revision 734)
@@ -22,3 +22,2 @@
 ec0a3d264b30138f758cc5d67e4cd44452e6cff9 version_0.36
 e1da02e929ed126dd66ced647bff816a3ba405e5 version_0.37
-60bd73d51935cc89685274f1520a516046d7a5e0 version_0.38
Index: MLXMANIFEST
===================================================================
--- MLXMANIFEST	(revision 775)
+++ MLXMANIFEST	(revision 735)
@@ -4,9 +4,9 @@
 library/xml/dom/xmlbuilder.pyc	15414	42285fdd810a2aa92c06775b5d415c33
 library/fnmatch.pyc	3414	4d50000f78e903598af06ef1c5cfb3ef
-library/gtk/_gtk.pyc	549	856abc7b7c2767552c70b214bce29842
+library/gtk/_gtk.pyc	549	e8970604019edd7560e58d0cc8862bd8
 library/encodings/cp858.pyc	7591	02054a0b8e91b9758826eb70cddf096f
 library/encodings/cp1254.pyc	2678	17ff2ac86f90886d5c73ed789f0499f3
 library/encodings/unicode_internal.pyc	2022	1e902113491e0c334b44deb0c8940e01
-library/lxml/etree.pyc	555	74b6363fd335a7abc4285150ff1e6fc5
+library/lxml/etree.pyc	555	698876f9fdc81ba76c8a6fe486c49dab
 library/encodings/gbk.pyc	1622	71c1e7fe25116114241829a60e57c5f4
 sounds/speed.mp3	26331	3d64da0eea9f48fa73be82d385354bf6
@@ -17,13 +17,12 @@
 doc/manual/hu/pirepViewer.png	26835	267e4325e550ed14ed22f86a2c7e8e9d
 doc/manual/hu/prefsGeneral.png	25601	a33faad4d576b080ae0c040f5a1a5404
-library/mlx/gui/statusbar.pyc	4812	b6448dd0f6077bc70527ee0c39c330e1
-doc/manual/hu/mainWindow.png	29545	489097bf9f0d72ba0cb2661c0dfe881b
+library/mlx/gui/statusbar.pyc	4812	490a882b53429fa18f317e146f0c70c0
+doc/manual/hu/mainWindow.png	29112	ae56b6aa507c98c31e370a37df846362
 library/lxml.etree.pyd	2977792	d9f46391d4eeb719304a07b1ddaa72d9
 library/pdb.pyc	41336	cca4477d622e897335b3f0cecb667ff4
 library/lxml/html/_setmixin.pyc	4312	eac09282d97aceede13bb8efc0da3a5f
-doc/manual/hu/registrationDialog.png	36324	f919784cbdf87044c1b6b4a889574926
 doc/manual/en/fuel.png	29849	13c584d187765e22821abb492ab565d5
 subprocess.exe	267264	00107a8ed63a3e055e5d14f5c4b6cb0d
-doc/manual/en/statusIcon1.png	6472	10a7158dd8655de3f18ba914eb2373a5
+library/selenium/webdriver/android/webdriver.pyc	1348	d8e382aa629964bf424c14159dd4fd2d
 library/xml/sax/xmlreader.pyc	17862	0362ded7016d21cdd85aea1170ebdda1
 doc/manual/hu/fuel.png	32346	01ea98e0302ddaad608e468d2c590d7b
@@ -42,5 +41,5 @@
 library/encodings/big5hkscs.pyc	1670	0ff54e70f21b5e4a359d3779367cba85
 library/encodings/utf_8.pyc	1806	4b8dee0284ea2f55c4142fcde7463524
-locale/hu/LC_MESSAGES/mlx.mo	82073	e57783c0428759da8e7e2ee0fe9b8b16
+locale/hu/LC_MESSAGES/mlx.mo	73229	95361f226162895b4aef044832434cda
 library/encodings/mac_roman.pyc	2716	4b4745eccfcb77860b70b374ac07fbcc
 library/py_compile.pyc	6292	425da7ee065aa158fd274946204a4a77
@@ -54,5 +53,5 @@
 library/selenium/webdriver/safari/__init__.pyc	125	4a6fe7f5be076227125ddd0577386fa7
 locales/fil.pak	7790	38cdea149d120d8e9a8a0b0a90ac5dfd
-library/mlx/gui/dcdata.pyc	19878	bf0aa6b459e52b82ae440608011b1cf7
+library/mlx/gui/dcdata.pyc	19878	128e72fd5c4cf74b988abe22b9e9e641
 library/selenium/webdriver/common/utils.pyc	1718	4f61f38d0107f2694454eacb6d480f45
 library/encodings/iso8859_5.pyc	2679	58a290e94b0266ef8ff4ee52da00e257
@@ -60,5 +59,5 @@
 library/libglib-2.0-0.dll	1242929	18e88b04da123bf05b07ff60a4e96654
 library/base64.pyc	10528	39abec9c60dc011d3c763f443f9b1a11
-library/mlx/gui/bugreport.pyc	4602	99c9fc4da49ca115a5bd140a8405b87d
+library/mlx/gui/bugreport.pyc	4602	a32ca4d644f316b3d120ae3dc2597eba
 doc/manual/en/flightSelection.png	26869	35427845ae09baa263ab757d0e0dfa50
 library/encodings/cp500.pyc	2639	bb122a6e1384530e1b2efb14cf999239
@@ -67,5 +66,5 @@
 library/json/encoder.pyc	12918	d4d1f0b8a67df3e7c2f470ca19d0f964
 library/selenium/webdriver/remote/webdriver.pyc	31960	5ef4044402659e32409fa4570a91f03c
-doc/manual/en/mainWindow.png	27350	09280581a03232a933d2ed2619d6ca12
+doc/manual/en/mainWindow.png	26604	6962cfbd1db32efd06ebbb45a3223109
 library/encodings/iso8859_3.pyc	2685	7b5b2924647578ab7555db2d86cd1b9b
 locales/kn.pak	15411	d24e6fbfcbd4c8e76cc534bf63d75d61
@@ -89,5 +88,4 @@
 doc/manual/hu/takeoff.png	30058	74b1ec31eb1f5e61984a2fc8df2105d1
 library/encodings/rot_13.pyc	3413	04994d9c6c3622213b73a23e86c4cd07
-library/jsonrpclib/__init__.pyc	497	3e3578300fd7291a311b09a38f6ffff2
 library/selenium/webdriver/chrome/service.pyc	3456	213d552983fc36a04948f1c1fb551965
 library/win32file.pyd	111616	25ecaa0a381c6fd9ba4080bea63b952e
@@ -109,7 +107,7 @@
 library/encodings/koi8_r.pyc	2700	fff1b35002b9e938b7ea6fd0fbe824ae
 sounds/737taxi.mp3	157362	846c403e5cb660be53c8b6da16b68234
-library/mlx/const.pyc	6289	6bfbb3f444e4766446e0bd056eda9954
+library/mlx/const.pyc	6289	088e910fb056e2774248970d685a99f8
 locales/th.pak	13637	7262d0f5e1877212a45a1ef1ccc4c777
-library/mlx/gui/cef.pyc	13834	007bb081ceed016489c31f14aaa70a75
+library/mlx/gui/cef.pyc	13834	0c210ce9cb47acd967cc823184dc4209
 library/encodings/punycode.pyc	7570	335ff94e207934ae64e6f5fc07a5cacc
 mlx_cef_caller.bat	142	d1815645d52f5638f27f16903a977d00
@@ -128,5 +126,5 @@
 library/share/locale/hu/LC_MESSAGES/atk10.mo	8465	e3f3466da367215aad971d7b0394229d
 library/selenium/webdriver/android/__init__.pyc	126	2c08539a10f0de9d77dea0fb81f88c93
-library/select.pyc	543	c86d6813d6c7fbcb3c7950f74f084d5d
+library/select.pyc	543	ad592b6be3ddc27064fc34dff8516906
 library/encodings/uu_codec.pyc	4646	5282a5fcb676851224d2924aa3e48a9e
 library/selenium/webdriver/remote/file_detector.pyc	2025	06b01ab65d8732125257374fb263e879
@@ -141,6 +139,6 @@
 icudt.dll	9956864	5434e18b933e03f274d8da59fda4c676
 doc/manual/hu/simbriefSetup.png	32497	b287886107be21b6695897085b218fd4
-library/mlx/soundsched.pyc	9185	5d9c36cbf8971ad0e91adff5f9c4ab54
-library/mlx/logger.pyc	13109	78ca8e8f2b0b51e228a32fcca6f50fb7
+library/mlx/soundsched.pyc	9185	4211730170fddb82b5683ce1849234ee
+library/mlx/logger.pyc	13109	a70c061d36cf6b4e540f5610133466d3
 library/xplra.pyc	32012	50a1d9f19c0cc88783d264909ad1c678
 library/selenium/selenium.pyc	88274	e4b7af1a0fdb5800faba4cdbba1e85b3
@@ -172,13 +170,13 @@
 doc/manual/hu/flightSelection.png	28213	5aaf988630d39ebf7b51ecaeb0c2ca24
 library/win32pipe.pyd	24064	de374eded459293b2a7eb8ed8fb38eaa
-library/win32pipe.pyc	552	a9325defcaf31ec2a265d4ca56a4b838
+library/win32pipe.pyc	552	639fadb461731f169e36c2ae993e2f2e
 doc/manual/hu/cruise.png	27925	f7045d9150a756f487e3ae3d08b4c1a5
 library/encodings/iso2022_jp_2004.pyc	1723	66376e788f3819e781897268c1100986
 library/cefpython3.cefpython_py27.pyd	968192	58161b73feae974f560d2c9f416adf3b
 library/encodings/cp866.pyc	8103	f36418dcf93b17b3ced63bd544f44159
-library/gio/_gio.pyc	549	be7605389e760be914513fb410b05456
+library/gio/_gio.pyc	549	b2ba51e7311cb543818e93939ea8d420
 library/encodings/cp437.pyc	7874	63f1278c0a66129c6fb4f504d6b61b66
 doc/manual/hu/prefsSounds.png	22667	452c396c2bda9684bf052c98fd7870d1
-library/mlx/gates.pyc	7002	5c82c4c4dd0918bf385497549f14767f
+library/mlx/gates.pyc	7002	20aca1eaf3de122eda51883b5b518f6f
 library/mimetools.pyc	7837	c9accd6ef795bf71c90630be0161cadc
 doc/manual/en/pirepLoaded.png	9887	e27a7c87e134944787e29874c455380d
@@ -190,7 +188,7 @@
 doc/manual/hu/acarsTab.png	305091	489953210460410f2ec9d281b7ad6868
 library/encodings/utf_32_be.pyc	1747	3e8c9ef8145de502320202b1688fd2ee
-library/cefpython3/cefpython_py27.pyc	600	250647e0a839fe123bb9e1d79f77f6c5
+library/cefpython3/cefpython_py27.pyc	600	097c550cc7e8274086f98b42644ba588
 library/encodings/mac_romanian.pyc	2756	a3b2a0892236bc80c8efe8940e33339e
-library/_ctypes.pyc	546	57747d6451b9670e1fcaefe830366337
+library/_ctypes.pyc	546	c6f65e92190203fbce71595fe4bd58c2
 mlx_cef_caller_secondary.sh	178	ecb35d3294a5d1e729697f802a75cde4
 library/encodings/iso8859_2.pyc	2678	da65f42e1be5bec97161e8c1cc4f0fb7
@@ -205,8 +203,8 @@
 library/quopri.pyc	6352	87c42d94f753dd4c8a761cfa79453bb8
 library/htmlentitydefs.pyc	6347	814dc784fdb3d998dccee4c3f4c0394f
-library/mlx/gui/monitor.pyc	13015	04f8148cb0d4e007434a1b5534cfc8a2
+library/mlx/gui/monitor.pyc	12980	dc303c215e1380adee44b691870d45e8
 library/selenium/webdriver/common/action_chains.pyc	12050	696113f4eb85587998c08b915d8269a4
 library/encodings/latin_1.pyc	2111	52427573ccbfd06220b67d5a9dd1376e
-library/mlx/update.pyc	16925	6ac5bcefbbb9856f322af2ea9ba81351
+library/mlx/update.pyc	16925	5b250a54fb5430cc1af93b01623fae64
 library/selenium/webdriver/firefox/extension_connection.pyc	3145	5f8929a22a172a0aa71d4d4acb2aaf17
 library/selenium/webdriver/remote/webelement.pyc	17884	6fa60da9a8bc1d2dc6e1286d9bd8f1ab
@@ -215,16 +213,16 @@
 library/unittest/case.pyc	37758	1d2235e74c246b562c5c00ddf73c621a
 library/subprocess.pyc	38648	c9f749db06dfc9fb32079de51d6efd01
-library/mlx/acft.pyc	40830	0b381612a7f05b54d60c28d2e687643c
+library/mlx/acft.pyc	40830	a4b80fe5ea817bada60f2bb58642786b
 library/selenium/webdriver/firefox/firefox_binary.pyc	7758	cee737a6fd574b0f2e6ca28508844a30
 library/gobject._gobject.pyd	113152	3d05dd191361f83aa247b62c700fa04e
 doc/manual/hu/checklistEditor.png	27863	8c750892a52dc10ca654a9d0b2765358
 library/bisect.pyc	2971	ad8ce3e265b404ed3971b842106f8179
-library/mlx/gui/acars.pyc	1054	f1ac7c30434908114c49343eca6dfd32
+library/mlx/gui/acars.pyc	1057	27e9bc0d61654b3ac3b2a12fbda90e89
 library/gtk/_lazyutils.pyc	2772	93f9aa41ad4223106d99340cd539a566
-library/mlx/mlx.pyc	2979	1d725286e2f1d85ff919a7846c63991c
+library/mlx/mlx.pyc	2979	876ff2c4456985567d8a8af6d156b743
 library/selenium/webdriver/remote/utils.pyc	3073	592eeca209cae991779c97ddd322b388
 library/encodings/cp864.pyc	7999	ca90afae086cb6b8f69b8419cc3cd1cb
 library/pyexpat.pyd	152576	5a82e9ec95005aca6130751e5b961cc3
-library/pyexpat.pyc	546	33733afdf3632795e02be094ae83782d
+library/pyexpat.pyc	546	42fbab8dc96e7ac91259a952f1bcbcce
 library/unittest/loader.pyc	10884	591a785be23fba35582ce33bdd3d7acd
 library/ftplib.pyc	32043	5a1925388a0874e459aed6891f4cf0c1
@@ -234,9 +232,7 @@
 library/unittest/suite.pyc	9838	bf2c79bd4a6b6032f1ea53fa4908748f
 library/encodings/mac_arabic.pyc	7824	820deef79b02e1f7e52eb18e9be655bf
-library/mlx/gui/prefs.pyc	28139	1e2b4ccb44bc09700582f3e3cd2e44fa
+library/mlx/gui/prefs.pyc	27921	e2e0ae1a285ce62928539dbe8e61d6ff
 library/encodings/tis_620.pyc	2748	5969b4db4f967b11ae7992cdfbf5890e
 library/encodings/base64_codec.pyc	3568	1d8f13d09024bd124a9ff73a9244c0f1
-library/jsonrpclib/jsonrpc.pyc	19924	ab6cd59da3f76abb7b37ebbe06cb34a5
-doc/manual/en/statusIcon2.png	5875	71fc121823dee0a4c00715fac1b5665c
 Microsoft.VC90.CRT/msvcr90.dll	655872	e7d91d008fe76423962b91c43c88e4eb
 library/selenium/webdriver/phantomjs/__init__.pyc	128	48073c8ec42358f04a36b7f127c3db92
@@ -244,11 +240,11 @@
 sounds/ding.wav	80856	18e639792d3767436ac6955eb60e4f54
 doc/manual/en/simbriefResult.png	32136	c55b3f649ca19cbbef738feaee26d639
-library/mlx/checks.pyc	62721	3abe7381d89e45c4f28a0c79744c676f
-doc/manual/en/student.png	27531	5cc3fbe19909e31ecf82b764d17a6766
+library/mlx/checks.pyc	62721	759425ec78c8430f699691e5abf92c1d
+doc/manual/en/statusIcon2.png	5875	71fc121823dee0a4c00715fac1b5665c
 doc/manual/en/pirepViewer.png	25098	7c545e70b995ac0f9fcae93fe5d0e899
 library/libpangowin32-1.0-0.dll	108945	d07f128828225b7cc38e9e590eb3ba8a
 library/gobject/constants.pyc	1957	2e9cdc605e7c449ef4fc23f56128acec
 doc/manual/hu/calloutsEditor.png	16026	fede870894a85e5d21ca16a026aa6a98
-library/mlx/xplane.pyc	67098	5592e5201555656aee2ce230d023251c
+library/mlx/xplane.pyc	67098	a714130f818d2d0220760c98268a1e66
 library/ssl.pyc	13785	d90c880699ecbedb3182f556b9733868
 library/tempfile.pyc	18526	e2cc2d63c29e15f20ee9325e790643a3
@@ -282,7 +278,7 @@
 library/selenium/webdriver/remote/command.pyc	5463	3e7f6443358e670e58a7fc6c97e4ab16
 library/encodings/iso8859_10.pyc	2693	5e6cc8f721486ddbc1c99da285e13191
-library/mlx/gui/statusicon.pyc	5616	72e7f1f435bced8727eecc708d69de12
-library/mlx/config.pyc	33266	a7d9c1089d89b2eae06344b4eb62b515
-library/atk.pyc	534	8b3468aabe7a96cc116f79a26e710f15
+library/mlx/gui/statusicon.pyc	5616	03e079307c1f83f36284e1b32887b28e
+library/mlx/config.pyc	32739	460aaf61cd13bc34bb91fdc2fd70d710
+library/atk.pyc	534	42a8ab11f346bb57ab20ad063225d6a6
 library/gio._gio.pyd	263168	acb8c95fdc391079bebdf7d8685b0dbc
 library/encodings/cp861.pyc	7868	c97a8970ce4d9f40cbafbea6576fbdca
@@ -297,5 +293,5 @@
 library/zlib1.dll	100352	d90dad5eea33a178bac56fff2847d4c2
 locales/en-GB.pak	6364	2a92f4fc905c2743129ccbcdf80d443a
-library/mlx/gui/delaycodes.pyc	12949	f01c50d351027ab4b3b5322a54f662a0
+library/mlx/gui/delaycodes.pyc	12929	e8c1d6f46ef6e369451be3cbde0a3127
 library/encodings/raw_unicode_escape.pyc	2048	8138045029da04bf45204ab756d1bcd4
 sounds/TOD.mp3	174707	92176d53d948fbfebd08c011b063179a
@@ -304,5 +300,4 @@
 library/gtk/deprecation.pyc	3104	2e6c9eef82dfa8aa3beb05abd3e274a4
 Microsoft.VC90.CRT/msvcm90.dll	224768	4a8bc195abdc93f0db5dab7f5093c52f
-library/jsonrpclib/config.pyc	1454	1d25032504ace513586fa2a9916365b3
 doc/manual/hu/route.png	27514	be2b8fb4dc607e8216029d705007bb56
 chromedriver.exe	5009408	d662fef51894e4e5b6a6f508ed214904
@@ -313,14 +308,13 @@
 locales/pt-BR.pak	7211	d0542b9b325ea58be590d021aeb7333d
 library/libexpat-1.dll	143096	701659d3689bf4a8265b669b7d774255
-library/mlx/gui/info.pyc	6538	205cffc77969aa15ec2ca7c4755c629e
+library/mlx/gui/info.pyc	6538	78c97f25111c13dc94c6226140943916
 library/encodings/iso8859_6.pyc	2723	c8f9aa14a6a2ebf05d977317114bc65d
 library/xml/dom/minidom.pyc	61068	74ffa387e505b9fec2f2ad6a5dcd415d
 library/selenium/webdriver/chrome/__init__.pyc	125	ff98e760d2c777eacfc473761486a702
-library/mlx/gui/gui.pyc	56874	1973b42cfcb522f562ab40110ed8841e
+library/mlx/gui/gui.pyc	54574	875895d2039b15e40d0d5b29ebb8e563
 library/stat.pyc	2503	d3b6dc7a54e705219f04d0be75a212de
 locales/ru.pak	10392	1b66f03dd656a2433ce643d0259fca6f
 doc/manual/hu/landing.png	30425	a6c71e05b39a691729a2396514e7a16f
-doc/manual/hu/registration.png	31260	877f209cc012ce6b3335368276babcc6
-library/gobject/_gobject.pyc	573	1a3801bdc744f1353504103f7bbbf4fa
+library/gobject/_gobject.pyc	573	6d7b571de1872ff1398285072de22348
 libcef.dll	38585344	4dfb8a77f35c41bdbe8469877d4af853
 library/encodings/utf_7.pyc	1747	2beeb059236527197d6c640396476ce8
@@ -330,20 +324,18 @@
 library/libpangocairo-1.0-0.dll	104729	d3ad38599649097a3645777ff95be08e
 doc/manual/en/briefing.png	32215	60c6ca0af346ec1e399801834bb33036
-library/pangocairo.pyd	17920	5fc69a7d29a6d3127710c64de440daa4
 doc/manual/hu/simbriefResult.png	32291	9586bf2955d70cf0a3b7309747d3a535
 library/uu.pyc	4212	0073b65d26a6092e4e177c7763058fa4
 library/encodings/iso8859_1.pyc	2678	f09ec3b7f6a348cbd7f7286b60572bd0
 doc/manual/hu/monitorWindow.png	21499	c8296e51e14588ac5b037b4832161dfc
-library/selenium/webdriver/android/webdriver.pyc	1348	d8e382aa629964bf424c14159dd4fd2d
-library/pangocairo.pyc	555	1ff971a9f3b5c71677320cef48147c81
+library/pangocairo.pyd	17920	5fc69a7d29a6d3127710c64de440daa4
+library/pangocairo.pyc	555	d027670b8f45671d7d39fc258aed018a
 library/zipfile.pyc	37345	568c6ee7e0404625f47248340afb4524
 locales/it.pak	7188	10ae10d8bfcffbfa1160574134e14edb
 doc/manual/en/acarsTab.png	198944	3ec162b7e6b077ab62d673c335929fb3
-library/mlx/rpccommon.pyc	3956	5ff33f58a6bee5a753dde2421cf938b2
 doc/manual/hu/helpTab.png	29126	88f236f84b1b520c60653f4665fd10e2
 library/sre.pyc	499	92bb633daa0bab6550ec0e3677673b5b
 library/tokenize.pyc	13565	354d02cd79df187a28c1851a1e3bad96
 library/win32con.pyc	140797	84d2d064066cfbcc219230f7e9c6e0b0
-library/mlx/gui/flight.pyc	173010	d31df21c0d3bddd7ff01942f0602989e
+library/mlx/gui/flight.pyc	147646	de6b80a55be3e8a2c74b1b85f29f219f
 library/xmlrpclib.pyc	40724	d4f819f9199ea21236a74c967e335c43
 library/lib/gtk-2.0/2.10.0/engines/libwimp.dll	97984	a5bbbe46e1363aba9020a76f2d58e9d6
@@ -357,26 +349,26 @@
 locales/fi.pak	7098	70c7e2fb26c7abf09cb0f9972fb6c93a
 doc/manual/en/monitorWindow.png	20886	42e08d10c758e21209c4c021f391dee7
-library/_hashlib.pyc	549	145dff0b314b982d7709fc7bcb4cb449
+library/_hashlib.pyc	549	a5a3dd83f8fea0ac6182176585fa46fe
 library/copy.pyc	11674	30d1745c5e38ab170f8a0486fbebf305
 locales/et.pak	6856	18a0a857e46c28b7f1cd8ff639a24aec
 library/unittest/result.pyc	7444	aefbb3cc79c0ff17787ce84faed7f5e8
 library/mlx/gui/__init__.pyc	107	3494fc6a671a7b8a9dc72ea93948ae52
-library/mlx/pirep.pyc	7303	0563145fa9ac7fe5febd59e555c7a415
+library/mlx/pirep.pyc	4623	6c485ea65ff6245ab56960a8bbec7051
 library/json/scanner.pyc	2169	e19ee185b7c79ab5cc433b39fcd33faa
 library/traceback.pyc	11223	50ace5c2c6c040a923082442da94cd78
-library/mlx/flight.pyc	21066	bc4f9f08064487830d32767281c25b9f
+library/mlx/flight.pyc	21066	471a24b3678e6d684d6bf5aead1ae544
 library/urllib2.pyc	43566	7eb57ea0dcd1086d1d9073a5cefb0903
 library/encodings/mac_farsi.pyc	2659	df751a61510129a25f7a43ae3aace4f7
 library/encodings/iso2022_jp_3.pyc	1699	ee1c3aa11bbe19eeb4deafa238563133
 library/cefpython3/__init__.pyc	556	38a652a0209e49e323bee4dd54a018af
-library/mlx/common.pyc	1384	00e2e7b35eb747ee9ffc85db098e0f6a
+library/mlx/common.pyc	1300	3967399a64f2ad045d07a87aec5b12a2
 doc/manual/en/simbriefSetup.png	30414	9788762f9a23ffd71a66cbd90a23f13b
 library/ctypes/__init__.pyc	18846	2bd183962453ae93d6887b303d3fd338
-library/mlx/acars.pyc	2352	9396f366c1d2958204ceadf4e5b4eb7a
+library/mlx/acars.pyc	1690	733d057c94683c74079d6e096f601855
 library/encodings/cp865.pyc	7868	7d40a7ba053ac23339218be8799e5397
 locales/bn.pak	14431	f402d363b8a07649b6787b745434daf7
 sounds/taps.mp3	16614	d4a019c7e9342ae329aee6932d6a43c3
 library/markupbase.pyc	9010	b33ff430e9b1adba3d540b5394ff289a
-library/cairo/_cairo.pyc	561	fe3d70324664a2d1188ea15c3882fc0f
+library/cairo/_cairo.pyc	561	d334f604caf04c5f899c0fa41d1f0c43
 locales/te.pak	16110	c3af85e60b78273a93970cf8805ded04
 library/lxml/cssselect.pyc	3861	2e693f0c25ab04b1d130646cddd4e081
@@ -384,10 +376,9 @@
 library/selenium/webdriver/chrome/webdriver.pyc	2758	a7d3d371b22119d0327d9af9f77fd845
 locales/sv.pak	6641	4e11abed42cc59a403ae4767d2acbeff
-doc/manual/en/registrationDialog.png	33337	7ca5c30e97a8656a190873f6d0db3c62
 library/encodings/iso2022_jp_1.pyc	1699	faed9d5747e982cec9fa8b3ad8e1de26
 library/email/mime/__init__.pyc	110	bae57a199e3d0998a1364b9fbae8b3cd
 library/winerror.pyc	112982	4986a8f2df094dddedd12c9fddf4966d
 library/encodings/cp775.pyc	7888	25bf7dd514dff294aa02d5119399b2b7
-library/mlx/fsuipc.pyc	74692	e74e01ff94999375c355acb23e35eefa
+library/mlx/fsuipc.pyc	74670	4da0a45a9a6372a2e463ab21fdc43359
 library/xml/sax/__init__.pyc	3579	c78222ad1fd4f3dbdea06666fe74e84e
 doc/manual/en/connect.png	29728	191520526caf0fa58efcd97d597c9247
@@ -396,7 +387,7 @@
 library/encodings/charmap.pyc	3203	2358b8eb05c66e2a2826b5db6f214547
 library/libgdk-win32-2.0-0.dll	931390	a2b46daac3d4140efdf86429f7aea476
-library/mlx/gui/common.pyc	13634	1305ccfe858ce2ed5df9dc4df165b533
+library/mlx/gui/common.pyc	10433	591658e014f48a4e6592aed9cd30f0bc
 library/dummy_threading.pyc	1265	5ab5c897721aeb346b5bccb84066c5bd
-doc/manual/hu/index.html	61994	e4ee1897fc6e0d5145cb639108fc0e6a
+doc/manual/hu/index.html	57499	d169091b33dc0505b6f123c4c4df854d
 library/encodings/cp1258.pyc	2681	5c09b3b0a82036b0e785422376cb64cc
 sounds/767taxi.mp3	160496	4cb43cda6e1214fbe15328a716827345
@@ -410,18 +401,17 @@
 library/encodings/iso8859_16.pyc	2695	85e819a29dec2b601ce978dcd5a040fc
 sounds/cpt_takeoff.mp3	8255	254edcf79b8b3752d1a7c191c57f615a
-library/bz2.pyc	534	d925da074aaabe9a1fa72c6f7108d3bb
+library/bz2.pyc	534	61154b8608594e87a5d5affd53237fb9
 library/email/utils.pyc	8840	a7be428df6fddee6121cfce55382d1f8
 doc/manual/en/prefsGeneral.png	25633	a5ef76b874f4ad5384b519a11bdf9c47
 library/encodings/iso2022_jp_2.pyc	1699	4b917caa926e5779176612409c66be39
 library/_ssl.pyd	720896	90826a140137efd0d806038828e16f8e
-library/pango.pyc	540	7a61f73cbeb19d7bbb757674bbb9e9c9
+library/pango.pyc	540	83b3f7d1048b264980bb06583565f521
 locales/de.pak	7420	18ba99b07536017ed8b87cb4f77aee1c
 library/glib/__init__.pyc	187	d44c8c2772b263a36726ac0dcfc04b42
 library/pango.pyd	111616	c934763bdf125c3dc92b56db817001d4
 library/libgobject-2.0-0.dll	341594	356d697647a480562c4e2e921b13f8ed
-mlxupdate.exe	19456	a1426f61d7b0415b9f87fe002389422e
+mlxupdate.exe	19456	d7ee6976cf50ad2cee274eb124457588
 library/email/errors.pyc	3229	cdb78ab237e195ad69f059128bc03b1d
 library/linecache.pyc	3091	666e6f81b0ea9a7637f8068493f738d5
-library/jsonrpclib/jsonclass.pyc	3633	aa4dc431d3f7e728bf22525e1716c311
 sounds/malev.mp3	201247	8a00666288f14a1666eb112223c140e0
 library/encodings/mac_iceland.pyc	2738	dfff28ea5edfda00df56b4ab9a35bc59
@@ -431,5 +421,5 @@
 library/getopt.pyc	6454	8f8cd6763f5339988d157d153c910bf5
 library/encodings/cp857.pyc	7611	1b46c8959ac097b73e1c680d464cdc32
-library/_ssl.pyc	537	ded08ae7ccb6ce4c9219571196dbea72
+library/_ssl.pyc	537	474cda3f8885b7c4f1c665c43e7d4f5b
 library/os2emxpath.pyc	4312	0c35794eeb4739ebb4eb28b9a1daf0ca
 library/pprint.pyc	9852	6b4724e14285c257116655b1d4ba6db1
@@ -443,18 +433,17 @@
 library/encodings/cp1252.pyc	2676	b4c43cc72650c911cf3654dbaf565df9
 library/unicodedata.pyd	688128	c856c31a03dc892e4f2aee93d0bfee44
-library/unicodedata.pyc	558	fe7b45d1e6e5ffc6e119a56c942c1f5e
+library/unicodedata.pyc	558	fcc10e2b903b6c28c0c187048a167372
 library/encodings/cp1256.pyc	2675	c1bf26ed9c9b5ee0eec495138993cffb
-doc/manual/en/index.html	55261	56847c130a5f63a23aa5d6bf0e041196
+doc/manual/en/index.html	51535	4318d796e83fdc3187bcd2a2ebb36ec5
 library/email/base64mime.pyc	5221	c536d6f0c03f029bba77f15ef6ba3d99
 logo.png	69816	4a7517b22cfd75cc9c15e3fc1b7ebeec
 library/libpangoft2-1.0-0.dll	815421	1dbfead06e26edb81f0849490210e3ff
-library/mlx/util.pyc	4884	0e1e044381afbed77e8cd996e3df4aa0
-doc/manual/hu/student.png	28297	1e72329a3a463d4c50f1b9d91c3aeacc
+library/mlx/util.pyc	4884	7537803cf47e18210ab5f298ba9eba9e
 library/selenium/webdriver/common/__init__.pyc	125	6c65d6e881b33e7aedb01f167184288c
 library/_LWPCookieJar.pyc	5440	3782ae675165b232a3f78608ac2dbccd
 library/libfontconfig-1.dll	279059	dd583bedc5efe7bbd21a8ef107dec88d
 library/_strptime.pyc	14347	ad17a449b54061177a080e3a21507a39
-library/mlx/singleton.pyc	9184	3b71000d428959ab355db2658cea9557
-library/mlx/airports.pyc	4350	e6852c03d931caa17646118c38e6f8f1
+library/mlx/singleton.pyc	9184	9eec2ed5b230e043afc56592fb13a684
+library/mlx/airports.pyc	4350	e0fee9bae54850629841bbcf68b1b89f
 library/socket.pyc	15488	35f8eb455d6d8df8e19826d1dd7193f2
 sounds/notify.wav	119384	108025b17f67e61946df5d7fbf713cdb
@@ -470,6 +459,6 @@
 doc/manual/hu/connect.png	31517	4cfdc3f3264248ca3cbf9b3dd14d5d7a
 library/encodings/palmos.pyc	2876	9284ad53dcfd82dfae0a79923b1cf91d
-library/mlx/web.pyc	43157	41e4d3c73396a29a97dcbbe59056f0da
-library/mlx/gui/gates.pyc	5635	541e695d5acf90721e523c5513fe7d0d
+library/mlx/web.pyc	36866	96511f975c55c000b0e9c16dff3aa31b
+library/mlx/gui/gates.pyc	5635	ea478376f306ce9d6d0ed2e759407c00
 library/gobject/propertyhelper.pyc	8878	cc3598dab17d31ff46a6dee669ccb5ed
 library/intl.dll	152489	eb2d4c4d4a527bc88a69a16cc99afcf5
@@ -498,22 +487,22 @@
 library/selenium/webdriver/support/expected_conditions.pyc	14298	43b8884d089d85e074d0d9f2fbcd5e28
 doc/manual/hu/logTab.png	28908	25b9aceb760189c177a5562c0cfa2a04
-library/win32event.pyc	555	ac8e9a2c43e3fa9290e1feca913f4b10
-library/win32file.pyc	552	8170fd7ba6908bcf14ae50b33eba11e7
+library/win32event.pyc	555	b5579d79e17fa66f9941be4e5253f42d
+library/win32file.pyc	552	4413a47389ea1f5ddc8b1c13a773a6bd
 library/encodings/shift_jis_2004.pyc	1710	f8bb22a8b02dba2b66b7f77122c98fd6
 library/encodings/cp856.pyc	2701	8b6649490089bedd87e9b8c56985f6b3
 locales/hu.pak	7647	7a37ba9f9113e4f7e9de5b5b9643a48c
-library/mlx/gui/weighthelp.pyc	13179	09924037c8e067c96c1e7acd88671ed1
+library/mlx/gui/weighthelp.pyc	13179	9ebfa07c41e167371380dda80b5bd72b
 library/encodings/cp850.pyc	7621	20d776af743fa7acf090fbd575eea143
 library/gio/__init__.pyc	809	bc9332556e93183a58be5c10cba18557
 doc/manual/hu/debugLogTab.png	32687	9280a72a7c4d4dc5d93a133410505402
 library/weakref.pyc	13028	5d1c14275f47e8cf6d40bc6877fde976
-library/mlx/gui/checklist.pyc	12279	0d648433bc36dd90e70dbd27c094733a
-library/mlx/fs.pyc	11967	80815bbe572fcfb182f1da5ba9a0e111
+library/mlx/gui/checklist.pyc	12279	555775aaed42b3d0687e1b0f501a9f61
+library/mlx/fs.pyc	11863	63fda2c4e0727136be69ed82f9e2bbc8
 locales/he.pak	8198	2486731ee9bedc244d41143a2741775f
-library/nturl2path.pyc	1755	7835082f2dd6806f99cc25bed13ff7dc
+doc/manual/en/statusIcon1.png	6472	10a7158dd8655de3f18ba914eb2373a5
 library/email/message.pyc	27764	493826f529d17f5a21080a4c98b49369
-library/mlx/gui/pirep.pyc	16749	7a295b28dbdad43b33c52d814be60792
+library/mlx/gui/pirep.pyc	16749	2006126d65a19999a20c4a34f1e94342
 library/mimetypes.pyc	17806	927ce6a7079707aaee925e855ed23454
-library/mlx/gui/faultexplain.pyc	9707	3bda0c4c25476cd8c11e4d1c15c682bd
+library/mlx/gui/faultexplain.pyc	9707	938e02beb962d574df694c77536533ca
 sounds/F70taxi.mp3	154854	51332dc691d3519355f61ed06c959d8d
 mlx_cef_caller.sh	148	bd16cf4c784490bcd46d7845f2b6edf9
@@ -532,5 +521,5 @@
 library/libgdk_pixbuf-2.0-0.dll	285194	e4c64b0e7e4c6606f3973a16c0c1ee84
 library/encodings/big5.pyc	1630	a21b45d3e487bf09f40a08448040c97d
-library/mlx/gui/update.pyc	11482	02d959d93aaf0ddaffe186c6f060da25
+library/mlx/gui/update.pyc	11427	5698abbc9b133f18fa2c37d3bfa74bee
 library/encodings/cp1250.pyc	2676	c92e287a2aa6a1c924df287d826aa3b7
 doc/manual/en/gatesTab.png	31516	7078e7c5adff9ee39816d2c3855d8523
@@ -547,7 +536,5 @@
 doc/manual/hu/gateSelection.png	31891	937dc56457188df05056c0f9f3a53975
 library/cmd.pyc	13512	808f813d5e354b7073a1356e44c7b554
-library/mlx/rpc.pyc	12804	4695b27a7e3c0ddf042c795e72da0ae5
 locales/ko.pak	7278	41ecc83d5eef5887c7c288b3b570c7b4
-library/jsonrpclib/history.pyc	1662	2e0e6d5c26e2794085d62feb524e4542
 library/gzip.pyc	14358	2a4a036a0b24586b6bdde419847a18f6
 locales/ja.pak	8340	21ab6501f6d0c8d3e73b4921ce1b0086
@@ -568,12 +555,13 @@
 library/_socket.pyd	38400	5d273be76603399e88cf57f2605004bf
 library/plistlib.pyc	18067	d8d36573e80bfdde7c73e47828f6e710
-library/_socket.pyc	546	c62cc65116c893774f93084e8af2c248
+library/_socket.pyc	546	fa9a6c500373c472545594a194353a64
 library/encodings/hex_codec.pyc	3520	a8b8d5b7c8810379c7007bcbc253951c
-library/mlx/sound.pyc	8226	e8ca9ac1842f9e548b60e0d4f5648fcb
-library/glib/_glib.pyc	555	d9c694c65d7c14d23750a80594131142
-library/win32api.pyc	549	b3f9fb01179341f4dc7f3b6d4d0f5d4b
+library/nturl2path.pyc	1755	7835082f2dd6806f99cc25bed13ff7dc
+library/mlx/sound.pyc	8226	03b098ed1dd965db98ef4f75b07d6cae
+library/glib/_glib.pyc	555	b6480616e76444787a0a2378efc2cc43
+library/win32api.pyc	549	aa6d1f5583a8d058d9f80fff423be8c1
 library/encodings/iso8859_13.pyc	2696	f901ae0bbcfbb78f0c1783e89b2e2dc5
 library/selenium/webdriver/remote/remote_connection.pyc	21225	287db6d396dcce7180eada87e8c6ace0
-library/mlx/gui/callouts.pyc	16060	2e120c6e554d8d68459a52791e374789
+library/mlx/gui/callouts.pyc	16060	7a3055f313e693779e9d2df22bb7568a
 library/selenium/webdriver/opera/options.pyc	3303	243909f5d36e653ad3ad4921c8df4f78
 library/encodings/iso8859_15.pyc	2693	b892f358bbc25ae9d3824be158aabe28
@@ -581,5 +569,5 @@
 doc/manual/hu/prefsMessages.png	22980	6e60ec51305e95e5d057c0dd82b69460
 library/xml/parsers/__init__.pyc	294	83f6a77ed8cd962b3c75c4779dc557ac
-locale/en/LC_MESSAGES/mlx.mo	76347	ddb8d0ba7e855e3097ef90ab0922f689
+locale/en/LC_MESSAGES/mlx.mo	68078	9f93d7a348d26dd14c39706dc364750d
 library/_abcoll.pyc	19891	a5c1881934f1533c22b22b9317ac1d68
 library/encodings/iso8859_11.pyc	2787	a31e6d0d34e35259d7183cc9437eacca
@@ -589,5 +577,5 @@
 library/encodings/mac_latin2.pyc	4717	564dbaf5c296a147203eb821dc2466ba
 library/mlx/__init__.pyc	103	877b8715b7e58440a0e8f212cab6035e
-library/mlx/i18n.pyc	1972	141a57905a2597e5ced25866d032d3a4
+library/mlx/i18n.pyc	1972	fe45816e49cf5e380bc39942a9dfa875
 library/xml/sax/saxutils.pyc	12382	32ed045b3b520234ebea6a508a6569fe
 locales/sw.pak	7078	5406f21a67934bbf0e6c633d2ca573f9
@@ -595,5 +583,5 @@
 doc/manual/hu/gatesTab.png	32840	316fb040e358c79b2a846b1eed4651c6
 library/webbrowser.pyc	18138	c85009edebad6d278fe786fec10ebbbe
-library/mlx/pyuipc_sim.pyc	57203	5d059078e0595be103153c76d55188dc
+library/mlx/pyuipc_sim.pyc	57203	e1828998919f435bae2a5cbd969ff8f3
 library/encodings/cp875.pyc	2636	c72faa5d1cb6105ae81c971448fea479
 library/dis.pyc	6068	3934ab23d64f3da393305b19df0f1fd0
@@ -609,17 +597,16 @@
 locales/sk.pak	7622	dfdff6206e5a79aef8b46d0d9c2a8367
 library/select.pyd	11776	d90bf525f9f6c9c3aa6532fa6e569b4f
-library/pyuipc.pyc	543	2153352e0dd4e169e25e1513c336ac57
+library/pyuipc.pyc	543	73ee245cefd06c6ed52edf422c1bc6b1
 library/selenium/common/exceptions.pyc	9313	2140bc8b29eb7c3f4fc29622d0060152
 doc/manual/en/logTab.png	28120	b92cf63420e59e0c48da4f0b3baae040
 library/pyuipc.pyd	47616	2b4fe2d52575de71dda6f72690cf581e
 library/encodings/johab.pyc	1638	5346c11a863ffbcfb21aba8f1d2236b7
-doc/manual/en/registration.png	29655	ce7a0910be4eac89506cbcb210de224c
 library/shutil.pyc	17657	571e2606b42956f9e233242969ceec0d
 library/encodings/quopri_codec.pyc	3365	01342d4d2735bcbfeb333d784297547a
 library/distutils/errors.pyc	5885	fbeaddf5d59ea781ec63197dd950aa89
-library/mlx/gui/mava_simbrief.pyc	10689	04371192843b397936fa81f021678315
+library/mlx/gui/mava_simbrief.pyc	10689	f072e3f19b33a1aa5200028873c4986c
 library/logging/__init__.pyc	54813	7bcdf2e8da474f5e94d8e499f6fc3ed4
 library/selenium/webdriver/phantomjs/service.pyc	3263	3a56577bb9f058e0d7e5be544a8e850b
-runmlx.exe	64000	f2080595c2c0ad79f50eeeabacc5e310
+runmlx.exe	64000	379d0cb552e1b8fd208b8f6f5da8f4ba
 locales/zh-CN.pak	6386	36e1df83611aef6fbfeeafd067dd4241
 locales/hi.pak	13321	4b6b27ab4421c94685fc09051a2339f8
@@ -640,3 +627,3 @@
 library/unittest/main.pyc	7701	82258a486f5133466c9cf10323814fbf
 library/encodings/iso2022_jp_ext.pyc	1715	97eda1c1468f65445951b0bf23a89570
-library/mlx/watchdog.pyc	3957	8dd7d882e0716f1c6c9054e5009bcc1e
+library/mlx/watchdog.pyc	3957	4b6c34d79e730066e8af7cf71689f9ad
Index: doc/manual/en/index.html
===================================================================
--- doc/manual/en/index.html	(revision 774)
+++ doc/manual/en/index.html	(revision 730)
@@ -200,19 +200,4 @@
   </p>
 
-  <p>
-  When the program is first started on your computer, you will be presented
-  with the dialog below:
-  </p>
-  <div align="center">
-    <img src="registrationDialog.png" alt="The registration query dialog"/>
-  </div>
-
-  <p>
-  If you have not registered with MAVA yet, click on <b>Register</b>. The
-  registration process is described <a href="#registration">here</a>.
-  If you have a pilot ID and a password already, click <b>Cancel</b> and
-  continue as below.
-  </p>
-
   <h2><a name="mainWindow">The Main Window</a></h2>
 
@@ -1253,76 +1238,3 @@
   </p>
 
-  <h2><a name="registration">Registration</a></h2>
-
-  <img src="registration.png" alt="The Registration page"/>
-
-  <p>
-  When you choose to register, the <i>Registraton</i> page is displayed. Enter
-  the data requested. The data items in italics (phone number and nationality)
-  are not mandatory. One of VATSIM or an IVAO ID are mandatory, so register
-  with one of these on-line networks first. The password should be at least 5
-  characters long. It is recommended to use one that consists of a mix of
-  upper- and lower-case letters, numbers and possibly special characters.
-  </p>
-
-  <p>
-  When all necessary data has been entered, click <b>Register</b>. Your data
-  will be recored in the MAVA database, and if all goes well, a dialog is
-  displayed containing your <i>Pilot ID</i>, which is in the
-  format <i>Pnnn</i>, where <i>nnn</i> is a 3-digit number (e.g. <i>P210</i>).
-  Note it down for further reference along with your password. These data can
-  be used to log in to the MAVA website, forums and education centre.
-  </p>
-
-  <p>
-  When you click <b>OK</b> in the dialog, you will be taken to the <i>Student</i>
-  page:
-  </p>
-
-  <img src="student.png" alt="The Student page"/>
-
-  <p>
-  This page displays the status of you entry exam and check flight and you can
-  also initiate these from here.
-  </p>
-
-  <p>
-  The entry exam is an online theoretical exam, taken in the
-  <a href="http://mavasystems.hu/moodle">MAVA Education Centre</a>. Clicking
-  the <b>Take the entry exam</b> button takes you to the login page, where you
-  should enter your pilot ID and password to get access to the exam. If you
-  have successfully completed the test the status in the <i>Student</i> page
-  will update. However, this might take a few minutes until the website will
-  update itself and the logger will also notice it.
-  </p>
-
-  <p>
-  The check flight is a simple flight, during which you take off from the
-  Budapest Ferihegy Airport (LHBP), fly a SID, fly to the entry point of an
-  approach transition, fly the transition and land. (If you are not familiar
-  with these ideas, please, learn about them as you will need to know them
-  perform your regular flights for MAVA.) You can select the type of the
-  aircraft you wish to fly (currently the Boeing 737NG family and the Bomardier
-  Dash-8 Q400 are available), and then click on <b>Perform the check
-  flight</b>. You will be then <a href="#tabFlight">taken through</a> the steps
-  of the flight almost as in case of a regular flight starting with the
-  <a href="#connectPage"><i>Connect</i></a> page.
-  </p>
-
-  <p>
-  Your flight is successful, if you commit no NO-GO mistakes, otherwise you
-  need to try it again. In both cases you can save the PIREP into a file and
-  send it to your mentor at MAVA for further advice.
-  </p>
-
-  <p>
-  If you start the program later, it will check your rank. If it is STU
-  (student), you will always be taken to this page. If you have passed both the
-  entry exam and the check flight, your rank will become FO (First Officer) and
-  which case you select flights via the MAVA website and fly them with the
-  logger. In this case, you will be taken to
-  the <a href="#flightSelectionPage">Flight selection</a> page after a
-  successful login.
-  </p>
-
 </html>
Index: doc/manual/hu/index.html
===================================================================
--- doc/manual/hu/index.html	(revision 774)
+++ doc/manual/hu/index.html	(revision 730)
@@ -198,18 +198,4 @@
   </p>
 
-  <p>
-  Ha a számítógépen először fut a program, az alábbi dialógus ablak jelenik meg:
-  </p>
-  <div align="center">
-    <img src="registrationDialog.png" alt="A regisztrációra rákérdező dialógus"/>
-  </div>
-
-  <p>
-  Ha még nincs regisztrációnk a MAVA-nál, kattintsunk a <b>Regisztráció</b>
-  gombra. A regisztráció folyamatának leírása <a href="#registration">itt</a>
-  olvasható el. Ha már van pilóta azonosítónk és jelszavunk, kattintsunk a
-  <b>Mégse</b> gombra, és az alábbiakban leírtaknak megfelelően haladjunk tovább.
-  </p>
-
   <h2><a name="mainWindow">A főablak</a></h2>
 
@@ -1289,83 +1275,3 @@
   </p>
 
-  <h2><a name="registration">Regisztráció</a></h2>
-
-  <img src="registration.png" alt="A Regisztráció oldal"/>
-
-  <p>
-  Ha a regisztrálás mellett döntöttünk, a <i>Regisztráció</i> oldal jelenik
-  meg. Írjuk be a kért adatokat. A dőlt betűvel jelölt adatokat (a
-  telefonszámot és a nemzetiséget) nem kötelező megadni. A VATSIM és az IVAO
-  azonosítók közül az egyiket viszont kötelező megadni, így valamelyik
-  hálózatban regisztráljunk előbb. A jelszónak legalább 5 karakter hosszúnak
-  kell lennie. Javasolt olyat választani, amelyben kis- és nagybetűk, számok
-  és akár speciális karakterek is egyaránt megtalálhatók.
-  </p>
-
-  <p>
-  Ha minden szükséges adatot beírtunk, kattintsünk a <b>Regisztráció</b>
-  gombra. Az adatok bekerülnek a MAVA adatbázisába, és ha minden jól megy, egy
-  dialógus ablakban megkapjuk a <i>pilóta azonosító</i>nkat. Ennek alkja
-  <i>Pnnn</i>, ahol <i>nnn</i> egy háromjegyű szám (pl. <i>P210</i>).
-  Ezt a jelszóval együtt célszerű lejegyezni. Ezekkel az adatokkal tudunk
-  bejelentkezni a MAVA weboldalára, fórumába és az oktatóközpontba.
-  </p>
-
-  <p>
-  Ha a megjelenő dialógus ablakban az <b>OK</b>-ra kattintunk, a <i>Jelölt</i>
-  lap jelenik meg:
-  </p>
-
-  <img src="student.png" alt="A Jelölt lap"/>
-
-  <p>
-  Itt megtekinthetjük az elméleti vizsga és az ellenőrző repülés állapotát,
-  valamint elindíthatjuk ezen tevékenységeket.
-  </p>
-
-  <p>
-  Az elméleti vizsgált az Interneten,
-  a <a href="http://mavasystems.hu/moodle">MAVA Oktatási Központban</a>
-  tehetjük le. Az <b>Elméleti vizsga</b> gomb megnyomásával a böngészőnkben
-  megjelenik a Központ weboldala, ahol a pilóta azonosítóval és a
-  jelszavunkkal történő bejelentkezés után letehetjük a vizsgát. Ha az sikerül,
-  a <i>Jelölt</i> lapon a vizsga állapota frissül. Erre azonban csak néhány
-  perc elteltével kerül sor, mire a háttérben futó rendszerekben frissül az
-  állapot és erről a logger is értesül.
-  </p>
-
-  <p>
-  Az ellenőrző repülés egy egyszerű repülés, amely során a ferihegyi
-  repülőtérről (LHBP) felszállünk, lerepüljük a szabványos indulási eljárást
-  (SID-et), majd egy megközelítési transition kezdőpontjára repülünk,
-  lerepüljük a transitiont és végül leszállunk. (Ha az előző mondatban szereplő
-  egyes fogalmak jelentése nem világos, úgy nézzünk ezeknek utána, mert a
-  normál járatok teljesítéséhez is tudnunk kell, mit jelentenek ezek.)
-  Válasszuk ki a használni kívánt repülőgép típusát (jelenleg a Boeing 737NG
-  család valamelyik típusát vagy a Bombardier Dash-8 Q400-ast), majd
-  kattintsünk az <b>Ellenőrző repülés</b> gombra. Ekkor a normál járatok
-  teljesítésével szinte teljesen megegyező
-  folyamaton <a href="#tabFlight">végigvezet</a> minket a program a
-  <a href="#connectPage"><i>Kapcsolódás</i></a> oldaltól kezdve.
-  </p>
-
-  <p>
-  Az ellenőrző repülés akkor sikeres, ha nem vétettünk olyan súlyos hibát,
-  amelyre már a program is azt mondja, hogy NO-GO. Ellenkező esetben újra kell
-  próbálkoznunk. Ha a járattal kapcsolatban tanácsot szeretnénk kérni, a
-  PIREP-et mindkét esetben elmenthetjük fájlba, és azt elküldhetjünk a MAVA
-  mentorunknak.
-  </p>
-
-  <p>
-  Ha a későbbiekben elindítjuk a programot és bejelentkezünk, az mindig
-  ellenőrzi a rangunkat. Ha az még STU (student - jelölt), akkor mindig
-  a <i>Jelölt</i> oldalra kerülünk a belépés után. Ha minde az elméleti
-  vizsgát, mind az ellenőrző repülést sikeresen teljesítetjük, a rangunk FO
-  (First Officer - elsőtiszt) lesz. Ekkor már foglalhatunk járatokat a MAVA
-  weboldaláln és a logger segítségével le is repülhetjük azokat. Ebben az
-  esetben a <a href="#flightSelectionPage">Járatválasztás</a> oldal jelenik meg
-  a sikeres belépés után.
-  </p>
-
 </html>
Index: locale/en/mlx.po
===================================================================
--- locale/en/mlx.po	(revision 769)
+++ locale/en/mlx.po	(revision 744)
@@ -1,3 +1,3 @@
-
+# English-language texts for the MAVA Logger X
 #
 # István Váradi <ivaradi@gmail.com>, 2012
@@ -94,7 +94,4 @@
 msgstr "_Send..."
 
-msgid "button_register"
-msgstr "_Register"
-
 msgid "button_cancelFlight"
 msgstr "Cancel flight"
@@ -272,5 +269,5 @@
 msgid "login_remember_tooltip"
 msgstr ""
-"If checked, your password will be stored by the program, so that you "
+"If checked, your password will be stored, so that you "
 "should not have to enter it every time. Note, however, that "
 "the password is stored as text, and anybody who can access "
@@ -282,10 +279,4 @@
 msgid "login_entranceExam_tooltip"
 msgstr "Check this to log in to take your entrance exam."
-
-msgid "button_login_register"
-msgstr "R_egister..."
-
-msgid "button_login_register_tooltip"
-msgstr "Click here if you would like to register with Malév Virtual"
 
 msgid "button_offline"
@@ -2122,292 +2113,2 @@
 msgid "sendBugReport_error_sec"
 msgstr "There was some communication error, try again later."
-
-msgid "register_ask"
-msgstr "Would you like to register with MAVA?"
-
-msgid "register_ask_sec"
-msgstr ""
-"It seems, you have not run the program\n"
-"on this computer, or at least not logged in yet.\n"
-"\n"
-"If you would like to register, click the\n"
-"<b>Register</b> button below and fill the form."
-
-msgid "register_title"
-msgstr "Registration"
-
-msgid "register_help"
-msgstr ""
-"Enter the data below.\n"
-"Optional data items are in <i>italics</i>.\n"
-"One of VATSIM ID or IVAO ID is mandatory."
-
-msgid "register_name1"
-msgstr "First _name:"
-
-msgid "register_name1_tooltip"
-msgstr "Enter your real first name."
-
-msgid "register_name2"
-msgstr "Sur_name:"
-
-msgid "register_name2_tooltip"
-msgstr "Enter your real surname."
-
-msgid "register_nameorder"
-msgstr "western"
-
-msgid "register_year_of_birth"
-msgstr "_Year of birth:"
-
-msgid "register_year_of_birth_tooltip"
-msgstr "Enter the year in which you were born."
-
-msgid "register_email"
-msgstr "_E-mail:"
-
-msgid "register_email_tooltip"
-msgstr "Enter your e-mail address."
-
-msgid "register_email_public"
-msgstr "P_ublic"
-
-msgid "register_email_public_tooltip"
-msgstr ""
-"If checked, your e-mail address will be displayed in our forums and "
-"possibly other internal website areas, and thus it will be made "
-"available to other members of MAVA."
-
-msgid "register_vatsim_id"
-msgstr "_VATSIM CID:"
-
-msgid "register_vatsim_id_tooltip"
-msgstr ""
-"Enter your VATSIM CID, if you are registered with VATSIM. "
-"Note that either a VATSIM CID or an IVAO VID is required for the registration."
-
-msgid "register_ivao_id"
-msgstr "IV_AO VID:"
-
-msgid "register_ivao_id_tooltip"
-msgstr ""
-"Enter your IVAO VID, if you are registered with IVAO. "
-"Note that either a VATSIM CID or an IVAO VID is required for the registration."
-
-msgid "register_phone_num"
-msgstr "<i>Phone num_ber</i>:"
-
-msgid "register_phone_num_tooltip"
-msgstr "Enter your phone number, if we can reach you by phone."
-
-msgid "register_nationality"
-msgstr "<i>Na_tionality</i>:"
-
-msgid "register_nationality_tooltip"
-msgstr "Enter your nationality, if you would like to share that info with us."
-
-msgid "register_password"
-msgstr "Pa_ssword:"
-
-msgid "register_password_tooltip"
-msgstr "Enter the password you would like to use for logging in."
-
-msgid "register_password2"
-msgstr "Pass_word again:"
-
-msgid "register_password2_tooltip"
-msgstr "Enter the same password again."
-
-msgid "register_password_ok"
-msgstr "<span foreground=\"darkgreen\"><b>OK</b></span>"
-
-msgid "register_password_too_short"
-msgstr "<span foreground=\"orange\"><b>Too short</b></span>"
-
-msgid "register_password_mismatch"
-msgstr "<span foreground=\"red\"><b>Passwords differ</b></span>"
-
-msgid "register_busy"
-msgstr "Registering..."
-
-msgid "register_ok"
-msgstr "Registration successful."
-
-msgid "register_failed"
-msgstr "Registration failed!"
-
-msgid "register_info"
-msgstr ""
-"Congratulations! You are now a MAVA pilot\n"
-"in status STU (student).\n"
-"\n"
-"Your pilot ID is: <b>%s</b>.\n"
-"\n"
-"You will now be taken to the student page,\n"
-"where you can initiate the taking of the\n"
-"entrance exam or start your check flight.\n"
-"\n"
-"You can return to the page anytime later\n"
-"by starting the program, and logging in."
-
-msgid "register_nologin"
-msgstr ""
-"Congratulations! You are now a MAVA pilot\n"
-"in status STU (student).\n"
-"\n"
-"Your pilot ID is: <b>%s</b>.\n"
-"\n"
-"For some reason, we could not log you in\n"
-"(perhaps a server failure).\n"
-"\n"
-"You will now be taken to the login page,\n"
-"where you can try logging in again. You can,\n"
-"of course, start the program at any time\n"
-"later on and attempt logging in."
-
-msgid "register_email_already"
-msgstr "The given e-mail is already registered."
-
-msgid "register_invalid_data"
-msgstr ""
-"The program has sent invalid data to the server.\n"
-"This may be a program error. You may try to alter some\n"
-"data (e.g. accented characters), or send a bug report."
-
-msgid "register_error"
-msgstr ""
-"Some error, most likely in the server, has occured.\n"
-"Please, try again later."
-
-msgid "register_result_title"
-msgstr "Registration"
-
-msgid "student_title"
-msgstr "Student"
-
-msgid "student_help"
-msgstr ""
-"You can initiate the entrace exam\n"
-"and the check flight here."
-
-msgid "student_entry_exam_status"
-msgstr "Entry exam:"
-
-msgid "student_entry_exam_passed"
-msgstr "<span color=\"darkgreen\"><b>Passed</b></span>"
-
-msgid "student_entry_exam_not_passed"
-msgstr "<span color=\"orange\"><b>Not yet passed</b></span>"
-
-msgid "student_entry_exam"
-msgstr "Take the _entry exam"
-
-msgid "student_entry_exam_tooltip"
-msgstr ""
-"Click this button to go to MAVA's training website in your browser and take "
-"the theoretical entry exam. The website might ask you for login: you can "
-"use your MAVA pilot ID (PXXX) and password. "
-"If this button is greyed out, it means that you have already passed "
-"the exam earlier. Note, that its status is updated only a few minutes "
-"after passing the exam."
-
-msgid "student_check_flight_status"
-msgstr "Check flight:"
-
-msgid "student_check_flight_passed"
-msgstr "<span color=\"darkgreen\"><b>Passed</b></span>"
-
-msgid "student_check_flight_not_passed"
-msgstr "<span color=\"orange\"><b>Not yet passed</b></span>"
-
-msgid "student_check_flight"
-msgstr "Perform the _check flight"
-
-msgid "student_check_flight_tooltip"
-msgstr ""
-"Click this button to perform the check flight, after you have selected "
-"the airfract type to fly with. You will then have to perform a flight "
-"departing from and arriving at LHBP (Budapest Ferihegy Airport) with a "
-"proper SID and arrival transition."
-
-msgid "student_fo"
-msgstr "Congratulations!"
-
-msgid "student_fo_secondary"
-msgstr ""
-"You have received the rank of <b>First Officer</b> (FO).\n\n"
-"By clicking OK below, you will be taken to the flight selection page, "
-"from which you can perform your first real MAVA flight!"
-
-msgid "chkfinish_title"
-msgstr "Check flight finished"
-
-msgid "chkfinish_passed_begin"
-msgstr ""
-"<b><span size=\"xx-large\">Congratulations!</span></b>\n"
-"\n"
-"You have successfully completed your check flight."
-
-msgid "chkfinish_passed_fo"
-msgstr ""
-" \n\n"
-"You have received the rank of <b>First Officer</b> (FO)."
-
-msgid "chkfinish_passed_end"
-msgstr ""
-" \n\n"
-"You may wish to review the log if you have made any mistakes."
-
-msgid "chkfinish_failed"
-msgstr ""
-"Unfortunately, you have <b>failed</b> your check flight.\n"
-"\n"
-"You can review the log to check what mistakes you have committed."
-
-msgid "chkfinish_savepirep"
-msgstr ""
-" \n\n"
-"If you have further questions, you can save your PIREP\n"
-"and send the file to your mentor for a review and\n"
-"to receive helpful advice."
-
-msgid "chkfinish_next_student_begin"
-msgstr ""
-" \n\n"
-"The <i>Next</i> button takes you back to the <i>Student</i> page,"
-
-msgid "chkfinish_next_student_nothing"
-msgstr ""
-" \n"
-"where you can initiate another test flight or take your entry exam."
-
-msgid "chkfinish_next_student_no_exam"
-msgstr ""
-" \n"
-"where you can take your entry exam."
-
-msgid "chkfinish_next_student_no_flight"
-msgstr ""
-" \n"
-"where you can initiate another test flight."
-
-msgid "chkfinish_next"
-msgstr ""
-" \n\n"
-"The <i>Next</i> button takes you to the flight selection page,\n"
-"from which you can perform your first real MAVA flight!"
-
-msgid "chkfinish_updateweb_busy"
-msgstr "Updating check flight status..."
-
-msgid "chkfinish_passedset_failed"
-msgstr "Failed to update the check flight status"
-
-msgid "chkfinish_passedset_failed_title"
-msgstr "Update failure"
-
-msgid "chkfinish_passedset_failed_secondary"
-msgstr ""
-"You can retry later, or save your PIREP and send it "
-"to your mentor at MAVA, who can arrange for your flight "
-"to be accepted."
Index: locale/hu/mlx.po
===================================================================
--- locale/hu/mlx.po	(revision 769)
+++ locale/hu/mlx.po	(revision 744)
@@ -94,7 +94,4 @@
 msgstr "_Küldés..."
 
-msgid "button_register"
-msgstr "_Regisztráció"
-
 msgid "button_cancelFlight"
 msgstr "Járat megszakítása"
@@ -281,10 +278,4 @@
 msgid "login_entranceExam_tooltip"
 msgstr "Ha ezt bejelölöd, ellenörző repülésre jelentkezhetsz be."
-
-msgid "button_login_register"
-msgstr "_Regisztráció..."
-
-msgid "button_login_register_tooltip"
-msgstr "Kattints ide a Malév Virtualhoz való regisztrálás céljából."
 
 msgid "button_offline"
@@ -781,5 +772,5 @@
 msgstr "Emelke_dési profil:"
 
-msgid "simbrief_climb_profile_tooltip"
+msgid "simbrief_climb_profile_tootip"
 msgstr "Válaszd ki az emelkedési profilt"
 
@@ -787,5 +778,5 @@
 msgstr "_Utazó profil:"
 
-msgid "simbrief_cruise_profile_tooltip"
+msgid "simbrief_cruise_profile_tootip"
 msgstr "Válaszd ki az utazó profilt"
 
@@ -793,5 +784,5 @@
 msgstr "Süll_yedési profil:"
 
-msgid "simbrief_descent_profile_tooltip"
+msgid "simbrief_descent_profile_tootip"
 msgstr "Válaszd ki a süllyedési profilt"
 
@@ -2136,295 +2127,2 @@
 msgid "sendBugReport_error_sec"
 msgstr "Valamilyen kommunikációs probléma adódott, próbáld újra később."
-
-msgid "register_ask"
-msgstr "Szeretnél regisztrálni?"
-
-msgid "register_ask_sec"
-msgstr ""
-"Úgy tűnik, nem futtattad még a programot ezen a\n"
-"számítógépen, vagy legalábbis nem jelentkeztél még be.\n"
-"\n"
-"Ha szeretnél regisztrálni, kattints a <b>Regisztráció</b>\n"
-"gombra, majd töltsd ki a megjelenő űrlapot."
-
-msgid "register_title"
-msgstr "Regisztráció"
-
-msgid "register_help"
-msgstr ""
-"Töltsd ki a lenti űrlapot.\n"
-"A <i>dőlt</i> betűs adatokat nem kötelező megadnod.\n"
-"Vagy VATSIM vagy IVAO azonosítót meg kell adni."
-
-msgid "register_name1"
-msgstr "_Vezetéknév:"
-
-msgid "register_name1_tooltip"
-msgstr "Írd be a valódi vezetéknevedet"
-
-msgid "register_name2"
-msgstr "Keresz_tnév:"
-
-msgid "register_name2_tooltip"
-msgstr "Írd be a valódi keresztnevedet"
-
-msgid "register_nameorder"
-msgstr "eastern"
-
-msgid "register_year_of_birth"
-msgstr "S_zületés éve:"
-
-msgid "register_year_of_birth_tooltip"
-msgstr "Írd be az évnek a számát, amelyben születtél.."
-
-msgid "register_email"
-msgstr "E-m_ail:"
-
-msgid "register_email_tooltip"
-msgstr "Írd be az e-mail címedet."
-
-msgid "register_email_public"
-msgstr "P_ublikus"
-
-msgid "register_email_public_tooltip"
-msgstr ""
-"Ha ezt bejelölöd, az e-mail címed megjelenhet a fórumunkban és "
-"egyéb belső weboldalakon is, így azt a MAVA többi tagja "
-"láthatja."
-
-msgid "register_vatsim_id"
-msgstr "VATSIM _CID:"
-
-msgid "register_vatsim_id_tooltip"
-msgstr ""
-"Ha rendelkezel VATSIM regisztrációval, írd be ide az azonosítódat. "
-"A regisztrációhoz vagy VATSIM vagy IVAO azonosító szükséges."
-
-msgid "register_ivao_id"
-msgstr "IVA_O VID:"
-
-msgid "register_ivao_id_tooltip"
-msgstr ""
-"Ha rendelkezel IVAO regisztrációval, írd be ide az azonosítódat. "
-"A regisztrációhoz vagy VATSIM vagy IVAO azonosító szükséges."
-
-msgid "register_phone_num"
-msgstr "<i>Tele_fonszám</i>:"
-
-msgid "register_phone_num_tooltip"
-msgstr "Ha telefonon is kereshetünk, írd be a számodat."
-
-msgid "register_nationality"
-msgstr "<i>Nemzetisé_g</i>:"
-
-msgid "register_nationality_tooltip"
-msgstr "Írd be a nemzetiségedet, ha meg kívánod azt velünk osztani."
-
-msgid "register_password"
-msgstr "Je_lszó:"
-
-msgid "register_password_tooltip"
-msgstr "Írd be a jelszót, amivel be szeretnél majd jelentkezni."
-
-msgid "register_password2"
-msgstr "Jelszó új_ra:"
-
-msgid "register_password2_tooltip"
-msgstr "Írd be ugyanazt a jelszót megint."
-
-msgid "register_password_ok"
-msgstr "<span foreground=\"darkgreen\"><b>Rendben</b></span>"
-
-msgid "register_password_too_short"
-msgstr "<span foreground=\"orange\"><b>Túl rövid</b></span>"
-
-msgid "register_password_mismatch"
-msgstr "<span foreground=\"red\"><b>A két jelszó különbözik</b></span>"
-
-msgid "register_busy"
-msgstr "Regisztráció..."
-
-msgid "register_ok"
-msgstr "A regisztráció sikerült."
-
-msgid "register_failed"
-msgstr "A regisztráció nem sikerült!"
-
-msgid "register_info"
-msgstr ""
-"Gratulálunk! Ezennel a MAVA pilótája lettél\n"
-"STU (student - jelölt) státuszban.\n"
-"\n"
-"Pilóta azonosítód: <b>%s</b>.\n"
-"\n"
-"Most a jelöltek oldala fog megjelenni,\n"
-"ahol kezdeményezheted a belépő teszt\n"
-"kitöltését vagy elindíthatod az ellenőrző\n"
-"repülést.\n"
-"\n"
-"A jelöltek oldalára bármikor visszatérhetsz\n"
-"ha elindítod a programot és bejelentkezel."
-
-msgid "register_nologin"
-msgstr ""
-"Gratulálunk! Ezennel a MAVA pilótája lettél\n"
-"STU (student - jelölt) státuszban.\n"
-"\n"
-"Pilóta azonosítód: <b>%s</b>.\n"
-"\n"
-"Valamilyen oknál fogva a bejelentkezés viszont\n"
-"nem sikerült (talán szerverhiba).\n"
-"\n"
-"A bejelentkező oldal fog megjelenni,\n"
-"ahol megpróbálhatsz belépni. Természetesen\n"
-"a programot bármikor futtathatod és\n"
-"megpróbálhatod a belépést."
-
-msgid "register_email_already"
-msgstr "A megadott e-mail címmel már regisztráltak."
-
-msgid "register_invalid_data"
-msgstr ""
-"A program érvényelen adatokat küldött a szervernek.\n"
-"Ez programhiba lehet. Megpróbálhatsz megváltoztatni\n"
-"bizonyos adatokat (pl. az ékezetes karaktereket),\n"
-"vagy küldhetsz hibajelentést."
-
-msgid "register_error"
-msgstr ""
-"Valamilyen, valószínűleg szerverhiba történt.\n"
-"Kérlek, próbáld meg később."
-
-msgid "register_result_title"
-msgstr "Regisztráció"
-
-msgid "student_title"
-msgstr "Jelölt"
-
-msgid "student_help"
-msgstr ""
-"Itt intézheted a felvételi elméleti vizsgát\n"
-"és az ellenőrző repülést."
-
-msgid "student_entry_exam_status"
-msgstr "Elméleti vizsga:"
-
-msgid "student_entry_exam_passed"
-msgstr "<span color=\"darkgreen\"><b>Sikeres</b></span>"
-
-msgid "student_entry_exam_not_passed"
-msgstr "<span color=\"orange\"><b>Még nem tetted le</b></span>"
-
-msgid "student_entry_exam"
-msgstr "_Elméleti vizsga"
-
-msgid "student_entry_exam_tooltip"
-msgstr ""
-"Erre a gombra kattintva a MAVA oktatási weboldalára kerülsz "
-"böngésződben és kitöltheted az elméleti vizsga tesztjét. "
-"A weboldalon szükség lehet bejelentkezned: ebben az esetben "
-"használd a MAVA pilóta azonosítódat (PXXX) és jelszavadat. "
-"Ha a gomb inaktív, a vizsgát korábban már sikeresen teljesítetted. "
-"A gomb állapota csak néhány perccel a vizsga teljesítése után frissül."
-
-msgid "student_check_flight_status"
-msgstr "Ellenőrző repülés:"
-
-msgid "student_check_flight_passed"
-msgstr "<span color=\"darkgreen\"><b>Sikeres</b></span>"
-
-msgid "student_check_flight_not_passed"
-msgstr "<span color=\"orange\"><b>Még nem hajtottad végre</b></span>"
-
-msgid "student_check_flight"
-msgstr "Ellenőrző _repülés"
-
-msgid "student_check_flight_tooltip"
-msgstr ""
-"Miután kiválasztottad a kívánt repülőgép típust, erre a gombra kattintva "
-"elindíthatod az ellenőrző repülést. Ennek során egy LHBP-ről "
-"(a ferihegyi repülőtérről) induló és oda érkező repülést kell végezned "
-"megfelelő SID és érkezési transition alkalmazásával."
-
-msgid "student_fo"
-msgstr "Gratulálunk!"
-
-msgid "student_fo_secondary"
-msgstr ""
-"Megkaptad az <b>első tiszt</b> (FO) rangot.\n\n"
-"Ha az OK-ra kattintasz, a járatválasztó oldalra kerülsz, "
-"ahonnan teljesítheted az első igazi MAVA járatodat!"
-
-msgid "chkfinish_title"
-msgstr "Az ellenőrző repülés vége"
-
-msgid "chkfinish_passed_begin"
-msgstr ""
-"<b><span size=\"xx-large\">Gratulálunk!</span></b>\n"
-"\n"
-"Sikeresen teljesítetted az ellenőrző repülést."
-
-msgid "chkfinish_passed_fo"
-msgstr ""
-" \n\n"
-"A rangod <b>első tiszt</b> (FO) lett."
-
-msgid "chkfinish_passed_end"
-msgstr ""
-" \n\n"
-"Ha kívánod, a naplóban megnézheted, hogy vétettél-e valamilyen hibát."
-
-msgid "chkfinish_failed"
-msgstr ""
-"Sajnos az ellenőrző repülésed <b>sikertelen</b>.\n"
-"\n"
-"A naplóban megnézheted, milyen hibákat vétettel."
-
-msgid "chkfinish_savepirep"
-msgstr ""
-" \n\n"
-"Ha lennének további kérdéseid, a PIREP-et elmentheted, \n"
-"és elküldheted mentorodnak, hogy ő megnézhesse, és\n"
-"hasznos tanácsokkal szolgálhasson."
-
-msgid "chkfinish_next_student_begin"
-msgstr ""
-" \n\n"
-"Az <i>Előre</i> gomb visszavisz a <i>Jelölt</i> oldalra,"
-
-msgid "chkfinish_next_student_nothing"
-msgstr ""
-" \n"
-"ahol kezdeményezheted egy újabb ellenőrző repülés végrehajtását, "
-"vagy az elméleti vizsga letételét.."
-
-msgid "chkfinish_next_student_no_exam"
-msgstr ""
-" \n"
-"ahol kezdeményezheted az elméleti vizsga letételét."
-
-msgid "chkfinish_next_student_no_flight"
-msgstr ""
-" \n"
-"ahol egy újabb ellenőrző repülést kezdeményezhetsz."
-
-msgid "chkfinish_next"
-msgstr ""
-" \n\n"
-"Az <i>Előre</i> gombbal a járatválasztó oldara kerülsz,\n"
-"ahonnan elindíthatod első igazi MAVA járatod teljesítését!"
-
-msgid "chkfinish_updateweb_busy"
-msgstr "Az ellenőrző repülés státuszának frissítése..."
-
-msgid "chkfinish_passedset_failed"
-msgstr "Nem sikerült frissíteni az ellenőrző repülés státuszát"
-
-msgid "chkfinish_passedset_failed_title"
-msgstr "Frissítési hiba"
-
-msgid "chkfinish_passedset_failed_secondary"
-msgstr ""
-"Megpróbálhatod később, vagy elmentheted a PIREP-et, és "
-"elküldheted a mentorodnak, aki tesz róla, hogy elfogadják az "
-"ellenőrző repülésedet."
Index: sc/resetflight.sql
===================================================================
--- misc/resetflight.sql	(revision 783)
+++ 	(revision )
@@ -1,1 +1,0 @@
-UPDATE foglalasok SET jelentve=0, elfogadva=0, ellenor_id=0, repdate='0000-00-00', fltnum='', depap='', arrap='', flttype='', onoff=0, bt_dep='00:00:00', bt_arr='00:00:00', bt_dur='00:00:00', ft_dep='00:00:00', ft_arr='00:00:00', ft_dur='00:00:00', timecomm='', cargo=0, fuel=0, dep_rwy='', arr_rwy='', wea_dep='', wea_arr='', alt='', mod_alt='', sid='', star='', aprtype='', diff=0, kod='', comments='', insdate='0000-00-00', pirepcomment_id=0, acars_text='', flightdefect='', kritika='', flightrating=0, distance=0, tdrate='' WHERE ID=100098;
Index: src/mlx/const.py
===================================================================
--- src/mlx/const.py	(revision 782)
+++ src/mlx/const.py	(revision 748)
@@ -11,5 +11,5 @@
 
 ## The version of the program
-VERSION="0.38.1"
+VERSION="0.37.1"
 
 #-------------------------------------------------------------------------------
Index: src/mlx/fs.py
===================================================================
--- src/mlx/fs.py	(revision 765)
+++ src/mlx/fs.py	(revision 666)
@@ -212,6 +212,5 @@
     - n1[]: the N1 values of the turbine engines (array of floats
     of as many items as the number of engines, present only for aircraft with
-    turbines, for other aircraft it is None). If the aircraft has turbines, but
-    the N1 values cannot be read reliably, the array contains Nones.
+    turbines, for other aircraft it is None)
     - rpm[]: the RPM values of the piston engines (array of floats
     of as many items as the number of engines, present only for aircraft with
Index: src/mlx/fsuipc.py
===================================================================
--- src/mlx/fsuipc.py	(revision 780)
+++ src/mlx/fsuipc.py	(revision 749)
@@ -1387,4 +1387,7 @@
         state.gearsDown = data[self._monidx_noseGear]==16383
 
+        if state.gearControlDown!=state.gearsDown:
+            print "gearControl:", data[self._monidx_gearControl], ", noseGear:", data[self._monidx_noseGear]
+
         state.spoilersArmed = data[self._monidx_spoilersArmed]!=0
 
@@ -1846,7 +1849,4 @@
         state.gearsDown = state.gearControlDown
 
-        # Th N1 values cannot be read either
-        state.n1 = [None, None]
-
         return state
 
@@ -1897,6 +1897,5 @@
         return aircraft.type == const.AIRCRAFT_F70 and \
                (airPath.endswith("fokker70_2k4_v4.1.air") or
-                airPath.endswith("fokker70_2k4_v4.3.air") or
-                airPath.lower().endswith("fokker70_fsx_v4.3.air"))
+                airPath.endswith("fokker70_2k4_v4.3.air"))
 
     @property
Index: src/mlx/gui/delaycodes.py
===================================================================
--- src/mlx/gui/delaycodes.py	(revision 768)
+++ src/mlx/gui/delaycodes.py	(revision 555)
@@ -375,6 +375,5 @@
         for column in columns:
             self._treeView.remove_column(column)
-        if self._table is not None:
-            self._eventBox.remove(self._table)
+        self._eventBox.remove(self._table)
         self._table = None
         self.show_all()
Index: src/mlx/gui/flight.py
===================================================================
--- src/mlx/gui/flight.py	(revision 777)
+++ src/mlx/gui/flight.py	(revision 739)
@@ -11,5 +11,5 @@
 import mlx.util as util
 from mlx.pirep import PIREP
-from mlx.i18n import xstr, getLanguage
+from mlx.i18n import xstr
 from mlx.sound import startSound
 import mlx.web as web
@@ -20,6 +20,4 @@
 import tempfile
 import threading
-import re
-import webbrowser
 
 #-----------------------------------------------------------------------------
@@ -63,5 +61,5 @@
 class Page(gtk.Alignment):
     """A page in the flight wizard."""
-    def __init__(self, wizard, id, title, help, completedHelp = None):
+    def __init__(self, wizard, title, help, completedHelp = None):
         """Construct the page."""
         super(Page, self).__init__(xalign = 0.0, yalign = 0.0,
@@ -141,6 +139,4 @@
 
         self._wizard = wizard
-        self._id = id
-        self._nextPageID = None
 
         self._cancelFlightButton = None
@@ -148,19 +144,4 @@
         self._completed = False
         self._fromPage = None
-
-    @property
-    def id(self):
-        """Get the identifier of the page."""
-        return self._id
-
-    @property
-    def nextPageID(self):
-        """Get the identifier of the next page, if set."""
-        return self._nextPageID
-
-    @nextPageID.setter
-    def nextPageID(self, nextPageID):
-        """Set the identifier of the next page."""
-        self._nextPageID = nextPageID
 
     def setMainWidget(self, widget):
@@ -169,6 +150,5 @@
 
     def addButton(self, label, default = False, sensitive = True,
-                  tooltip = None, clicked = None, padding = 4,
-                  clickedArg = None):
+                  tooltip = None, clicked = None, padding = 4):
         """Add a button with the given label.
 
@@ -184,8 +164,5 @@
             button.set_tooltip_text(tooltip)
         if clicked is not None:
-            if clickedArg is None:
-                button.connect("clicked", clicked)
-            else:
-                button.connect("clicked", clicked, clickedArg)
+            button.connect("clicked", clicked)
         return button
 
@@ -300,11 +277,11 @@
     def __init__(self, wizard):
         """Construct the login page."""
-        super(LoginPage, self).__init__(wizard, "login",
-                                        xstr("login"), xstr("loginHelp"))
+        super(LoginPage, self).__init__(wizard, xstr("login"),
+                                        xstr("loginHelp"))
 
         alignment = gtk.Alignment(xalign = 0.5, yalign = 0.5,
                                   xscale = 0.0, yscale = 0.0)
 
-        table = gtk.Table(3, 2)
+        table = gtk.Table(4, 2)
         table.set_row_spacings(4)
         table.set_col_spacings(32)
@@ -344,7 +321,9 @@
         table.attach(self._rememberButton, 1, 2, 2, 3, ypadding = 8)
 
-        self.addButton(xstr("button_login_register"),
-                       clicked = self._registerClicked,
-                       tooltip = xstr("button_login_register_tooltip"))
+        self._entranceExam = gtk.CheckButton(xstr("login_entranceExam"))
+        self._entranceExam.set_use_underline(True)
+        self._entranceExam.set_tooltip_text(xstr("login_entranceExam_tooltip"))
+        self._entranceExam.connect("toggled", self._setControls)
+        table.attach(self._entranceExam, 1, 2, 3, 4, ypadding = 12)
 
         self.addButton(xstr("button_offline"),
@@ -356,4 +335,10 @@
         self._loginButton.set_tooltip_text(xstr("login_button_tooltip"))
 
+
+    @property
+    def entranceExam(self):
+        """Get whether an entrance exam is being performed."""
+        return self._entranceExam.get_active() and \
+               self._pilotID.get_text()!=""
 
     @property
@@ -394,10 +379,10 @@
         pilotID = self._pilotID.get_text()
         password = self._password.get_text()
-        self._rememberButton.set_sensitive(password!="")
-        self._loginButton.set_sensitive(pilotID!="" and password!="")
-
-    def _registerClicked(self, button):
-        """Called when the Register button was clicked."""
-        self._wizard.jumpPage("register")
+        entranceExam = self._entranceExam.get_active()
+        self._password.set_sensitive(not entranceExam)
+        self._rememberButton.set_sensitive(password!="" and not entranceExam)
+        self._entranceExam.set_sensitive(pilotID!="")
+        self._loginButton.set_sensitive(pilotID!="" and
+                                        (password!="" or entranceExam))
 
     def _offlineClicked(self, button):
@@ -411,5 +396,6 @@
         self._wizard.login(self._handleLoginResult,
                            self._pilotID.get_text(),
-                           self._password.get_text())
+                           self._password.get_text(),
+                           self.entranceExam)
 
     def _handleLoginResult(self, returned, result):
@@ -427,8 +413,5 @@
 
             config.save()
-            if result.rank=="STU":
-                self._wizard.jumpPage("student")
-            else:
-                self._wizard.nextPage()
+            self._wizard.nextPage()
 
 #-----------------------------------------------------------------------------
@@ -440,6 +423,5 @@
         help = xstr("flightsel_help")
         completedHelp = xstr("flightsel_chelp")
-        super(FlightSelectionPage, self).__init__(wizard, "flightsel",
-                                                  xstr("flightsel_title"),
+        super(FlightSelectionPage, self).__init__(wizard, xstr("flightsel_title"),
                                                   help, completedHelp = completedHelp)
 
@@ -621,5 +603,5 @@
         """Called when the forward button was clicked."""
         if self._completed:
-            self._wizard.jumpPage(self._nextID, finalize = False)
+            self._wizard.jumpPage(self._nextDistance, finalize = False)
         else:
             self._flightSelected()
@@ -676,30 +658,30 @@
                                          const.PLANE_AWAY)
         else:
-            self._nextID = "connect"
-            self._wizard.jumpPage("connect")
+            self._nextDistance = 2
+            self._wizard.jumpPage(2)
 
     def _fleetRetrieved(self, fleet):
         """Called when the fleet has been retrieved."""
         if fleet is None:
-            self._nextID = "connect"
-            self._wizard.jumpPage("connect")
+            self._nextDistance = 2
+            self._wizard.jumpPage(2)
         else:
             plane = fleet[self._wizard._bookedFlight.tailNumber]
             if plane is None:
-                self._nextID = "connect"
-                self._wizard.jumpPage("connect")
+                self._nextDistance = 2
+                self._wizard.jumpPage(2)
             elif plane.gateNumber is not None and \
                  not fleet.isGateConflicting(plane):
                 self._wizard._departureGate = plane.gateNumber
-                self._nextID = "connect"
-                self._wizard.jumpPage("connect")
+                self._nextDistance = 2
+                self._wizard.jumpPage(2)
             else:
-                self._nextID = "gatesel"
-                self._wizard.jumpPage("gatesel")
+                self._nextDistance = 1
+                self._wizard.nextPage()
 
     def _planeUpdated(self, success):
         """Callback for the plane updating."""
-        self._nextID = "connect"
-        self._wizard.jumpPage("connect")
+        self._nextDistance = 2
+        self._wizard.jumpPage(2)
 
     def _getSaveDialog(self):
@@ -804,6 +786,5 @@
     def __init__(self, wizard):
         """Construct the gate selection page."""
-        super(GateSelectionPage, self).__init__(wizard, "gatesel",
-                                                xstr("gatesel_title"),
+        super(GateSelectionPage, self).__init__(wizard, xstr("gatesel_title"),
                                                 xstr("gatesel_help"))
 
@@ -868,5 +849,5 @@
             self._gateSelected()
         else:
-            self._wizard.jumpPage("connect")
+            self._wizard.nextPage()
 
     def _rowActivated(self, flightList, path, column):
@@ -890,5 +871,5 @@
         """Callback for the plane updating call."""
         if success is None or success:
-            self._wizard.jumpPage("connect")
+            self._wizard.nextPage()
         else:
             dialog = gtk.MessageDialog(parent = self._wizard.gui.mainWindow,
@@ -906,673 +887,7 @@
         """Called when the fleet has been retrieved."""
         if fleet is None:
-            self._wizard.jumpPage("connect")
+            self._wizard.nextPage()
         else:
             self.activate()
-
-#-----------------------------------------------------------------------------
-
-class RegisterPage(Page):
-    """A page to enter the registration data."""
-
-    # The minimal year of birth
-    _minYearOfBirth = 1900
-
-    # The maximal year of birth
-    _maxYearOfBirth = datetime.date.today().year
-
-    # The regular expression to check the e-mail address with
-    _emailAddressRE = re.compile("[^@]+@[^@]+\.[^@]+")
-
-    def __init__(self, wizard):
-        """Construct the registration page."""
-        super(RegisterPage, self).__init__(wizard, "register",
-                                           xstr("register_title"),
-                                           xstr("register_help"))
-
-        alignment = gtk.Alignment(xalign = 0.5, yalign = 0.5,
-                                  xscale = 0.0, yscale = 0.0)
-
-        table = gtk.Table(12, 3)
-        table.set_row_spacings(4)
-        table.set_col_spacings(32)
-        alignment.add(table)
-        self.setMainWidget(alignment)
-
-        row = 0
-
-        labelAlignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
-                                       xscale = 0.0, yscale = 0.0)
-        label = gtk.Label(xstr("register_name1"))
-        label.set_use_underline(True)
-        labelAlignment.add(label)
-        table.attach(labelAlignment, 0, 1, row, row+1)
-
-        self._name1 = gtk.Entry()
-        self._name1.connect("changed", self._updateButtons)
-        self._name1.set_tooltip_text(xstr("register_name1_tooltip"))
-        self._name1.set_width_chars(15)
-        table.attach(self._name1, 1, 2, row, row+1)
-        label.set_mnemonic_widget(self._name1)
-
-        row += 1
-
-        labelAlignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
-                                       xscale = 0.0, yscale = 0.0)
-        label = gtk.Label(xstr("register_name2"))
-        label.set_use_underline(True)
-        labelAlignment.add(label)
-        table.attach(labelAlignment, 0, 1, row, row+1)
-
-        self._name2 = gtk.Entry()
-        self._name2.connect("changed", self._updateButtons)
-        self._name2.set_tooltip_text(xstr("register_name2_tooltip"))
-        self._name2.set_width_chars(15)
-        table.attach(self._name2, 1, 2, row, row+1)
-        label.set_mnemonic_widget(self._name2)
-
-        row += 1
-
-        labelAlignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
-                                       xscale = 0.0, yscale = 0.0)
-        label = gtk.Label(xstr("register_year_of_birth"))
-        label.set_use_underline(True)
-        labelAlignment.add(label)
-        table.attach(labelAlignment, 0, 1, row, row+1)
-
-        alignment = gtk.Alignment(xalign = 0.0, yalign = 0.0,
-                                  xscale = 0.0, yscale = 0.0)
-
-        self._yearOfBirth = gtk.SpinButton()
-        self._yearOfBirth.set_increments(step = 1, page = 10)
-        self._yearOfBirth.set_range(min = RegisterPage._minYearOfBirth,
-                                    max = RegisterPage._maxYearOfBirth)
-        self._yearOfBirth.set_numeric(True)
-        self._yearOfBirth.set_tooltip_text(xstr("register_year_of_birth_tooltip"))
-        self._yearOfBirth.set_width_chars(5)
-        self._yearOfBirth.connect("changed", self._updateButtons)
-        self._yearOfBirth.connect("value-changed", self._updateButtons)
-        alignment.add(self._yearOfBirth)
-        table.attach(alignment, 1, 2, row, row+1)
-        label.set_mnemonic_widget(self._yearOfBirth)
-
-        row += 1
-
-        labelAlignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
-                                       xscale = 0.0, yscale = 0.0)
-        label = gtk.Label(xstr("register_email"))
-        label.set_use_underline(True)
-        labelAlignment.add(label)
-        table.attach(labelAlignment, 0, 1, row, row+1)
-
-        self._emailAddress = gtk.Entry()
-        self._emailAddress.connect("changed", self._updateButtons)
-        self._emailAddress.set_tooltip_text(xstr("register_email_tooltip"))
-        table.attach(self._emailAddress, 1, 2, row, row+1)
-        label.set_mnemonic_widget(self._emailAddress)
-
-        self._emailAddressPublic = gtk.CheckButton(xstr("register_email_public"))
-        self._emailAddressPublic.set_use_underline(True)
-        self._emailAddressPublic.set_tooltip_text(xstr("register_email_public_tooltip"))
-        table.attach(self._emailAddressPublic, 2, 3, row, row+1)
-
-        row += 1
-
-        labelAlignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
-                                       xscale = 0.0, yscale = 0.0)
-        label = gtk.Label(xstr("register_vatsim_id"))
-        label.set_use_underline(True)
-        labelAlignment.add(label)
-        table.attach(labelAlignment, 0, 1, row, row+1)
-
-        alignment = gtk.Alignment(xalign = 0.0, yalign = 0.0,
-                                  xscale = 0.0, yscale = 0.0)
-        self._vatsimID = IntegerEntry()
-        self._vatsimID.connect("changed", self._updateButtons)
-        self._vatsimID.set_tooltip_text(xstr("register_vatsim_id_tooltip"))
-        self._vatsimID.set_width_chars(7)
-        alignment.add(self._vatsimID)
-        table.attach(alignment, 1, 2, row, row+1)
-        label.set_mnemonic_widget(self._vatsimID)
-
-        row += 1
-
-        labelAlignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
-                                       xscale = 0.0, yscale = 0.0)
-        label = gtk.Label(xstr("register_ivao_id"))
-        label.set_use_underline(True)
-        labelAlignment.add(label)
-        table.attach(labelAlignment, 0, 1, row, row+1)
-
-        alignment = gtk.Alignment(xalign = 0.0, yalign = 0.0,
-                                  xscale = 0.0, yscale = 0.0)
-        self._ivaoID = IntegerEntry()
-        self._ivaoID.connect("changed", self._updateButtons)
-        self._ivaoID.set_tooltip_text(xstr("register_ivao_id_tooltip"))
-        self._ivaoID.set_width_chars(7)
-        alignment.add(self._ivaoID)
-        table.attach(alignment, 1, 2, row, row+1)
-        label.set_mnemonic_widget(self._ivaoID)
-
-        row += 1
-
-        labelAlignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
-                                       xscale = 0.0, yscale = 0.0)
-        label = gtk.Label(xstr("register_phone_num"))
-        label.set_use_underline(True)
-        label.set_use_markup(True)
-        labelAlignment.add(label)
-        table.attach(labelAlignment, 0, 1, row, row+1)
-
-        self._phoneNumber = gtk.Entry()
-        self._phoneNumber.set_tooltip_text(xstr("register_phone_num_tooltip"))
-        table.attach(self._phoneNumber, 1, 2, row, row+1)
-        label.set_mnemonic_widget(self._phoneNumber)
-
-        row += 1
-
-        labelAlignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
-                                       xscale = 0.0, yscale = 0.0)
-        label = gtk.Label(xstr("register_nationality"))
-        label.set_use_underline(True)
-        label.set_use_markup(True)
-        labelAlignment.add(label)
-        table.attach(labelAlignment, 0, 1, row, row+1)
-
-
-        self._nationality = gtk.Entry()
-        self._nationality.set_tooltip_text(xstr("register_nationality_tooltip"))
-        table.attach(self._nationality, 1, 2, row, row+1)
-        label.set_mnemonic_widget(self._nationality)
-
-        placeholder = gtk.Label()
-        placeholder.set_text(xstr("register_password_mismatch"))
-        placeholder.set_use_markup(True)
-        placeholder.set_child_visible(False)
-        placeholder.hide()
-        table.attach(placeholder, 2, 3, row, row+1)
-
-        row += 1
-
-        labelAlignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
-                                       xscale = 0.0, yscale = 0.0)
-        label = gtk.Label(xstr("register_password"))
-        label.set_use_underline(True)
-        labelAlignment.add(label)
-        table.attach(labelAlignment, 0, 1, row, row+1)
-
-        self._password = gtk.Entry()
-        self._password.set_visibility(False)
-        self._password.connect("changed", self._updateButtons)
-        self._password.set_tooltip_text(xstr("register_password_tooltip"))
-        table.attach(self._password, 1, 2, row, row+1)
-        label.set_mnemonic_widget(self._password)
-
-        alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5,
-                                  xscale = 0.0, yscale = 0.0)
-        self._passwordStatus = gtk.Label()
-        alignment.add(self._passwordStatus)
-        table.attach(alignment, 2, 3, row, row+1)
-
-        row += 1
-
-        labelAlignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
-                                       xscale = 0.0, yscale = 0.0)
-        label = gtk.Label(xstr("register_password2"))
-        label.set_use_underline(True)
-        labelAlignment.add(label)
-        table.attach(labelAlignment, 0, 1, row, row+1)
-
-        self._password2 = gtk.Entry()
-        self._password2.set_visibility(False)
-        self._password2.connect("changed", self._updateButtons)
-        self._password2.set_tooltip_text(xstr("register_password2_tooltip"))
-        table.attach(self._password2, 1, 2, row, row+1)
-        label.set_mnemonic_widget(self._password2)
-
-        alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5,
-                                  xscale = 0.0, yscale = 0.0)
-        self._password2Status = gtk.Label()
-        alignment.add(self._password2Status)
-        table.attach(alignment, 2, 3, row, row+1)
-
-        row += 1
-
-        self._rememberButton = gtk.CheckButton(xstr("remember_password"))
-        self._rememberButton.set_use_underline(True)
-        self._rememberButton.set_tooltip_text(xstr("login_remember_tooltip"))
-        table.attach(self._rememberButton, 1, 2, row, row+1)
-
-        cancelButton = \
-          self.addButton(xstr("button_cancel"))
-        cancelButton.connect("clicked", self._cancelClicked)
-
-        self._registerButton = \
-          self.addButton(xstr("button_register"), default = True,
-                              tooltip = xstr("button_register_tooltip"))
-        self._registerButton.connect("clicked", self._registerClicked)
-
-        self._updateButtons()
-
-    @property
-    def name1(self):
-        """Get the first name component entered."""
-        return self._name1.get_text()
-
-    @property
-    def name2(self):
-        """Get the second name component entered."""
-        return self._name2.get_text()
-
-    @property
-    def yearOfBirth(self):
-        """Get the year of birth."""
-        yearOfBirthText = self._yearOfBirth.get_text()
-        return int(yearOfBirthText) if yearOfBirthText else 0
-
-    @property
-    def emailAddress(self):
-        """Get the e-mail address."""
-        return self._emailAddress.get_text()
-
-    @property
-    def emailAddressPublic(self):
-        """Get the whether the e-mail address is public."""
-        return self._emailAddressPublic.get_active()
-
-    @property
-    def vatsimID(self):
-        """Get the VATSIM ID."""
-        return self._vatsimID.get_int()
-
-    @property
-    def ivaoID(self):
-        """Get the IVAO ID."""
-        return self._ivaoID.get_int()
-
-    @property
-    def phoneNumber(self):
-        """Get the phone number."""
-        return self._phoneNumber.get_text()
-
-    @property
-    def nationality(self):
-        """Get the nationality."""
-        return self._nationality.get_text()
-
-    @property
-    def password(self):
-        """Get the password."""
-        return self._password.get_text()
-
-    @property
-    def rememberPassword(self):
-        """Get whether the password should be remembered."""
-        return self._rememberButton.get_active()
-
-    def activate(self):
-        """Setup the route from the booked flight."""
-        self._yearOfBirth.set_value(0)
-        self._yearOfBirth.set_text("")
-        self._updateButtons()
-
-    def _updateButtons(self, widget = None):
-        """Update the sensitive state of the buttons"""
-        yearOfBirth = self.yearOfBirth
-
-        emailAddress = self.emailAddress
-        emailAddressMatch = RegisterPage._emailAddressRE.match(emailAddress)
-
-        vatsimID = self.vatsimID
-        ivaoID = self.ivaoID
-
-        password = self.password
-        password2 = self._password2.get_text()
-        if not password:
-            self._passwordStatus.set_text("")
-        elif len(password)<5:
-            self._passwordStatus.set_text(xstr("register_password_too_short"))
-        else:
-            self._passwordStatus.set_text(xstr("register_password_ok"))
-        self._passwordStatus.set_use_markup(True)
-
-        if len(password)<5 or not password2:
-            self._password2Status.set_text("")
-        elif password!=password2:
-            self._password2Status.set_text(xstr("register_password_mismatch"))
-        else:
-            self._password2Status.set_text(xstr("register_password_ok"))
-        self._password2Status.set_use_markup(True)
-
-        sensitive = \
-            len(self.name1)>0 and len(self.name2)>0 and \
-            yearOfBirth>=RegisterPage._minYearOfBirth and \
-            yearOfBirth<=RegisterPage._maxYearOfBirth and \
-            emailAddressMatch is not None and \
-            (vatsimID>=800000 or ivaoID>=100000) and \
-            len(password)>=5 and password==password2
-
-        self._registerButton.set_sensitive(sensitive)
-
-    def _cancelClicked(self, button):
-        """Called when the Cancel button is clicked."""
-        self.goBack()
-
-    def _registerClicked(self, button):
-        """Called when the Register button is clicked."""
-        nameOrder = xstr("register_nameorder")
-
-        if nameOrder=="eastern":
-            surName = self.name1
-            firstName = self.name2
-        else:
-            surName = self.name2
-            firstName = self.name1
-
-        nationality = self.nationality.lower()
-
-        if getLanguage().lower()=="hu" or nationality.find("hung")!=-1 or \
-           nationality.find("magyar")!=-1:
-            requestedNameOrder = "eastern"
-        else:
-            requestedNameOrder = "western"
-
-        registrationData = web.Registration(surName, firstName,
-                                            requestedNameOrder,
-                                            self.yearOfBirth,
-                                            self.emailAddress,
-                                            self.emailAddressPublic,
-                                            self.vatsimID, self.ivaoID,
-                                            self.phoneNumber, self.nationality,
-                                            self.password)
-        print "Registering with data:"
-        print "  name:", self.name1, self.name2, registrationData.firstName, registrationData.surName, requestedNameOrder
-        print "  yearOfBirth:", self.yearOfBirth, registrationData.yearOfBirth
-        print "  emailAddress:", self.emailAddress, registrationData.emailAddress
-        print "  emailAddressPublic:", self.emailAddressPublic, registrationData.emailAddressPublic
-        print "  vatsimID:", self.vatsimID, registrationData.vatsimID
-        print "  ivaoID:", self.ivaoID, registrationData.ivaoID
-        print "  phoneNumber:", self.phoneNumber, registrationData.phoneNumber
-        print "  nationality:", self.nationality, registrationData.nationality
-
-        gui = self._wizard.gui
-        gui.beginBusy(xstr("register_busy"))
-        gui.webHandler.register(self._registerResultCallback, registrationData)
-
-    def _registerResultCallback(self, returned, result):
-        """Called when the registration result is available."""
-        gobject.idle_add(self._handleRegisterResult, returned, result)
-
-    def _handleRegisterResult(self, returned, result):
-        """Handle the registration result."""
-        gui = self._wizard.gui
-
-        gui.endBusy()
-
-        print "Registration result:"
-        print "  returned:", returned
-        if returned:
-            print "  registered:", result.registered
-            if result.registered:
-                print "  pilotID", result.pilotID
-                print "  loggedIn", result.loggedIn
-            print "  emailAlreadyRegistered:", result.emailAlreadyRegistered
-            print "  invalidData:", result.invalidData
-
-        registrationOK = returned and result.registered
-
-        message = xstr("register_ok") if registrationOK \
-                  else xstr("register_failed")
-        secondaryMessage = None
-        if registrationOK:
-            if result.loggedIn:
-                secondaryMessage = xstr("register_info") % (result.pilotID,)
-            else:
-                secondaryMessage = xstr("register_nologin") % (result.pilotID,)
-            messageType = MESSAGETYPE_INFO
-
-            config = gui.config
-            config.pilotID = result.pilotID
-            config.rememberPassword = self.rememberPassword
-            if config.rememberPassword:
-                config.password = self.password
-            else:
-                config.password = ""
-
-            config.save()
-        elif returned and result.emailAlreadyRegistered:
-            secondaryMessage = xstr("register_email_already")
-            messageType = MESSAGETYPE_ERROR
-        elif returned and result.invalidData:
-            secondaryMessage = xstr("register_invalid_data")
-            messageType = MESSAGETYPE_ERROR
-        else:
-            secondaryMessage = xstr("register_error")
-            messageType = MESSAGETYPE_ERROR
-
-        dialog = gtk.MessageDialog(parent = gui.mainWindow,
-                                   type = messageType,
-                                   message_format = message)
-        dialog.set_title(WINDOW_TITLE_BASE + " - " +
-                         xstr("register_result_title"))
-        dialog.format_secondary_markup(secondaryMessage)
-
-        dialog.add_button(xstr("button_ok"), 0)
-
-        dialog.run()
-        dialog.hide()
-
-        if registrationOK:
-            if result.loggedIn:
-                self._wizard._loginResult = result
-                self._wizard.nextPage()
-            else:
-                self._wizard.jumpPage("login")
-
-#-----------------------------------------------------------------------------
-
-class StudentPage(Page):
-    """A page displayed to students after logging in."""
-    _entryExamStatusQueryInterval = 60*1000
-
-    def __init__(self, wizard):
-        """Construct the student page."""
-        super(StudentPage, self).__init__(wizard, "student",
-                                          xstr("student_title"),
-                                          xstr("student_help"))
-
-
-        self._getEntryExamStatusCancelled = False
-
-        alignment = gtk.Alignment(xalign = 0.5, yalign = 0.5,
-                                  xscale = 0.5, yscale = 0.0)
-
-        table = gtk.Table(6, 4)
-        table.set_row_spacings(4)
-        table.set_col_spacings(0)
-        table.set_homogeneous(False)
-        alignment.add(table)
-        self.setMainWidget(alignment)
-
-        row = 0
-
-        labelAlignment = gtk.Alignment(xalign=0.0, yalign = 0.5,
-                                       xscale=0.0, yscale = 0.0)
-        label = gtk.Label(xstr("student_entry_exam_status"))
-        label.set_alignment(0.0, 0.5)
-        labelAlignment.add(label)
-        labelAlignment.resize_children()
-        table.attach(labelAlignment, 0, 1, row, row + 1, xoptions = FILL)
-
-        alignment = gtk.Alignment(xalign=0.0, yalign = 0.5,
-                                  xscale=1.0, yscale = 0.0)
-        self._entryExamStatus = gtk.Label()
-        self._entryExamStatus.set_use_markup(True)
-        self._entryExamStatus.set_alignment(0.0, 0.5)
-        alignment.add(self._entryExamStatus)
-        alignment.resize_children()
-        table.attach(alignment, 1, 4, row, row + 1)
-
-        row += 1
-
-        buttonAlignment = gtk.Alignment(xalign=0.0, xscale=1.0)
-        button = self._entryExamButton = gtk.Button(xstr("student_entry_exam"))
-        button.set_use_underline(True)
-        button.connect("clicked", self._entryExamClicked)
-        button.set_tooltip_text(xstr("student_entry_exam_tooltip"))
-
-        buttonAlignment.add(button)
-        table.attach(buttonAlignment, 0, 4, row, row + 1, xoptions = FILL,
-                     ypadding = 4)
-
-        row += 3
-
-        labelAlignment = gtk.Alignment(xalign=0.0, yalign = 0.5,
-                                       xscale=0.0, yscale = 0.0)
-        label = gtk.Label(xstr("student_check_flight_status"))
-        labelAlignment.add(label)
-        table.attach(labelAlignment, 0, 1, row, row + 1, xoptions = FILL)
-
-        alignment = gtk.Alignment(xalign=0.0, yalign = 0.5,
-                                  xscale=1.0, yscale = 0.0)
-        self._checkFlightStatus = gtk.Label()
-        self._checkFlightStatus.set_use_markup(True)
-        self._checkFlightStatus.set_alignment(0.0, 0.5)
-        alignment.add(self._checkFlightStatus)
-        table.attach(alignment, 1, 4, row, row + 1)
-
-        row += 1
-
-        alignment = gtk.Alignment(xalign=0.0, xscale=1.0)
-
-        hbox = gtk.HBox()
-        hbox.set_homogeneous(False)
-        hbox.set_spacing(0)
-
-        aircraftTypesModel = gtk.ListStore(str, int)
-        for aircraftType in web.BookedFlight.checkFlightTypes:
-            aircraftTypesModel.append([aircraftNames[aircraftType],
-                                       aircraftType])
-
-        aircraftTypeAlignment = gtk.Alignment(xalign = 0.0, xscale = 1.0)
-
-        self._aircraftType = gtk.ComboBox(model = aircraftTypesModel)
-        renderer = gtk.CellRendererText()
-        self._aircraftType.pack_start(renderer, True)
-        self._aircraftType.add_attribute(renderer, "text", 0)
-        self._aircraftType.set_tooltip_text(xstr("student_check_flight_type_tooltip"))
-        self._aircraftType.set_active(0)
-
-        aircraftTypeAlignment.add(self._aircraftType)
-
-        hbox.pack_start(aircraftTypeAlignment, False, False, 0)
-
-        buttonAlignment = gtk.Alignment(xalign=0.0, xscale=1.0)
-        button = self._checkFlightButton = gtk.Button(xstr("student_check_flight"))
-        button.set_use_underline(True)
-        button.connect("clicked", self._checkFlightClicked)
-        button.set_tooltip_text(xstr("student_check_flight_tooltip"))
-
-        hbox.pack_start(button, True, True, 0)
-
-        alignment.add(hbox)
-        table.attach(alignment, 0, 4, row, row + 1, xoptions = FILL)
-
-    @property
-    def aircraftType(self):
-        """Get the type of the aircraft used to perform the check flight."""
-        index = self._aircraftType.get_active()
-        return self._aircraftType.get_model()[index][1]
-
-    def activate(self):
-        """Activate the student page."""
-        print "StudentPage.activate"
-        self._getEntryExamStatusCancelled = False
-
-        loginResult = self._wizard.loginResult
-        self._entryExamLink = loginResult.entryExamLink
-
-        self._updateEntryExamStatus(loginResult.entryExamPassed)
-        self._getEntryExamStatus()
-
-        # FIXME: call with real value
-        self._updateCheckFlightStatus(self._wizard.loginResult.checkFlightStatus)
-
-    def finalize(self):
-        """Finalize the page."""
-        print "StudentPage.finalize"
-        self._getEntryExamStatusCancelled = True
-
-    def _entryExamClicked(self, button):
-        """Called when the entry exam button is clicked."""
-        webbrowser.open(self._entryExamLink)
-
-    def _getEntryExamStatus(self):
-        """Initiate the query of the entry exam status after the interval."""
-        if not self._getEntryExamStatusCancelled:
-            gobject.timeout_add(StudentPage._entryExamStatusQueryInterval,
-                                lambda: self._wizard.gui.webHandler. \
-                                getEntryExamStatus(self._entryExamStatusCallback))
-
-    def _entryExamStatusCallback(self, returned, result):
-        """Called when the entry exam status is available."""
-        gobject.idle_add(self._handleEntryExamStatus, returned, result)
-
-    def _handleEntryExamStatus(self, returned, result):
-        """Called when the entry exam status is availabe."""
-        print "_handleEntryExamStatus", returned, result
-        if returned and not self._getEntryExamStatusCancelled:
-            self._entryExamLink = result.entryExamLink
-            self._updateEntryExamStatus(result.entryExamPassed)
-            if result.madeFO:
-                self._madeFO()
-            else:
-                self._getEntryExamStatus()
-
-    def _updateEntryExamStatus(self, passed):
-        """Update the entry exam status display and button."""
-        self._entryExamStatus.set_text(xstr("student_entry_exam_passed")
-                                       if passed else
-                                       xstr("student_entry_exam_not_passed"))
-        self._entryExamStatus.set_use_markup(True)
-        self._entryExamButton.set_sensitive(not passed)
-        self._wizard._loginResult.entryExamPassed = passed
-
-    def _checkFlightClicked(self, button):
-        """Called when the check flight button is clicked."""
-        aircraftType = self.aircraftType
-        self._wizard._bookedFlight = \
-            web.BookedFlight.forCheckFlight(aircraftType)
-        self._wizard.gui.enableFlightInfo(aircraftType)
-        self._wizard.jumpPage("connect")
-
-    def _updateCheckFlightStatus(self, passed):
-        """Update the status of the check flight."""
-        self._aircraftType.set_sensitive(not passed)
-        self._checkFlightStatus.set_text(xstr("student_check_flight_passed")
-                                         if passed else
-                                         xstr("student_check_flight_not_passed"))
-        self._checkFlightStatus.set_use_markup(True)
-        self._checkFlightButton.set_sensitive(not passed)
-
-    def _madeFO(self):
-        """Handle the event when the pilot has become a first officer."""
-        wizard = self._wizard
-        loginResult = wizard.loginResult
-        loginResult.rank = "FO"
-
-        gui = wizard.gui
-
-        dialog = gtk.MessageDialog(parent = gui.mainWindow,
-                                   type = MESSAGETYPE_INFO,
-                                   message_format = xstr("student_fo"))
-
-        dialog.add_button(xstr("button_ok"), RESPONSETYPE_OK)
-        dialog.set_title(WINDOW_TITLE_BASE)
-        secondary = xstr("student_fo_secondary")
-        dialog.format_secondary_markup(secondary)
-        dialog.run()
-        dialog.hide()
-
-        gui.reset()
 
 #-----------------------------------------------------------------------------
@@ -1586,6 +901,5 @@
                "Then press the Connect button to connect to the simulator."
         completedHelp = "The basic data of your flight can be read below."
-        super(ConnectPage, self).__init__(wizard, "connect",
-                                          xstr("connect_title"),
+        super(ConnectPage, self).__init__(wizard, xstr("connect_title"),
                                           xstr("connect_help"),
                                           completedHelp = xstr("connect_chelp"))
@@ -1698,6 +1012,5 @@
         self.addCancelFlightButton()
 
-        self._previousButton = \
-          self.addPreviousButton(clicked = self._backClicked)
+        self.addPreviousButton(clicked = self._backClicked)
 
         self._button = self.addButton(xstr("button_connect"), default = True,
@@ -1733,6 +1046,4 @@
             self._selectMSFS.set_active(config.defaultMSFS)
             self._selectXPlane.set_active(not config.defaultMSFS)
-
-        self._previousButton.set_sensitive(not self._wizard.entranceExam)
 
     def finalize(self):
@@ -1773,6 +1084,5 @@
     def __init__(self, wizard):
         """Construct the page."""
-        super(PayloadPage, self).__init__(wizard, "payload",
-                                          xstr("payload_title"),
+        super(PayloadPage, self).__init__(wizard, xstr("payload_title"),
                                           xstr("payload_help"),
                                           completedHelp = xstr("payload_chelp"))
@@ -2001,6 +1311,5 @@
     current time from the flight simulator."""
     def __init__(self, wizard):
-        super(TimePage, self).__init__(wizard, "time",
-                                       xstr("time_title"),
+        super(TimePage, self).__init__(wizard, xstr("time_title"),
                                        xstr("time_help"),
                                        completedHelp = xstr("time_chelp"))
@@ -2123,6 +1432,5 @@
     def __init__(self, wizard):
         """Construct the page."""
-        super(RoutePage, self).__init__(wizard, "route",
-                                        xstr("route_title"),
+        super(RoutePage, self).__init__(wizard, xstr("route_title"),
                                         xstr("route_help"),
                                         completedHelp = xstr("route_chelp"))
@@ -2251,5 +1559,5 @@
         alternate = self._alternate.get_text()
         self._button.set_sensitive(cruiseLevel>=50 and self._getRoute()!="" and
-                                   (len(alternate)==4 or self._wizard.entranceExam))
+                                   len(alternate)==4)
 
     def _cruiseLevelChanged(self, *arg):
@@ -2292,8 +1600,8 @@
         if self._wizard.gui.config.useSimBrief and \
            self._wizard.usingSimBrief is not False:
-            self._wizard.jumpPage("simbrief_setup")
+            self._wizard.nextPage()
         else:
             self._wizard.usingSimBrief = False
-            self._wizard.jumpPage("fuel")
+            self._wizard.jumpPage(3)
 
 #-----------------------------------------------------------------------------
@@ -2454,5 +1762,5 @@
         """Construct the setup page."""
 
-        super(SimBriefSetupPage, self).__init__(wizard, "simbrief_setup",
+        super(SimBriefSetupPage, self).__init__(wizard,
                                                 xstr("simbrief_setup_title"),
                                                 xstr("simbrief_setup_help"),
@@ -2773,5 +2081,5 @@
 
                 self._wizard.usingSimBrief = False
-                self._wizard.jumpPage("fuel", fromPageShift = 1)
+                self._wizard.jumpPage(2, fromPageShift = 1)
 
     def _getPlan(self):
@@ -2858,5 +2166,5 @@
         """Construct the setup page."""
 
-        super(SimBriefingPage, self).__init__(wizard, "simbrief_result",
+        super(SimBriefingPage, self).__init__(wizard,
                                               xstr("simbrief_result_title"), "")
 
@@ -3114,6 +2422,5 @@
     def __init__(self, wizard):
         """Construct the page."""
-        super(FuelPage, self).__init__(wizard, "fuel",
-                                       xstr("fuel_title"),
+        super(FuelPage, self).__init__(wizard, xstr("fuel_title"),
                                        xstr("fuel_help_pre") +
                                        xstr("fuel_help_post"),
@@ -3167,7 +2474,7 @@
             self._pump()
         elif self._wizard.usingSimBrief:
-            self._wizard.jumpPage("takeoff")
+            self._wizard.jumpPage(3)
         else:
-            self._wizard.jumpPage("briefing1")
+            self._wizard.nextPage()
 
     def _setupTanks(self, tankData):
@@ -3215,5 +2522,5 @@
             if self._wizard.usingSimBrief:
                 self._wizard.gui.startMonitoring()
-                self._wizard.jumpPage("takeoff")
+                self._wizard.jumpPage(3)
             else:
                 bookedFlight = self._wizard._bookedFlight
@@ -3284,13 +2591,9 @@
         self._departure = departure
 
-        number = 1 if departure else 2
-
-        title = xstr("briefing_title") % (number,
+        title = xstr("briefing_title") % (1 if departure else 2,
                                           xstr("briefing_departure")
                                           if departure
                                           else xstr("briefing_arrival"))
-        super(BriefingPage, self).__init__(wizard,
-                                           "briefing%d" % (number,),
-                                           title, xstr("briefing_help"),
+        super(BriefingPage, self).__init__(wizard, title, xstr("briefing_help"),
                                            completedHelp = xstr("briefing_chelp"))
 
@@ -3479,6 +2782,5 @@
     def __init__(self, wizard):
         """Construct the takeoff page."""
-        super(TakeoffPage, self).__init__(wizard, "takeoff",
-                                          xstr("takeoff_title"),
+        super(TakeoffPage, self).__init__(wizard, xstr("takeoff_title"),
                                           xstr("takeoff_help"),
                                           completedHelp = xstr("takeoff_chelp"))
@@ -3968,6 +3270,5 @@
     def __init__(self, wizard):
         """Construct the page."""
-        super(CruisePage, self).__init__(wizard, "cruise",
-                                         xstr("cruise_title"),
+        super(CruisePage, self).__init__(wizard, xstr("cruise_title"),
                                          xstr("cruise_help"))
 
@@ -4083,6 +3384,5 @@
     def __init__(self, wizard):
         """Construct the landing page."""
-        super(LandingPage, self).__init__(wizard, "landing",
-                                          xstr("landing_title"),
+        super(LandingPage, self).__init__(wizard, xstr("landing_title"),
                                           xstr("landing_help"),
                                           completedHelp = xstr("landing_chelp"))
@@ -4350,18 +3650,15 @@
     def _forwardClicked(self, button):
         """Called when the forward button is clicked."""
-        wizard = self._wizard
-
-        aircraft = wizard.gui.flight.aircraft
+        aircraft = self._wizard.gui.flight.aircraft
         aircraft.updateVRef()
         aircraft.updateLandingAntiIce()
-        if wizard.gui.config.onlineGateSystem and \
-           wizard.loggedIn and not self._completed and \
-           wizard.bookedFlight.arrivalICAO=="LHBP" and \
-           not wizard.entranceExam:
-            wizard.getFleet(callback = self._fleetRetrieved, force = True)
-        elif wizard.entranceExam:
-            self._handleEntranceExamDone()
+        if self._wizard.gui.config.onlineGateSystem and \
+           self._wizard.loggedIn and not self._completed and \
+           self._wizard.bookedFlight.arrivalICAO=="LHBP" and \
+           not self._wizard.entranceExam:
+            self._wizard.getFleet(callback = self._fleetRetrieved,
+                                  force = True)
         else:
-            wizard.nextPage()
+            self._wizard.nextPage()
 
     def _fleetRetrieved(self, fleet):
@@ -4389,144 +3686,4 @@
             self._updatingMETAR = False
 
-    def _handleEntranceExamDone(self):
-        """Handle the end of the entrance exam.
-
-        If the there was a NO-GO fault, notify the user that exam is a failure
-        and take them back to the student page. Otherwise congratulate, update
-        the database to reflect that the exam has been taken and go back to the
-        student page."""
-        self._wizard.jumpPage("chkfinish")
-
-#-----------------------------------------------------------------------------
-
-class PIREPSaveHelper(object):
-    """A helper to use for saving PIREPs."""
-    def __init__(self, wizard):
-        """Construct the helper."""
-        super(PIREPSaveHelper, self).__init__()
-
-        self._wizard = wizard
-
-        self._lastSavePath = None
-        self._savePIREPDialog = None
-
-    def addButton(self, page):
-        """Add a button to save the PIREP to the given page."""
-        return page.addButton(xstr("finish_save"), sensitive = False,
-                              clicked = self._saveClicked,
-                              tooltip = xstr("finish_save_tooltip"),
-                              clickedArg = page)
-
-    def autoSavePIREP(self, page):
-        """Perform the automatic saving of the PIREP."""
-        self._lastSavePath = os.path.join(self._wizard.gui.config.pirepDirectory,
-                                          self._getDefaultPIREPName())
-        self._lastSavePath = text2unicode(self._lastSavePath)
-        self._savePIREP(page, automatic = True)
-
-    def _getDefaultPIREPName(self):
-        """Get the default name of the PIREP."""
-        gui = self._wizard.gui
-
-        bookedFlight = gui.bookedFlight
-        tm = time.gmtime()
-
-        pilotID = self._wizard.pilotID
-        if pilotID: pilotID += " "
-        return "%s%s %02d%02d %s-%s.pirep" % \
-               (pilotID, str(bookedFlight.departureTime.date()),
-                tm.tm_hour, tm.tm_min,
-                bookedFlight.departureICAO, bookedFlight.arrivalICAO)
-
-    def _saveClicked(self, button, page):
-        """Called when the Save PIREP button is clicked."""
-        gui = self._wizard.gui
-
-        fileName = self._getDefaultPIREPName()
-
-        dialog = self._getSaveDialog()
-
-        if self._lastSavePath is None:
-            pirepDirectory = gui.config.pirepDirectory
-            if pirepDirectory is not None:
-                dialog.set_current_folder(pirepDirectory)
-        else:
-            dialog.set_current_folder(os.path.dirname(self._lastSavePath))
-
-        dialog.set_current_name(fileName)
-        result = dialog.run()
-        dialog.hide()
-
-        if result==RESPONSETYPE_OK:
-            self._lastSavePath = text2unicode(dialog.get_filename())
-            self._savePIREP(page)
-
-    def _savePIREP(self, page, automatic = False):
-        """Perform the saving of the PIREP."""
-
-        gui = self._wizard.gui
-
-        if automatic:
-            gui.beginBusy(xstr("finish_autosave_busy"))
-
-        pirep = PIREP(gui.flight)
-        error = pirep.save(self._lastSavePath)
-
-        if automatic:
-            gui.endBusy()
-
-        if error:
-            type = MESSAGETYPE_ERROR
-            message = xstr("finish_save_failed")
-            secondary = xstr("finish_save_failed_sec") % (text2unicode(error),)
-        else:
-            type = MESSAGETYPE_INFO
-            message = xstr("finish_save_done")
-            if automatic:
-                secondary = xstr("finish_save_done_sec") % (self._lastSavePath,)
-            else:
-                secondary = None
-            page.setPIREPSaved()
-
-        dialog = gtk.MessageDialog(parent = gui.mainWindow,
-                                   type = type, message_format = message)
-        dialog.add_button(xstr("button_ok"), RESPONSETYPE_OK)
-        dialog.set_title(WINDOW_TITLE_BASE)
-        if secondary is not None:
-            dialog.format_secondary_markup(secondary)
-
-        dialog.run()
-        dialog.hide()
-
-    def _getSaveDialog(self):
-        """Get the PIREP saving dialog.
-
-        If it does not exist yet, create it."""
-        if self._savePIREPDialog is None:
-            gui = self._wizard.gui
-            dialog = gtk.FileChooserDialog(title = WINDOW_TITLE_BASE + " - " +
-                                           xstr("finish_save_title"),
-                                           action = FILE_CHOOSER_ACTION_SAVE,
-                                           buttons = (gtk.STOCK_CANCEL,
-                                                      RESPONSETYPE_CANCEL,
-                                                      gtk.STOCK_OK, RESPONSETYPE_OK),
-                                           parent = gui.mainWindow)
-            dialog.set_modal(True)
-            dialog.set_do_overwrite_confirmation(True)
-
-            filter = gtk.FileFilter()
-            filter.set_name(xstr("file_filter_pireps"))
-            filter.add_pattern("*.pirep")
-            dialog.add_filter(filter)
-
-            filter = gtk.FileFilter()
-            filter.set_name(xstr("file_filter_all"))
-            filter.add_pattern("*.*")
-            dialog.add_filter(filter)
-
-            self._savePIREPDialog = dialog
-
-        return self._savePIREPDialog
-
 #-----------------------------------------------------------------------------
 
@@ -4538,9 +3695,8 @@
                      ("flighttype_charter", const.FLIGHTTYPE_CHARTER) ]
 
-    def __init__(self, wizard, saveHelper):
+    def __init__(self, wizard):
         """Construct the finish page."""
         help = xstr("finish_help") + xstr("finish_help_goodtime")
-        super(FinishPage, self).__init__(wizard, "finish",
-                                         xstr("finish_title"), help)
+        super(FinishPage, self).__init__(wizard, xstr("finish_title"), help)
 
         alignment = gtk.Alignment(xalign = 0.5, yalign = 0.5,
@@ -4725,6 +3881,10 @@
         self.addPreviousButton(clicked = self._backClicked)
 
-        self._saveHelper = saveHelper
-        self._saveButton = saveHelper.addButton(self)
+        self._saveButton = self.addButton(xstr("finish_save"),
+                                          sensitive = False,
+                                          clicked = self._saveClicked,
+                                          tooltip = xstr("finish_save_tooltip"))
+        self._savePIREPDialog = None
+        self._lastSavePath = None
 
         self._tooBigTimeDifference = False
@@ -4826,5 +3986,5 @@
         if gui.config.pirepAutoSave and sensitive and not wasSensitive:
             if gui.isWizardActive():
-                self._saveHelper.autoSavePIREP(self)
+                self._autoSavePIREP()
             else:
                 self._deferredAutoSave = True
@@ -4841,10 +4001,13 @@
         super(FinishPage, self).grabDefault()
         if self._deferredAutoSave:
-            self._saveHelper.autoSavePIREP(self)
+            self._autoSavePIREP()
             self._deferredAutoSave = False
 
-    def setPIREPSaved(self):
-        """Mark the PIREP as saved."""
-        self._pirepSaved = True
+    def _autoSavePIREP(self):
+        """Perform the automatic saving of the PIREP."""
+        self._lastSavePath = os.path.join(self._wizard.gui.config.pirepDirectory,
+                                          self._getDefaultPIREPName())
+        self._lastSavePath = text2unicode(self._lastSavePath)
+        self._savePIREP(automatic = True)
 
     def _backClicked(self, button):
@@ -4878,4 +4041,110 @@
 
         gui.reset()
+
+    def _getDefaultPIREPName(self):
+        """Get the default name of the PIREP."""
+        gui = self._wizard.gui
+
+        bookedFlight = gui.bookedFlight
+        tm = time.gmtime()
+
+        pilotID = self._wizard.pilotID
+        if pilotID: pilotID += " "
+        return "%s%s %02d%02d %s-%s.pirep" % \
+               (pilotID, str(bookedFlight.departureTime.date()),
+                tm.tm_hour, tm.tm_min,
+                bookedFlight.departureICAO, bookedFlight.arrivalICAO)
+
+
+    def _saveClicked(self, button):
+        """Called when the Save PIREP button is clicked."""
+        gui = self._wizard.gui
+
+        fileName = self._getDefaultPIREPName()
+
+        dialog = self._getSaveDialog()
+
+        if self._lastSavePath is None:
+            pirepDirectory = gui.config.pirepDirectory
+            if pirepDirectory is not None:
+                dialog.set_current_folder(pirepDirectory)
+        else:
+            dialog.set_current_folder(os.path.dirname(self._lastSavePath))
+
+        dialog.set_current_name(fileName)
+        result = dialog.run()
+        dialog.hide()
+
+        if result==RESPONSETYPE_OK:
+            self._lastSavePath = text2unicode(dialog.get_filename())
+            self._savePIREP()
+
+    def _savePIREP(self, automatic = False):
+        """Perform the saving of the PIREP."""
+
+        gui = self._wizard.gui
+
+        if automatic:
+            gui.beginBusy(xstr("finish_autosave_busy"))
+
+        pirep = PIREP(gui.flight)
+        error = pirep.save(self._lastSavePath)
+
+        if automatic:
+            gui.endBusy()
+
+        if error:
+            type = MESSAGETYPE_ERROR
+            message = xstr("finish_save_failed")
+            secondary = xstr("finish_save_failed_sec") % (text2unicode(error),)
+        else:
+            type = MESSAGETYPE_INFO
+            message = xstr("finish_save_done")
+            if automatic:
+                secondary = xstr("finish_save_done_sec") % (self._lastSavePath,)
+            else:
+                secondary = None
+            self._pirepSaved = True
+
+        dialog = gtk.MessageDialog(parent = gui.mainWindow,
+                                   type = type, message_format = message)
+        dialog.add_button(xstr("button_ok"), RESPONSETYPE_OK)
+        dialog.set_title(WINDOW_TITLE_BASE)
+        if secondary is not None:
+            dialog.format_secondary_markup(secondary)
+
+        dialog.run()
+        dialog.hide()
+
+    def _getSaveDialog(self):
+        """Get the PIREP saving dialog.
+
+        If it does not exist yet, create it."""
+        if self._savePIREPDialog is None:
+            gui = self._wizard.gui
+            dialog = gtk.FileChooserDialog(title = WINDOW_TITLE_BASE + " - " +
+                                           xstr("finish_save_title"),
+                                           action = FILE_CHOOSER_ACTION_SAVE,
+                                           buttons = (gtk.STOCK_CANCEL,
+                                                      RESPONSETYPE_CANCEL,
+                                                      gtk.STOCK_OK, RESPONSETYPE_OK),
+                                           parent = gui.mainWindow)
+            dialog.set_modal(True)
+            dialog.set_do_overwrite_confirmation(True)
+
+            filter = gtk.FileFilter()
+            filter.set_name(xstr("file_filter_pireps"))
+            filter.add_pattern("*.pirep")
+            dialog.add_filter(filter)
+
+            filter = gtk.FileFilter()
+            filter.set_name(xstr("file_filter_all"))
+            filter.add_pattern("*.*")
+            dialog.add_filter(filter)
+
+            self._savePIREPDialog = dialog
+
+        return self._savePIREPDialog
+
 
     def _sendClicked(self, button):
@@ -4972,121 +4241,4 @@
 #-----------------------------------------------------------------------------
 
-class CheckFlightFinishPage(Page):
-    """Finish page for a check flight."""
-    def __init__(self, wizard, saveHelper):
-        """Construct the check flight finish page."""
-        super(CheckFlightFinishPage, self).__init__(wizard,
-                                                    "chkfinish",
-                                                    xstr("chkfinish_title"),
-                                                    "")
-
-        alignment = gtk.Alignment(xalign = 0.5, yalign = 0.5,
-                                  xscale = 1.0, yscale = 1.0)
-        self._label = gtk.Label()
-        alignment.add(self._label)
-
-        self.setMainWidget(alignment)
-
-        self._saveHelper = saveHelper
-        self._saveButton = saveHelper.addButton(self)
-
-        self._button = self.addNextButton(sensitive = False,
-                                          clicked =  self._forwardClicked)
-
-    def activate(self):
-        """Activate the page."""
-        wizard = self._wizard
-        loginResult = wizard.loginResult
-        gui = wizard.gui
-        rating = gui.flight.logger.getRating()
-
-        if rating>=0:
-            loginResult.checkFlightStatus = True
-
-        firstOfficer = \
-          loginResult.entryExamPassed and loginResult.checkFlightStatus
-
-        if firstOfficer:
-            loginResult.rank = "FO"
-
-        if rating<0:
-            mainMessage = xstr("chkfinish_failed")
-        else:
-            mainMessage = xstr("chkfinish_passed_begin")
-            if firstOfficer:
-                mainMessage += xstr("chkfinish_passed_fo")
-            mainMessage += xstr("chkfinish_passed_end")
-
-        if firstOfficer:
-            nextMessage = xstr("chkfinish_next")
-        else:
-            nextMessage = xstr("chkfinish_next_student_begin")
-            if not loginResult.entryExamPassed and \
-               not loginResult.checkFlightStatus:
-                nextMessage += xstr("chkfinish_next_student_nothing")
-            elif loginResult.entryExamPassed and \
-                 not loginResult.checkFlightStatus:
-                nextMessage += xstr("chkfinish_next_student_no_flight")
-            elif not loginResult.entryExamPassed and \
-                 loginResult.checkFlightStatus:
-                nextMessage += xstr("chkfinish_next_student_no_exam")
-
-        self._label.set_text(mainMessage +
-                             xstr("chkfinish_savepirep") +
-                             nextMessage)
-        self._label.set_use_markup(True)
-        self._label.set_alignment(0.5, 0.0)
-
-        self._saveButton.set_sensitive(True)
-        self._button.set_sensitive(True)
-
-    def _forwardClicked(self, button):
-        """Jump to the student page if there are some tasks to do,
-        or to the flight selection page, if the pilot is allowed to perform
-        MAVA flights."""
-        wizard = self._wizard
-        gui = wizard.gui
-
-        loginResult = wizard.loginResult
-        if loginResult.checkFlightStatus:
-            gui.beginBusy(xstr("chkfinish_updateweb_busy"))
-            gui.webHandler.setCheckFlightPassed(self._checkFlightPassedSetCallback,
-                                                wizard.checkFlightAircraftType)
-        else:
-            self._resetGUI()
-
-    def _checkFlightPassedSetCallback(self, returned, result):
-        """Called when the check flight status has been set."""
-        gobject.idle_add(self._checkFlightPassedSet, returned, result)
-
-    def _checkFlightPassedSet(self, returned, result):
-        """Handle the result of an attempt to set the check flight status."""
-        gui = self._wizard.gui
-
-        gui.endBusy()
-
-        if returned:
-            self._resetGUI()
-        else:
-            dialog = gtk.MessageDialog(parent = gui.mainWindow,
-                                       type = MESSAGETYPE_ERROR,
-                                       message_format =
-                                       xstr("chkfinish_passedset_failed"))
-            dialog.set_title(WINDOW_TITLE_BASE + " - " +
-                             xstr("chkfinish_passedset_failed_title"))
-            dialog.format_secondary_markup(xstr("chkfinish_passedset_failed_secondary"))
-
-            dialog.add_button(xstr("button_ok"), 0)
-
-            dialog.run()
-            dialog.hide()
-
-    def _resetGUI(self):
-        """Reset the GUI."""
-        gui = self._wizard.gui
-        gui.reset()
-
-#-----------------------------------------------------------------------------
-
 class Wizard(gtk.VBox):
     """The flight wizard."""
@@ -5104,7 +4256,4 @@
         self._pages.append(FlightSelectionPage(self))
         self._pages.append(GateSelectionPage(self))
-        self._pages.append(RegisterPage(self))
-        self._studentPage = StudentPage(self)
-        self._pages.append(self._studentPage)
         self._pages.append(ConnectPage(self))
         self._payloadPage = PayloadPage(self)
@@ -5130,10 +4279,6 @@
         self._landingPage = LandingPage(self)
         self._pages.append(self._landingPage)
-
-        pirepSaveHelper = PIREPSaveHelper(self)
-
-        self._finishPage = FinishPage(self, pirepSaveHelper)
+        self._finishPage = FinishPage(self)
         self._pages.append(self._finishPage)
-        self._pages.append(CheckFlightFinishPage(self, pirepSaveHelper))
 
         self._requestedWidth = None
@@ -5183,5 +4328,5 @@
     def entranceExam(self):
         """Get whether an entrance exam is about to be taken."""
-        return self._loginResult is not None and self._loginResult.rank=="STU"
+        return self._loginPage.entranceExam
 
     @property
@@ -5194,9 +4339,4 @@
         """Get the login result."""
         return self._loginResult
-
-    @property
-    def checkFlightAircraftType(self):
-        """Get the type of the aircraft used to perform the check flight."""
-        return self._studentPage.aircraftType
 
     def setCurrentPage(self, index, finalize = False, fromPageShift = None):
@@ -5411,14 +4551,9 @@
     def nextPage(self, finalize = True):
         """Go to the next page."""
-        nextPageID = self._pages[self._currentPage].nextPageID
-        self.jumpPage(1 if nextPageID is None else nextPageID, finalize)
-
-    def jumpPage(self, countOrID, finalize = True, fromPageShift = None):
+        self.jumpPage(1, finalize)
+
+    def jumpPage(self, count, finalize = True, fromPageShift = None):
         """Go to the page which is 'count' pages after the current one."""
-        if isinstance(countOrID, str):
-            targetIndex = self._getIndexOf(countOrID)
-        else:
-            targetIndex = self._currentPage + countOrID
-        self.setCurrentPage(targetIndex,
+        self.setCurrentPage(self._currentPage + count,
                             finalize = finalize, fromPageShift = fromPageShift)
 
@@ -5481,5 +4616,5 @@
         #self.setCurrentPage(10)
 
-    def login(self, callback, pilotID, password):
+    def login(self, callback, pilotID, password, entranceExam):
         """Called when the login button was clicked."""
         self._loginCallback = callback
@@ -5489,4 +4624,5 @@
             pilotID = loginResult.pilotID
             password = loginResult.password
+            entranceExam = loginResult.entranceExam
             busyMessage = xstr("reload_busy")
         else:
@@ -5497,20 +4633,10 @@
 
         self.gui.webHandler.login(self._loginResultCallback,
-                                  pilotID, password)
+                                  pilotID, password,
+                                  entranceExam = entranceExam)
 
     def reloadFlights(self, callback):
         """Reload the flights from the MAVA server."""
-        self.login(callback, None, None)
-
-    def cancelFlight(self, reloadCallback):
-        """Cancel the flight.
-
-        If it is an entry exam flight, we go back to the student page.
-        Otherwise we reload the flights."""
-        if self.entranceExam:
-            self.reset(None)
-            self.jumpPage("student")
-        else:
-            self.reloadFlights(reloadCallback)
+        self.login(callback, None, None, None)
 
     def cruiseLevelChanged(self):
@@ -5661,13 +4787,3 @@
                 self._arrivalBriefingPage.setMETAR(metar)
 
-    def _getIndexOf(self, pageID):
-        """Get the index for the given page ID.
-
-        It is an assertion failure if the ID is not found."""
-        for index in range(0, len(self._pages)):
-            page = self._pages[index]
-            if page.id==pageID:
-                return index
-        assert False
-
 #-----------------------------------------------------------------------------
Index: src/mlx/gui/gui.py
===================================================================
--- src/mlx/gui/gui.py	(revision 769)
+++ src/mlx/gui/gui.py	(revision 746)
@@ -447,6 +447,4 @@
                                     self._mainWindow)
             self._updater.start()
-        else:
-            self.updateDone()
 
         cef.initialize(self._programDirectory, self._cefInitialized)
@@ -459,8 +457,4 @@
 
         self._disconnect()
-
-    def updateDone(self):
-        """Called when the update is done (and there is no need to restart)."""
-        gobject.idle_add(self._updateDone)
 
     def connected(self, fsType, descriptor):
@@ -581,5 +575,5 @@
 
         if self.loggedIn:
-            self._wizard.cancelFlight(self._handleReloadResult)
+            self._wizard.reloadFlights(self._handleReloadResult)
         else:
             self._wizard.reset(None)
@@ -1700,24 +1694,2 @@
             self._credentialsAvailable = True
             self._credentialsCondition.notify()
-
-    def _updateDone(self):
-        """Called when the update is done.
-
-        It checks if we already know the PID, and if not, asks the user whether
-        to register."""
-        if not self.config.pilotID and not self.config.password:
-            dialog = gtk.MessageDialog(parent = self._mainWindow,
-                                       type = MESSAGETYPE_QUESTION,
-                                       message_format = xstr("register_ask"))
-
-            dialog.set_title(WINDOW_TITLE_BASE)
-            dialog.format_secondary_markup(xstr("register_ask_sec"))
-
-            dialog.add_button(xstr("button_cancel"), 0)
-            dialog.add_button(xstr("button_register"), 1)
-            dialog.set_default_response(1)
-
-            result = dialog.run()
-            dialog.hide()
-            if result == 1:
-                self._wizard.jumpPage("register")
Index: src/mlx/gui/monitor.py
===================================================================
--- src/mlx/gui/monitor.py	(revision 765)
+++ src/mlx/gui/monitor.py	(revision 680)
@@ -378,8 +378,5 @@
                 for n1 in aircraftState.n1:
                     if n1Str: n1Str += ", "
-                    if n1 is None:
-                        n1Str += "?"
-                    else:
-                        n1Str += "%.0f" % (n1,)
+                    n1Str += "%.0f" % (n1,)
             elif aircraftState.rpm is not None:
                 n1Str = ""
Index: src/mlx/gui/update.py
===================================================================
--- src/mlx/gui/update.py	(revision 755)
+++ src/mlx/gui/update.py	(revision 300)
@@ -124,5 +124,4 @@
         if not self._waitAfterFinish:
             gobject.idle_add(self._progressWindow.hide)
-            self._gui.updateDone()
 
     def downloadingManifest(self):
@@ -287,6 +286,4 @@
         if self._restart:
             self._gui.restart()
-        else:
-            self._gui.updateDone()
 
 #-------------------------------------------------------------------------------
Index: src/mlx/pirep.py
===================================================================
--- src/mlx/pirep.py	(revision 778)
+++ src/mlx/pirep.py	(revision 743)
@@ -104,9 +104,4 @@
 
     @property
-    def flightDateText(self):
-        """Get the text version of the booked flight's departure time."""
-        return self.bookedFlight.departureTime.strftime("%Y-%m-%d")
-
-    @property
     def flightTypeText(self):
         """Get the text representation of the flight type."""
@@ -199,8 +194,4 @@
         attrs = {}
         attrs["log"] = self.getACARSText()
-        attrs["flightDate"] = self.flightDateText
-        attrs["callsign"] = self.bookedFlight.callsign
-        attrs["departureICAO"] = self.bookedFlight.departureICAO
-        attrs["arrivalICAO"] = self.bookedFlight.arrivalICAO
         attrs["numPassengers"] = self.numPassengers
         attrs["numCrew"] = self.numCrew
@@ -232,5 +223,5 @@
         attrs["flownDistance"] = self.flownDistance
         # FIXME: it should be stored in the PIREP when it is sent later
-        attrs["performDate"] = datetime.date.today().strftime("%Y-%m-%d")
+        attrs["flightDate"] = datetime.date.today().strftime("%Y-%m-%d")
 
         return ([], attrs)
Index: src/mlx/rpc.py
===================================================================
--- src/mlx/rpc.py	(revision 769)
+++ src/mlx/rpc.py	(revision 745)
@@ -125,25 +125,4 @@
 #---------------------------------------------------------------------------------------
 
-class Registration(object):
-    """Data for registration."""
-    def __init__(self, surName, firstName, nameOrder,
-                 yearOfBirth, emailAddress, emailAddressPublic,
-                 vatsimID, ivaoID, phoneNumber, nationality, password):
-        """Construct the registration data."""
-        self.surName = surName
-        self.firstName = firstName
-        self.nameOrder = nameOrder
-        self.yearOfBirth = yearOfBirth
-        self.emailAddress = emailAddress
-        self.emailAddressPublic = 1 if emailAddressPublic is True else \
-          0 if emailAddressPublic is False else emailAddressPublic
-        self.vatsimID = "" if vatsimID is None else vatsimID
-        self.ivaoID = "" if ivaoID is None else ivaoID
-        self.phoneNumber = phoneNumber
-        self.nationality = nationality
-        self.password = password
-
-#---------------------------------------------------------------------------------------
-
 class RPCException(Exception):
     """An exception thrown by RPC operations."""
@@ -176,7 +155,4 @@
     RESULT_DATABASE_ERROR = 3
 
-    # Result code: invalid data
-    RESULT_INVALID_DATA = 4
-
     # Result code: the flight does not exist
     RESULT_FLIGHT_NOT_EXISTS = 101
@@ -184,7 +160,4 @@
     # Result code: the flight has already been reported.
     RESULT_FLIGHT_ALREADY_REPORTED = 102
-
-    # Result code: a user with the given e-mail address already exists
-    RESULT_EMAIL_ALREADY_REGISTERED = 103
 
     def __init__(self, getCredentialsFn):
@@ -216,15 +189,4 @@
         self._sessionID = None
 
-    def register(self, registrationData):
-        """Register with the given data.
-
-        Returns a tuple of:
-        - the error code,
-        - the PID if there is no error."""
-        reply = Reply(self._server.register(registrationData))
-
-        return (reply.result,
-                reply.value["pid"] if reply.result==Client.RESULT_OK else None)
-
     def login(self):
         """Login using the given previously set credentials.
@@ -232,5 +194,5 @@
         The session ID is stored in the object and used for later calls.
 
-        Returns the name of the pilot on success, or None on error."""
+        Returns a boolean indicating if login has succeeded."""
         self._sessionID = None
 
@@ -239,5 +201,5 @@
             self._loginCount += 1
             self._sessionID = reply.value["sessionID"]
-            return (reply.value["name"], reply.value["rank"])
+            return reply.value["name"]
         else:
             return None
@@ -256,11 +218,4 @@
 
         return flights
-
-    def getEntryExamStatus(self):
-        """Get the status of the exams needed for joining MAVA."""
-        value = self._performCall(lambda sessionID:
-                                  self._server.getEntryExamStatus(sessionID))
-        return (value["entryExamPassed"], value["entryExamLink"],
-                value["checkFlightStatus"], value["madeFO"])
 
     def getFleet(self):
@@ -292,9 +247,4 @@
         self._performCall(lambda sessionID:
                           self._server.updateOnlineACARS(sessionID, acars))
-
-    def setCheckFlightPassed(self, type):
-        """Mark the check flight of the user passed with the given type."""
-        self._performCall(lambda sessionID:
-                          self._server.setCheckFlightPassed(sessionID, type))
 
     def _performCall(self, callFn, acceptResults = []):
Index: src/mlx/update.py
===================================================================
--- src/mlx/update.py	(revision 781)
+++ src/mlx/update.py	(revision 681)
@@ -297,28 +297,4 @@
 #------------------------------------------------------------------------------
 
-def removeFiles(directory, listener, removed, count):
-    """Remove the given files."""
-    toremoveDir = None
-    
-    listener.startRemoving()
-
-    removed.sort(reverse = True)
-    for path in removed:
-        removePath = createLocalPath(directory, path)
-        removeFile(toremoveDir, directory, removePath)
-
-        removeDirectory = os.path.dirname(removePath)
-        try:
-            os.removedirs(removeDirectory)
-        except:
-            pass
-
-        count += 1
-        listener.removed(path, count)
-
-    return count
-
-#------------------------------------------------------------------------------
-
 def updateFiles(directory, updateURL, listener,
                 manifest, modifiedAndNew, removed, localRemoved):
@@ -338,9 +314,4 @@
         updateURL += "/" + os.name
 
-        removeCount = 0
-        if localRemoved:
-            removeCount = removeFiles(directory, listener,
-                                      localRemoved, removeCount)
-        
         for (path, size, sum) in modifiedAndNew:
             targetFile = createLocalPath(directory, path)
@@ -375,6 +346,21 @@
             count += 1
             listener.renamed(path, count)
-
-        removeFiles(directory, listener, removed, removeCount)
+        
+        listener.startRemoving()
+        count = 0
+        removed += localRemoved
+        removed.sort(reverse = True)
+        for path in removed:            
+            removePath = createLocalPath(directory, path)
+            removeFile(toremoveDir, directory, removePath)
+
+            removeDirectory = os.path.dirname(removePath)
+            try:
+                os.removedirs(removeDirectory)
+            except:
+                pass
+
+            count += 1
+            listener.removed(path, count)
 
         listener.writingManifest()
Index: src/mlx/util.py
===================================================================
--- src/mlx/util.py	(revision 401)
+++ src/mlx/util.py	(revision 784)
@@ -170,6 +170,13 @@
 
 _utf8decoder = codecs.getdecoder("utf-8")
+_latin2decoder = codecs.getdecoder("iso8859-2")
 
 def utf2unicode(text):
     """Convert the given text from UTF-8 encoding to unicode."""
-    return unicode(_utf8decoder(text)[0])
+    try:
+        return unicode(_utf8decoder(text)[0])
+    except:
+        try:
+            return unicode(_latin2decoder(text)[0])
+        except:
+            return unicode(list(text))
Index: src/mlx/web.py
===================================================================
--- src/mlx/web.py	(revision 771)
+++ src/mlx/web.py	(revision 746)
@@ -2,5 +2,4 @@
 import const
 import util
-from rpc import Registration
 import rpc
 import rpccommon
@@ -91,7 +90,4 @@
                       const.AIRCRAFT_B462  : "146" }
 
-    checkFlightTypes = [ const.AIRCRAFT_B736, const.AIRCRAFT_B737,
-                         const.AIRCRAFT_B738, const.AIRCRAFT_DH8D ]
-
     @staticmethod
     def getDateTime(date, time):
@@ -99,36 +95,4 @@
         return datetime.datetime.strptime(date + " " + time,
                                           "%Y-%m-%d %H:%M:%S")
-
-    @staticmethod
-    def forCheckFlight(aircraftType):
-        """Create a booked flight for a check flight with the given aircraft
-        type."""
-        flight = BookedFlight()
-
-        flight.departureICAO = "LHBP"
-        flight.arrivalICAO = "LHBP"
-
-        flight.aircraftType = aircraftType
-        flight.aircraftTypeName = BookedFlight.TYPE2TYPECODE[aircraftType]
-
-        # FIXME: perhaps find one for the type
-        flight.tailNumber = "HA-CHK"
-        flight.callsign = "HA-CHK"
-
-        flight.numPassengers = 0
-        flight.numCrew = 2
-        flight.bagWeight = 0
-        flight.cargoWeight = 0
-        flight.mailWeight = 0
-        flight.route = "DCT"
-
-        t = datetime.datetime.now() + datetime.timedelta(minutes = 20)
-        flight.departureTime = datetime.datetime(t.year, t.month, t.day,
-                                                 t.hour, t.minute)
-        t = flight.departureTime + datetime.timedelta(minutes = 30)
-        flight.arrivalTime = datetime.datetime(t.year, t.month, t.day,
-                                               t.hour, t.minute)
-
-        return flight
 
     def __init__(self, id = None):
@@ -659,40 +623,9 @@
 #------------------------------------------------------------------------------
 
-class Register(RPCRequest):
-    """A registration request."""
-    def __init__(self, client, callback, registrationData):
-        """Construct the request."""
-        super(Register, self).__init__(client, callback)
-        self._registrationData = registrationData
-
-    def run(self):
-        """Perform the registration."""
-
-        registrationData = self._registrationData
-
-        (resultCode, pilotID) = self._client.register(registrationData)
-        result = Result()
-        result.registered = resultCode==rpc.Client.RESULT_OK
-        if result.registered:
-            result.pilotID = pilotID
-
-            self._client.setCredentials(pilotID, registrationData.password)
-            LoginRPC.setupLoginResult(result, self._client, pilotID,
-                                      registrationData.password)
-
-        result.invalidData = \
-          resultCode==rpc.Client.RESULT_INVALID_DATA
-        result.emailAlreadyRegistered = \
-          resultCode==rpc.Client.RESULT_EMAIL_ALREADY_REGISTERED
-
-        return result
-
-#------------------------------------------------------------------------------
-
 class Login(Request):
     """A login request."""
     iso88592decoder = codecs.getdecoder("iso-8859-2")
 
-    def __init__(self, callback, pilotID, password):
+    def __init__(self, callback, pilotID, password, entranceExam):
         """Construct the login request with the given pilot ID and
         password."""
@@ -701,4 +634,5 @@
         self._pilotID = pilotID
         self._password = password
+        self._entranceExam = entranceExam
 
     def run(self):
@@ -712,29 +646,43 @@
         password = md5.hexdigest()
 
-        url = MAVA_BASE_URL + "/leker2.php?pid=%s&psw=%s" %  (pilotID, password)
+        if self._entranceExam:
+            url = MAVA_BASE_URL + "/ellenorzo/getflightplan.php?pid=%s" % \
+                  (pilotID,)
+        else:
+            url = MAVA_BASE_URL + "/leker2.php?pid=%s&psw=%s" % \
+                  (pilotID, password)
 
         result = Result()
+        result.entranceExam = self._entranceExam
 
         f = urllib2.urlopen(url, timeout = 10.0)
 
         status = readline(f)
-        result.loggedIn = status == ".OK."
+        if self._entranceExam:
+            result.loggedIn = status != "#NOEXAM"
+        else:
+            result.loggedIn = status == ".OK."
 
         if result.loggedIn:
             result.pilotID = self._pilotID
             result.password = self._password
-            result.rank = "FO"
             result.flights = []
-
-            result.pilotName = self.iso88592decoder(readline(f))[0]
-            result.exams = readline(f)
-
-            while True:
-                line = readline(f)
-                if not line or line == "#ENDPIREP": break
-
-                flight = BookedFlight(line)
-                flight.readFromWeb(f)
-                result.flights.append(flight)
+            # FIXME: this may not be the correct behaviour
+            # for an entrance exam, but the website returns
+            # an error
+            if self._entranceExam:
+                result.pilotName = result.pilotID
+                result.exams = ""
+            else:
+                result.pilotName = self.iso88592decoder(readline(f))[0]
+                result.exams = readline(f)
+
+                while True:
+                    line = readline(f)
+                    if not line or line == "#ENDPIREP": break
+
+                    flight = BookedFlight(line)
+                    flight.readFromWeb(f)
+                    result.flights.append(flight)
 
             result.flights.sort(cmp = lambda flight1, flight2:
@@ -750,25 +698,5 @@
 class LoginRPC(RPCRequest):
     """An RPC-based login request."""
-    @staticmethod
-    def setupLoginResult(result, client, pilotID, password):
-        """Setup the login result with the given client, pilot ID and
-        password."""
-        loginResult = client.login()
-        result.loggedIn = loginResult is not None
-        if result.loggedIn:
-            result.pilotID = pilotID
-            result.pilotName = loginResult[0]
-            result.rank = loginResult[1]
-            result.password = password
-            result.flights = client.getFlights()
-            if result.rank=="STU":
-                reply = client.getEntryExamStatus()
-                result.entryExamPassed = reply[0]
-                result.entryExamLink = reply[1]
-                result.checkFlightStatus = reply[2]
-                if reply[3]:
-                    result.rank = "FO"
-
-    def __init__(self, client, callback, pilotID, password):
+    def __init__(self, client, callback, pilotID, password, entranceExam):
         """Construct the login request with the given pilot ID and
         password."""
@@ -777,33 +705,20 @@
         self._pilotID = pilotID
         self._password = password
+        self._entranceExam = entranceExam
 
     def run(self):
         """Perform the login request."""
         result = Result()
+        # FIXME: handle the entrance exam case
+        result.entranceExam = self._entranceExam
 
         self._client.setCredentials(self._pilotID, self._password)
-        LoginRPC.setupLoginResult(result, self._client,
-                                  self._pilotID, self._password)
-
-        return result
-
-#------------------------------------------------------------------------------
-
-class GetEntryExamStatus(RPCRequest):
-    """A request to get the entry exam status."""
-    def __init__(self, client, callback):
-        """Construct the request."""
-        super(GetEntryExamStatus, self).__init__(client, callback)
-
-    def run(self):
-        """Perform the query."""
-        result = Result()
-
-        reply = self._client.getEntryExamStatus()
-
-        result.entryExamPassed = reply[0]
-        result.entryExamLink = reply[1]
-        result.checkFlightStatus = reply[2]
-        result.madeFO = reply[3]
+        pilotName = self._client.login()
+        result.loggedIn = pilotName is not None
+        if result.loggedIn:
+            result.pilotID = self._pilotID
+            result.pilotName = pilotName
+            result.password = self._password
+            result.flights = self._client.getFlights()
 
         return result
@@ -1201,19 +1116,4 @@
 #------------------------------------------------------------------------------
 
-class SetCheckFlightPassed(RPCRequest):
-    """A request to mark the user as one having passed the check flight."""
-    def __init__(self, client, callback, aircraftType):
-        """Construct the request for the given type."""
-        super(SetCheckFlightPassed, self).__init__(client, callback)
-        self._aircraftType = aircraftType
-
-    def run(self):
-        """Perform the update."""
-        aircraftType = BookedFlight.TYPE2TYPECODE[self._aircraftType]
-        self._client.setCheckFlightPassed(aircraftType)
-        return Result()
-
-#------------------------------------------------------------------------------
-
 class Handler(threading.Thread):
     """The handler for the web services.
@@ -1234,19 +1134,12 @@
             self._rpcClient.setCredentials(config.pilotID, config.password)
 
-    def register(self, callback, registrationData):
-        """Enqueue a registration request."""
-        self._addRequest(Register(self._rpcClient, callback, registrationData))
-
-    def login(self, callback, pilotID, password):
+    def login(self, callback, pilotID, password, entranceExam = False):
         """Enqueue a login request."""
         request = \
-          LoginRPC(self._rpcClient, callback, pilotID, password) \
-          if self._config.useRPC else Login(callback, pilotID, password)
+          LoginRPC(self._rpcClient, callback, pilotID, password, entranceExam) \
+          if self._config.useRPC and not entranceExam \
+          else Login(callback, pilotID, password, entranceExam)
 
         self._addRequest(request)
-
-    def getEntryExamStatus(self, callback):
-        """Get the entry exam status."""
-        self._addRequest(GetEntryExamStatus(self._rpcClient, callback))
 
     def getFleet(self, callback):
@@ -1292,9 +1185,4 @@
         self._addRequest(SendBugReport(callback, summary, description, email))
 
-    def setCheckFlightPassed(self, callback, aircraftType):
-        """Mark the check flight as passed."""
-        self._addRequest(SetCheckFlightPassed(self._rpcClient,
-                                              callback, aircraftType))
-
     def run(self):
         """Process the requests."""
Index: test/test1.txt
===================================================================
--- test/test1.txt	(revision 779)
+++ test/test1.txt	(revision 611)
@@ -14,6 +14,4 @@
 set nav1=115.9
 set adf1=382
-set leftMainLevel=50
-set rightMainLevel=50
 set parking=yes
 
@@ -71,6 +69,4 @@
 set ias=130 gs=130
 
-set leftMainLevel=40
-set rightMainLevel=40
 set altitude=3500
 set ias=125 gs=125
