Index: MLXMANIFEST
===================================================================
--- MLXMANIFEST	(revision 723)
+++ MLXMANIFEST	(revision 726)
@@ -1,124 +1,86 @@
 library/encodings/shift_jis.pyc	1670	afdb08e9b2888f86fc71010edcf057b4
-library/xml/__init__.pyc	1058	8f77f254e8c6db7a3b6d9930a686d787
-doc/manual/en/finish.png	28855	671eac74a9f5801c794f08d5861eafaa
 library/sre_constants.pyc	5988	060e037737c1096503cf9247fc353edf
 library/encodings/euc_jis_2004.pyc	1694	e12bbd059d4fd595cf4be5440ab439c2
-library/encodings/iso8859_7.pyc	2686	db390f1961c1fd4181e351c330816ecd
+library/xml/dom/xmlbuilder.pyc	15414	42285fdd810a2aa92c06775b5d415c33
 library/fnmatch.pyc	3414	4d50000f78e903598af06ef1c5cfb3ef
-library/libexpat-1.dll	143096	701659d3689bf4a8265b669b7d774255
-library/gtk/_gtk.pyc	549	fc79b81b10be66eb2514e690cc0090ac
+library/gtk/_gtk.pyc	549	9458c6b0ddc3c1e11c1203b6fd4633a9
 library/encodings/cp858.pyc	7591	02054a0b8e91b9758826eb70cddf096f
-library/mlx/pirep.pyc	4623	6c485ea65ff6245ab56960a8bbec7051
 library/encodings/cp1254.pyc	2678	17ff2ac86f90886d5c73ed789f0499f3
 library/encodings/unicode_internal.pyc	2022	1e902113491e0c334b44deb0c8940e01
-library/libpango-1.0-0.dll	333729	5a14efd93ee27cfe960220fe4a904911
-library/mlx/gui/gui.pyc	53459	ff9a0ce7c21f1d3dfb7c1359a4226d34
-library/stat.pyc	2503	d3b6dc7a54e705219f04d0be75a212de
-library/posixpath.pyc	10734	d694316c239784c444b252c801c97efa
-doc/manual/hu/landing.png	28525	2dd99249a389e9faf5c4d7b1180e8ebb
+library/lxml/etree.pyc	555	698876f9fdc81ba76c8a6fe486c49dab
 library/encodings/gbk.pyc	1622	71c1e7fe25116114241829a60e57c5f4
 sounds/speed.mp3	26331	3d64da0eea9f48fa73be82d385354bf6
 library/encodings/cp932.pyc	1638	e060301989634a7fb30ded375011cb09
-doc/manual/hu/bugreport.png	12385	c71c7db56f19870ae5d6bb7f533d3679
-library/share/locale/hu/LC_MESSAGES/gtk20.mo	58794	6ee4491ae7bc9d3dfb778578eb29a0b3
-library/gobject/_gobject.pyc	573	81047d5239f6250991b28ed9d046173f
-locale/en/LC_MESSAGES/mlx.mo	64494	5eb2e430656c49a02122e3ea54fe4698
-library/encodings/utf_7.pyc	1747	2beeb059236527197d6c640396476ce8
+locales/am.pak	10404	5501abf396344840777c5e65843dd680
+locales/id.pak	6724	87f2077cb9f8a80f18ed5ab3c48d448b
+library/distutils/__init__.pyc	365	6f7d10b79fa1086d3ac9ce0806b5ba23
 doc/manual/hu/pirepViewer.png	26835	267e4325e550ed14ed22f86a2c7e8e9d
 doc/manual/hu/prefsGeneral.png	25082	9775eaf0c8f1f770e1ad46ce9b6e6973
-library/atexit.pyc	2083	595a09be339c73c3c02e378d99325d2a
-library/cookielib.pyc	52852	2a1030653dc204a9ba1fb56fd32eca68
-sounds/737taxi.mp3	157362	846c403e5cb660be53c8b6da16b68234
+library/mlx/gui/statusbar.pyc	4812	490a882b53429fa18f317e146f0c70c0
 doc/manual/hu/mainWindow.png	27770	42e5565ccb75d22b2f378d2df2b2865d
-library/libgobject-2.0-0.dll	341594	356d697647a480562c4e2e921b13f8ed
-library/email/charset.pyc	13200	771aee9802116e673d08b44bc0450f99
-library/libpangocairo-1.0-0.dll	104729	d3ad38599649097a3645777ff95be08e
-doc/manual/en/briefing.png	32129	65cf1236d009fd61c1bd6c374ffd261c
-library/uu.pyc	4212	0073b65d26a6092e4e177c7763058fa4
-library/encodings/iso8859_1.pyc	2678	f09ec3b7f6a348cbd7f7286b60572bd0
-doc/manual/hu/monitorWindow.png	20577	34bfd26fe50e72706625a9203ac98217
+library/lxml.etree.pyd	2977792	d9f46391d4eeb719304a07b1ddaa72d9
 library/pdb.pyc	41336	cca4477d622e897335b3f0cecb667ff4
-library/pangocairo.pyd	17920	5fc69a7d29a6d3127710c64de440daa4
+library/lxml/html/_setmixin.pyc	4312	eac09282d97aceede13bb8efc0da3a5f
 doc/manual/en/fuel.png	27700	777f9f3431c2f53db4b98f3449e4baf7
-library/mlx/gui/info.pyc	6538	78c97f25111c13dc94c6226140943916
-library/io.pyc	3378	197da422e1d85c483c94fa0251b5ff76
+subprocess.exe	267264	00107a8ed63a3e055e5d14f5c4b6cb0d
+library/selenium/webdriver/android/webdriver.pyc	1348	d8e382aa629964bf424c14159dd4fd2d
 library/xml/sax/xmlreader.pyc	17862	0362ded7016d21cdd85aea1170ebdda1
 doc/manual/hu/fuel.png	29886	92a67f7d11e5101a7ac64034c7be26a4
 doc/manual/hu/time.png	28618	50dd8f862b7e1034cb1066ab16e7c587
 library/encodings/mac_croatian.pyc	2755	425b44ba614eff660b863cb7cc12e509
-library/encodings/iso8859_6.pyc	2723	c8f9aa14a6a2ebf05d977317114bc65d
 library/stringprep.pyc	14089	1c0d248fa5ff974c44479a82d8deb72c
-doc/manual/hu/prefsSounds.png	22667	452c396c2bda9684bf052c98fd7870d1
-library/sre.pyc	499	92bb633daa0bab6550ec0e3677673b5b
+library/WINHTTP.dll	354304	d29f2889baa10e19ad9ff70c8d5ecf50
+locales/ca.pak	7484	6490335e2837ffefb296ff1fabb50372
+library/selenium/webdriver/remote/switch_to.pyc	3203	203c551f8bb5b7999810cf31728c85ee
 library/encodings/cp720.pyc	2736	a0f8bdcf6477a00166d2a38b1ba3ce7c
 library/xml/sax/_exceptions.pyc	5829	9f1abe12a091b6808b131a0b4e179b5a
-library/encodings/iso2022_jp_3.pyc	1699	ee1c3aa11bbe19eeb4deafa238563133
-library/encodings/mac_turkish.pyc	2739	1682e228ddfd2e74e3ccaee0b65e7261
 doc/manual/en/prefsMessages.png	22653	9002bdcc9f1ecd395c67e0662dec62dc
 library/xml/sax/handler.pyc	12528	655e21f07d79d8cde1d7af6fe0d9c2db
 library/collections.pyc	23430	3b68687320ddc080ef5c92404487a161
 library/encodings/hp_roman8.pyc	3922	cc8ddf1c5f5264309df0050775df2dc3
-library/xmlrpclib.pyc	40724	d4f819f9199ea21236a74c967e335c43
 library/encodings/big5hkscs.pyc	1670	0ff54e70f21b5e4a359d3779367cba85
 library/encodings/utf_8.pyc	1806	4b8dee0284ea2f55c4142fcde7463524
-library/unicodedata.pyd	688128	c856c31a03dc892e4f2aee93d0bfee44
-locale/hu/LC_MESSAGES/mlx.mo	69361	d6d8b2f8bd1a18bcc710b841e849d5c3
+locale/hu/LC_MESSAGES/mlx.mo	73166	f479bb641fede1c31adbd0ff2a3d736b
 library/encodings/mac_roman.pyc	2716	4b4745eccfcb77860b70b374ac07fbcc
-library/copy_reg.pyc	4893	7a58bc441232056d1c123cd3375b3774
+library/py_compile.pyc	6292	425da7ee065aa158fd274946204a4a77
 library/ctypes/_endian.pyc	2154	c73aab798475f9961158ed4f6c07a70b
-doc/manual/en/debugLogTab.png	33696	5be65d41058f78554840032c51aa9d6d
 doc/manual/en/checklistEditor.png	26353	b8963432d1219a2138e22850b1b94b56
 library/email/_parseaddr.pyc	13285	9a4c79b09ed093f1fc48b4d427b877e0
-library/dummy_thread.pyc	5094	310a3d15c9cf20259b0ca4892811dec5
-library/gtk._gtk.pyd	1882624	bbb1d1e41bbebc6abf69bed719d50497
 library/encodings/__init__.pyc	4298	df673fd19cf6e69f54e7638d05179a32
 library/share/themes/MS-Windows/gtk-2.0/gtkrc	1825	94d104680cec5f3d8bbec56258d0c926
-library/_hashlib.pyd	287232	a1a18de0644f481749fcbcf26005eeaf
-doc/manual/en/monitorWindow.png	20886	42e08d10c758e21209c4c021f391dee7
-library/_hashlib.pyc	549	9e2049be4b8278f6106cd91d0b39a375
 library/libpng14-14.dll	230529	f3a15497e25baaa721f96638d7a4d2f8
-library/copy.pyc	11674	30d1745c5e38ab170f8a0486fbebf305
 library/share/locale/hu/LC_MESSAGES/gdk-pixbuf.mo	21895	a932ead453f04de30e348c1689a4d896
+library/selenium/webdriver/safari/__init__.pyc	125	4a6fe7f5be076227125ddd0577386fa7
+locales/fil.pak	7790	38cdea149d120d8e9a8a0b0a90ac5dfd
 library/mlx/gui/dcdata.pyc	19878	128e72fd5c4cf74b988abe22b9e9e641
-library/mlx/gui/__init__.pyc	107	22f268cac1c5be2f3a058810b6caead3
+library/selenium/webdriver/common/utils.pyc	1718	4f61f38d0107f2694454eacb6d480f45
 library/encodings/iso8859_5.pyc	2679	58a290e94b0266ef8ff4ee52da00e257
 library/encodings/iso2022_kr.pyc	1683	ef9549932514d2deda6c4676e5e5f1db
 library/libglib-2.0-0.dll	1242929	18e88b04da123bf05b07ff60a4e96654
-library/select.pyd	11776	d90bf525f9f6c9c3aa6532fa6e569b4f
 library/base64.pyc	10528	39abec9c60dc011d3c763f443f9b1a11
 library/mlx/gui/bugreport.pyc	4602	a32ca4d644f316b3d120ae3dc2597eba
-library/traceback.pyc	11223	50ace5c2c6c040a923082442da94cd78
-library/_weakrefset.pyc	9290	a56e87c491c0511cd329a3c8c4cd9563
-library/mlx/flight.pyc	21066	471a24b3678e6d684d6bf5aead1ae544
-library/urllib2.pyc	43566	7eb57ea0dcd1086d1d9073a5cefb0903
 doc/manual/en/flightSelection.png	29847	7817c8f5ed8d7fe64cf72d0addaf3e4a
-library/encodings/mac_farsi.pyc	2659	df751a61510129a25f7a43ae3aace4f7
-library/tokenize.pyc	13565	354d02cd79df187a28c1851a1e3bad96
 library/encodings/cp500.pyc	2639	bb122a6e1384530e1b2efb14cf999239
 sounds/TaxiAfterLand.mp3	155481	ded1908d2e7bf2ee2cbf445bb44cf756
 library/urlparse.pyc	13222	cca8581f4f4fa9067ccc880f049a6032
-library/mlx/common.pyc	1327	822ddec8bdeabcd64ec7927b275680c0
+library/json/encoder.pyc	12918	d4d1f0b8a67df3e7c2f470ca19d0f964
+library/selenium/webdriver/remote/webdriver.pyc	31960	5ef4044402659e32409fa4570a91f03c
 doc/manual/en/mainWindow.png	25345	15b206118a6670f9edaceb8aa830fdd7
-library/ctypes/__init__.pyc	18846	2bd183962453ae93d6887b303d3fd338
-library/mlx/acars.pyc	1690	733d057c94683c74079d6e096f601855
 library/encodings/iso8859_3.pyc	2685	7b5b2924647578ab7555db2d86cd1b9b
-sounds/taps.mp3	16614	d4a019c7e9342ae329aee6932d6a43c3
+locales/kn.pak	15411	d24e6fbfcbd4c8e76cc534bf63d75d61
+library/xml/dom/minicompat.pyc	3256	4cb81e995ea180f716a8913fb0148a64
 library/email/generator.pyc	9877	f387feb2b59e121f7b0ece209e8875ae
 library/types.pyc	2386	25023bf7b2334153cfff8922979862c9
-conn_grey.png	988	7a956ebba793197f324cec56d94073e7
-library/getopt.pyc	6454	8f8cd6763f5339988d157d153c910bf5
+doc/manual/en/bugreport.png	11730	a649c456acbbfa0419d183a7b8261c01
+locales/mr.pak	13137	cdfba7767a139ab7c34ec01d496029a2
+library/xml/dom/pulldom.pyc	12238	14c378c017da4b4a1576321c884c9ac4
 doc/manual/en/landing.png	26272	97115671017d7dd3af55513ae912ff17
 library/textwrap.pyc	11410	f7bfc56465324edf71b977397a4c7c0b
+locales/nb.pak	6676	56894a866d7af9193faca13ef28c7b68
 library/encodings/undefined.pyc	2399	030217a6a82b09af1a32dc18955d3355
-library/encodings/idna.pyc	6124	6d67198be2b194c4c0acf48e2f1473ac
-library/email/mime/__init__.pyc	110	bae57a199e3d0998a1364b9fbae8b3cd
-library/calendar.pyc	26136	6f2f18efc99d759f99b2935b9dc9dbb1
-library/winerror.pyc	112982	4986a8f2df094dddedd12c9fddf4966d
-library/_LWPCookieJar.pyc	5440	3782ae675165b232a3f78608ac2dbccd
-library/encodings/mac_latin2.pyc	4717	564dbaf5c296a147203eb821dc2466ba
+library/cairo/__init__.pyc	142	010dd7cc8485565d5782d60e92e4ba34
 library/encodings/utf_16_be.pyc	1854	84a1d1465453727af051eaeeb853782f
-library/mlx/fsuipc.pyc	74670	4da0a45a9a6372a2e463ab21fdc43359
-library/xml/sax/__init__.pyc	3579	c78222ad1fd4f3dbdea06666fe74e84e
-doc/manual/en/connect.png	27436	5406dfe5408569cb95499c057bf0185b
+library/selenium/webdriver/ie/webdriver.pyc	1917	121143596ab09d1c691eb62c08540471
+library/selenium/webdriver/common/keys.pyc	2116	25c69327342e220cdafefcca6e79bfe5
 library/encodings/cp1006.pyc	2725	99fe5e34e21f82126b87b830c382347f
 logo.ico	44054	8a2bfc719521f8dc59540055941af7db
@@ -126,261 +88,159 @@
 doc/manual/hu/takeoff.png	28255	c328eb866f78338e178f1fb761f57511
 library/encodings/rot_13.pyc	3413	04994d9c6c3622213b73a23e86c4cd07
-library/encodings/charmap.pyc	3203	2358b8eb05c66e2a2826b5db6f214547
-library/os2emxpath.pyc	4312	0c35794eeb4739ebb4eb28b9a1daf0ca
-library/libgdk-win32-2.0-0.dll	931390	a2b46daac3d4140efdf86429f7aea476
+library/selenium/webdriver/chrome/service.pyc	3456	213d552983fc36a04948f1c1fb551965
 library/win32file.pyd	111616	25ecaa0a381c6fd9ba4080bea63b952e
-library/mlx/gui/common.pyc	10398	b94179414ef460863981a327bbea2cf3
-library/dummy_threading.pyc	1265	5ab5c897721aeb346b5bccb84066c5bd
-library/markupbase.pyc	9010	b33ff430e9b1adba3d540b5394ff289a
-library/encodings/cp1258.pyc	2681	5c09b3b0a82036b0e785422376cb64cc
-sounds/767taxi.mp3	160496	4cb43cda6e1214fbe15328a716827345
-doc/manual/en/prefsAdvanced.png	16169	64c14e0842c413cac98b92926279f3e0
-library/mlx/pyuipc_sim.pyc	57203	e1828998919f435bae2a5cbd969ff8f3
-library/cairo/_cairo.pyc	561	74600b46e3cca88959de18f46fd35dd6
-library/win32file.pyc	552	7cc3345bbc0f00a5ab26fd1fa2644112
-library/encodings/cp865.pyc	7868	7d40a7ba053ac23339218be8799e5397
-library/lib/gtk-2.0/2.10.0/engines/libwimp.dll	97984	a5bbbe46e1363aba9020a76f2d58e9d6
+library/share/locale/hu/LC_MESSAGES/gtk20-properties.mo	167125	cd1b1b3693c1e3c74bfcea20be640cc6
+library/lxml/_elementpath.pyc	6886	9a280fb32989572f97a77a8439c60b03
 library/unittest/__init__.pyc	2945	3b9d3992b823bd7bc391d8b1bb434310
 sounds/sikoly.mp3	126222	b0bb88361b253cd21bfd3706524f4aec
-library/HTMLParser.pyc	11589	f641df5331b5bb552ebe180f79b85a6b
-library/bz2.pyd	76800	1ca9ececd2c84b80996fe632627f857f
-library/encodings/iso8859_16.pyc	2695	85e819a29dec2b601ce978dcd5a040fc
-library/share/locale/hu/LC_MESSAGES/gtk20-properties.mo	167125	cd1b1b3693c1e3c74bfcea20be640cc6
+library/selenium/webdriver/common/proxy.pyc	9645	560e74712da0a0e2f9115689b0dce0a2
 conn_red.png	914	860388cb7c3b26b2f348fdbee40780ce
-library/bz2.pyc	534	c0e76855ba3b871b6033bf3e93815fb8
 library/xml/sax/expatreader.pyc	13563	4f64c0efb2f1f8dbba84cdb5c6036f2d
-library/email/utils.pyc	8840	a7be428df6fddee6121cfce55382d1f8
+library/lxml/html/__init__.pyc	57505	75e60bdbe2cda9fe95dc43345e79a0ae
 library/encodings/iso8859_14.pyc	2714	b9baeb3f59da8a2137db576b2e434feb
 library/unittest/signals.pyc	2126	d574469ae3f8e3c3c6054c48e8ff6fe1
 library/encodings/cp949.pyc	1638	a248191502a186c4ee64598e5e684608
-library/encodings/iso2022_jp_2.pyc	1699	4b917caa926e5779176612409c66be39
-library/_ssl.pyd	720896	90826a140137efd0d806038828e16f8e
 library/urllib.pyc	48771	4d4b07040a1d0b0b31f5779eeb01c269
 doc/manual/hu/payload.png	29785	c9b8f7dd269629ea22764f531e5d27bf
 doc/manual/en/gateSelection.png	28063	b02c97fe05d9cd8ea986a5023937f4bc
-library/glib/__init__.pyc	187	d44c8c2772b263a36726ac0dcfc04b42
 library/UserDict.pyc	7920	c72896a5a8a1a3d93fa6ba23c50a04b0
 library/encodings/koi8_r.pyc	2700	fff1b35002b9e938b7ea6fd0fbe824ae
-library/mlx/gui/statusbar.pyc	4812	490a882b53429fa18f317e146f0c70c0
-library/warnings.pyc	12666	9788b5f45765e8204e04c820f2711094
-mlxupdate.exe	19456	ddccbdef96743f9fb9ef233581c240fc
-library/mlx/const.pyc	6289	fda6baed7910fe29ee62a57e7818eb89
-library/email/errors.pyc	3229	cdb78ab237e195ad69f059128bc03b1d
-library/linecache.pyc	3091	666e6f81b0ea9a7637f8068493f738d5
-sounds/malev.mp3	201247	8a00666288f14a1666eb112223c140e0
-library/encodings/mac_iceland.pyc	2738	dfff28ea5edfda00df56b4ab9a35bc59
+sounds/737taxi.mp3	157362	846c403e5cb660be53c8b6da16b68234
+library/mlx/const.pyc	6294	5cdef68da98c1d03135d20e2b78668fc
+locales/th.pak	13637	7262d0f5e1877212a45a1ef1ccc4c777
+library/mlx/gui/cef.pyc	13834	c0aa2cc0103680c5c8f25a8b504839d8
 library/encodings/punycode.pyc	7570	335ff94e207934ae64e6f5fc07a5cacc
-library/unittest/util.pyc	4358	1530cc34b18ae6a6c6128a1d8b1355d7
-library/gtk/__init__.pyc	3025	9f6605bf84c6cbd3c20f1d37e58af969
-library/codecs.pyc	34722	339dc90c17d548887dbcf1bbbcae5d5b
+mlx_cef_caller.bat	142	d1815645d52f5638f27f16903a977d00
 library/encodings/shift_jisx0213.pyc	1710	1ec0383aafb1dcadb5f9b6afff16eb7f
-doc/manual/hu/statusIcon2.png	7969	3ec6caa058848932d381da6e02c702be
 library/shlex.pyc	7282	cbe1a4823894c97c87d01f9d9faf5b8f
-library/cairo/__init__.pyc	142	010dd7cc8485565d5782d60e92e4ba34
-library/_ssl.pyc	537	aca2f45a9b83601311c6292e537f4611
+library/encodings/idna.pyc	6124	6d67198be2b194c4c0acf48e2f1473ac
+library/selenium/webdriver/support/wait.pyc	3062	0b45eef7d5f12effdcb7b3b3bf077953
 library/encodings/iso8859_8.pyc	2717	f3ad6ce58cfac9e3ca86cf5c2fef092b
-library/encodings/iso2022_jp_1.pyc	1699	faed9d5747e982cec9fa8b3ad8e1de26
-library/encodings/cp850.pyc	7621	20d776af743fa7acf090fbd575eea143
-library/xml/parsers/expat.pyc	259	d7be0c4de475d65e08ba7fdbabe088d3
 library/encodings/utf_16.pyc	4808	45343ba87ff1675cd72f656555193d29
-library/struct.pyc	219	421271d66b783c3f13c37ec09efa8b65
 library/httplib.pyc	35251	2ac8119676b4b02ed78fd020ea423de5
-doc/manual/en/bugreport.png	11730	a649c456acbbfa0419d183a7b8261c01
-python27.dll	2206720	f8f39495ed4a813e8f3049a4b9f5cff4
-library/encodings/mac_centeuro.pyc	2747	6461bd7ed7a57683d5c36001f9ac85c9
-library/encodings/utf_32.pyc	5336	912103fef3db6edc29a35dd0cfb5c5b9
-library/ntpath.pyc	11407	533c9331a1b72cc80dd3f88145ba4466
+library/selenium/webdriver/remote/__init__.pyc	125	98c24cdbe880f259e3a39688b035f899
 library/rfc822.pyc	30648	0d6ab1f052b2b58e19659373c57e6443
 library/encodings/cp869.pyc	7915	404063f8111d018b17d803a12c956ee8
 library/opcode.pyc	6052	4b056d1c0ecd2904ca1fb2a14f28da3c
-library/mlx/gui/checklist.pyc	12279	555775aaed42b3d0687e1b0f501a9f61
 library/email/header.pyc	13339	f741f4c3543a278fec30f4d9bdd0f859
-library/encodings/cp1252.pyc	2676	b4c43cc72650c911cf3654dbaf565df9
 library/share/locale/hu/LC_MESSAGES/atk10.mo	8465	e3f3466da367215aad971d7b0394229d
-library/unicodedata.pyc	558	9fff50a023ac65726b3f323860f16dc7
-library/select.pyc	543	ac1d1553c508b92a2f222dc5babd3060
+library/selenium/webdriver/android/__init__.pyc	126	2c08539a10f0de9d77dea0fb81f88c93
+library/select.pyc	543	000aafbf9f916aa8dc56f48e6421ae8e
 library/encodings/uu_codec.pyc	4646	5282a5fcb676851224d2924aa3e48a9e
+library/selenium/webdriver/remote/file_detector.pyc	2025	06b01ab65d8732125257374fb263e879
+library/selenium/webdriver/phantomjs/webdriver.pyc	2534	dedaa853a9d939c417e05069a74a0851
 library/ConfigParser.pyc	23857	1d17020dd0000ce0f73de812effa152f
-library/encodings/cp1256.pyc	2675	c1bf26ed9c9b5ee0eec495138993cffb
+mlx_cef_caller_secondary.bat	172	c4864924a731e8ed4beae9e70018370f
 library/genericpath.pyc	3063	eb5a2eacaea46c733ed68d770eb1d89c
 sounds/notam.mp3	195604	9c5edf885a2ba68484a9554a1cd22c47
-library/email/base64mime.pyc	5221	c536d6f0c03f029bba77f15ef6ba3d99
+locales/en-US.pak	6371	7dc755262eb4ba15fd0f2bd986801f13
 library/gettext.pyc	14675	606ad2e00535dd0f4fee5bd8d8562b29
-logo.png	69816	4a7517b22cfd75cc9c15e3fc1b7ebeec
-library/libpangoft2-1.0-0.dll	815421	1dbfead06e26edb81f0849490210e3ff
 library/random.pyc	24831	54b2048974a5c98912276ffa5dc637a9
-library/mlx/util.pyc	4884	7537803cf47e18210ab5f298ba9eba9e
+icudt.dll	9956864	5434e18b933e03f274d8da59fda4c676
 library/mlx/soundsched.pyc	9185	4211730170fddb82b5683ce1849234ee
-library/doctest.pyc	79210	620422f95e18417ff5f8440534a71e91
 library/mlx/logger.pyc	13109	a70c061d36cf6b4e540f5610133466d3
-library/encodings/cp775.pyc	7888	25bf7dd514dff294aa02d5119399b2b7
-library/libfontconfig-1.dll	279059	dd583bedc5efe7bbd21a8ef107dec88d
-library/_strptime.pyc	14347	ad17a449b54061177a080e3a21507a39
-library/mlx/singleton.pyc	9184	9eec2ed5b230e043afc56592fb13a684
-library/mlx/airports.pyc	4350	e0fee9bae54850629841bbcf68b1b89f
 library/xplra.pyc	32012	50a1d9f19c0cc88783d264909ad1c678
-library/socket.pyc	15488	35f8eb455d6d8df8e19826d1dd7193f2
-doc/manual/en/statusIcon1.png	6472	10a7158dd8655de3f18ba914eb2373a5
-doc/manual/hu/prefsAdvanced.png	16738	d39884283d7c0f25efa3dc97328749a3
-library/encodings/euc_kr.pyc	1646	af2a5eaf1ea334c3f3bd60ea13db33a9
+library/selenium/selenium.pyc	88274	e4b7af1a0fdb5800faba4cdbba1e85b3
+library/selenium/webdriver/common/html5/__init__.pyc	131	e2214dcaff874176a4d2b8ecdaa8a677
 library/encodings/string_escape.pyc	1907	5856af6d4b4bbbe84b0595434afe8d34
-library/encodings/ptcp154.pyc	4700	377245b13f9246526c8c17b5e13bac4f
-library/gobject/__init__.pyc	5154	944a57e672b63943bf88c5dbe459cd41
+locales/lv.pak	7778	892b75d606ecee874c180454b1dcb956
 library/xmllib.pyc	25767	3ec689dd4068f2f244823616800486f7
 library/re.pyc	12699	5b157b40e294465c0f3d2ca82f70f66e
+locales/gu.pak	13531	b227db903a5cadbf928e97133643415d
 doc/manual/hu/flightInfoTab.png	28786	3e8af27775131f02696b0912ca441f36
-library/encodings/utf_8_sig.pyc	4625	1b1405db186e5819fa271ff96c1ca2c5
-library/pangocairo.pyc	555	6323df5caa1cde78b3888b71fb9ef34e
-library/encodings/cp1255.pyc	2697	b265913c887f2e1c8736632b652c0093
-library/encodings/zlib_codec.pyc	4308	319c9073aff840436a03cc1fa0b08fb5
-library/encodings/unicode_escape.pyc	1996	32990583f1caf874e556087da7b92971
-library/pprint.pyc	9852	6b4724e14285c257116655b1d4ba6db1
-doc/manual/hu/connect.png	28822	929f3eb85ee3cad019e12017c923f664
-library/encodings/palmos.pyc	2876	9284ad53dcfd82dfae0a79923b1cf91d
-library/mlx/web.pyc	36866	96511f975c55c000b0e9c16dff3aa31b
-library/mlx/gui/gates.pyc	5635	ea478376f306ce9d6d0ed2e759407c00
-library/email/feedparser.pyc	10682	4de6a63da8dc270c9881edb9c2f28508
-library/gobject/propertyhelper.pyc	8878	cc3598dab17d31ff46a6dee669ccb5ed
-library/intl.dll	152489	eb2d4c4d4a527bc88a69a16cc99afcf5
+library/xml/dom/expatbuilder.pyc	31399	c996bf83ee6078c9ddda33b79ce11d48
 library/encodings/mbcs.pyc	1883	2213911a7dd0deada6799b63e18b695b
-library/pyuipc.pyc	543	2977fd6e66c07bb48bb2c21f1b90139c
-sounds/TOC.mp3	273032	fae1be2ad25c8b54806bd1d759919705
+library/json/decoder.pyc	11727	edb191cd3c20a61e33cbe04edd422270
 library/encodings/iso8859_4.pyc	2678	16f2fe7994051752360c533c052b892b
 library/functools.pyc	5569	4af4ea4f948f8327649fd65f93cde1d4
 library/getpass.pyc	4627	7c01bf3df2e0074115d1a484629b4c63
-library/freetype6.dll	538324	fe5ec4b2a07d2c20a4cd3aa09ce0c571
-doc/manual/hu/finish.png	31044	adb40bacabf2cc597687fffe5c3340de
 library/encodings/mac_cyrillic.pyc	2745	c17fd9fd5bc854dd5ffe80076e1eeb02
 library/threading.pyc	26361	ac75b44a3dfea9ec884fcde4f7aa3275
-library/email/__init__.pyc	2752	5e1a1ba649ac697d631b031987d09c33
-library/share/icons/hicolor/index.theme	22255	5138b82a57488ee821b8a38c2aa1420e
 library/pywintypes27.dll	110080	7fa49d1d53588cca5071dfaa61061087
-library/glob.pyc	2238	d06c4386d18e2ab7f53fb866599403cc
+library/lxml/html/defs.pyc	3980	b5d26d607dc394b6a37511fc902fed94
 doc/manual/en/calloutsEditor.png	14862	8041dc5f889a8913f510bdf0da923b58
-library/encodings/iso2022_jp_ext.pyc	1715	97eda1c1468f65445951b0bf23a89570
+locales/ro.pak	8130	3220d7b7833d5a3df586c24a6f1696a9
 library/unittest/runner.pyc	7220	118e9e76a41d050e53c2a5ef70189acb
-library/_threading_local.pyc	6424	9dfe88d58a5811d2d56347cc381ebf0a
+library/selenium/common/__init__.pyc	166	b2bcfbae2f994badd5e73c3ec186552f
 library/abc.pyc	5923	c45df4ceeb48b9c74dcb8bc4d5928924
 library/os.pyc	25063	7c7eee513ae4238d1b2c16af719c10a0
-doc/manual/en/payload.png	28191	b9d22d6226541b8f58df89c7c9da9a62
-library/pyuipc.pyd	47616	2b4fe2d52575de71dda6f72690cf581e
+library/selenium/webdriver/chrome/options.pyc	5251	e62df837d9fe50d3f6464a0c4f02489e
 library/encodings/cp424.pyc	2669	4667015363f54bae44e98d4748e8acfa
 doc/manual/hu/flightSelection.png	30815	e8bcdda6079c6b16ffa72ca62c21ca85
 library/win32pipe.pyd	24064	de374eded459293b2a7eb8ed8fb38eaa
-library/win32pipe.pyc	552	19590da3d42ad587ab8f48ab66c92312
+library/win32pipe.pyc	552	91891e843acff73f0bf28e2450464e7b
 doc/manual/hu/cruise.png	27460	a2610173563e45baae1b0f9e63007ebd
-doc/manual/hu/logTab.png	28706	f48004202310bd2a1cb2f873d8064e93
 library/encodings/iso2022_jp_2004.pyc	1723	66376e788f3819e781897268c1100986
-library/win32event.pyc	555	c419ceffad157c77eb64a0567a49f85e
+library/cefpython3.cefpython_py27.pyd	968192	58161b73feae974f560d2c9f416adf3b
 library/encodings/cp866.pyc	8103	f36418dcf93b17b3ced63bd544f44159
-library/gio/_gio.pyc	549	dc1412f35c94fea43409ff9228163889
+library/gio/_gio.pyc	549	2965d8aa7312527dda6888c8f5ecb287
 library/encodings/cp437.pyc	7874	63f1278c0a66129c6fb4f504d6b61b66
-doc/manual/hu/helpTab.png	27961	8e7cc4aeb8d7f40fcf186c7caf53583b
+doc/manual/hu/prefsSounds.png	22667	452c396c2bda9684bf052c98fd7870d1
 library/mlx/gates.pyc	7002	20aca1eaf3de122eda51883b5b518f6f
-library/encodings/shift_jis_2004.pyc	1710	f8bb22a8b02dba2b66b7f77122c98fd6
-library/encodings/cp856.pyc	2701	8b6649490089bedd87e9b8c56985f6b3
 library/mimetools.pyc	7837	c9accd6ef795bf71c90630be0161cadc
 doc/manual/en/pirepLoaded.png	9887	e27a7c87e134944787e29874c455380d
-library/mlx/gui/weighthelp.pyc	13179	9ebfa07c41e167371380dda80b5bd72b
-library/encodings/quopri_codec.pyc	3365	01342d4d2735bcbfeb333d784297547a
-library/libcairo-2.dll	1294335	c0da2a3ab704f338f0fc6df51fd99497
 library/encodings/cp852.pyc	7890	7d58aa3397615349148b7885dc0e5280
 doc/manual/hu/pirepLoaded.png	10573	af950f8f037d6e17a24edcb3e849d159
-library/gio/__init__.pyc	809	bc9332556e93183a58be5c10cba18557
 library/pygtk.pyc	1914	814f68243c9fd447c0aa02326f1ead2b
-doc/manual/hu/debugLogTab.png	34237	e4d91a024beec781966f7de91ffd196d
 doc/manual/en/cruise.png	26531	fc94f27a40dad772437494c71e3c3d73
-library/weakref.pyc	13028	5d1c14275f47e8cf6d40bc6877fde976
+locales/es.pak	7713	1bdcb1f825bf2bf68380662427f583b2
 library/encodings/utf_32_be.pyc	1747	3e8c9ef8145de502320202b1688fd2ee
-library/nturl2path.pyc	1755	7835082f2dd6806f99cc25bed13ff7dc
-library/email/message.pyc	27764	493826f529d17f5a21080a4c98b49369
+library/cefpython3/cefpython_py27.pyc	600	5aecdbd2ba6e2bcdc1bd808985d7825a
 library/encodings/mac_romanian.pyc	2756	a3b2a0892236bc80c8efe8940e33339e
-library/mlx/gui/pirep.pyc	16749	2006126d65a19999a20c4a34f1e94342
-library/mimetypes.pyc	17806	927ce6a7079707aaee925e855ed23454
-library/_ctypes.pyc	546	2d4307addb84216cfe89da22fc9e397c
-library/mlx/gui/faultexplain.pyc	9707	938e02beb962d574df694c77536533ca
-sounds/F70taxi.mp3	154854	51332dc691d3519355f61ed06c959d8d
-library/encodings/cp857.pyc	7611	1b46c8959ac097b73e1c680d464cdc32
+library/_ctypes.pyc	546	481eb87be1fe7c202bd442fdd963f41a
+mlx_cef_caller_secondary.sh	178	ecb35d3294a5d1e729697f802a75cde4
 library/encodings/iso8859_2.pyc	2678	da65f42e1be5bec97161e8c1cc4f0fb7
-doc/manual/hu/statusIcon1.png	6920	614cde237a5b4e2678ed15d9cd01088e
 doc/manual/hu/briefing.png	31774	e090e1a6fab300a2d55cac03ad71d551
-library/pango.pyd	111616	c934763bdf125c3dc92b56db817001d4
 library/encodings/cp855.pyc	8071	0a4259ba854c24186f2ce61d85883b4a
 doc/manual/en/time.png	26508	0267dbdd59e65692bb0b9108103c07f5
 doc/manual/en/flightInfoTab.png	27718	4634da26b64d2c1a07ff5a7eec1ae29f
-library/encodings/ascii.pyc	2081	a5fffd04734740386629fdba1113d585
 library/libgio-2.0-0.dll	1222182	ea1263fb4c2230284f3e30c446bfea6b
-doc/manual/en/helpTab.png	26243	cd5c021a2fc40485805b9fde03bcd060
 library/encodings/cp037.pyc	2639	2981678e762ba857e30becbe27eb6614
 library/email/parser.pyc	3669	b4c89014f11b6551907291d3b789f371
-library/_MozillaCookieJar.pyc	4392	21966f49c75d0bd7827ec82d4e6e5d30
 library/repr.pyc	5045	82f0d89c685c3dacd941e01e4b2f31ef
 library/quopri.pyc	6352	87c42d94f753dd4c8a761cfa79453bb8
 library/htmlentitydefs.pyc	6347	814dc784fdb3d998dccee4c3f4c0394f
 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	16956	458d28bd83dc10d0b2cb3c1a2623bca9
-library/encodings/gb2312.pyc	1646	466ac29d34de1ad4b3d299ca834e28d9
-library/libgdk_pixbuf-2.0-0.dll	285194	e4c64b0e7e4c6606f3973a16c0c1ee84
-library/encodings/big5.pyc	1630	a21b45d3e487bf09f40a08448040c97d
-library/mlx/gui/update.pyc	11427	5698abbc9b133f18fa2c37d3bfa74bee
-doc/manual/en/gatesTab.png	29585	00ebc96a2b4a7473dbb6a3162a04192f
+library/mlx/update.pyc	16925	8c57d867b7f8ed088ab2b2afb2ae455c
+library/selenium/webdriver/firefox/extension_connection.pyc	3145	5f8929a22a172a0aa71d4d4acb2aaf17
+library/selenium/webdriver/remote/webelement.pyc	17884	6fa60da9a8bc1d2dc6e1286d9bd8f1ab
 library/bdb.pyc	17708	9a8fdcaa65f595c842689247847879d9
-library/mlx/gui/flight.pyc	126827	159f2acb2bda5ab2719affc81d8e1c7f
+locales/sl.pak	6956	f4f7de66d579c41682c64ee1ef1f11f8
 library/unittest/case.pyc	37758	1d2235e74c246b562c5c00ddf73c621a
 library/subprocess.pyc	38648	c9f749db06dfc9fb32079de51d6efd01
-library/mlx/acft.pyc	39301	a2bc53905f026b474e7b50df620ee7dc
+library/mlx/acft.pyc	40830	effafce121013f2b7631e46bf568b2ac
+library/selenium/webdriver/firefox/firefox_binary.pyc	7758	cee737a6fd574b0f2e6ca28508844a30
 library/gobject._gobject.pyd	113152	3d05dd191361f83aa247b62c700fa04e
 doc/manual/hu/checklistEditor.png	27863	8c750892a52dc10ca654a9d0b2765358
-library/keyword.pyc	2063	4d5bab044f614cfdabe89011cd3d7375
 library/bisect.pyc	2971	ad8ce3e265b404ed3971b842106f8179
-doc/manual/hu/index.html	51903	4bfbb26709c699f21fe593cb4efd2d98
-library/encodings/cp862.pyc	8003	261df6dd1a6e5ad90a83dfc739a25e0a
+library/mlx/gui/acars.pyc	1057	27238740a8776e6d8e6c8867d23955ea
 library/gtk/_lazyutils.pyc	2772	93f9aa41ad4223106d99340cd539a566
-library/mlx/gui/statusicon.pyc	5616	03e079307c1f83f36284e1b32887b28e
 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/encodings/cp863.pyc	7868	fc7ff06dab536b93c68fcb8e7bac713f
-library/xml/parsers/__init__.pyc	294	83f6a77ed8cd962b3c75c4779dc557ac
-library/pyexpat.pyc	546	8554aacca112be2cb661f77bee54716f
-doc/manual/hu/gateSelection.png	29237	bac37e7001261a40a84e4202247f6052
-library/cmd.pyc	13512	808f813d5e354b7073a1356e44c7b554
+library/pyexpat.pyc	546	bc188a96c9c3a69312eb9fb5d9183558
 library/unittest/loader.pyc	10884	591a785be23fba35582ce33bdd3d7acd
 library/ftplib.pyc	32043	5a1925388a0874e459aed6891f4cf0c1
 library/libgmodule-2.0-0.dll	36986	b0b2396fc6413016a45a5e8ca2ea8152
-library/gzip.pyc	14358	2a4a036a0b24586b6bdde419847a18f6
 library/libatk-1.0-0.dll	163476	c703f592ddf798472189d895b652aff4
-doc/manual/en/route.png	25228	c1b2fb99d21cd862ea292d693400c955
-library/email/quoprimime.pyc	8590	f6c7a8ad81d44037dd074f4871053dab
-library/encodings/cp1140.pyc	2639	8320825626639ecf4604aac43477b65c
+library/platform.pyc	35896	50aadbb6c4c78153f204e07704a2f892
 library/unittest/suite.pyc	9838	bf2c79bd4a6b6032f1ea53fa4908748f
-library/encodings/cp1251.pyc	2673	cb5ce7a7207c53f1d9e7cae48b3fb258
-library/encodings/koi8_u.pyc	2686	b7e5a52eaaaf6b340075b40dc7596f42
 library/encodings/mac_arabic.pyc	7824	820deef79b02e1f7e52eb18e9be655bf
-library/mlx/gui/prefs.pyc	27685	9f1dd6950e694169e6e12a768fb4d2a8
-library/atk.pyd	208384	ebe7f0929eac23a3205d17d69906e172
-library/win32event.pyd	18432	8b65330a56e2bc60d43d6e266c3a922a
+library/mlx/gui/prefs.pyc	27921	24af38ec7e9b5dd275557147785f3d74
 library/encodings/tis_620.pyc	2748	5969b4db4f967b11ae7992cdfbf5890e
 library/encodings/base64_codec.pyc	3568	1d8f13d09024bd124a9ff73a9244c0f1
-library/_ctypes.pyd	106496	deccede0781726ce0daa75a4635bf919
-library/encodings/euc_jp.pyc	1646	c0d60e6d08161643bd7dbe651063f334
-library/encodings/utf_16_le.pyc	1854	dfa68705c26fd303adfc7ce3322166f2
 Microsoft.VC90.CRT/msvcr90.dll	655872	e7d91d008fe76423962b91c43c88e4eb
-library/_socket.pyd	38400	5d273be76603399e88cf57f2605004bf
+library/selenium/webdriver/phantomjs/__init__.pyc	128	48073c8ec42358f04a36b7f127c3db92
+library/distutils/spawn.pyc	5292	4cbe559081b3f8cab915a083bd9ef4bd
 sounds/ding.wav	80856	18e639792d3767436ac6955eb60e4f54
-library/_socket.pyc	546	b1108e87d6be8d38c7e2c6e6cfa03992
-library/encodings/hex_codec.pyc	3520	a8b8d5b7c8810379c7007bcbc253951c
+library/selenium/webdriver/firefox/__init__.pyc	126	0ce57f6223e88783f1a5d4d8c4998682
 library/mlx/checks.pyc	62721	759425ec78c8430f699691e5abf92c1d
 doc/manual/en/statusIcon2.png	5875	71fc121823dee0a4c00715fac1b5665c
-library/mlx/sound.pyc	8226	03b098ed1dd965db98ef4f75b07d6cae
 doc/manual/en/pirepViewer.png	25098	7c545e70b995ac0f9fcae93fe5d0e899
-library/encodings/aliases.pyc	8750	75c22196420d0157fec085d285947a71
-library/glib/_glib.pyc	555	f29fe66820e637dadd911b7b8275820e
 library/libpangowin32-1.0-0.dll	108945	d07f128828225b7cc38e9e590eb3ba8a
-library/encodings/iso8859_10.pyc	2693	5e6cc8f721486ddbc1c99da285e13191
-library/win32api.pyc	549	a39e5810fa1f2f7d4c0738f05e64cdac
 library/gobject/constants.pyc	1957	2e9cdc605e7c449ef4fc23f56128acec
-library/libgtk-win32-2.0-0.dll	4938115	cc6dca192aca6f91bd96a5b5f86e036d
 doc/manual/hu/calloutsEditor.png	16026	fede870894a85e5d21ca16a026aa6a98
 library/mlx/xplane.pyc	67098	a714130f818d2d0220760c98268a1e66
@@ -390,78 +250,374 @@
 w9xpopen.exe	49664	e6895233ad1e6f3dcdd04c7c26b0e7c0
 library/locale.pyc	48754	a51d20267132acc6bc66ac6252cf870f
-library/mlx/gui/callouts.pyc	16060	7a3055f313e693779e9d2df22bb7568a
 library/encodings/cp1026.pyc	2653	ced5dd0cc0da378b0968f82309b9bcfb
-library/encodings/iso8859_15.pyc	2693	b892f358bbc25ae9d3824be158aabe28
-doc/manual/hu/prefsMessages.png	22980	6e60ec51305e95e5d057c0dd82b69460
+locales/ms.pak	6916	b7742e34f8fff506ced8caedc5dde0ff
+locales/lt.pak	7703	6fa4b1f4e7a936189a41811e0d0e3431
 library/win32api.pyd	98816	4a1ebd35719d263205eb014913b784bf
 library/encodings/utf_32_le.pyc	1747	8679f9c7cca87ad540b30c176ef914de
-library/_abcoll.pyc	19891	a5c1881934f1533c22b22b9317ac1d68
-library/encodings/iso8859_11.pyc	2787	a31e6d0d34e35259d7183cc9437eacca
+library/selenium/webdriver/common/touch_actions.pyc	7806	8de07e30cc8e6b7014b6a5c80ba7bc6b
+locales/zh-TW.pak	6505	ba45f30c77d990e9139af1f48927f717
+library/selenium/webdriver/opera/__init__.pyc	124	7b04c3d7c320d1da1cb3cda037eba3b1
 doc/manual/en/prefsSounds.png	21397	9037f17f772e554e7d9d24133acd5c4d
-sounds/cpt_takeoff.mp3	8255	254edcf79b8b3752d1a7c191c57f615a
+library/posixpath.pyc	10734	d694316c239784c444b252c801c97efa
 library/encodings/cp860.pyc	7857	59c6f69108873700081e71b2faaa29f8
-library/mlx/__init__.pyc	103	029f80bd80f880e6ca70ef4ba46f7d06
-library/encodings/iso8859_13.pyc	2696	f901ae0bbcfbb78f0c1783e89b2e2dc5
-library/mlx/i18n.pyc	1972	fe45816e49cf5e380bc39942a9dfa875
-library/xml/sax/saxutils.pyc	12382	32ed045b3b520234ebea6a508a6569fe
+library/selenium/webdriver/support/select.pyc	8438	be8c4fccc3c268163b6800af0a83dac8
+library/_MozillaCookieJar.pyc	4392	21966f49c75d0bd7827ec82d4e6e5d30
 library/share/locale/hu/LC_MESSAGES/glib20.mo	84697	a3167f1c306a43d662f7c261abc69156
 library/heapq.pyc	13109	20df4990fffba06bbdda995ce7466caa
-doc/manual/hu/gatesTab.png	30710	a6a59e6a2660c15418489e8785e4bcee
-library/webbrowser.pyc	18138	c85009edebad6d278fe786fec10ebbbe
+library/selenium/webdriver/remote/mobile.pyc	2444	e666ca905ceeb2a1569a60ed6eea974a
 library/sre_compile.pyc	10792	c58f94fbee661f3bb0c59ecc13c0416e
-sounds/notify.wav	119384	108025b17f67e61946df5d7fbf713cdb
 library/encodings/iso8859_9.pyc	2678	88880e046738ebd2012c8034416a9adf
-library/encodings/cp875.pyc	2636	c72faa5d1cb6105ae81c971448fea479
 library/encodings/mac_greek.pyc	2699	770cdf4f35a081a8ce71e776e6ecd804
-library/dis.pyc	6068	3934ab23d64f3da393305b19df0f1fd0
-library/difflib.pyc	60869	38d2e1340b64e22d7b1fed90a57fb83a
+library/struct.pyc	219	421271d66b783c3f13c37ec09efa8b65
 library/hashlib.pyc	4346	fc9aecaadc9607989e48449f46cbdfd1
-conn_green.png	936	0b7fbe8ee0af2cbeefdb42110a8fdf34
-doc/manual/en/index.html	47073	66a8cdd22cfd3d819c02f3aaab48eaea
-library/encodings/cp1253.pyc	2689	52d4a723e9e86940701cb648b40ed884
 library/email/encoders.pyc	2092	cd83727bafdb4145b8fa43dd10ea48f3
 library/email/iterators.pyc	2266	b8a0df35815bc00be1ed8ece42aac537
-library/encodings/hz.pyc	1614	876bb7c36683358c3e95005619b10541
-library/encodings/cp737.pyc	8102	40e61988748e4ca1742a2bad43949f4e
-library/encodings/iso2022_jp.pyc	1683	40c2b92127f99452f84b250c2b4b2cda
-library/libgthread-2.0-0.dll	44287	7ad6f303082b382bff7bafbab246c61f
-library/glib._glib.pyd	58368	0de636503e43c4eb00e80927bc9bda97
-library/mlx/config.pyc	30521	18f980c9cfecafe53ae473bb1ca69a54
-library/atk.pyc	534	45ea15aa2ebf37b7d14f67ae940b0ba6
+locales/pt-PT.pak	7270	731a9c54bd2331f411a5a2976d1f3622
+library/selenium/webdriver/remote/command.pyc	5463	3e7f6443358e670e58a7fc6c97e4ab16
+library/encodings/iso8859_10.pyc	2693	5e6cc8f721486ddbc1c99da285e13191
+library/mlx/gui/statusicon.pyc	5616	03e079307c1f83f36284e1b32887b28e
+library/mlx/config.pyc	32743	5a5523901d6fcb215f84e3d217c47f31
+library/atk.pyc	534	2a53b13519b7419e8cf08f48baa4c1b6
 library/gio._gio.pyd	263168	acb8c95fdc391079bebdf7d8685b0dbc
 library/encodings/cp861.pyc	7868	c97a8970ce4d9f40cbafbea6576fbdca
 library/encodings/cp950.pyc	1638	00b7b6457e3fef8feb173ed8e561825c
-doc/manual/en/logTab.png	28522	305732f8485a15b7c802801038d688b7
-doc/manual/en/prefsGeneral.png	24487	4858becb6764518a428273e5ee8ee4d5
-library/encodings/johab.pyc	1638	5346c11a863ffbcfb21aba8f1d2236b7
-library/encodings/cp1257.pyc	2683	d24f94b6abbda684c0ad9f3370d86956
+library/selenium/webdriver/safari/webdriver.pyc	2470	f5e61aec420bfc43a08db515c9b75276
+locales/cs.pak	7347	82b7a3d87a1307e65b6dac449e858721
 library/__future__.pyc	4177	43d264d951ac2085334c7b9dd4558595
-library/logging/__init__.pyc	54813	7bcdf2e8da474f5e94d8e499f6fc3ed4
-runmlx.exe	64000	c7d906aea1b4aa8b4496febdf150717d
 library/optparse.pyc	51253	39594a40bc1222173d57b7d5740e3d92
-library/mlx/fs.pyc	11863	63fda2c4e0727136be69ed82f9e2bbc8
 doc/manual/en/takeoff.png	26128	63fb0227347eba88fe4f108d730dc8c0
-library/unittest/result.pyc	7444	aefbb3cc79c0ff17787ce84faed7f5e8
-library/inspect.pyc	38547	836f659fad54f5ee7e8f9d565003aacd
-library/pickle.pyc	36348	2b55640f6f4e2fd70d95482fd16bfb73
-library/encodings/cp1250.pyc	2676	c92e287a2aa6a1c924df287d826aa3b7
-library/encodings/cp874.pyc	2767	fe0c510a9aafa14cae6b037955a93f0b
+library/selenium/webdriver/safari/service.pyc	2695	e70fc7f74f77a3824804835b54bcfea4
 library/cairo._cairo.pyd	69632	46d708899832abc0123c4e9cb4f61d5d
 library/zlib1.dll	100352	d90dad5eea33a178bac56fff2847d4c2
-library/glib/option.pyc	11891	bd90183c75d8f473ecf653e3d63a27f9
-library/StringIO.pyc	11100	f4eb4a2bb3d6fb0af925681c5375c673
-library/pango.pyc	540	516526ae5531b783342c20285ba0ee7d
-Microsoft.VC90.CRT/msvcp90.dll	568832	6de5c66e434a9c1729575763d891c6c2
-library/sre_parse.pyc	18380	fe2376a101668be1124f9ee316662bab
+locales/en-GB.pak	6364	2a92f4fc905c2743129ccbcdf80d443a
 library/mlx/gui/delaycodes.pyc	12929	e8c1d6f46ef6e369451be3cbde0a3127
 library/encodings/raw_unicode_escape.pyc	2048	8138045029da04bf45204ab756d1bcd4
 sounds/TOD.mp3	174707	92176d53d948fbfebd08c011b063179a
 sounds/board.mp3	296751	bbacc6eabce97cbae49b4157ece7b8fe
+locales/uk.pak	11136	21bcaa6fd116b4f5f23ee207e96fa156
+library/gtk/deprecation.pyc	3104	2e6c9eef82dfa8aa3beb05abd3e274a4
+Microsoft.VC90.CRT/msvcm90.dll	224768	4a8bc195abdc93f0db5dab7f5093c52f
+doc/manual/hu/route.png	26601	fd1ee7c47290f4c3a2f9fd6618aeb678
+chromedriver.exe	5009408	d662fef51894e4e5b6a6f508ed214904
+library/encodings/iso8859_7.pyc	2686	db390f1961c1fd4181e351c330816ecd
+library/xml/__init__.pyc	1058	8f77f254e8c6db7a3b6d9930a686d787
+doc/manual/en/finish.png	28855	671eac74a9f5801c794f08d5861eafaa
+doc/manual/hu/bugreport.png	12385	c71c7db56f19870ae5d6bb7f533d3679
+locales/pt-BR.pak	7211	d0542b9b325ea58be590d021aeb7333d
+library/libexpat-1.dll	143096	701659d3689bf4a8265b669b7d774255
+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	54583	52c366560eec66413e5e7850fb5b3308
+library/stat.pyc	2503	d3b6dc7a54e705219f04d0be75a212de
+locales/ru.pak	10392	1b66f03dd656a2433ce643d0259fca6f
+doc/manual/hu/landing.png	28525	2dd99249a389e9faf5c4d7b1180e8ebb
+library/gobject/_gobject.pyc	573	e4e42f72e063e30757a0183f9b06fe39
+libcef.dll	38585344	4dfb8a77f35c41bdbe8469877d4af853
+library/encodings/utf_7.pyc	1747	2beeb059236527197d6c640396476ce8
+library/atexit.pyc	2083	595a09be339c73c3c02e378d99325d2a
+library/cookielib.pyc	52852	2a1030653dc204a9ba1fb56fd32eca68
+library/email/charset.pyc	13200	771aee9802116e673d08b44bc0450f99
+library/libpangocairo-1.0-0.dll	104729	d3ad38599649097a3645777ff95be08e
+doc/manual/en/briefing.png	32129	65cf1236d009fd61c1bd6c374ffd261c
+library/uu.pyc	4212	0073b65d26a6092e4e177c7763058fa4
+library/encodings/iso8859_1.pyc	2678	f09ec3b7f6a348cbd7f7286b60572bd0
+doc/manual/hu/monitorWindow.png	20577	34bfd26fe50e72706625a9203ac98217
+library/pangocairo.pyd	17920	5fc69a7d29a6d3127710c64de440daa4
+library/pangocairo.pyc	555	d83b002b1ec69315516867733a206a60
+library/zipfile.pyc	37345	568c6ee7e0404625f47248340afb4524
+locales/it.pak	7188	10ae10d8bfcffbfa1160574134e14edb
+doc/manual/hu/helpTab.png	27961	8e7cc4aeb8d7f40fcf186c7caf53583b
+library/sre.pyc	499	92bb633daa0bab6550ec0e3677673b5b
+library/tokenize.pyc	13565	354d02cd79df187a28c1851a1e3bad96
+library/win32con.pyc	140797	84d2d064066cfbcc219230f7e9c6e0b0
+library/mlx/gui/flight.pyc	147639	f487da6516256651fdc2410dac2ed76e
+library/xmlrpclib.pyc	40724	d4f819f9199ea21236a74c967e335c43
+library/lib/gtk-2.0/2.10.0/engines/libwimp.dll	97984	a5bbbe46e1363aba9020a76f2d58e9d6
+library/email/quoprimime.pyc	8590	f6c7a8ad81d44037dd074f4871053dab
+library/copy_reg.pyc	4893	7a58bc441232056d1c123cd3375b3774
+library/libgtk-win32-2.0-0.dll	4938115	cc6dca192aca6f91bd96a5b5f86e036d
+doc/manual/en/debugLogTab.png	33696	5be65d41058f78554840032c51aa9d6d
+library/dummy_thread.pyc	5094	310a3d15c9cf20259b0ca4892811dec5
+library/gtk._gtk.pyd	1882624	bbb1d1e41bbebc6abf69bed719d50497
+library/_hashlib.pyd	287232	a1a18de0644f481749fcbcf26005eeaf
+locales/fi.pak	7098	70c7e2fb26c7abf09cb0f9972fb6c93a
+doc/manual/en/monitorWindow.png	20886	42e08d10c758e21209c4c021f391dee7
+library/_hashlib.pyc	549	d4aff375686d5501893ac1116dbaf7a1
+library/copy.pyc	11674	30d1745c5e38ab170f8a0486fbebf305
+locales/et.pak	6856	18a0a857e46c28b7f1cd8ff639a24aec
+library/unittest/result.pyc	7444	aefbb3cc79c0ff17787ce84faed7f5e8
+library/mlx/gui/__init__.pyc	107	22f268cac1c5be2f3a058810b6caead3
+library/mlx/pirep.pyc	4623	6c485ea65ff6245ab56960a8bbec7051
+library/json/scanner.pyc	2169	e19ee185b7c79ab5cc433b39fcd33faa
+library/traceback.pyc	11223	50ace5c2c6c040a923082442da94cd78
+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	1300	9c6f2d502b9274073cd96caaf4fb90ff
+library/ctypes/__init__.pyc	18846	2bd183962453ae93d6887b303d3fd338
+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	fb6b7b442e46dce7a08d5875101f4a21
+locales/te.pak	16110	c3af85e60b78273a93970cf8805ded04
+library/lxml/cssselect.pyc	3861	2e693f0c25ab04b1d130646cddd4e081
+library/warnings.pyc	12666	9788b5f45765e8204e04c820f2711094
+library/selenium/webdriver/chrome/webdriver.pyc	2758	a7d3d371b22119d0327d9af9f77fd845
+locales/sv.pak	6641	4e11abed42cc59a403ae4767d2acbeff
+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	74670	4da0a45a9a6372a2e463ab21fdc43359
+library/xml/sax/__init__.pyc	3579	c78222ad1fd4f3dbdea06666fe74e84e
+doc/manual/en/connect.png	27436	5406dfe5408569cb95499c057bf0185b
+library/selenium/webdriver/opera/service.pyc	2411	df01b6f7348ad54da47919158fe7e596
+library/selenium/webdriver/opera/webdriver.pyc	5308	7ba71ef197d7d537635427f166da0f1c
+library/encodings/charmap.pyc	3203	2358b8eb05c66e2a2826b5db6f214547
+library/libgdk-win32-2.0-0.dll	931390	a2b46daac3d4140efdf86429f7aea476
+library/mlx/gui/common.pyc	10433	e96ada4071fcdd2937398627d5d281dd
+library/dummy_threading.pyc	1265	5ab5c897721aeb346b5bccb84066c5bd
+doc/manual/hu/index.html	51903	4bfbb26709c699f21fe593cb4efd2d98
+library/encodings/cp1258.pyc	2681	5c09b3b0a82036b0e785422376cb64cc
+sounds/767taxi.mp3	160496	4cb43cda6e1214fbe15328a716827345
+doc/manual/en/prefsAdvanced.png	16169	64c14e0842c413cac98b92926279f3e0
+library/xml/dom/NodeFilter.pyc	1066	c5061d268ede84cbb951957f9ca3d820
+library/calendar.pyc	26136	6f2f18efc99d759f99b2935b9dc9dbb1
+library/encodings/aliases.pyc	8750	75c22196420d0157fec085d285947a71
+conn_grey.png	988	7a956ebba793197f324cec56d94073e7
+library/HTMLParser.pyc	11589	f641df5331b5bb552ebe180f79b85a6b
+library/bz2.pyd	76800	1ca9ececd2c84b80996fe632627f857f
+library/encodings/iso8859_16.pyc	2695	85e819a29dec2b601ce978dcd5a040fc
+sounds/cpt_takeoff.mp3	8255	254edcf79b8b3752d1a7c191c57f615a
+library/bz2.pyc	534	950c3961b75846807cc186203935c92d
+library/email/utils.pyc	8840	a7be428df6fddee6121cfce55382d1f8
+doc/manual/en/prefsGeneral.png	24487	4858becb6764518a428273e5ee8ee4d5
+library/encodings/iso2022_jp_2.pyc	1699	4b917caa926e5779176612409c66be39
+library/_ssl.pyd	720896	90826a140137efd0d806038828e16f8e
+library/pango.pyc	540	4a4e27fa2068680ba2a67bb99132370a
+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	18944	b8bf9f3d22348aa1f78727f81d967f93
+library/email/errors.pyc	3229	cdb78ab237e195ad69f059128bc03b1d
+library/linecache.pyc	3091	666e6f81b0ea9a7637f8068493f738d5
+sounds/malev.mp3	201247	8a00666288f14a1666eb112223c140e0
+library/encodings/mac_iceland.pyc	2738	dfff28ea5edfda00df56b4ab9a35bc59
+library/unittest/util.pyc	4358	1530cc34b18ae6a6c6128a1d8b1355d7
+locales/tr.pak	6938	55435ada333db8c7c60a3223d6885558
+doc/manual/hu/statusIcon2.png	7969	3ec6caa058848932d381da6e02c702be
+library/getopt.pyc	6454	8f8cd6763f5339988d157d153c910bf5
+library/encodings/cp857.pyc	7611	1b46c8959ac097b73e1c680d464cdc32
+library/_ssl.pyc	537	9292cb548f29c21f4b0125656d34f0f0
+library/os2emxpath.pyc	4312	0c35794eeb4739ebb4eb28b9a1daf0ca
+library/pprint.pyc	9852	6b4724e14285c257116655b1d4ba6db1
+library/xml/parsers/expat.pyc	259	d7be0c4de475d65e08ba7fdbabe088d3
+python27.dll	2206720	f8f39495ed4a813e8f3049a4b9f5cff4
+library/encodings/mac_centeuro.pyc	2747	6461bd7ed7a57683d5c36001f9ac85c9
+library/encodings/utf_32.pyc	5336	912103fef3db6edc29a35dd0cfb5c5b9
+library/ntpath.pyc	11407	533c9331a1b72cc80dd3f88145ba4466
+library/json/__init__.pyc	12974	d7e08774d4fee83dd2a6d3868855a800
+library/xml/dom/__init__.pyc	6039	5e78d16289c5ae3a9678d53f552862fd
+library/encodings/cp1252.pyc	2676	b4c43cc72650c911cf3654dbaf565df9
+library/unicodedata.pyd	688128	c856c31a03dc892e4f2aee93d0bfee44
+library/unicodedata.pyc	558	dcdfa7fdce1179d8097934a44c983de1
+library/encodings/cp1256.pyc	2675	c1bf26ed9c9b5ee0eec495138993cffb
+doc/manual/en/index.html	47073	66a8cdd22cfd3d819c02f3aaab48eaea
+library/email/base64mime.pyc	5221	c536d6f0c03f029bba77f15ef6ba3d99
+logo.png	69816	4a7517b22cfd75cc9c15e3fc1b7ebeec
+library/libpangoft2-1.0-0.dll	815421	1dbfead06e26edb81f0849490210e3ff
+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	9eec2ed5b230e043afc56592fb13a684
+library/mlx/airports.pyc	4350	e0fee9bae54850629841bbcf68b1b89f
+library/socket.pyc	15488	35f8eb455d6d8df8e19826d1dd7193f2
+sounds/notify.wav	119384	108025b17f67e61946df5d7fbf713cdb
+doc/manual/hu/prefsAdvanced.png	16738	d39884283d7c0f25efa3dc97328749a3
+library/encodings/euc_kr.pyc	1646	af2a5eaf1ea334c3f3bd60ea13db33a9
+library/encodings/hz.pyc	1614	876bb7c36683358c3e95005619b10541
+library/encodings/ptcp154.pyc	4700	377245b13f9246526c8c17b5e13bac4f
+library/gobject/__init__.pyc	5154	944a57e672b63943bf88c5dbe459cd41
+library/encodings/utf_8_sig.pyc	4625	1b1405db186e5819fa271ff96c1ca2c5
+library/encodings/cp1255.pyc	2697	b265913c887f2e1c8736632b652c0093
+library/encodings/zlib_codec.pyc	4308	319c9073aff840436a03cc1fa0b08fb5
+locales/nl.pak	7068	939be31defbe6bd9f925331ef3987f9a
+doc/manual/hu/connect.png	28822	929f3eb85ee3cad019e12017c923f664
+library/encodings/palmos.pyc	2876	9284ad53dcfd82dfae0a79923b1cf91d
+library/mlx/web.pyc	36866	96511f975c55c000b0e9c16dff3aa31b
+library/mlx/gui/gates.pyc	5635	ea478376f306ce9d6d0ed2e759407c00
+library/gobject/propertyhelper.pyc	8878	cc3598dab17d31ff46a6dee669ccb5ed
+library/intl.dll	152489	eb2d4c4d4a527bc88a69a16cc99afcf5
+library/selenium/webdriver/common/desired_capabilities.pyc	2206	9769c03bedeb640913decb1a9a23a695
+library/xml/dom/domreg.pyc	3211	1b8e458700a5b538a4f3e18af5403666
+library/selenium/webdriver/firefox/webdriver.pyc	2447	83d55a8eec9d18004aefe20d1622f352
+sounds/TOC.mp3	273032	fae1be2ad25c8b54806bd1d759919705
+library/share/locale/hu/LC_MESSAGES/gtk20.mo	58794	6ee4491ae7bc9d3dfb778578eb29a0b3
+library/distutils/log.pyc	2546	c50dfe4041313cc366461a899a1650cf
+locales/hr.pak	7430	a06f81a87b3fdb822a4f733abd21d1e9
+doc/manual/hu/finish.png	31044	adb40bacabf2cc597687fffe5c3340de
+locales/pl.pak	7227	14de2b7637dd2b260184c6ec85976091
+library/email/__init__.pyc	2752	5e1a1ba649ac697d631b031987d09c33
+library/share/icons/hicolor/index.theme	22255	5138b82a57488ee821b8a38c2aa1420e
+simbrief.html	116	d158a7e9f7f34da230229a5c2aab3e66
+library/glob.pyc	2238	d06c4386d18e2ab7f53fb866599403cc
+library/_threading_local.pyc	6424	9dfe88d58a5811d2d56347cc381ebf0a
+locales/fa.pak	9886	475b94417d7b2af113fb147a0c45da0f
+locales/fr.pak	7917	bac6c149685b4b84617ca8c8c39306b7
+doc/manual/en/payload.png	28191	b9d22d6226541b8f58df89c7c9da9a62
+library/selenium/webdriver/support/__init__.pyc	126	b99fdca3533d28cae3e7a63624932966
+library/sets.pyc	15775	ea560db2e34dae27d1fc9619a342ced8
+library/doctest.pyc	79210	620422f95e18417ff5f8440534a71e91
+library/libpango-1.0-0.dll	333729	5a14efd93ee27cfe960220fe4a904911
+library/encodings/unicode_escape.pyc	1996	32990583f1caf874e556087da7b92971
+library/selenium/webdriver/support/expected_conditions.pyc	14298	43b8884d089d85e074d0d9f2fbcd5e28
+doc/manual/hu/logTab.png	28706	f48004202310bd2a1cb2f873d8064e93
+library/win32event.pyc	555	d66e08d9b35f124fdff12cf4f8273869
+library/win32file.pyc	552	6a3826b7caca276e9a6e1b84f20302f5
+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	9ebfa07c41e167371380dda80b5bd72b
+library/encodings/cp850.pyc	7621	20d776af743fa7acf090fbd575eea143
+library/gio/__init__.pyc	809	bc9332556e93183a58be5c10cba18557
+doc/manual/hu/debugLogTab.png	34237	e4d91a024beec781966f7de91ffd196d
+library/weakref.pyc	13028	5d1c14275f47e8cf6d40bc6877fde976
+library/mlx/gui/checklist.pyc	12279	555775aaed42b3d0687e1b0f501a9f61
+library/mlx/fs.pyc	11863	63fda2c4e0727136be69ed82f9e2bbc8
+locales/he.pak	8198	2486731ee9bedc244d41143a2741775f
+doc/manual/en/statusIcon1.png	6472	10a7158dd8655de3f18ba914eb2373a5
+library/email/message.pyc	27764	493826f529d17f5a21080a4c98b49369
+library/mlx/gui/pirep.pyc	16749	2006126d65a19999a20c4a34f1e94342
+library/mimetypes.pyc	17806	927ce6a7079707aaee925e855ed23454
+library/mlx/gui/faultexplain.pyc	9707	938e02beb962d574df694c77536533ca
+sounds/F70taxi.mp3	154854	51332dc691d3519355f61ed06c959d8d
+mlx_cef_caller.sh	148	bd16cf4c784490bcd46d7845f2b6edf9
+library/selenium/webdriver/support/ui.pyc	228	f4a3e26b8378ea9c87e3c97595c42246
+doc/manual/hu/statusIcon1.png	6920	614cde237a5b4e2678ed15d9cd01088e
+library/encodings/cp1253.pyc	2689	52d4a723e9e86940701cb648b40ed884
+library/StringIO.pyc	11100	f4eb4a2bb3d6fb0af925681c5375c673
+library/gtk/__init__.pyc	3025	9f6605bf84c6cbd3c20f1d37e58af969
+doc/manual/en/helpTab.png	26243	cd5c021a2fc40485805b9fde03bcd060
+library/encodings/cp1257.pyc	2683	d24f94b6abbda684c0ad9f3370d86956
+library/selenium/webdriver/ie/service.pyc	3392	1f0c97b93092c2a239d70a3de49f0642
+library/_weakrefset.pyc	9290	a56e87c491c0511cd329a3c8c4cd9563
+library/selenium/webdriver/common/html5/application_cache.pyc	1322	934402964858ad8f330911c4a483d194
+library/selenium/webdriver/remote/errorhandler.pyc	5753	68a4e26bde6e1f039aa737ded0c3b781
+library/encodings/gb2312.pyc	1646	466ac29d34de1ad4b3d299ca834e28d9
+library/libgdk_pixbuf-2.0-0.dll	285194	e4c64b0e7e4c6606f3973a16c0c1ee84
+library/encodings/big5.pyc	1630	a21b45d3e487bf09f40a08448040c97d
+library/mlx/gui/update.pyc	11427	5698abbc9b133f18fa2c37d3bfa74bee
+library/encodings/cp1250.pyc	2676	c92e287a2aa6a1c924df287d826aa3b7
+doc/manual/en/gatesTab.png	29585	00ebc96a2b4a7473dbb6a3162a04192f
+library/libcairo-2.dll	1294335	c0da2a3ab704f338f0fc6df51fd99497
+library/keyword.pyc	2063	4d5bab044f614cfdabe89011cd3d7375
+locales/vi.pak	7990	f0d8ddd9bdabaef79a9c92f3fd021f25
+library/encodings/cp862.pyc	8003	261df6dd1a6e5ad90a83dfc739a25e0a
+library/selenium/webdriver/__init__.pyc	1011	9cce0a4d491b458d651474dc6fd09be0
+library/selenium/webdriver/common/alert.pyc	2550	cfd59475010657b35ef31c47d8c86fc3
+library/lxml/__init__.pyc	708	4e6d5e156fb2fe6a8103dd02a1037634
+library/selenium/webdriver/common/by.pyc	957	9cc3d4670125998f95147624f20d05b0
+library/encodings/cp863.pyc	7868	fc7ff06dab536b93c68fcb8e7bac713f
+library/codecs.pyc	34722	339dc90c17d548887dbcf1bbbcae5d5b
+doc/manual/hu/gateSelection.png	29237	bac37e7001261a40a84e4202247f6052
+library/cmd.pyc	13512	808f813d5e354b7073a1356e44c7b554
+locales/ko.pak	7278	41ecc83d5eef5887c7c288b3b570c7b4
+library/gzip.pyc	14358	2a4a036a0b24586b6bdde419847a18f6
+locales/ja.pak	8340	21ab6501f6d0c8d3e73b4921ce1b0086
+locales/ta.pak	16595	5136010addd237205a5560f92b635589
+library/email/feedparser.pyc	10682	4de6a63da8dc270c9881edb9c2f28508
+doc/manual/en/route.png	25228	c1b2fb99d21cd862ea292d693400c955
+library/freetype6.dll	538324	fe5ec4b2a07d2c20a4cd3aa09ce0c571
+library/encodings/cp1140.pyc	2639	8320825626639ecf4604aac43477b65c
+library/encodings/cp1251.pyc	2673	cb5ce7a7207c53f1d9e7cae48b3fb258
+library/encodings/koi8_u.pyc	2686	b7e5a52eaaaf6b340075b40dc7596f42
+library/selenium/__init__.pyc	187	a6b683ed0e7ff6f74be5d45717a38d10
+library/atk.pyd	208384	ebe7f0929eac23a3205d17d69906e172
+library/win32event.pyd	18432	8b65330a56e2bc60d43d6e266c3a922a
+library/_ctypes.pyd	106496	deccede0781726ce0daa75a4635bf919
+library/encodings/euc_jp.pyc	1646	c0d60e6d08161643bd7dbe651063f334
+library/encodings/utf_16_le.pyc	1854	dfa68705c26fd303adfc7ce3322166f2
+locales/bg.pak	11216	4b55274ffb8f7432bce15cd8b951472e
+library/_socket.pyd	38400	5d273be76603399e88cf57f2605004bf
+library/plistlib.pyc	18067	d8d36573e80bfdde7c73e47828f6e710
+library/_socket.pyc	546	fb1681f80f0e722983f70a325c23b3b5
+library/encodings/hex_codec.pyc	3520	a8b8d5b7c8810379c7007bcbc253951c
+library/nturl2path.pyc	1755	7835082f2dd6806f99cc25bed13ff7dc
+library/mlx/sound.pyc	8226	03b098ed1dd965db98ef4f75b07d6cae
+library/glib/_glib.pyc	555	ab1cf44ec256636cfd820e5bbdb5cf14
+library/win32api.pyc	549	5753c8241e91acd8cb4b02cfc18719a3
+library/encodings/iso8859_13.pyc	2696	f901ae0bbcfbb78f0c1783e89b2e2dc5
+library/selenium/webdriver/remote/remote_connection.pyc	21225	287db6d396dcce7180eada87e8c6ace0
+library/mlx/gui/callouts.pyc	16060	7a3055f313e693779e9d2df22bb7568a
+library/selenium/webdriver/opera/options.pyc	3303	243909f5d36e653ad3ad4921c8df4f78
+library/encodings/iso8859_15.pyc	2693	b892f358bbc25ae9d3824be158aabe28
+locales/sr.pak	10790	fd63b700458a187aca8dde86c160a059
+doc/manual/hu/prefsMessages.png	22980	6e60ec51305e95e5d057c0dd82b69460
+library/xml/parsers/__init__.pyc	294	83f6a77ed8cd962b3c75c4779dc557ac
+locale/en/LC_MESSAGES/mlx.mo	68019	e360bc22970f91fa071eec517a0a173c
+library/_abcoll.pyc	19891	a5c1881934f1533c22b22b9317ac1d68
+library/encodings/iso8859_11.pyc	2787	a31e6d0d34e35259d7183cc9437eacca
+library/tarfile.pyc	71654	aca50f546f1356a3e4b33db41bddb9f9
+locales/es-419.pak	7558	6a9495a0e074a933f0a04a5e5927e2de
+locales/da.pak	6631	1bf496bcde38f3f2899cd0fab6986959
+library/encodings/mac_latin2.pyc	4717	564dbaf5c296a147203eb821dc2466ba
+library/mlx/__init__.pyc	103	029f80bd80f880e6ca70ef4ba46f7d06
+library/mlx/i18n.pyc	1972	fe45816e49cf5e380bc39942a9dfa875
+library/xml/sax/saxutils.pyc	12382	32ed045b3b520234ebea6a508a6569fe
+locales/sw.pak	7078	5406f21a67934bbf0e6c633d2ca573f9
+library/encodings/mac_turkish.pyc	2739	1682e228ddfd2e74e3ccaee0b65e7261
+doc/manual/hu/gatesTab.png	30710	a6a59e6a2660c15418489e8785e4bcee
+library/webbrowser.pyc	18138	c85009edebad6d278fe786fec10ebbbe
+library/mlx/pyuipc_sim.pyc	57203	e1828998919f435bae2a5cbd969ff8f3
+library/encodings/cp875.pyc	2636	c72faa5d1cb6105ae81c971448fea479
+library/dis.pyc	6068	3934ab23d64f3da393305b19df0f1fd0
+library/difflib.pyc	60869	38d2e1340b64e22d7b1fed90a57fb83a
+locales/ar.pak	11942	495ed374baef7a96d1a59629f535d084
+conn_green.png	936	0b7fbe8ee0af2cbeefdb42110a8fdf34
+locales/ml.pak	17867	1041f687d729ea22199a84dc6d6c8eb8
+library/selenium/webdriver/firefox/firefox_profile.pyc	13834	6109af4f9224623f12f34284b19a2d74
+library/selenium/webdriver/ie/__init__.pyc	121	7b4e0c9b6ffbe3385f67f09687f325e7
+library/encodings/cp737.pyc	8102	40e61988748e4ca1742a2bad43949f4e
+library/encodings/iso2022_jp.pyc	1683	40c2b92127f99452f84b250c2b4b2cda
+library/libgthread-2.0-0.dll	44287	7ad6f303082b382bff7bafbab246c61f
+locales/sk.pak	7622	dfdff6206e5a79aef8b46d0d9c2a8367
+library/select.pyd	11776	d90bf525f9f6c9c3aa6532fa6e569b4f
+library/pyuipc.pyc	543	906cca78dfad2ae877c0a2e1595d3d61
+library/selenium/common/exceptions.pyc	9313	2140bc8b29eb7c3f4fc29622d0060152
+doc/manual/en/logTab.png	28522	305732f8485a15b7c802801038d688b7
+library/pyuipc.pyd	47616	2b4fe2d52575de71dda6f72690cf581e
+library/encodings/johab.pyc	1638	5346c11a863ffbcfb21aba8f1d2236b7
+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	e91c026bd70fdde0432196a536017b7b
+library/logging/__init__.pyc	54813	7bcdf2e8da474f5e94d8e499f6fc3ed4
+library/selenium/webdriver/phantomjs/service.pyc	3263	3a56577bb9f058e0d7e5be544a8e850b
+runmlx.exe	63488	3060aa0ed73648edc26992e224568352
+locales/zh-CN.pak	6386	36e1df83611aef6fbfeeafd067dd4241
+locales/hi.pak	13321	4b6b27ab4421c94685fc09051a2339f8
+library/inspect.pyc	38547	836f659fad54f5ee7e8f9d565003aacd
+library/pickle.pyc	36348	2b55640f6f4e2fd70d95482fd16bfb73
+library/io.pyc	3378	197da422e1d85c483c94fa0251b5ff76
+library/encodings/cp874.pyc	2767	fe0c510a9aafa14cae6b037955a93f0b
+library/glib/option.pyc	11891	bd90183c75d8f473ecf653e3d63a27f9
+library/encodings/ascii.pyc	2081	a5fffd04734740386629fdba1113d585
+Microsoft.VC90.CRT/msvcp90.dll	568832	6de5c66e434a9c1729575763d891c6c2
+library/sre_parse.pyc	18380	fe2376a101668be1124f9ee316662bab
 library/token.pyc	3716	732fa0a0cd1c7d9ae9cc696311160fc1
 library/encodings/gb18030.pyc	1654	b103fe74a6cdae113476f1fc5255550b
-library/gtk/deprecation.pyc	3104	2e6c9eef82dfa8aa3beb05abd3e274a4
-Microsoft.VC90.CRT/msvcm90.dll	224768	4a8bc195abdc93f0db5dab7f5093c52f
+library/glib._glib.pyd	58368	0de636503e43c4eb00e80927bc9bda97
+locales/el.pak	12310	8f69e235eb651b5c91569cd91c69c689
 library/encodings/bz2_codec.pyc	4388	d5ef2b625b70cfae3771a9601d37523b
 library/unittest/main.pyc	7701	82258a486f5133466c9cf10323814fbf
-doc/manual/hu/route.png	26601	fd1ee7c47290f4c3a2f9fd6618aeb678
+library/encodings/iso2022_jp_ext.pyc	1715	97eda1c1468f65445951b0bf23a89570
 library/mlx/watchdog.pyc	3957	4b6c34d79e730066e8af7cf71689f9ad
Index: locale/en/mlx.po
===================================================================
--- locale/en/mlx.po	(revision 634)
+++ locale/en/mlx.po	(revision 714)
@@ -698,4 +698,10 @@
 msgstr "The planned flight route in the standard format."
 
+msgid "route_altn"
+msgstr "_Alternate:"
+
+msgid "route_altn_tooltip"
+msgstr "The ICAO code of the alternate airport."
+
 msgid "route_down_notams"
 msgstr "Downloading NOTAMs..."
@@ -703,4 +709,129 @@
 msgid "route_down_metars"
 msgstr "Downloading METARs..."
+
+msgid "simbrief_setup_title"
+msgstr "SimBrief setup"
+
+msgid "simbrief_setup_help"
+msgstr "Complete the following data to start generating your SimBrief briefing."
+
+msgid "simbrief_setup_chelp"
+msgstr "Your SimBrief briefing was generated with the following data."
+
+msgid "simbrief_username"
+msgstr "_Username:"
+
+msgid "simbrief_username_tooltip"
+msgstr "Enter your Simbrief username"
+
+msgid "simbrief_password"
+msgstr "_Password:"
+
+msgid "simbrief_password_tooltip"
+msgstr "Enter your Simbrief password"
+
+msgid "simbrief_remember_password"
+msgstr "_Remember password"
+
+msgid "simbrief_remember_tooltip"
+msgstr ""
+"If checked, your SimBrief 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 "
+"your files will be able to read it."
+
+msgid "simbrief_extra_fuel"
+msgstr "_Extra fuel:"
+
+msgid "simbrief_extra_fuel_tooltip"
+msgstr "Enter the amount of extra fuel in kilograms."
+
+msgid "simbrief_takeoff_runway"
+msgstr "_Takeoff runway:"
+
+msgid "simbrief_takeoff_runway_tooltip"
+msgstr ""
+"Enter the number of the planned takeoff runway.\n"
+"If you don't want to specify it, leave it empty"
+
+msgid "simbrief_landing_runway"
+msgstr "_Landing runway:"
+
+msgid "simbrief_landing_runway_tooltip"
+msgstr ""
+"Enter the number of the planned landing runway.\n"
+"If you don't want to specify it, leave it empty"
+
+msgid "simbrief_climb_profile"
+msgstr "_Climb profile:"
+
+msgid "simbrief_climb_profile_tooltip"
+msgstr "Select the climb profile."
+
+msgid "simbrief_cruise_profile"
+msgstr "C_ruise profile:"
+
+msgid "simbrief_cruise_profile_tooltip"
+msgstr "Select the cruise profile."
+
+msgid "simbrief_descent_profile"
+msgstr "_Descent profile:"
+
+msgid "simbrief_descent_profile_tooltip"
+msgstr "Select the descent profile."
+
+msgid "simbrief_calling"
+msgstr "Calling SimBrief..."
+
+msgid "simbrief_progress_searching_browser"
+msgstr "Searching browser..."
+
+msgid "simbrief_progress_loading_form"
+msgstr "Loading form..."
+
+msgid "simbrief_progress_filling_form"
+msgstr "Filling form..."
+
+msgid "simbrief_progress_waiting_login"
+msgstr "Waiting login..."
+
+msgid "simbrief_progress_logging_in"
+msgstr "Logging in..."
+
+msgid "simbrief_progress_waiting_result"
+msgstr "Waiting for the result..."
+
+msgid "simbrief_progress_retrieving_briefing"
+msgstr "Retrieving briefing..."
+
+msgid "simbrief_progress_unknown"
+msgstr "?????"
+
+msgid "simbrief_result_error_other"
+msgstr "Some error occured, see debug logs."
+
+msgid "simbrief_result_error_no_form"
+msgstr "No form could be loaded."
+
+msgid "simbrief_result_error_no_popup"
+msgstr "No login window appeared."
+
+msgid "simbrief_result_error_login_failed"
+msgstr "Login failed."
+
+msgid "simbrief_result_unknown"
+msgstr "Unknown error occured."
+
+msgid "simbrief_cancelled"
+msgstr "Reverting to the old-style briefing."
+
+msgid "simbrief_credentials_title"
+msgstr "SimBrief login"
+
+msgid "simbrief_login_failed"
+msgstr ""
+"Failed to log in to SimBrief using the\n"
+"supplied credentials. Please, enter\n"
+"new ones, or cancel SimBrief."
 
 msgid "briefing_title"
@@ -1438,4 +1569,13 @@
 msgstr "sec."
 
+msgid "prefs_useSimBrief"
+msgstr "Use Sim_Brief"
+
+msgid "prefs_useSimBrief_tooltip"
+msgstr ""
+"If enabled, the SimBrief dispatching system will be "
+"used to create your briefing.\n"
+"You will need a SimBrief user name and password."
+
 msgid "prefs_pirepDirectory"
 msgstr "_PIREP directory:"
Index: locale/hu/mlx.po
===================================================================
--- locale/hu/mlx.po	(revision 634)
+++ locale/hu/mlx.po	(revision 716)
@@ -697,4 +697,10 @@
 msgstr "Az útvonal a szokásos formátumban."
 
+msgid "route_altn"
+msgstr "Ki_térő:"
+
+msgid "route_altn_tooltip"
+msgstr "A kitérő repülőtér ICAO kódja."
+
 msgid "route_down_notams"
 msgstr "NOTAM-ok letöltése..."
@@ -702,4 +708,128 @@
 msgid "route_down_metars"
 msgstr "METAR-ok letöltése..."
+
+msgid "simbrief_setup_title"
+msgstr "SimBrief beállítások"
+
+msgid "simbrief_setup_help"
+msgstr "Töltsd ki a lenti adatokat a SimBrief eligazítás előállítása céljából."
+
+msgid "simbrief_setup_chelp"
+msgstr "A SimBrief eligazítás az alábbi adatok alapján keszült."
+
+msgid "simbrief_username"
+msgstr "Fel_használónév:"
+
+msgid "simbrief_username_tooltip"
+msgstr "Írd be a SimBrief felhasználónevedet"
+
+msgid "simbrief_password"
+msgstr "Jels_zó:"
+
+msgid "simbrief_password_tooltip"
+msgstr "Írdbe a SimBrief jelszavadat"
+
+msgid "simbrief_remember_password"
+msgstr "E_mlékezz a jelszóra"
+
+msgid "simbrief_remember_tooltip"
+msgstr ""
+"Ha ezt kiválasztod, a SimBrief jelszavadat eltárolja a program, így nem kell "
+"mindig újból beírnod. Vedd azonban figyelembe, hogy a jelszót szövegként "
+"tároljuk, ezért bárki elolvashatja, aki hozzáfér a fájljaidhoz."
+
+msgid "simbrief_extra_fuel"
+msgstr "E_xtra üzemanyag:"
+
+msgid "simbrief_extra_fuel_tooltip"
+msgstr "Írd be az extra üzemanyag mennyiségét kilogrammban."
+
+msgid "simbrief_takeoff_runway"
+msgstr "_Felszálló futópálya:"
+
+msgid "simbrief_takeoff_runway_tooltip"
+msgstr
+"Írd be a tervezett felszálló futópálya számát.\n"
+"Ha nem akarod megadni, hagyd üresen a mezőt."
+
+msgid "simbrief_landing_runway"
+msgstr "_Leszálló futópálya:"
+
+msgid "simbrief_landing_runway_tooltip"
+msgstr
+"Írd be a tervezett leszálló futópálya számát.\n"
+"Ha nem akarod megadni, hagyd üresen a mezőt."
+
+msgid "simbrief_climb_profile"
+msgstr "Emelke_dési profil:"
+
+msgid "simbrief_climb_profile_tootip"
+msgstr "Válaszd ki az emelkedési profilt"
+
+msgid "simbrief_cruise_profile"
+msgstr "_Utazó profil:"
+
+msgid "simbrief_cruise_profile_tootip"
+msgstr "Válaszd ki az utazó profilt"
+
+msgid "simbrief_descent_profile"
+msgstr "Süll_yedési profil:"
+
+msgid "simbrief_descent_profile_tootip"
+msgstr "Válaszd ki a süllyedési profilt"
+
+msgid "simbrief_calling"
+msgstr "A SimBrief indítása..."
+
+msgid "simbrief_progress_searching_browser"
+msgstr "Böngésző keresése..."
+
+msgid "simbrief_progress_loading_form"
+msgstr "Űrlap letöltése..."
+
+msgid "simbrief_progress_filling_form"
+msgstr "Űrlap kitöltése..."
+
+msgid "simbrief_progress_waiting_login"
+msgstr "Várakozás a bejelentkező ablakra..."
+
+msgid "simbrief_progress_logging_in"
+msgstr "Bejelentkezés..."
+
+msgid "simbrief_progress_waiting_result"
+msgstr "Várakozás az eredményre..."
+
+msgid "simbrief_progress_retrieving_briefing"
+msgstr "Az eligazítás letöltése..."
+
+msgid "simbrief_progress_unknown"
+msgstr "?????"
+
+msgid "simbrief_result_error_other"
+msgstr "Valamilyen hiba történt, lásd a hibanaplót."
+
+msgid "simbrief_result_error_no_form"
+msgstr "Nem sikerült letölteni az űrlapot."
+
+msgid "simbrief_result_error_no_popup"
+msgstr "Nem jelent meg a bejelentkező ablak."
+
+msgid "simbrief_result_error_login_failed"
+msgstr "A bejelentkezés nem sikerült."
+
+msgid "simbrief_result_unknown"
+msgstr "Ismeretlen hiba történt."
+
+msgid "simbrief_cancelled"
+msgstr "Áttérünk a régi eligazításra."
+
+msgid "simbrief_credentials_title"
+msgstr "SimBrief bejelentkezés"
+
+msgid "simbrief_login_failed"
+msgstr ""
+"A megadott adatokkal nem tudtam\n"
+"bejelentkezni a SimBriefbe. Adj meg\n"
+"új adatokat, vagy hagyjuk a SimBriefet"
 
 msgid "briefing_title"
@@ -1479,4 +1609,13 @@
 msgstr "másodpercig."
 
+msgid "prefs_useSimBrief"
+msgstr "Sim_Brief használata"
+
+msgid "prefs_useSimBrief_tooltip"
+msgstr ""
+"Ha ezt bejelölöd, az eligazítás elkészítéséhez a "
+"SimBrief rendszert használja a program.\n"
+"Szükséged lesz SimBrief felhasználónévre és jelszóra."
+
 msgid "prefs_pirepDirectory"
 msgstr "_PIREP-ek könyvtára:"
Index: makeinst.bat
===================================================================
--- makeinst.bat	(revision 20)
+++ makeinst.bat	(revision 682)
@@ -1,7 +1,14 @@
 set MSVCRDIR=c:\windows\winsxs\x86_Microsoft.VC90.CRT*9.0.21022.8*
 set GTKRTDIR=c:\Python27\Lib\site-packages\gtk-2.0\runtime
+set CEFDIR=c:\Python27\Lib\site-packages\cefpython3
+set CHROMEDRIVER=c:\tmp\chromedriver.exe
 set NSISDIR=C:\Program Files\NSIS
 
 python setup.py py2exe
 
+del dist\library\selenium\webdriver\chrome\service.pyc
+copy patches\library\selenium\webdriver\chrome\service.py dist\library\selenium\webdriver\chrome\service.py
+python -m compileall dist\library\selenium\webdriver\chrome\service.py
+del dist\library\selenium\webdriver\chrome\service.py
+
 "%NSISDIR%\makensis" mlx.nsi
Index: mlx_cef_caller.bat
===================================================================
--- mlx_cef_caller.bat	(revision 682)
+++ mlx_cef_caller.bat	(revision 682)
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+SET scriptdir=%~dp0
+scriptdir=`dirname $0`
+
+echo %* > %TEMP%\mlxcef.args.tmp
+move %TEMP%\mlxcef.args.tmp %TEMP%\mlxcef.args
Index: mlx_cef_caller.sh
===================================================================
--- mlx_cef_caller.sh	(revision 682)
+++ mlx_cef_caller.sh	(revision 682)
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+scriptdir=`dirname $0`
+
+echo "$@" > "/tmp/mlxcef.${LOGNAME}.args.tmp"
+mv "/tmp/mlxcef.${LOGNAME}.args.tmp" "/tmp/mlxcef.${LOGNAME}.args"
Index: mlx_cef_caller_secondary.bat
===================================================================
--- mlx_cef_caller_secondary.bat	(revision 682)
+++ mlx_cef_caller_secondary.bat	(revision 682)
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+SET scriptdir=%~dp0
+scriptdir=`dirname $0`
+
+echo %* > %TEMP%\mlxcef.args.secondary.tmp
+move %TEMP%\mlxcef.args.secondary.tmp %TEMP%\mlxcef.args.secondary
Index: mlx_cef_caller_secondary.sh
===================================================================
--- mlx_cef_caller_secondary.sh	(revision 682)
+++ mlx_cef_caller_secondary.sh	(revision 682)
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+scriptdir=`dirname $0`
+
+echo "$@" > "/tmp/mlxcef.${LOGNAME}.args.secondary.tmp"
+mv "/tmp/mlxcef.${LOGNAME}.args.secondary.tmp" "/tmp/mlxcef.${LOGNAME}.args.secondary"
Index: patches/library/selenium/webdriver/chrome/service.py
===================================================================
--- patches/library/selenium/webdriver/chrome/service.py	(revision 682)
+++ patches/library/selenium/webdriver/chrome/service.py	(revision 682)
@@ -0,0 +1,118 @@
+#!/usr/bin/python
+#
+# Copyright 2011 Webdriver_name committers
+# Copyright 2011 Google Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+import os
+import subprocess
+from subprocess import PIPE
+import time
+
+from selenium.common.exceptions import WebDriverException
+from selenium.webdriver.common import utils
+
+class Service(object):
+    """
+    Object that manages the starting and stopping of the ChromeDriver
+    """
+
+    def __init__(self, executable_path, port=0, service_args=None,
+                 log_path=None, env=None):
+        """
+        Creates a new instance of the Service
+
+        :Args:
+         - executable_path : Path to the ChromeDriver
+         - port : Port the service is running on
+         - service_args : List of args to pass to the chromedriver service
+         - log_path : Path for the chromedriver service to log to"""
+
+        self.port = port
+        self.path = executable_path
+        self.service_args = service_args or []
+        if log_path:
+          self.service_args.append('--log-path=%s' % log_path)
+        if self.port == 0:
+            self.port = utils.free_port()
+        self.env = env
+
+    def start(self):
+        """
+        Starts the ChromeDriver Service.
+
+        :Exceptions:
+         - WebDriverException : Raised either when it can't start the service
+           or when it can't connect to the service
+        """
+        env = self.env or os.environ
+        try:
+            startupInfo = subprocess.STARTUPINFO()
+            startupInfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
+            self.process = subprocess.Popen([
+              self.path,
+              "--port=%d" % self.port] +
+              self.service_args, env=env, stdout=PIPE, stderr=PIPE,
+              startupinfo = startupInfo)
+        except:
+            raise WebDriverException(
+                "'" + os.path.basename(self.path) + "' executable needs to be \
+                available in the path. Please look at \
+                http://docs.seleniumhq.org/download/#thirdPartyDrivers \
+                and read up at \
+                http://code.google.com/p/selenium/wiki/ChromeDriver")
+        count = 0
+        while not utils.is_connectable(self.port):
+            count += 1
+            time.sleep(1)
+            if count == 30:
+                raise WebDriverException("Can not connect to the '" +
+                                         os.path.basename(self.path) + "'")
+
+    @property
+    def service_url(self):
+        """
+        Gets the url of the ChromeDriver Service
+        """
+        return "http://localhost:%d" % self.port
+
+    def stop(self):
+        """
+        Tells the ChromeDriver to stop and cleans up the process
+        """
+        #If its dead dont worry
+        if self.process is None:
+            return
+
+        #Tell the Server to die!
+        try:
+            from urllib import request as url_request
+        except ImportError:
+            import urllib2 as url_request
+
+        url_request.urlopen("http://127.0.0.1:%d/shutdown" % self.port)
+        count = 0
+        while utils.is_connectable(self.port):
+            if count == 30:
+               break
+            count += 1
+            time.sleep(1)
+
+        #Tell the Server to properly die in case
+        try:
+            if self.process:
+                self.process.kill()
+                self.process.wait()
+        except OSError:
+            # kill may not be available under windows environment
+            pass
Index: setup.py
===================================================================
--- setup.py	(revision 497)
+++ setup.py	(revision 720)
@@ -19,6 +19,9 @@
                        [os.path.join("locale", language, "LC_MESSAGES",
                                      "mlx.mo")]))
-data_files.append(("", ["logo.png",
-                        "conn_grey.png", "conn_red.png", "conn_green.png"]))
+data_files.append(("", ["logo.png", "simbrief.html",
+                        "conn_grey.png", "conn_red.png", "conn_green.png",
+                        "mlx_cef_caller.sh", "mlx_cef_caller_secondary.sh",
+                        "mlx_cef_caller.bat", "mlx_cef_caller_secondary.bat"]))
+
 if os.name=="nt":
     import py2exe
@@ -26,7 +29,12 @@
     data_files.append(("", ["logo.ico"]))
 
+    chromedriver = os.environ.get("CHROMEDRIVER")
+    if chromedriver:
+        data_files.append(("", [chromedriver]))
+
     msvcrDir = os.environ["MSVCRDIR"] if "MSVCRDIR" in os.environ else None
     if msvcrDir:
-        data_files.append(("Microsoft.VC90.CRT",  glob(os.path.join(msvcrDir, "*.*"))))
+        data_files.append(("Microsoft.VC90.CRT", glob(os.path.join(msvcrDir, "*.*"))))
+        os.environ["PATH"] = os.environ["PATH"] + ";" + glob(os.path.join(msvcrDir))[0]
 
     gtkRuntimeDir = os.environ["GTKRTDIR"] if "GTKRTDIR" in os.environ else None
@@ -47,7 +55,25 @@
                            glob(os.path.join(gtkRuntimeDir, path, "*"))))
 
+    cefDir = os.environ.get("CEFDIR")
+    if cefDir:
+        for fileName in ["icudt.dll", "subprocess.exe"]:
+            data_files.append(("", [os.path.join(cefDir, fileName)]))
+
+        data_files.append(("locales",
+                           glob(os.path.join(cefDir, "locales", "*"))))
+
+    print data_files
+
     with open("mlx-common.nsh", "wt") as f:
             print >>f, '!define MLX_VERSION "%s"' % (mlx.const.VERSION)
             f.close()
+else:
+    for (dirpath, dirnames, filenames) in os.walk("patches"):
+        if filenames:
+            filenames = [os.path.join(dirpath, filename)
+                         for filename in filenames]
+            data_files.append((dirpath, filenames))
+
+
 
 long_description="""MAVA Logger X
@@ -71,5 +97,5 @@
                  { "script" : "mlxupdate.py",
                    "uac_info" : "requireAdministrator"}],
-      options = { "py2exe" : { "includes": "gio, pango, atk, pangocairo",
+      options = { "py2exe" : { "includes": "gio, pango, atk, pangocairo, lxml._elementpath",
                                "skip_archive": True} },
       zipfile = "library/.",
@@ -80,4 +106,6 @@
 
 if os.name=="nt":
+    os.rename(os.path.join(scriptdir, "dist", "library", "libcef.dll"),
+              os.path.join(scriptdir, "dist", "libcef.dll"))
     mlx.update.buildManifest(os.path.join(scriptdir, "dist"))
     with open(os.path.join(scriptdir, "dist", "Uninstall.conf"), "wt") as f:
Index: simbrief.html
===================================================================
--- simbrief.html	(revision 685)
+++ simbrief.html	(revision 685)
@@ -0,0 +1,9 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset=utf-8 />
+    <title>SimBrief</title>
+</head>
+<body>
+</body>
+</html>
Index: src/mlx/acft.py
===================================================================
--- src/mlx/acft.py	(revision 644)
+++ src/mlx/acft.py	(revision 709)
@@ -85,4 +85,14 @@
 #---------------------------------------------------------------------------------------
 
+class SimBriefData(object):
+    """Data to be used when creating SimBrief briefings."""
+    def __init__(self, climbProfiles, cruiseProfiles, descentProfiles):
+        """Construct the SimBrief data with the given profiles."""
+        self.climbProfiles = climbProfiles
+        self.cruiseProfiles = cruiseProfiles
+        self.descentProfiles = descentProfiles
+
+#---------------------------------------------------------------------------------------
+
 class Aircraft(object):
     """Base class for aircraft."""
@@ -123,4 +133,6 @@
         self.maxTouchDownPitch = 15.0
         self.brakeCoolTime = 10.0
+
+        self.simBriefData = None
 
         self._checkers = []
@@ -720,4 +732,7 @@
         self.maxTakeOffPitch = 16.2
         self.maxTouchDownPitch = 14.7
+        self.simBriefData = SimBriefData(["250/280/78"],
+                                         ["CI", "M75", "M78", "M79", "M80", "LRC"],
+                                         ["78/280/250"])
 
 #---------------------------------------------------------------------------------------
@@ -733,4 +748,7 @@
         self.maxTakeOffPitch = 14.7
         self.maxTouchDownPitch = 13.2
+        self.simBriefData = SimBriefData(["250/280/78"],
+                                         ["CI", "M75", "M78", "M79", "M80", "LRC"],
+                                         ["78/280/250", "78/250/250"])
 
 #---------------------------------------------------------------------------------------
@@ -746,4 +764,7 @@
         self.maxTakeOffPitch = 11
         self.maxTouchDownPitch = 9.5
+        self.simBriefData = SimBriefData(["250/280/78"],
+                                         ["CI", "M76", "M78", "M79", "M80", "LRC"],
+                                         ["78/280/250", "78/250/250"])
 
 #---------------------------------------------------------------------------------------
@@ -754,4 +775,7 @@
         super(B738Charter, self).__init__(flight)
         self.mtow = 77791
+        self.simBriefData = SimBriefData(["AUTO"],
+                                         ["280/M74"],
+                                         ["AUTO"])
 
 #---------------------------------------------------------------------------------------
@@ -826,4 +850,8 @@
         self.maxTakeOffPitch = 8.0
         self.maxTouchDownPitch = 7.0
+        self.simBriefData = SimBriefData(["I-900", "II-900", "III-900",
+                                          "I-850", "II-850", "III-850"],
+                                         ["MCR", "ISC", "LRC", "HSC"],
+                                         ["I-850", "II-850", "III-850"])
 
 #---------------------------------------------------------------------------------------
@@ -878,4 +906,7 @@
         self.maxTakeOffPitch = 9.6
         self.maxTouchDownPitch = 8.1
+        self.simBriefData = SimBriefData(["250/290/78"],
+                                         ["CI", "M76", "M78", "M80", "M82", "M84", "LRC"],
+                                         ["78/290/250"])
 
 #---------------------------------------------------------------------------------------
@@ -902,4 +933,7 @@
         self.maxTakeOffPitch = 18.0
         self.maxTouchDownPitch = 18.0
+        self.simBriefData = SimBriefData(["250/70", "290/74"],
+                                         ["CI", "LRC", "M70", "M72", "M74", "M77", "M80"],
+                                         ["74/290/250", "77/320/250"])
 
 #---------------------------------------------------------------------------------------
@@ -1045,4 +1079,7 @@
         self.maxTakeOffPitch = 16.0
         self.maxTouchDownPitch = 16.0
+        self.simBriefData = SimBriefData(["AUTO"],
+                                         ["300/M80"],
+                                         ["AUTO"])
 
     @property
Index: src/mlx/common.py
===================================================================
--- src/mlx/common.py	(revision 585)
+++ src/mlx/common.py	(revision 651)
@@ -18,5 +18,6 @@
 #-------------------------------------------------------------------------------
 
-if os.name=="nt" or "FORCE_PYGTK" in os.environ:
+# Due to CEF, PyGTK is the default
+if "FORCE_PYGOBJECT" not in os.environ:
     print "Using PyGTK"
     pygobject = False
Index: src/mlx/config.py
===================================================================
--- src/mlx/config.py	(revision 503)
+++ src/mlx/config.py	(revision 689)
@@ -211,5 +211,5 @@
 class Config(object):
     """Our configuration."""
-    DEFAULT_UPDATE_URL = "http://mlx.varadiistvan.hu/update"
+    DEFAULT_UPDATE_URL = "http://mlx.varadiistvan.hu/update/cef"
 
     _messageTypesSection = "messageTypes"
@@ -233,4 +233,9 @@
         self._vsSmoothingLength = -2
 
+        self._useSimBrief = False
+        self._simBriefUserName = ""
+        self._simBriefPassword = ""
+        self._rememberSimBriefPassword = False
+
         self._pirepDirectory = None
         self._pirepAutoSave = False
@@ -442,4 +447,52 @@
         if vsSmoothingLength!=self._vsSmoothingLength:
             self._vsSmoothingLength = vsSmoothingLength
+            self._modified = True
+
+    @property
+    def useSimBrief(self):
+        """Check if SimBrief should be used."""
+        return self._useSimBrief
+
+    @useSimBrief.setter
+    def useSimBrief(self, useSimBrief):
+        """Check if SimBrief should be used."""
+        if self._useSimBrief != useSimBrief:
+            self._useSimBrief = useSimBrief
+            self._modified = True
+
+    @property
+    def simBriefUserName(self):
+        """Get the SimBrief user name last used"""
+        return self._simBriefUserName
+
+    @simBriefUserName.setter
+    def simBriefUserName(self, simBriefUserName):
+        """Set the SimBrief user name to be used next."""
+        if self._simBriefUserName != simBriefUserName:
+            self._simBriefUserName = simBriefUserName
+            self._modified = True
+
+    @property
+    def simBriefPassword(self):
+        """Get the SimBrief password last used"""
+        return self._simBriefPassword
+
+    @simBriefPassword.setter
+    def simBriefPassword(self, simBriefPassword):
+        """Set the SimBrief password to be used next."""
+        if self._simBriefPassword != simBriefPassword:
+            self._simBriefPassword = simBriefPassword
+            self._modified = True
+
+    @property
+    def rememberSimBriefPassword(self):
+        """Get if we should remember the SimBrief password."""
+        return self._rememberSimBriefPassword
+
+    @rememberSimBriefPassword.setter
+    def rememberSimBriefPassword(self, rememberSimBriefPassword):
+        """Set if we should remember the SimBrief password."""
+        if rememberSimBriefPassword!=self._rememberSimBriefPassword:
+            self._rememberSimBriefPassword = rememberSimBriefPassword
             self._modified = True
 
@@ -678,4 +731,15 @@
                                                 "vsSmoothingLength",
                                                 -2))
+
+        self._useSimBrief = self._getBoolean(config, "simbrief",
+                                             "use", False)
+        self._simBriefUserName = self._get(config, "simbrief",
+                                           "username", "")
+        self._simBriefPassword = self._get(config, "simbrief",
+                                           "password", "")
+        self._rememberSimBriefPassword = self._getBoolean(config, "simbrief",
+                                                          "rememberPassword",
+                                                          False)
+
         self._pirepDirectory = self._get(config, "general",
                                          "pirepDirectory", None)
@@ -758,4 +822,12 @@
                    str(self._vsSmoothingLength))
 
+        config.add_section("simbrief")
+        config.set("simbrief", "use",
+                   "yes" if self._useSimBrief else "no")
+        config.set("simbrief", "username", self._simBriefUserName)
+        config.set("simbrief", "password", self._simBriefPassword)
+        config.set("simbrief", "rememberPassword",
+                   "yes" if self._rememberSimBriefPassword else "no")
+
         if self._pirepDirectory is not None:
             config.set("general", "pirepDirectory", self._pirepDirectory)
@@ -907,4 +979,8 @@
         print "  vsSmoothingLength:", self._vsSmoothingLength
 
+        print "  useSimBrief:", self._useSimBrief
+        print "  simBriefUserName:", self._simBriefUserName
+        print "  rememberSimBriefPassword:", self._rememberSimBriefPassword
+
         print "  pirepDirectory:", self._pirepDirectory
         print "  pirepAutoSave:", self._pirepAutoSave
Index: src/mlx/const.py
===================================================================
--- src/mlx/const.py	(revision 722)
+++ src/mlx/const.py	(revision 726)
@@ -11,5 +11,5 @@
 
 ## The version of the program
-VERSION="0.36"
+VERSION="0.36cef"
 
 #-------------------------------------------------------------------------------
Index: src/mlx/gui/acars.py
===================================================================
--- src/mlx/gui/acars.py	(revision 649)
+++ src/mlx/gui/acars.py	(revision 649)
@@ -0,0 +1,36 @@
+
+from common import *
+
+from mlx.i18n import xstr
+import mlx.const as const
+
+import cef
+
+#------------------------------------------------------------------------------
+
+## @package mlx.gui.acars
+#
+# The ACARS tab.
+#
+# This module implements to \ref ACRS class, which displays the MAVA ACARS in a
+# browser window using CEF
+
+#------------------------------------------------------------------------------
+
+class ACARS(gtk.VBox):
+    """The flight info tab."""
+    # The URL of the ACARS map
+    URL = "http://virtualairlines.hu/acars2/show.html"
+
+    def __init__(self, gui):
+        """Construct the flight info tab."""
+        super(ACARS, self).__init__()
+        self._gui = gui
+
+    def start(self):
+        """Start the browser."""
+        container = cef.getContainer()
+
+        self.pack_start(container, True, True, 0)
+
+        cef.startInContainer(container, ACARS.URL)
Index: src/mlx/gui/cef.py
===================================================================
--- src/mlx/gui/cef.py	(revision 713)
+++ src/mlx/gui/cef.py	(revision 713)
@@ -0,0 +1,441 @@
+from common import *
+
+from mava_simbrief import MavaSimbriefIntegrator
+
+from mlx.util import secondaryInstallation
+
+from cefpython3 import cefpython
+from selenium import webdriver
+from selenium.webdriver.chrome.options import Options
+
+import platform
+import json
+import time
+import os
+import re
+import threading
+import tempfile
+import traceback
+
+#------------------------------------------------------------------------------
+
+## @package mlx.gui.cef
+#
+# Some helper stuff related to the Chrome Embedded Framework
+
+#------------------------------------------------------------------------------
+
+# Indicate if we should quit
+_toQuit = False
+
+# Indicate the users of the fast timeout handler. If it reaches zero, the
+# timeout will be stopped
+_fastTimeoutUsers = 0
+
+# The Selenium thread
+_seleniumHandler = None
+
+#------------------------------------------------------------------------------
+
+def getArgsFilePath():
+    """Get the path of the argument file."""
+    if os.name=="nt":
+        return os.path.join(tempfile.gettempdir(),
+                            "mlxcef.args" +
+                            (".secondary" if secondaryInstallation else ""))
+    else:
+        import pwd
+        return os.path.join(tempfile.gettempdir(),
+                            "mlxcef." + pwd.getpwuid(os.getuid())[0] + ".args" +
+                            (".secondary" if secondaryInstallation else ""))
+
+#------------------------------------------------------------------------------
+
+class ArgsFileWaiter(threading.Thread):
+    """A thread to wait for the appearance of the arguments file."""
+    def __init__(self, initializedCallback):
+        """Construct the thread."""
+        threading.Thread.__init__(self)
+        self.daemon = True
+
+        self._initializedCallback = initializedCallback
+
+    def run(self):
+        """Repeatedly check for the existence of the arguments file.
+
+        If it is found, read it, extract the arguments and insert a job into
+        the GUI loop to perform the actual initialization of CEF."""
+        argsFilePath = getArgsFilePath()
+        print "Waiting for the arguments file '%s' to appear" % (argsFilePath,)
+
+        while not os.path.exists(argsFilePath):
+            time.sleep(0.1)
+
+        print "Got arguments, reading them."""
+
+        with open(argsFilePath, "rt") as f:
+            args = f.read().split()
+
+        gobject.idle_add(_initializeCEF, args, self._initializedCallback)
+
+#------------------------------------------------------------------------------
+
+SIMBRIEF_PROGRESS_SEARCHING_BROWSER = MavaSimbriefIntegrator.PROGRESS_SEARCHING_BROWSER
+SIMBRIEF_PROGRESS_LOADING_FORM = MavaSimbriefIntegrator.PROGRESS_LOADING_FORM
+SIMBRIEF_PROGRESS_FILLING_FORM = MavaSimbriefIntegrator.PROGRESS_FILLING_FORM
+SIMBRIEF_PROGRESS_WAITING_LOGIN = MavaSimbriefIntegrator.PROGRESS_WAITING_LOGIN
+SIMBRIEF_PROGRESS_LOGGING_IN = MavaSimbriefIntegrator.PROGRESS_LOGGING_IN
+SIMBRIEF_PROGRESS_WAITING_RESULT = MavaSimbriefIntegrator.PROGRESS_WAITING_RESULT
+
+SIMBRIEF_PROGRESS_RETRIEVING_BRIEFING = MavaSimbriefIntegrator.PROGRESS_MAX + 1
+SIMBRIEF_PROGRESS_DONE = 1000
+
+SIMBRIEF_RESULT_NONE = MavaSimbriefIntegrator.RESULT_NONE
+SIMBRIEF_RESULT_OK = MavaSimbriefIntegrator.RESULT_OK
+SIMBRIEF_RESULT_ERROR_OTHER = MavaSimbriefIntegrator.RESULT_ERROR_OTHER
+SIMBRIEF_RESULT_ERROR_NO_FORM = MavaSimbriefIntegrator.RESULT_ERROR_NO_FORM
+SIMBRIEF_RESULT_ERROR_NO_POPUP = MavaSimbriefIntegrator.RESULT_ERROR_NO_POPUP
+SIMBRIEF_RESULT_ERROR_LOGIN_FAILED = MavaSimbriefIntegrator.RESULT_ERROR_LOGIN_FAILED
+
+#------------------------------------------------------------------------------
+
+class SeleniumHandler(threading.Thread):
+    """Thread to handle Selenium operations."""
+    def __init__(self, programDirectory):
+        """Construct the thread."""
+        threading.Thread.__init__(self)
+        self.daemon = False
+
+        self._programDirectory = programDirectory
+
+        self._commandsCondition = threading.Condition()
+        self._commands = []
+
+        self._driver = None
+
+        self._simBriefBrowser = None
+
+        self._toQuit = False
+
+    @property
+    def programDirectory(self):
+        """Get the program directory."""
+        return self._programDirectory
+
+    @property
+    def simBriefInitURL(self):
+        """Get the initial URL for the SimBrief browser."""
+        return "file://" + os.path.join(self.programDirectory, "simbrief.html")
+
+    def run(self):
+        """Create the Selenium driver and the perform any operations
+        requested."""
+        scriptName = "mlx_cef_caller"
+        if secondaryInstallation:
+            scriptName += "_secondary"
+        scriptName += ".bat" if os.name=="nt" else ".sh"
+
+        scriptPath = os.path.join(self._programDirectory, scriptName)
+        print "Creating the Selenium driver to call script", scriptPath
+
+        options = Options()
+        options.binary_location = scriptPath
+        driver = self._driver = webdriver.Chrome(chrome_options = options)
+        # try:
+        # except:
+        #     traceback.print_exc()
+
+        print "Created Selenium driver."
+        while not self._toQuit:
+            with self._commandsCondition:
+                while not self._commands:
+                    self._commandsCondition.wait()
+
+                command = self._commands[0]
+                del self._commands[0]
+
+            command()
+
+        driver.quit()
+
+    def initializeSimBrief(self):
+        """Create and initialize the browser used for Simbrief."""
+        windowInfo = cefpython.WindowInfo()
+        windowInfo.SetAsOffscreen(int(0))
+
+        url = self.simBriefInitURL
+        self._simBriefBrowser = \
+          cefpython.CreateBrowserSync(windowInfo, browserSettings = {},
+                                      navigateUrl = self.simBriefInitURL)
+        self._simBriefBrowser.SetClientHandler(OffscreenRenderHandler())
+        self._simBriefBrowser.SetFocus(True)
+
+    def callSimBrief(self, plan, getCredentials, updateProgress,
+                     htmlFilePath):
+        """Call SimBrief with the given plan."""
+        self._enqueue(lambda:
+                      self._callSimBrief(plan, self._driver,
+                                         getCredentials, updateProgress,
+                                         htmlFilePath))
+
+    def quit(self):
+        """Instruct the thread to quit and then join it."""
+        self._enqueue(self._quit)
+        self.join()
+
+    def _enqueue(self, command):
+        """Enqueue the given command.
+
+        command should be a function to be executed in the thread."""
+        with self._commandsCondition:
+            self._commands.append(command)
+            self._commandsCondition.notify()
+
+    def _callSimBrief(self, plan, driver,
+                      getCredentials, updateProgress, htmlFilePath):
+        """Perform the SimBrief call."""
+        self._simBriefBrowser.LoadUrl(self.simBriefInitURL)
+
+        integrator = MavaSimbriefIntegrator(plan = plan, driver = driver)
+        link = None
+        try:
+            link = integrator.get_xml_link(getCredentials, updateProgress,
+                                           local_xml_debug = False,
+                                           local_html_debug = False)
+        except Exception, e:
+            print "Failed to initiate the generation of the briefing:", e
+            updateProgress(SIMBRIEF_PROGRESS_RETRIEVING_BRIEFING,
+                           SIMBRIEF_RESULT_ERROR_OTHER, None)
+
+        if link is not None:
+            updateProgress(SIMBRIEF_PROGRESS_RETRIEVING_BRIEFING,
+                           SIMBRIEF_RESULT_NONE, None)
+
+            try:
+                flight_info = integrator.get_results(link,
+                                                     html_file_path =
+                                                     htmlFilePath)
+
+                updateProgress(SIMBRIEF_PROGRESS_DONE,
+                               SIMBRIEF_RESULT_OK, flight_info)
+            except Exception, e:
+                print "Failed to retrieve the briefing:", e
+                updateProgress(SIMBRIEF_PROGRESS_RETRIEVING_BRIEFING,
+                               SIMBRIEF_RESULT_ERROR_OTHER, None)
+
+    def _quit(self):
+        """Set the _toQuit member variable to indicate that the thread should
+        quit."""
+        self._toQuit = True
+
+#------------------------------------------------------------------------------
+
+def initialize(programDirectory, initializedCallback):
+    """Initialize the Chrome Embedded Framework."""
+    global _toQuit, _seleniumHandler
+    _toQuit = False
+
+    gobject.threads_init()
+
+    argsFilePath = getArgsFilePath()
+    try:
+        os.unlink(argsFilePath)
+    except:
+        pass
+
+    _seleniumHandler = SeleniumHandler(programDirectory)
+    _seleniumHandler.start()
+
+    ArgsFileWaiter(initializedCallback).start()
+
+#------------------------------------------------------------------------------
+
+def _initializeCEF(args, initializedCallback):
+    """Perform the actual initialization of CEF using the given arguments."""
+    print "Initializing CEF with args:", args
+
+    settings = {
+        "debug": True, # cefpython debug messages in console and in log_file
+        "log_severity": cefpython.LOGSEVERITY_VERBOSE, # LOGSEVERITY_VERBOSE
+        "log_file": "", # Set to "" to disable
+        "release_dcheck_enabled": True, # Enable only when debugging
+        # This directories must be set on Linux
+        "locales_dir_path": os.path.join(cefpython.GetModuleDirectory(), "locales"),
+        "resources_dir_path": cefpython.GetModuleDirectory(),
+        "browser_subprocess_path": "%s/%s" % \
+            (cefpython.GetModuleDirectory(), "subprocess"),
+    }
+
+    switches={}
+    for arg in args:
+        if arg.startswith("--"):
+            if arg != "--enable-logging":
+                assignIndex = arg.find("=")
+                if assignIndex<0:
+                    switches[arg[2:]] = ""
+                else:
+                    switches[arg[2:assignIndex]] = arg[assignIndex+1:]
+        else:
+            print "Unhandled switch", arg
+
+    cefpython.Initialize(settings, switches)
+
+    gobject.timeout_add(10, _handleTimeout)
+
+    print "Initialized, executing callback..."
+    initializedCallback()
+
+#------------------------------------------------------------------------------
+
+def getContainer():
+    """Get a container object suitable for running a browser instance
+    within."""
+    if os.name=="nt":
+        container = gtk.DrawingArea()
+        container.set_property("can-focus", True)
+        container.connect("size-allocate", _handleSizeAllocate)
+    else:
+        container = gtk.VBox(True, 0)
+
+    container.show()
+
+    return container
+
+#------------------------------------------------------------------------------
+
+def startInContainer(container, url, browserSettings = {}):
+    """Start a browser instance in the given container with the given URL."""
+    if os.name=="nt":
+        windowID = container.get_window().handle
+    else:
+        m = re.search("GtkVBox at 0x(\w+)", str(container))
+        hexID = m.group(1)
+        windowID = int(hexID, 16)
+
+    windowInfo = cefpython.WindowInfo()
+    windowInfo.SetAsChild(windowID)
+
+    return cefpython.CreateBrowserSync(windowInfo,
+                                       browserSettings = browserSettings,
+                                       navigateUrl = url)
+
+#------------------------------------------------------------------------------
+
+class OffscreenRenderHandler(object):
+    def GetRootScreenRect(self, browser, rect):
+        #print "GetRootScreenRect"
+        rect += [0, 0, 800, 600]
+        return True
+
+    def GetViewRect(self, browser, rect):
+        #print "GetViewRect"
+        rect += [0, 0, 800, 600]
+        return True
+
+    def GetScreenPoint(self, browser, viewX, viewY, screenCoordinates):
+        #print "GetScreenPoint", viewX, viewY
+        rect += [viewX, viewY]
+        return True
+
+    def GetScreenInfo(self, browser, screenInfo):
+        #print "GetScreenInfo"
+        pass
+
+    def OnPopupShow(self, browser, show):
+        #print "OnPopupShow", show
+        pass
+
+    def OnPopupSize(self, browser, rect):
+        #print "OnPopupSize", rect
+        pass
+
+    def OnPaint(self, browser, paintElementType, dirtyRects, buffer, width, height):
+        #print "OnPaint", paintElementType, dirtyRects, buffer, width, height
+        pass
+
+    def OnCursorChange(self, browser, cursor):
+        #print "OnCursorChange", cursor
+        pass
+
+    def OnScrollOffsetChanged(self, browser):
+        #print "OnScrollOffsetChange"
+        pass
+
+    def OnBeforePopup(self, browser, frame, targetURL, targetFrameName,
+                      popupFeatures, windowInfo, client, browserSettings,
+                      noJavascriptAccess):
+        wInfo = cefpython.WindowInfo()
+        wInfo.SetAsOffscreen(int(0))
+
+        windowInfo.append(wInfo)
+
+        return False
+
+#------------------------------------------------------------------------------
+
+def initializeSimBrief():
+    """Initialize the (hidden) browser window for SimBrief."""
+    _seleniumHandler.initializeSimBrief()
+
+#------------------------------------------------------------------------------
+
+def callSimBrief(plan, getCredentials, updateProgress, htmlFilePath):
+    """Call SimBrief with the given plan."""
+    _seleniumHandler.callSimBrief(plan, getCredentials,
+                                  updateProgress, htmlFilePath)
+
+#------------------------------------------------------------------------------
+
+def finalize():
+    """Finalize the Chrome Embedded Framework."""
+    global _toQuit, _seleniumHandler
+    toQuit = True
+    cefpython.Shutdown()
+    _seleniumHandler.quit()
+
+#------------------------------------------------------------------------------
+
+def _handleTimeout():
+    """Handle the timeout by running the CEF message loop."""
+    if _toQuit:
+        return False
+    else:
+        cefpython.MessageLoopWork()
+        return True
+
+#------------------------------------------------------------------------------
+
+def startFastTimeout():
+    """Start the fast timeout handler."""
+    global _fastTimeoutUsers
+
+    if _fastTimeoutUsers==0:
+        _fastTimeoutUsers = 1
+        gobject.timeout_add(1, _handleFastTimeout)
+    else:
+        _fastTimeoutUsers += 1
+
+#------------------------------------------------------------------------------
+
+def stopFastTimeout():
+    """Stop the fast timeout handler."""
+    global _fastTimeoutUsers
+
+    assert _fastTimeoutUsers>0
+    _fastTimeoutUsers -= 1
+
+#------------------------------------------------------------------------------
+
+def _handleFastTimeout():
+    """Handle a (fast) timeout by running the CEF message loop."""
+    if _toQuit or _fastTimeoutUsers==0:
+        return False
+    else:
+        cefpython.MessageLoopWork()
+        return True
+
+#------------------------------------------------------------------------------
+
+def _handleSizeAllocate(widget, sizeAlloc):
+    """Handle the size-allocate event."""
+    cefpython.WindowUtils.OnSize(widget.get_window().handle, 0, 0, 0)
Index: src/mlx/gui/common.py
===================================================================
--- src/mlx/gui/common.py	(revision 604)
+++ src/mlx/gui/common.py	(revision 682)
@@ -32,4 +32,5 @@
     pygobject = False
     import pygtk
+    pygtk.require("2.0")
     import gtk.gdk as gdk
     import gtk
Index: src/mlx/gui/flight.py
===================================================================
--- src/mlx/gui/flight.py	(revision 675)
+++ src/mlx/gui/flight.py	(revision 719)
@@ -1,4 +1,5 @@
 
 from mlx.gui.common import *
+import mlx.gui.cef as cef
 
 import mlx.const as const
@@ -17,4 +18,6 @@
 import time
 import os
+import tempfile
+import threading
 
 #-----------------------------------------------------------------------------
@@ -1425,4 +1428,814 @@
 #-----------------------------------------------------------------------------
 
+class RoutePage(Page):
+    """The page containing the route and the flight level."""
+    def __init__(self, wizard):
+        """Construct the page."""
+        super(RoutePage, self).__init__(wizard, xstr("route_title"),
+                                        xstr("route_help"),
+                                        completedHelp = xstr("route_chelp"))
+
+        alignment = gtk.Alignment(xalign = 0.5, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+
+        mainBox = gtk.VBox()
+        alignment.add(mainBox)
+        self.setMainWidget(alignment)
+
+        levelBox = gtk.HBox()
+
+        label = gtk.Label(xstr("route_level"))
+        label.set_use_underline(True)
+        levelBox.pack_start(label, True, True, 0)
+
+        self._cruiseLevel = gtk.SpinButton()
+        self._cruiseLevel.set_increments(step = 10, page = 100)
+        self._cruiseLevel.set_range(min = 0, max = 500)
+        self._cruiseLevel.set_tooltip_text(xstr("route_level_tooltip"))
+        self._cruiseLevel.set_numeric(True)
+        self._cruiseLevel.connect("changed", self._cruiseLevelChanged)
+        self._cruiseLevel.connect("value-changed", self._cruiseLevelChanged)
+        label.set_mnemonic_widget(self._cruiseLevel)
+
+        levelBox.pack_start(self._cruiseLevel, False, False, 8)
+
+        alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(levelBox)
+
+        mainBox.pack_start(alignment, False, False, 0)
+
+
+        routeBox = gtk.VBox()
+
+        alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        label = gtk.Label(xstr("route_route"))
+        label.set_use_underline(True)
+        alignment.add(label)
+        routeBox.pack_start(alignment, True, True, 0)
+
+        routeWindow = gtk.ScrolledWindow()
+        routeWindow.set_size_request(400, 80)
+        routeWindow.set_shadow_type(gtk.ShadowType.IN if pygobject
+                                    else gtk.SHADOW_IN)
+        routeWindow.set_policy(gtk.PolicyType.AUTOMATIC if pygobject
+                               else gtk.POLICY_AUTOMATIC,
+                               gtk.PolicyType.AUTOMATIC if pygobject
+                               else gtk.POLICY_AUTOMATIC)
+
+        self._uppercasingRoute = False
+
+        self._route = gtk.TextView()
+        self._route.set_tooltip_text(xstr("route_route_tooltip"))
+        self._route.set_wrap_mode(WRAP_WORD)
+        self._route.get_buffer().connect("changed", self._routeChanged)
+        self._route.get_buffer().connect_after("insert-text", self._routeInserted)
+        routeWindow.add(self._route)
+
+        label.set_mnemonic_widget(self._route)
+        routeBox.pack_start(routeWindow, True, True, 0)
+
+        mainBox.pack_start(routeBox, True, True, 8)
+
+        alternateBox = gtk.HBox()
+
+        label = gtk.Label(xstr("route_altn"))
+        label.set_use_underline(True)
+        alternateBox.pack_start(label, True, True, 0)
+
+        self._alternate = gtk.Entry()
+        self._alternate.set_width_chars(6)
+        self._alternate.connect("changed", self._alternateChanged)
+        self._alternate.set_tooltip_text(xstr("route_altn_tooltip"))
+        label.set_mnemonic_widget(self._alternate)
+
+        alternateBox.pack_start(self._alternate, False, False, 8)
+
+        alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(alternateBox)
+
+        mainBox.pack_start(alignment, False, False, 0)
+
+        self.addCancelFlightButton()
+
+        self._backButton = self.addPreviousButton(clicked = self._backClicked)
+        self._button = self.addNextButton(clicked = self._forwardClicked)
+
+    @property
+    def filedCruiseLevel(self):
+        """Get the filed cruise level."""
+        return self._cruiseLevel.get_value_as_int()
+
+    @property
+    def route(self):
+        """Get the route."""
+        return self._getRoute()
+
+    @property
+    def alternate(self):
+        """Get the ICAO code of the alternate airport."""
+        return self._alternate.get_text()
+
+    def activate(self):
+        """Setup the route from the booked flight."""
+        self._cruiseLevel.set_value(0)
+        self._cruiseLevel.set_text("")
+        self._route.get_buffer().set_text(self._wizard._bookedFlight.route)
+        self._alternate.set_text("")
+        self._updateForwardButton()
+
+    def _getRoute(self):
+        """Get the text of the route."""
+        buffer = self._route.get_buffer()
+        return buffer.get_text(buffer.get_start_iter(),
+                               buffer.get_end_iter(), True)
+
+    def _updateForwardButton(self):
+        """Update the sensitivity of the forward button."""
+        cruiseLevelText = self._cruiseLevel.get_text()
+        cruiseLevel = int(cruiseLevelText) if cruiseLevelText else 0
+        alternate = self._alternate.get_text()
+        self._button.set_sensitive(cruiseLevel>=50 and self._getRoute()!="" and
+                                   len(alternate)==4)
+
+    def _cruiseLevelChanged(self, *arg):
+        """Called when the cruise level has changed."""
+        self._updateForwardButton()
+
+    def _routeChanged(self, textBuffer):
+        """Called when the route has changed."""
+        if not self._uppercasingRoute:
+            self._updateForwardButton()
+
+    def _routeInserted(self, textBuffer, iter, text, length):
+        """Called when new characters are inserted into the route.
+
+        It uppercases all characters."""
+        if not self._uppercasingRoute:
+            self._uppercasingRoute = True
+
+            iter1 = iter.copy()
+            iter1.backward_chars(length)
+            textBuffer.delete(iter, iter1)
+
+            textBuffer.insert(iter, text.upper())
+
+            self._uppercasingRoute = False
+
+    def _alternateChanged(self, entry):
+        """Called when the alternate airport has changed."""
+        entry.set_text(entry.get_text().upper())
+        self._updateForwardButton()
+
+    def _backClicked(self, button):
+        """Called when the Back button is pressed."""
+        self.goBack()
+
+    def _forwardClicked(self, button):
+        """Called when the Forward button is clicked."""
+        if self._wizard.gui.flight.aircraft.simBriefData is None:
+            self._wizard.usingSimBrief = False
+        if self._wizard.gui.config.useSimBrief and \
+           self._wizard.usingSimBrief is not False:
+            self._wizard.nextPage()
+        else:
+            self._wizard.usingSimBrief = False
+            self._wizard.jumpPage(3)
+
+#-----------------------------------------------------------------------------
+
+class SimBriefCredentialsDialog(gtk.Dialog):
+    """A dialog window to ask for SimBrief credentials."""
+    def __init__(self, gui, userName, password, rememberPassword):
+        """Construct the dialog."""
+        super(SimBriefCredentialsDialog, self).__init__(WINDOW_TITLE_BASE + " - " +
+                                                        xstr("simbrief_credentials_title"),
+                                                        gui.mainWindow,
+                                                        DIALOG_MODAL)
+        self.add_button(xstr("button_cancel"), RESPONSETYPE_CANCEL)
+        self.add_button(xstr("button_ok"), RESPONSETYPE_OK)
+
+        contentArea = self.get_content_area()
+
+        contentAlignment = gtk.Alignment(xalign = 0.5, yalign = 0.5,
+                                         xscale = 0.0, yscale = 0.0)
+        contentAlignment.set_padding(padding_top = 4, padding_bottom = 16,
+                                     padding_left = 8, padding_right = 8)
+
+        contentArea.pack_start(contentAlignment, False, False, 0)
+
+        contentVBox = gtk.VBox()
+        contentAlignment.add(contentVBox)
+
+        label = gtk.Label(xstr("simbrief_login_failed"))
+        label.set_alignment(0.0, 0.0)
+
+        contentVBox.pack_start(label, False, False, 0)
+
+        tableAlignment = gtk.Alignment(xalign = 0.5, yalign = 0.5,
+                                       xscale = 0.0, yscale = 0.0)
+        tableAlignment.set_padding(padding_top = 24, padding_bottom = 0,
+                                   padding_left = 0, padding_right = 0)
+
+        table = gtk.Table(3, 2)
+        table.set_row_spacings(4)
+        table.set_col_spacings(16)
+        table.set_homogeneous(False)
+
+        tableAlignment.add(table)
+        contentVBox.pack_start(tableAlignment, True, True, 0)
+
+        label = gtk.Label(xstr("simbrief_username"))
+        label.set_use_underline(True)
+        label.set_alignment(0.0, 0.5)
+        table.attach(label, 0, 1, 0, 1)
+
+        self._userName = gtk.Entry()
+        self._userName.set_width_chars(16)
+        #self._userName.connect("changed",
+        #                       lambda button: self._updateForwardButton())
+        self._userName.set_tooltip_text(xstr("simbrief_username_tooltip"))
+        self._userName.set_text(userName)
+        table.attach(self._userName, 1, 2, 0, 1)
+        label.set_mnemonic_widget(self._userName)
+
+        label = gtk.Label(xstr("simbrief_password"))
+        label.set_use_underline(True)
+        label.set_alignment(0.0, 0.5)
+        table.attach(label, 0, 1, 1, 2)
+
+        self._password = gtk.Entry()
+        self._password.set_visibility(False)
+        #self._password.connect("changed",
+        #                       lambda button: self._updateForwardButton())
+        self._password.set_tooltip_text(xstr("simbrief_password_tooltip"))
+        self._password.set_text(password)
+        table.attach(self._password, 1, 2, 1, 2)
+        label.set_mnemonic_widget(self._password)
+
+        self._rememberButton = gtk.CheckButton(xstr("simbrief_remember_password"))
+        self._rememberButton.set_use_underline(True)
+        self._rememberButton.set_tooltip_text(xstr("simbrief_remember_tooltip"))
+        self._rememberButton.set_active(rememberPassword)
+        table.attach(self._rememberButton, 1, 2, 2, 3, ypadding = 8)
+
+    @property
+    def userName(self):
+        """Get the user name entered."""
+        return self._userName.get_text()
+
+    @property
+    def password(self):
+        """Get the password entered."""
+        return self._password.get_text()
+
+    @property
+    def rememberPassword(self):
+        """Get whether the password is to be remembered."""
+        return self._rememberButton.get_active()
+
+    def run(self):
+        """Run the dialog."""
+        self.show_all()
+
+        response = super(SimBriefCredentialsDialog, self).run()
+
+        self.hide()
+
+        return response
+
+#-----------------------------------------------------------------------------
+
+class SimBriefSetupPage(Page):
+    """Page for setting up some parameters for SimBrief."""
+    monthNum2Name = [
+        "JAN",
+        "FEB",
+        "MAR",
+        "APR",
+        "MAY",
+        "JUN",
+        "JUL",
+        "AUG",
+        "SEP",
+        "OCT",
+        "NOV",
+        "DEC"
+        ]
+
+    progress2Message = {
+        cef.SIMBRIEF_PROGRESS_SEARCHING_BROWSER: "simbrief_progress_searching_browser",
+        cef.SIMBRIEF_PROGRESS_LOADING_FORM: "simbrief_progress_loading_form",
+        cef.SIMBRIEF_PROGRESS_FILLING_FORM: "simbrief_progress_filling_form",
+        cef.SIMBRIEF_PROGRESS_WAITING_LOGIN: "simbrief_progress_waiting_login",
+        cef.SIMBRIEF_PROGRESS_LOGGING_IN: "simbrief_progress_logging_in",
+        cef.SIMBRIEF_PROGRESS_WAITING_RESULT: "simbrief_progress_waiting_result",
+        cef.SIMBRIEF_PROGRESS_RETRIEVING_BRIEFING: "simbrief_progress_retrieving_briefing"
+        }
+
+    result2Message = {
+        cef.SIMBRIEF_RESULT_ERROR_OTHER: "simbrief_result_error_other",
+        cef.SIMBRIEF_RESULT_ERROR_NO_FORM: "simbrief_result_error_no_form",
+        cef.SIMBRIEF_RESULT_ERROR_NO_POPUP: "simbrief_result_error_no_popup",
+        cef.SIMBRIEF_RESULT_ERROR_LOGIN_FAILED: "simbrief_result_error_login_failed"
+        }
+
+    @staticmethod
+    def getHTMLFilePath():
+        """Get the path of the HTML file to contain the generated flight
+        plan."""
+        if os.name=="nt":
+            return os.path.join(tempfile.gettempdir(),
+                                "mlx_simbrief" +
+                                (".secondary" if secondaryInstallation else "") +
+                                ".html")
+        else:
+            import pwd
+            return os.path.join(tempfile.gettempdir(),
+                                "mlx_simbrief." + pwd.getpwuid(os.getuid())[0] + "" +
+                                (".secondary" if secondaryInstallation else "") +
+                                ".html")
+
+    def __init__(self, wizard):
+        """Construct the setup page."""
+
+        super(SimBriefSetupPage, self).__init__(wizard,
+                                                xstr("simbrief_setup_title"),
+                                                xstr("simbrief_setup_help"),
+                                                xstr("simbrief_setup_chelp"))
+
+        alignment = gtk.Alignment(xalign = 0.5, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+
+        table = gtk.Table(9, 3)
+        table.set_row_spacings(4)
+        table.set_col_spacings(16)
+        table.set_homogeneous(False)
+        alignment.add(table)
+        self.setMainWidget(alignment)
+
+        label = gtk.Label(xstr("simbrief_username"))
+        label.set_use_underline(True)
+        label.set_alignment(0.0, 0.5)
+        table.attach(label, 0, 1, 0, 1)
+
+        self._userName = gtk.Entry()
+        self._userName.set_width_chars(16)
+        self._userName.connect("changed",
+                               lambda button: self._updateForwardButton())
+        self._userName.set_tooltip_text(xstr("simbrief_username_tooltip"))
+        table.attach(self._userName, 1, 2, 0, 1)
+        label.set_mnemonic_widget(self._userName)
+
+        label = gtk.Label(xstr("simbrief_password"))
+        label.set_use_underline(True)
+        label.set_alignment(0.0, 0.5)
+        table.attach(label, 0, 1, 1, 2)
+
+        self._password = gtk.Entry()
+        self._password.set_visibility(False)
+        self._password.connect("changed",
+                               lambda button: self._updateForwardButton())
+        self._password.set_tooltip_text(xstr("simbrief_password_tooltip"))
+        table.attach(self._password, 1, 2, 1, 2)
+        label.set_mnemonic_widget(self._password)
+
+        self._rememberButton = gtk.CheckButton(xstr("simbrief_remember_password"))
+        self._rememberButton.set_use_underline(True)
+        self._rememberButton.set_tooltip_text(xstr("simbrief_remember_tooltip"))
+        table.attach(self._rememberButton, 1, 2, 2, 3, ypadding = 8)
+
+        self._credentialsCondition = threading.Condition()
+        self._credentialsAvailable = False
+        self._credentialsUserName = None
+        self._credentialsPassword = None
+
+        label = gtk.Label(xstr("simbrief_extra_fuel"))
+        label.set_use_underline(True)
+        label.set_alignment(0.0, 0.5)
+        table.attach(label, 0, 1, 3, 4)
+
+        self._extraFuel = IntegerEntry(defaultValue = 0)
+        self._extraFuel.set_width_chars(6)
+        self._extraFuel.set_tooltip_text(xstr("simbrief_extra_fuel_tooltip"))
+        table.attach(self._extraFuel, 1, 2, 3, 4)
+        label.set_mnemonic_widget(self._extraFuel)
+
+        table.attach(gtk.Label("kg"), 2, 3, 3, 4)
+
+        label = gtk.Label(xstr("simbrief_takeoff_runway"))
+        label.set_use_underline(True)
+        label.set_alignment(0.0, 0.5)
+        table.attach(label, 0, 1, 4, 5)
+
+        self._takeoffRunway = gtk.Entry()
+        self._takeoffRunway.set_width_chars(10)
+        self._takeoffRunway.set_tooltip_text(xstr("simbrief_takeoff_runway_tooltip"))
+        self._takeoffRunway.connect("changed", self._upperChanged)
+        table.attach(self._takeoffRunway, 1, 2, 4, 5)
+        label.set_mnemonic_widget(self._takeoffRunway)
+
+        label = gtk.Label(xstr("simbrief_landing_runway"))
+        label.set_use_underline(True)
+        label.set_alignment(0.0, 0.5)
+        table.attach(label, 0, 1, 5, 6)
+
+        self._landingRunway = gtk.Entry()
+        self._landingRunway.set_width_chars(10)
+        self._landingRunway.set_tooltip_text(xstr("simbrief_takeoff_runway_tooltip"))
+        self._landingRunway.connect("changed", self._upperChanged)
+        table.attach(self._landingRunway, 1, 2, 5, 6)
+        label.set_mnemonic_widget(self._landingRunway)
+
+        label = gtk.Label(xstr("simbrief_climb_profile"))
+        label.set_use_underline(True)
+        label.set_alignment(0.0, 0.5)
+        table.attach(label, 0, 1, 6, 7)
+
+        self._climbProfile = gtk.ComboBox()
+        renderer = gtk.CellRendererText()
+        self._climbProfile.pack_start(renderer, True)
+        self._climbProfile.add_attribute(renderer, "text", 0)
+        self._climbProfile.set_tooltip_text(xstr("simbrief_climb_profile_tooltip"))
+        table.attach(self._climbProfile, 1, 2, 6, 7)
+        label.set_mnemonic_widget(self._climbProfile)
+
+        label = gtk.Label(xstr("simbrief_cruise_profile"))
+        label.set_use_underline(True)
+        label.set_alignment(0.0, 0.5)
+        table.attach(label, 0, 1, 7, 8)
+
+        self._cruiseProfile = gtk.ComboBox()
+        renderer = gtk.CellRendererText()
+        self._cruiseProfile.pack_start(renderer, True)
+        self._cruiseProfile.add_attribute(renderer, "text", 0)
+        self._cruiseProfile.set_tooltip_text(xstr("simbrief_cruise_profile_tooltip"))
+        table.attach(self._cruiseProfile, 1, 2, 7, 8)
+        label.set_mnemonic_widget(self._cruiseProfile)
+
+        label = gtk.Label(xstr("simbrief_descent_profile"))
+        label.set_use_underline(True)
+        label.set_alignment(0.0, 0.5)
+        table.attach(label, 0, 1, 8, 9)
+
+        self._descentProfile = gtk.ComboBox()
+        renderer = gtk.CellRendererText()
+        self._descentProfile.pack_start(renderer, True)
+        self._descentProfile.add_attribute(renderer, "text", 0)
+        self._descentProfile.set_tooltip_text(xstr("simbrief_descent_profile_tooltip"))
+        table.attach(self._descentProfile, 1, 2, 8, 9)
+        label.set_mnemonic_widget(self._descentProfile)
+
+        self.addCancelFlightButton()
+
+        self._backButton = self.addPreviousButton(clicked = self._backClicked)
+        self._button = self.addNextButton(clicked = self._forwardClicked)
+
+    def activate(self):
+        """Activate the SimBrief setup page"""
+        config = self._wizard.gui.config
+
+        self._userName.set_text(config.simBriefUserName)
+        self._userName.set_sensitive(True)
+
+        self._password.set_text(config.simBriefPassword)
+        self._password.set_sensitive(True)
+
+        self._rememberButton.set_active(config.rememberSimBriefPassword)
+        self._rememberButton.set_sensitive(True)
+
+        self._extraFuel.set_int(0)
+        self._extraFuel.set_sensitive(True)
+
+        self._takeoffRunway.set_text("")
+        self._takeoffRunway.set_sensitive(True)
+
+        self._landingRunway.set_text("")
+        self._landingRunway.set_sensitive(True)
+
+        simBriefData = self._wizard.gui.flight.aircraft.simBriefData
+        for (control, profiles) in [(self._climbProfile,
+                                     simBriefData.climbProfiles),
+                                    (self._cruiseProfile,
+                                     simBriefData.cruiseProfiles),
+                                    (self._descentProfile,
+                                     simBriefData.descentProfiles)]:
+            model = gtk.ListStore(str)
+            for profile in profiles:
+                model.append([profile])
+            control.set_model(model)
+            control.set_sensitive(True)
+
+        self._climbProfile.set_active(0)
+        self._cruiseProfile.set_active(0)
+        self._descentProfile.set_active(0)
+
+        self._updateForwardButton()
+
+    def _updateForwardButton(self):
+        """Update the sensitivity of the forward button."""
+        self._button.set_sensitive(len(self._userName.get_text())>0 and
+                                   len(self._password.get_text())>0)
+
+    def _backClicked(self, button):
+        """Called when the Back button is pressed."""
+        self.goBack()
+
+    def _forwardClicked(self, button):
+        if self._completed:
+            self._wizard.nextPage()
+        else:
+            config = self._wizard.gui.config
+
+            config.simBriefUserName = self._userName.get_text()
+
+            rememberPassword = self._rememberButton.get_active()
+            config.simBriefPassword = \
+              self._password.get_text() if rememberPassword else ""
+            config.rememberSimBriefPassword = rememberPassword
+
+            config.save()
+
+            plan = self._getPlan()
+            print "plan:", plan
+
+            takeoffRunway = self._takeoffRunway.get_text()
+            if takeoffRunway:
+                self._wizard.takeoffRunway = takeoffRunway
+
+            landingRunway = self._landingRunway.get_text()
+            if landingRunway:
+                self._wizard.landingRunway = landingRunway
+
+            self._userName.set_sensitive(False)
+            self._password.set_sensitive(False)
+            self._rememberButton.set_sensitive(False)
+            self._extraFuel.set_sensitive(False)
+            self._takeoffRunway.set_sensitive(False)
+            self._landingRunway.set_sensitive(False)
+
+            self._climbProfile.set_sensitive(False)
+            self._cruiseProfile.set_sensitive(False)
+            self._descentProfile.set_sensitive(False)
+
+            self._wizard.gui.beginBusy(xstr("simbrief_calling"))
+
+            cef.startFastTimeout()
+            cef.callSimBrief(plan,
+                             self._getCredentialsCallback,
+                             self._simBriefProgressCallback,
+                             SimBriefSetupPage.getHTMLFilePath())
+
+            startSound(const.SOUND_NOTAM)
+
+    def _getCredentialsCallback(self, count):
+        """Called when the SimBrief home page requests the credentials."""
+        with self._credentialsCondition:
+            self._credentialsAvailable = False
+
+            gobject.idle_add(self._getCredentials, count)
+
+            while not self._credentialsAvailable:
+                self._credentialsCondition.wait()
+
+            return (self._credentialsUserName, self._credentialsPassword)
+
+    def _getCredentials(self, count):
+        """Get the credentials.
+
+        If count is 0, the user name and password entered into the setup page
+        are returned. Otherwise a dialog box is displayed informing the user of
+        invalid credentials and requesting another set of them."""
+        with self._credentialsCondition:
+            if count==0:
+                self._credentialsUserName = self._userName.get_text()
+                self._credentialsPassword = self._password.get_text()
+            else:
+                gui = self._wizard.gui
+                config = gui.config
+
+                dialog = SimBriefCredentialsDialog(gui,
+                                                   config.simBriefUserName,
+                                                   config.simBriefPassword,
+                                                   config.rememberSimBriefPassword)
+                response = dialog.run()
+
+                if response==RESPONSETYPE_OK:
+                    self._credentialsUserName = dialog.userName
+                    self._userName.set_text(self._credentialsUserName)
+                    self._credentialsPassword = dialog.password
+                    self._password.set_text(self._credentialsPassword)
+                    rememberPassword = dialog.rememberPassword
+
+                    config.simBriefUserName = self._credentialsUserName
+
+                    config.simBriefPassword = \
+                        self._credentialsPassword if rememberPassword else ""
+                    config.rememberSimBriefPassword = rememberPassword
+
+                    config.save()
+                else:
+                    self._credentialsUserName = None
+                    self._credentialsPassword = None
+
+            self._credentialsAvailable = True
+            self._credentialsCondition.notify()
+
+    def _simBriefProgressCallback(self, progress, result, flightInfo):
+        """Called by the SimBrief handling thread."""
+        gobject.idle_add(self._simBriefProgress, progress, result, flightInfo)
+
+    def _simBriefProgress(self, progress, result, flightInfo):
+        """The real SimBrief progress handler."""
+        print "_simBriefProgress", progress, result, flightInfo
+        if result==cef.SIMBRIEF_RESULT_NONE:
+            message = SimBriefSetupPage.progress2Message.get(progress,
+                                                             "simbrief_progress_unknown")
+            self._wizard.gui.updateBusyState(xstr(message))
+        else:
+            cef.stopFastTimeout()
+            self._wizard.gui.endBusy()
+
+            if result==cef.SIMBRIEF_RESULT_OK:
+                self._wizard.departureMETARChanged(flightInfo["orig_metar"],
+                                                   self)
+                self._wizard.arrivalMETARChanged(flightInfo["dest_metar"], self)
+                self._wizard.nextPage()
+            else:
+                message = SimBriefSetupPage.result2Message.get(result,
+                                                               "simbrief_result_unknown")
+                dialog = gtk.MessageDialog(parent = self._wizard.gui.mainWindow,
+                                           type = MESSAGETYPE_ERROR,
+                                           message_format =
+                                           xstr(message) + "\n"+
+                                           xstr("simbrief_cancelled"))
+
+                dialog.add_button(xstr("button_ok"), RESPONSETYPE_OK)
+                dialog.set_title(WINDOW_TITLE_BASE)
+                secondary = xstr("flightsel_save_failed_sec")
+                dialog.format_secondary_markup(secondary)
+                dialog.run()
+                dialog.hide()
+
+                self._wizard.usingSimBrief = False
+                self._wizard.jumpPage(2, fromPageShift = 1)
+
+    def _getPlan(self):
+        """Get the flight plan data for SimBrief."""
+        plan = {
+            "airline": "MAH",
+            "selcal": "XXXX",
+            "fuelfactor": "P000",
+            "contpct": "0.05",
+            "resvrule": "45",
+            "taxiout": "10",
+            "taxiin": "10",
+            "civalue": "AUTO"
+            }
+
+        wizard = self._wizard
+        gui = wizard.gui
+
+        loginResult = wizard.loginResult
+        plan["cpt"] = loginResult.pilotName
+        plan["pid"] = loginResult.pilotID
+
+        bookedFlight = wizard.bookedFlight
+        plan["fltnum"] = wizard.bookedFlight.callsign[2:]
+        plan["type"] = const.icaoCodes[bookedFlight.aircraftType]
+        plan["orig"] = bookedFlight.departureICAO
+        plan["dest"] = bookedFlight.arrivalICAO
+        plan["reg"] = bookedFlight.tailNumber
+        plan["fin"] = bookedFlight.tailNumber[3:]
+        plan["pax"] = str(bookedFlight.numPassengers)
+
+        departureTime = bookedFlight.departureTime
+        plan["date"] = "%d%s%d" % (departureTime.day,
+                                   SimBriefSetupPage.monthNum2Name[departureTime.month-1],
+                                   departureTime.year%100)
+        plan["deph"] = str(departureTime.hour)
+        plan["depm"] = str(departureTime.minute)
+
+        arrivalTime = bookedFlight.arrivalTime
+        plan["steh"] = str(arrivalTime.hour)
+        plan["stem"] = str(arrivalTime.minute)
+
+        plan["manualzfw"] = str(wizard.zfw / 1000.0)
+        plan["cargo"] = str((wizard.bagWeight + wizard.cargoWeight + wizard.mailWeight)/1000.0)
+
+        plan["route"] = wizard.route
+        plan["fl"] = str(wizard.filedCruiseAltitude)
+        plan["altn"] = wizard.alternate
+
+        plan["addedfuel"] = str(self._extraFuel.get_int() / 1000.0)
+        plan["origrwy"] = self._takeoffRunway.get_text()
+        plan["destrwy"] = self._landingRunway.get_text()
+
+        for (key, control) in [("climb", self._climbProfile),
+                               ("cruise", self._cruiseProfile),
+                               ("descent", self._descentProfile)]:
+            model = control.get_model()
+            active = control.get_active_iter()
+            value = model.get_value(active, 0)
+            plan[key] = value
+
+        return plan
+
+    def _upperChanged(self, entry, arg = None):
+        """Called when the value of some entry widget has changed and the value
+        should be converted to uppercase."""
+        entry.set_text(entry.get_text().upper())
+
+#-----------------------------------------------------------------------------
+
+class SimBriefingPage(Page):
+    """Page to display the SimBrief HTML briefing."""
+    class BrowserLifeSpanHandler(object):
+        """The life-span handler of a browser."""
+        def __init__(self, simBriefingPage):
+            """Construct the life-span handler for the given page."""
+            self._simBriefingPage = simBriefingPage
+
+        def OnBeforeClose(self, browser):
+            """Called before closing the browser."""
+            self._simBriefingPage._invalidateBrowser()
+
+    def __init__(self, wizard):
+        """Construct the setup page."""
+
+        super(SimBriefingPage, self).__init__(wizard,
+                                              "SimBrief flight plan", "")
+
+        self._alignment = gtk.Alignment(xalign = 0.5, yalign = 0.5,
+                                       xscale = 1.0, yscale = 1.0)
+
+        self._container = cef.getContainer()
+        self._alignment.add(self._container)
+
+        self.setMainWidget(self._alignment)
+
+        self._browser = None
+
+        self.addCancelFlightButton()
+
+        self.addPreviousButton(clicked = self._backClicked)
+
+        self._button = self.addNextButton(clicked = self._forwardClicked)
+        self._button.set_label(xstr("briefing_button"))
+        self._button.set_has_tooltip(False)
+        self._button.set_use_stock(False)
+
+    def activate(self):
+        """Activate the SimBrief flight plan page"""
+        if self._browser is None:
+            self._startBrowser()
+        else:
+            self._browser.Reload()
+
+    def grabDefault(self):
+        """If the page has a default button, make it the default one."""
+        super(SimBriefingPage, self).grabDefault()
+
+        if self._browser is None:
+            self._startBrowser()
+
+    def _backClicked(self, button):
+        """Called when the Back button has been pressed."""
+        self.goBack()
+
+    def _forwardClicked(self, button):
+        """Called when the Forward button has been pressed."""
+        if not self._completed:
+            self._button.set_label(xstr("button_next"))
+            self._button.set_tooltip_text(xstr("button_next_tooltip"))
+            self._wizard.usingSimBrief = True
+            self.complete()
+
+        self._wizard.nextPage()
+
+    def _startBrowser(self):
+        """Start the browser.
+
+        If a container is needed, create one."""
+        if self._container is None:
+            self._container = cef.getContainer()
+            self._alignment.add(self._container)
+
+        url = "file://" + SimBriefSetupPage.getHTMLFilePath()
+        self._browser = cef.startInContainer(self._container, url)
+
+        lifeSpanHandler = SimBriefingPage.BrowserLifeSpanHandler(self)
+        self._browser.SetClientHandler(lifeSpanHandler)
+
+    def _invalidateBrowser(self):
+        """Invalidate the browser (and associated stuff)."""
+        self._alignment.remove(self._container)
+        self._container = None
+        self._browser = None
+
+#-----------------------------------------------------------------------------
+
 class FuelTank(gtk.VBox):
     """Widget for the fuel tank."""
@@ -1660,4 +2473,6 @@
             self._wizard.gui.beginBusy(xstr("fuel_pump_busy"))
             self._pump()
+        elif self._wizard.usingSimBrief:
+            self._wizard.jumpPage(3)
         else:
             self._wizard.nextPage()
@@ -1705,5 +2520,14 @@
         if fuelTank is None:
             self._wizard.gui.endBusy()
-            self._wizard.nextPage()
+            if self._wizard.usingSimBrief:
+                self._wizard.gui.startMonitoring()
+                self._wizard.jumpPage(3)
+            else:
+                bookedFlight = self._wizard._bookedFlight
+                self._wizard.gui.beginBusy(xstr("route_down_notams"))
+                self._wizard.gui.webHandler.getNOTAMs(self._notamsCallback,
+                                                      bookedFlight.departureICAO,
+                                                      bookedFlight.arrivalICAO)
+                startSound(const.SOUND_NOTAM)
         else:
             currentLevel = fuelTank.currentWeight / fuelTank.capacity
@@ -1719,151 +2543,4 @@
                                                       currentLevel)])
             gobject.timeout_add(50, self._pump)
-
-#-----------------------------------------------------------------------------
-
-class RoutePage(Page):
-    """The page containing the route and the flight level."""
-    def __init__(self, wizard):
-        """Construct the page."""
-        super(RoutePage, self).__init__(wizard, xstr("route_title"),
-                                        xstr("route_help"),
-                                        completedHelp = xstr("route_chelp"))
-
-        alignment = gtk.Alignment(xalign = 0.5, yalign = 0.5,
-                                  xscale = 0.0, yscale = 0.0)
-
-        mainBox = gtk.VBox()
-        alignment.add(mainBox)
-        self.setMainWidget(alignment)
-
-        levelBox = gtk.HBox()
-
-        label = gtk.Label(xstr("route_level"))
-        label.set_use_underline(True)
-        levelBox.pack_start(label, True, True, 0)
-
-        self._cruiseLevel = gtk.SpinButton()
-        self._cruiseLevel.set_increments(step = 10, page = 100)
-        self._cruiseLevel.set_range(min = 0, max = 500)
-        self._cruiseLevel.set_tooltip_text(xstr("route_level_tooltip"))
-        self._cruiseLevel.set_numeric(True)
-        self._cruiseLevel.connect("changed", self._cruiseLevelChanged)
-        self._cruiseLevel.connect("value-changed", self._cruiseLevelChanged)
-        label.set_mnemonic_widget(self._cruiseLevel)
-
-        levelBox.pack_start(self._cruiseLevel, False, False, 8)
-
-        alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5,
-                                  xscale = 0.0, yscale = 0.0)
-        alignment.add(levelBox)
-
-        mainBox.pack_start(alignment, False, False, 0)
-
-
-        routeBox = gtk.VBox()
-
-        alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5,
-                                  xscale = 0.0, yscale = 0.0)
-        label = gtk.Label(xstr("route_route"))
-        label.set_use_underline(True)
-        alignment.add(label)
-        routeBox.pack_start(alignment, True, True, 0)
-
-        routeWindow = gtk.ScrolledWindow()
-        routeWindow.set_size_request(400, 80)
-        routeWindow.set_shadow_type(gtk.ShadowType.IN if pygobject
-                                    else gtk.SHADOW_IN)
-        routeWindow.set_policy(gtk.PolicyType.AUTOMATIC if pygobject
-                               else gtk.POLICY_AUTOMATIC,
-                               gtk.PolicyType.AUTOMATIC if pygobject
-                               else gtk.POLICY_AUTOMATIC)
-
-        self._uppercasingRoute = False
-
-        self._route = gtk.TextView()
-        self._route.set_tooltip_text(xstr("route_route_tooltip"))
-        self._route.set_wrap_mode(WRAP_WORD)
-        self._route.get_buffer().connect("changed", self._routeChanged)
-        self._route.get_buffer().connect_after("insert-text", self._routeInserted)
-        routeWindow.add(self._route)
-
-        label.set_mnemonic_widget(self._route)
-        routeBox.pack_start(routeWindow, True, True, 0)
-
-        mainBox.pack_start(routeBox, True, True, 8)
-
-        self.addCancelFlightButton()
-
-        self._backButton = self.addPreviousButton(clicked = self._backClicked)
-        self._button = self.addNextButton(clicked = self._forwardClicked)
-
-    @property
-    def filedCruiseLevel(self):
-        """Get the filed cruise level."""
-        return self._cruiseLevel.get_value_as_int()
-
-    @property
-    def route(self):
-        """Get the route."""
-        return self._getRoute()
-
-    def activate(self):
-        """Setup the route from the booked flight."""
-        self._cruiseLevel.set_value(0)
-        self._cruiseLevel.set_text("")
-        self._route.get_buffer().set_text(self._wizard._bookedFlight.route)
-        self._updateForwardButton()
-
-    def _getRoute(self):
-        """Get the text of the route."""
-        buffer = self._route.get_buffer()
-        return buffer.get_text(buffer.get_start_iter(),
-                               buffer.get_end_iter(), True)
-
-    def _updateForwardButton(self):
-        """Update the sensitivity of the forward button."""
-        cruiseLevelText = self._cruiseLevel.get_text()
-        cruiseLevel = int(cruiseLevelText) if cruiseLevelText else 0
-        self._button.set_sensitive(cruiseLevel>=50 and self._getRoute()!="")
-
-    def _cruiseLevelChanged(self, *arg):
-        """Called when the cruise level has changed."""
-        self._updateForwardButton()
-
-    def _routeChanged(self, textBuffer):
-        """Called when the route has changed."""
-        if not self._uppercasingRoute:
-            self._updateForwardButton()
-
-    def _routeInserted(self, textBuffer, iter, text, length):
-        """Called when new characters are inserted into the route.
-
-        It uppercases all characters."""
-        if not self._uppercasingRoute:
-            self._uppercasingRoute = True
-
-            iter1 = iter.copy()
-            iter1.backward_chars(length)
-            textBuffer.delete(iter, iter1)
-
-            textBuffer.insert(iter, text.upper())
-
-            self._uppercasingRoute = False
-
-    def _backClicked(self, button):
-        """Called when the Back button is pressed."""
-        self.goBack()
-
-    def _forwardClicked(self, button):
-        """Called when the Forward button is clicked."""
-        if self._completed:
-            self._wizard.nextPage()
-        else:
-            bookedFlight = self._wizard._bookedFlight
-            self._wizard.gui.beginBusy(xstr("route_down_notams"))
-            self._wizard.gui.webHandler.getNOTAMs(self._notamsCallback,
-                                                  bookedFlight.departureICAO,
-                                                  bookedFlight.arrivalICAO)
-            startSound(const.SOUND_NOTAM)
 
     def _notamsCallback(self, returned, result):
@@ -2338,5 +3015,8 @@
         self._updatingMETAR = False
 
-        self._runway.set_text("")
+        if self._wizard.takeoffRunway is None:
+            self._runway.set_text("")
+        else:
+            self._runway.set_text(self._wizard.takeoffRunway)
         self._runway.set_sensitive(True)
         self._sid.set_active(0)
@@ -2897,5 +3577,8 @@
         self._transition.set_sensitive(True)
 
-        self._runway.set_text("")
+        if self._wizard.landingRunway is None:
+            self._runway.set_text("")
+        else:
+            self._runway.set_text(self._wizard.landingRunway)
         self._runway.set_sensitive(True)
 
@@ -3578,7 +4261,11 @@
         self._payloadIndex = len(self._pages)
         self._pages.append(TimePage(self))
-        self._pages.append(FuelPage(self))
         self._routePage = RoutePage(self)
         self._pages.append(self._routePage)
+        self._simBriefSetupPage = SimBriefSetupPage(self)
+        self._pages.append(self._simBriefSetupPage)
+        self._simBriefingPage = SimBriefingPage(self)
+        self._pages.append(self._simBriefingPage)
+        self._pages.append(FuelPage(self))
         self._departureBriefingPage = BriefingPage(self, True)
         self._pages.append(self._departureBriefingPage)
@@ -3653,6 +4340,11 @@
         return self._loginResult
 
-    def setCurrentPage(self, index, finalize = False):
-        """Set the current page to the one with the given index."""
+    def setCurrentPage(self, index, finalize = False, fromPageShift = None):
+        """Set the current page to the one with the given index.
+
+        @param fromPageShift if given, the relative index of one of the
+        previous pages that should be used as the from-page of the next
+        page. E.g. if fromPageShift is 1, the previous page will be the
+        from-page."""
         assert index < len(self._pages)
 
@@ -3663,4 +4355,6 @@
                 page.complete()
             self.remove(page)
+            if fromPageShift is not None:
+                fromPage -= fromPageShift
 
         self._currentPage = index
@@ -3741,4 +4435,9 @@
 
     @property
+    def alternate(self):
+        """Get the ICAO code of the alternate airport."""
+        return self._routePage.alternate
+
+    @property
     def departureMETAR(self):
         """Get the METAR of the departure airport."""
@@ -3840,11 +4539,22 @@
         return self._finishPage.online
 
+    @property
+    def usingSimBrief(self):
+        """Indicate if we are using a SimBrief briefing or not."""
+        return self._usingSimBrief
+
+    @usingSimBrief.setter
+    def usingSimBrief(self, x):
+        """Set whether we are using a SimBrief briefing or not."""
+        self._usingSimBrief = x
+
     def nextPage(self, finalize = True):
         """Go to the next page."""
         self.jumpPage(1, finalize)
 
-    def jumpPage(self, count, finalize = True):
+    def jumpPage(self, count, finalize = True, fromPageShift = None):
         """Go to the page which is 'count' pages after the current one."""
-        self.setCurrentPage(self._currentPage + count, finalize = finalize)
+        self.setCurrentPage(self._currentPage + count,
+                            finalize = finalize, fromPageShift = fromPageShift)
 
     def grabDefault(self):
@@ -3895,4 +4605,7 @@
         self._arrivalNOTAMs = None
         self._arrivalMETAR = None
+        self._usingSimBrief = None
+        self.takeoffRunway = None
+        self.landingRunway = None
 
         firstPage = 0 if self._loginResult is None else 1
@@ -3938,9 +4651,9 @@
         metar = metar.upper()
         if originator in [self._departureBriefingPage, self._takeoffPage]:
-            self._departureMETARChanged(metar, originator)
+            self.departureMETARChanged(metar, originator)
         else:
-            self._arrivalMETARChanged(metar, originator)
-
-    def _departureMETARChanged(self, metar, originator):
+            self.arrivalMETARChanged(metar, originator)
+
+    def departureMETARChanged(self, metar, originator):
         """Called when the departure METAR has been edited on one of the
         pages.
@@ -3952,5 +4665,5 @@
                 page.changeMETAR(metar)
 
-    def _arrivalMETARChanged(self, metar, originator):
+    def arrivalMETARChanged(self, metar, originator):
         """Called when the arrival METAR has been edited on one of the
         pages.
Index: src/mlx/gui/gui.py
===================================================================
--- src/mlx/gui/gui.py	(revision 620)
+++ src/mlx/gui/gui.py	(revision 687)
@@ -15,4 +15,6 @@
 from mlx.gui.pirep import PIREPViewer
 from mlx.gui.bugreport import BugReportDialog
+from mlx.gui.acars import ACARS
+import cef
 
 import mlx.const as const
@@ -102,6 +104,9 @@
         window.connect("delete-event", self.deleteMainWindow)
         window.connect("window-state-event", self._handleMainWindowState)
+        if os.name=="nt":
+            window.connect("leave-notify-event", self._handleLeaveNotify)
         accelGroup = gtk.AccelGroup()
         window.add_accel_group(accelGroup)
+        window.realize()
 
         mainVBox = gtk.VBox()
@@ -151,4 +156,9 @@
         self._notebook.append_page(self._fleetGateStatus, label)
 
+        self._acars = ACARS(self)
+        label = gtk.Label("ACARS")
+        label.set_use_underline(True)
+        self._notebook.append_page(self._acars, label)
+
         (self._debugLogWidget, self._debugLogView) = self._buildLogWidget()
         self._debugLogWidget.show_all()
@@ -170,4 +180,6 @@
 
         window.show_all()
+        if os.name=="nt":
+            window.get_window().focus()
 
         self._wizard.grabDefault()
@@ -427,11 +439,15 @@
             self._updater = Updater(self,
                                     self._programDirectory,
-                                    self.config.updateURL,
+                                    self.config.DEFAULT_UPDATE_URL,
                                     self._mainWindow)
             self._updater.start()
+
+        cef.initialize(self._programDirectory, self._cefInitialized)
 
         singleton.raiseCallback = self.raiseCallback
         gtk.main()
         singleton.raiseCallback = None
+
+        cef.finalize()
 
         self._disconnect()
@@ -688,4 +704,11 @@
             self._mainWindow.present()
 
+    def _handleLeaveNotify(self, widget, event):
+        """Handle the leave-notify event.
+
+        Here we reset the focus to the main window as CEF might have acquired
+        it earlier."""
+        self._mainWindow.get_window().focus()
+
     def raiseCallback(self):
         """Callback for the singleton handling code."""
@@ -788,4 +811,8 @@
         self._weightHelp.set_sensitive(False)
         self._mainWindow.get_window().set_cursor(self._busyCursor)
+        self._statusbar.updateBusyState(message)
+
+    def updateBusyState(self, message):
+        """Update the busy state."""
         self._statusbar.updateBusyState(message)
 
@@ -1464,4 +1491,9 @@
                                       summary, description, email)
 
+    def _cefInitialized(self):
+        """Called when CEF has been initialized."""
+        self._acars.start()
+        cef.initializeSimBrief()
+
     def _bugReportSentCallback(self, returned, result):
         """Callback function for the bug report sending result."""
Index: src/mlx/gui/mava_simbrief.py
===================================================================
--- src/mlx/gui/mava_simbrief.py	(revision 701)
+++ src/mlx/gui/mava_simbrief.py	(revision 701)
@@ -0,0 +1,390 @@
+# needed for os specific separators
+import os
+# selenium is needed for browser manipulation
+from selenium import webdriver
+from selenium.common.exceptions import NoSuchElementException
+from selenium.common.exceptions import NoSuchWindowException
+from selenium.webdriver.common.by import By
+from selenium.webdriver.support.ui import WebDriverWait, Select
+from selenium.webdriver.support import expected_conditions as EC
+from selenium.webdriver.common.keys import Keys
+# urllib is needed to obtain the xml
+import urllib2
+# xmlparser
+from lxml import etree
+from StringIO import StringIO
+import lxml.html
+import time
+
+
+class MavaSimbriefIntegrator():
+    """Implements the integration with the excellent Simbrief pilot briefing
+    system for MALEV Virtual."""
+
+    # Progress stage: searching the suitable browser window
+    PROGRESS_SEARCHING_BROWSER = 1
+
+    # Progress stage: retrieving the form from the server
+    PROGRESS_LOADING_FORM = 2
+
+    # Progress stage: filling the form
+    PROGRESS_FILLING_FORM = 3
+
+    # Progress stage: waiting for the login
+    PROGRESS_WAITING_LOGIN = 4
+
+    # Progress stage: logging in
+    PROGRESS_LOGGING_IN = 5
+
+    # Progress stage: waiting for result
+    PROGRESS_WAITING_RESULT = 6
+
+    # The maximal reserved progress stage
+    PROGRESS_MAX = 16
+
+    # Result code: none (i.e. the SimBrief query is in progress).
+    RESULT_NONE = 0
+
+    # Result code: success
+    RESULT_OK = 1
+
+    # Result code: other error
+    RESULT_ERROR_OTHER = 2
+
+    # Result code: form could not be loaded
+    RESULT_ERROR_NO_FORM = 11
+
+    # Result code: no popup (i.e. login) window found
+    RESULT_ERROR_NO_POPUP = 12
+
+    # Result code: login failed
+    RESULT_ERROR_LOGIN_FAILED = 13
+
+    # The maximal reserved result code
+    RESULT_MAX = 32
+
+    def __init__(self,
+                 plan,
+                 driver=None,
+                 simbrief_query_settings=None,
+                 mava_simbrief_url=None,
+                 xml_link_fix_part=None):
+        """Init the integrator with settings that are typical of our use.
+        @param: plan - flightplan dictionary
+        @param: webdriver - a selenium webdriver
+        @param: simbrief_query_settings - a dictionary of query settings
+        @param: mava_simbrief_url - url to the form that is sent to simbrief
+        on the mava server
+        @param: xml_link_fix_part = url to the simbrief website under which the
+        xml is to be found"""
+        self.plan = plan
+        if simbrief_query_settings is None:
+            self.simbrief_query_settings = {
+                'navlog': True,
+                'etops': True,
+                'stepclimbs': True,
+                'tlr': True,
+                'notams': True,
+                'firnot': True,
+                'maps': 'Simple',
+            }
+        else:
+            self.simbrief_query_settings = simbrief_query_settings
+
+        if driver is None:
+            self.driver = webdriver.Firefox()
+        else:
+            self.driver = driver
+
+        if mava_simbrief_url is None:
+            self.mava_simbrief_url = "http://flare.privatedns.org/" \
+                                     "mava_simbrief/simbrief_form.html"
+        else:
+            self.mava_simbrief_url = mava_simbrief_url
+
+        if xml_link_fix_part is None:
+            self.xml_link_fix_part = "http://www.simbrief.com/ofp/" \
+                                     "flightplans/xml/"
+        else:
+            self.xml_link_fix_part = xml_link_fix_part
+
+    def fill_form(self,
+                  plan,
+                  simbrief_query_settings):
+        """Fills the form of the webpage using the paramteres that the class
+        has been initialized with.
+        @param: driver - a selenium webdriver
+        @param: plan - dictionary containing plan details
+        @param: simbrief_query_settings - dictionary containing plan settings"""
+        for plan_input_field in plan.iterkeys():
+            self.driver.find_element_by_name(plan_input_field).send_keys(
+                plan[plan_input_field])
+        for option_checkbox in simbrief_query_settings.iterkeys():
+            if (isinstance(simbrief_query_settings[option_checkbox], bool) and
+                    simbrief_query_settings[option_checkbox]):
+                # if setting is a boolean type and true
+                self.driver.find_element_by_name(option_checkbox).click()
+            elif isinstance(simbrief_query_settings[option_checkbox], str):
+                # if setting is a select
+                Select(self.driver.find_element_by_name(option_checkbox)).\
+                    select_by_visible_text(simbrief_query_settings[
+                    option_checkbox])
+
+    def get_xml_link(self,
+                     get_credentials, update_progress,
+                     local_xml_debug=False,
+                     local_html_debug=False):
+        """Obtains the link of the xml to be processed.
+        @param get_credentials - a function, which should return a pair of the
+        user name and password to log in to SimBrief. It gets an integer which
+        is the number of times it has been called so far.
+        @param local_xml_debug - if True then not the real location will be
+        checked but the current working dir will be searched for 'xml.xml'
+        @param local_html_debug - if True then not real mava_simbrief_url will
+        be used but the current working dir will be searched for
+        'mava_simbrief.html'
+        @returns: the string of the xml link if it could be obtained and None
+        otherwise"""
+        # Finding xml_link
+        is_briefing_available = False
+        if local_xml_debug:
+            # set link for locally debugging an existing xml file
+            xml_link = ("file://"
+                        + os.getcwd()
+                        + os.sep
+                        + "xml.xml")
+            is_briefing_available = True
+        else:
+            update_progress(MavaSimbriefIntegrator.PROGRESS_SEARCHING_BROWSER,
+                            MavaSimbriefIntegrator.RESULT_NONE, None)
+            # There must be window whose title is 'SimBrief' so that we
+            # could find our one among several
+            if self._find_window_by_title("SimBrief") is None:
+                print "No SimBrief window was found!"
+                update_progress(MavaSimbriefIntegrator.PROGRESS_SEARCHING_BROWSER,
+                                MavaSimbriefIntegrator.RESULT_ERROR_OTHER, None)
+                return None
+
+            # normal operation with a real xml file
+            update_progress(MavaSimbriefIntegrator.PROGRESS_LOADING_FORM,
+                            MavaSimbriefIntegrator.RESULT_NONE, None)
+            if local_html_debug:
+                self.driver.get(
+                    "file://" + os.getcwd() + os.sep + "simbrief_form.html")
+                is_briefing_available = True
+            else:
+                self.driver.get(self.mava_simbrief_url)
+
+            main_handle = self._find_window_by_title("Malev Virtual Simbrief Integration System")
+            if main_handle is None:
+                print "No SimBrief Integration window was found!"
+                update_progress(MavaSimbriefIntegrator.PROGRESS_LOADING_FORM,
+                                MavaSimbriefIntegrator.RESULT_ERROR_NO_FORM, None)
+                return None
+
+            # Make a copy of the window handles before submitting the form,
+            # so that we could find the popup
+            handles = self.driver.window_handles[:]
+
+            # Entering form data
+            update_progress(MavaSimbriefIntegrator.PROGRESS_FILLING_FORM,
+                            MavaSimbriefIntegrator.RESULT_NONE, None)
+            self.driver.switch_to_window(main_handle)
+            self.fill_form(self.plan,
+                           self.simbrief_query_settings)
+
+            # Loading page
+            button = self.driver.find_element_by_name("submitform")
+            button.send_keys(Keys.RETURN)
+
+            update_progress(MavaSimbriefIntegrator.PROGRESS_WAITING_LOGIN,
+                            MavaSimbriefIntegrator.RESULT_NONE, None)
+            popup_handle = self._find_popup(handles)
+            if popup_handle is None:
+                update_progress(MavaSimbriefIntegrator.PROGRESS_WAITING_LOGIN,
+                                MavaSimbriefIntegrator.RESULT_ERROR_NO_POPUP, None)
+                return None
+
+            login_count = 0
+            end_time = time.time() + 120.0
+            while not is_briefing_available and end_time > time.time():
+                try:
+                    self.driver.switch_to.window(popup_handle)
+
+                    userElement = self.driver.find_element_by_name("user")
+
+                    if userElement is not None:
+                        update_progress(MavaSimbriefIntegrator.PROGRESS_LOGGING_IN,
+                                        MavaSimbriefIntegrator.RESULT_NONE, None)
+                        (userName, password) = get_credentials(login_count)
+                        end_time = time.time() + 120.0
+                        if userName is None or password is None:
+                            update_progress(MavaSimbriefIntegrator.PROGRESS_WAITING_LOGIN,
+                                            MavaSimbriefIntegrator.RESULT_ERROR_LOGIN_FAILED, None)
+                            return None
+
+                        userElement.send_keys(userName)
+                        self.driver.find_element_by_name("pass").send_keys(password)
+                        self.driver.find_element_by_name("staylogged").click()
+
+                        self.driver.find_element(By.XPATH,
+                                                "//input[@value='Login']").send_keys(Keys.RETURN)
+                        login_count += 1
+                except NoSuchElementException:
+                    pass
+                except NoSuchWindowException:
+                    pass
+
+                update_progress(MavaSimbriefIntegrator.PROGRESS_WAITING_RESULT,
+                                MavaSimbriefIntegrator.RESULT_NONE, None)
+                self.driver.switch_to.window(main_handle)
+                try:
+                    if self.driver.find_element_by_name("hidden_is_briefing_available") is not None:
+                        is_briefing_available = True
+                        xml_link_element = self.driver.find_element_by_name(
+                            'hidden_link')
+                        xml_link_generated_part = xml_link_element.get_attribute(
+                            'value')
+                        xml_link = self.xml_link_fix_part + xml_link_generated_part + '.xml'
+                        print(xml_link)
+                except NoSuchElementException:
+                    pass
+
+        if is_briefing_available:
+            return xml_link
+        else:
+            update_progress(MavaSimbriefIntegrator.PROGRESS_WAITING_RESULT,
+                            MavaSimbriefIntegrator.RESULT_ERROR_OTHER, None)
+            return None
+
+    def get_results(self,
+                    xml_link,
+                    html_file_path = None):
+        """Parses the xml for information.
+        @param xml_link - a path to the xml file
+        @return a dictionary of the found information"""
+        # Setup variables
+        ## Holds analysis data not used
+        available_info = {}
+        ## Holds analysis data to be used
+        flight_info = {}
+        ## Holds notams
+        notams_list = []
+        ## Notam counter
+        i = 0
+        # Obtaining the xml
+        response = urllib2.urlopen(xml_link)
+        xml_content = response.read()
+        # Processing xml
+        tree = etree.parse(StringIO(xml_content))
+        context = etree.iterparse(StringIO(xml_content))
+        for action, element in context:
+            # Processing tags that occur multiple times
+            ## NOTAMS
+            if element.tag == 'notamdrec':
+                notams_element_list = list(element)
+                notam_dict = {}
+                for notam in notams_element_list:
+                    notam_dict[notam.tag] = notam.text
+                notams_list.append(notam_dict)
+                i += 1
+            ## WEATHER
+            elif element.tag == 'weather':
+                weather_element_list = list(element)
+                for weather in weather_element_list:
+                    flight_info[weather.tag] = weather.text
+            else:
+                available_info[element.tag] = element.text
+        # Processing plan_html
+        ## Obtaining chart links
+        image_links = []
+        for image_link_a_element in lxml.html.find_class(
+                available_info['plan_html'], 'ofpmaplink'):
+            for image_link_tuple in image_link_a_element.iterlinks():
+                if image_link_tuple[1] == 'src':
+                    image_links.append(image_link_tuple[2])
+        flight_info['image_links'] = image_links
+        print(sorted(available_info.keys()))
+        if html_file_path is None:
+            html_file_path = 'simbrief_plan.html'
+        with open(html_file_path, 'w') as f:
+            f.write(available_info['plan_html'])
+        return flight_info
+
+    def _find_window_by_title(self, title, timeout = 10.0):
+        """Find the window with the given title.
+
+        Switch to that window and return its handle."""
+        def predicate(handle):
+            self.driver.switch_to.window(handle)
+            return self.driver.title == title
+
+        return self._find_window(predicate, timeout = timeout)
+
+    def _find_popup(self, handles, timeout = 10.0):
+        """Find a popup, i.e. a new window being created.
+
+        handles is a list of window handles that existed before the popup was
+        expected to be created. If a new handle is found, that is assumed to be
+        the popup window."""
+        return self._find_window(lambda handle: handle not in handles,
+                                 timeout = timeout)
+
+    def _find_window(self, predicate, timeout = 10.0):
+        """Find a window that fulfills the given predicate."""
+        window_handle = None
+        end_time = time.time() + timeout
+        while window_handle is None and end_time > time.time():
+            for handle in self.driver.window_handles:
+                if predicate(handle):
+                    window_handle = handle
+                    break
+
+        return window_handle
+
+if __name__ == "__main__":
+    mava_simbrief_url = "http://flare.privatedns.org/" \
+                        "mava_simbrief/simbrief_form.html"
+    xml_link_fix_part = "http://www.simbrief.com/ofp/" \
+                        "flightplans/xml/"
+    plan = {
+        'airline': 'MAH',
+        'fltnum': '764',
+        'type': 'B738',
+        'orig': 'LHBP',
+        'dest': 'LSZH',
+        'date': '25FEB15',
+        'deph': '20',
+        'depm': '00',
+        'route': 'GILEP DCT ARSIN UL851 SITNI UL856 NEGRA',
+        'steh': '22',
+        'stem': '05',
+        'reg': 'HA-LOC',
+        'fin': 'LOC',
+        'selcal': 'XXXX',
+        'pax': '100',
+        'altn': 'LSGG',
+        'fl': '36000',
+        'cpt': 'BALINT SZEBENYI',
+        'pid': 'P008',
+        'fuelfactor': 'P000',
+        'manualzfw': '42.7',
+        'addedfuel': '2.5',
+        'contpct': '0.05',
+        'resvrule': '45',
+        'taxiout': '10',
+        'taxiin': '4',
+        'cargo': '5.0',
+        'origrwy': '31L',
+        'destrwy': '34',
+        'climb': '250/300/78',
+        'descent': '80/280/250',
+        'cruise': 'LRC',
+        'civalue': 'AUTO',
+    }
+    integrator = MavaSimbriefIntegrator(plan=plan)
+    link = integrator.get_xml_link(local_xml_debug=False,
+                                   local_html_debug=False)
+    flight_info = integrator.get_results(link)
+    print(flight_info)
+
Index: src/mlx/gui/prefs.py
===================================================================
--- src/mlx/gui/prefs.py	(revision 392)
+++ src/mlx/gui/prefs.py	(revision 684)
@@ -243,4 +243,6 @@
         self._setSmoothing(self._vsSmoothingEnabled, self._vsSmoothingLength,
                            config.vsSmoothingLength)
+
+        self._useSimBrief.set_active(config.useSimBrief)
 
         pirepDirectory = config.pirepDirectory
@@ -291,4 +293,5 @@
         config.vsSmoothingLength = self._getSmoothing(self._vsSmoothingEnabled,
                                                        self._vsSmoothingLength)
+        config.useSimBrief = self._useSimBrief.get_active()
         config.pirepDirectory = text2unicode(self._pirepDirectory.get_text())
         config.pirepAutoSave = self._pirepAutoSave.get_active()
@@ -406,4 +409,9 @@
                                     xstr("prefs_vsSmoothingEnabledTooltip"))
         simulatorBox.pack_start(vsSmoothingBox, False, False, 4)
+
+        self._useSimBrief = gtk.CheckButton(xstr("prefs_useSimBrief"))
+        self._useSimBrief.set_use_underline(True)
+        self._useSimBrief.set_tooltip_text(xstr("prefs_useSimBrief_tooltip"))
+        mainBox.pack_start(self._useSimBrief, False, False, 0)
 
         pirepBox = gtk.HBox()
Index: src/mlx/update.py
===================================================================
--- src/mlx/update.py	(revision 672)
+++ src/mlx/update.py	(revision 681)
@@ -525,6 +525,4 @@
         return
 
-    print "update: result:", result
-
     (manifest, updateManifest, modifiedAndNew, removed) = result        
     localRemoved = getToremoveFiles(directory)
