From 887f53f6cf5c800ced40e1f50af8f99a8b38277f Mon Sep 17 00:00:00 2001
From: skomoroh <skomoroh@39dd0a4e-7c14-0410-91b3-c4f2d318f732>
Date: Sun, 14 Jan 2007 22:25:14 +0000
Subject: [PATCH] + 2 new settings options: `redeal animation' and `winning
 animation' + auto generation cards shadow (needs PIL) * update russian
 translation * cleanup code (removed `apply')

git-svn-id: https://pysolfc.svn.sourceforge.net/svnroot/pysolfc/PySolFC/trunk@132 39dd0a4e-7c14-0410-91b3-c4f2d318f732
---
 data/images/shadow.gif                  |  Bin 0 -> 601 bytes
 po/games.pot                            |   53 +-
 po/pysol.pot                            | 1716 +++++++++++-----------
 po/ru_games.po                          |   59 +-
 po/ru_pysol.po                          | 1734 ++++++++++++-----------
 pysollib/actions.py                     |    2 +-
 pysollib/app.py                         |    2 +-
 pysollib/game.py                        |    4 +-
 pysollib/games/bakersdozen.py           |    2 +-
 pysollib/games/bakersgame.py            |    2 +-
 pysollib/games/beleagueredcastle.py     |    6 +-
 pysollib/games/braid.py                 |    4 +-
 pysollib/games/freecell.py              |    4 +-
 pysollib/games/golf.py                  |    2 +-
 pysollib/games/gypsy.py                 |    2 +-
 pysollib/games/harp.py                  |    2 +-
 pysollib/games/klondike.py              |    4 +-
 pysollib/games/larasgame.py             |    2 +-
 pysollib/games/mahjongg/mahjongg.py     |    5 +-
 pysollib/games/mahjongg/shisensho.py    |    2 +-
 pysollib/games/napoleon.py              |    2 +-
 pysollib/games/numerica.py              |    2 +-
 pysollib/games/special/tarock.py        |    4 +-
 pysollib/games/spider.py                |    8 +-
 pysollib/games/terrace.py               |    6 +-
 pysollib/games/threepeaks.py            |    2 +-
 pysollib/games/ultra/dashavatara.py     |   16 +-
 pysollib/games/ultra/hanafuda.py        |   14 +-
 pysollib/games/ultra/hanafuda1.py       |    4 +-
 pysollib/games/ultra/hanafuda_common.py |   12 +-
 pysollib/games/ultra/hexadeck.py        |   30 +-
 pysollib/games/ultra/matrix.py          |    2 +-
 pysollib/games/ultra/mughal.py          |   14 +-
 pysollib/games/ultra/tarock.py          |    2 +-
 pysollib/games/unionsquare.py           |    2 +-
 pysollib/games/yukon.py                 |    6 +-
 pysollib/images.py                      |   92 +-
 pysollib/layout.py                      |    2 +-
 pysollib/mfxutil.py                     |    2 +-
 pysollib/pysolgtk/tkwidget.py           |    2 +-
 pysollib/pysolgtk/tkwrap.py             |    2 +-
 pysollib/resource.py                    |   22 +-
 pysollib/stack.py                       |   57 +-
 pysollib/tile/menubar.py                |   23 +-
 pysollib/tile/statusbar.py              |    2 +-
 pysollib/tile/tkcanvas.py               |    2 +-
 pysollib/tile/tkhtml.py                 |    2 +-
 pysollib/tile/tkstats.py                |   18 +-
 pysollib/tile/tktree.py                 |    2 +-
 pysollib/tile/tkutil.py                 |    6 +-
 pysollib/tile/tkwidget.py               |   24 +-
 pysollib/tile/tkwrap.py                 |    2 +-
 pysollib/tk/menubar.py                  |   23 +-
 pysollib/tk/progressbar.py              |    2 +-
 pysollib/tk/statusbar.py                |    2 +-
 pysollib/tk/tkcanvas.py                 |    2 +-
 pysollib/tk/tkhtml.py                   |    2 +-
 pysollib/tk/tkstats.py                  |   18 +-
 pysollib/tk/tktree.py                   |    2 +-
 pysollib/tk/tkutil.py                   |    6 +-
 pysollib/tk/tkwidget.py                 |   21 +-
 pysollib/tk/tkwrap.py                   |    2 +-
 62 files changed, 2134 insertions(+), 1939 deletions(-)
 create mode 100644 data/images/shadow.gif

diff --git a/data/images/shadow.gif b/data/images/shadow.gif
new file mode 100644
index 0000000000000000000000000000000000000000..5ce09c705d301d507a768173009f0503509c310d
GIT binary patch
literal 601
zcmV-f0;c^(Nk%w1VaNc;0Pp|+00000001HR1OWg50RSuj0002U0LTCU0{%pdr^)LL
zpNw?cim%Rm`<{FvIF{sTrsz7dt_r_$OwXZR=lHJoD-ZMugT&nMSWF_96s401ed3~2
zY4ysnYO&m{p$qnghvM?sJVl?^YEYXEe@EhUdEAb#ul4zU*AK`?B^X$UWQa)EqnOwj
z;|R%EA{kk^VTnm8p_$ov;0Y?pIU0&kN;-;q+PJDJ+6sFXI}7GY+jnbAr<*I+%e(h0
zOa?qGR*Vd2oP5Q+EcNURB^{kqO?`xY4YaMj*bROWKE6qA{^@;=lFsg=-Yx?Fo+V$O
zW{>YOpI^?uZ|W~#2Z01J{3BQ}A%uh76gmXRkl(|H5wA@&S5acd{%0HUT~yd{*~f7q
z>y0c}a@a|5DdDXY*z(uQZ86!+^j9<2&1yNl?abGc)=!Q@O$McQG*(e#Nu@27*R<7B
zVNsb)ZCCZw)m~YVZB5rT)Yn^KfsNHx*3;QpX?3kd`c`UNOmkhubynBX-Bo!}?M>D<
z(%({nQx#@4*z93SixVXV)%ew8TagV-?o?UPWy+iNW>(hO?`J-v{e-SmTF+@xsq?Ic
z)OuHJU#~UQMm#&%ZAQ7@>_*gEcknX9$Nc7fJWz5%#my`S-JHvF($if>_i|l&b}ieR
zb%$16c6i#~r<Hd%9!`4l>y4jh@?J^%Hu0Ctmv!HHeIolZv-RheUoHRnFdz>B5_h0>
n339ifcMXD9pb-(;FrkDGMp5Am7ect9eHlK|p?n{@PyhfswK6CU

literal 0
HcmV?d00001

diff --git a/po/games.pot b/po/games.pot
index 98a2c2ed..61ca8371 100644
--- a/po/games.pot
+++ b/po/games.pot
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PySol 0.0.1\n"
-"POT-Creation-Date: Thu Dec  7 15:25:59 2006\n"
+"POT-Creation-Date: Fri Jan 12 13:34:09 2007\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -255,6 +255,9 @@ msgstr ""
 msgid "Betsy Ross"
 msgstr ""
 
+msgid "Big Ben"
+msgstr ""
+
 msgid "Big Bertha"
 msgstr ""
 
@@ -426,6 +429,9 @@ msgstr ""
 msgid "Busy Aces"
 msgstr ""
 
+msgid "Busy Cards"
+msgstr ""
+
 msgid "Butterfly"
 msgstr ""
 
@@ -438,6 +444,9 @@ msgstr ""
 msgid "Camelot"
 msgstr ""
 
+msgid "Can Can"
+msgstr ""
+
 msgid "Canfield"
 msgstr ""
 
@@ -570,6 +579,9 @@ msgstr ""
 msgid "Clink"
 msgstr ""
 
+msgid "Clock"
+msgstr ""
+
 msgid "Clover Leaf"
 msgstr ""
 
@@ -804,6 +816,9 @@ msgstr ""
 msgid "Double Klondike by Threes"
 msgstr ""
 
+msgid "Double Line"
+msgstr ""
+
 msgid "Double Mahjongg Big Castle"
 msgstr ""
 
@@ -831,6 +846,9 @@ msgstr ""
 msgid "Double Measure"
 msgstr ""
 
+msgid "Double Pyramid"
+msgstr ""
+
 msgid "Double Rail"
 msgstr ""
 
@@ -1143,6 +1161,9 @@ msgstr ""
 msgid "Four Winds"
 msgstr ""
 
+msgid "Four by Four"
+msgstr ""
+
 msgid "Foursome"
 msgstr ""
 
@@ -1356,6 +1377,9 @@ msgstr ""
 msgid "Harvestman"
 msgstr ""
 
+msgid "Hawaiian"
+msgstr ""
+
 msgid "Hayagriva"
 msgstr ""
 
@@ -2631,6 +2655,9 @@ msgstr ""
 msgid "Ox"
 msgstr ""
 
+msgid "Paganini"
+msgstr ""
+
 msgid "Pagat"
 msgstr ""
 
@@ -2922,21 +2949,6 @@ msgstr ""
 msgid "Robin"
 msgstr ""
 
-msgid "Rock Hopper"
-msgstr ""
-
-msgid "Rock Hopper 6x6"
-msgstr ""
-
-msgid "Rock Hopper 7x7"
-msgstr ""
-
-msgid "Rock Hopper Cross 1"
-msgstr ""
-
-msgid "Rock Hopper Cross 2"
-msgstr ""
-
 msgid "Rocket"
 msgstr ""
 
@@ -3003,6 +3015,9 @@ msgstr ""
 msgid "Russian Spider"
 msgstr ""
 
+msgid "S Patience"
+msgstr ""
+
 msgid "Salic Law"
 msgstr ""
 
@@ -3552,6 +3567,9 @@ msgstr ""
 msgid "Trefoil"
 msgstr ""
 
+msgid "Triangle"
+msgstr ""
+
 msgid "Trika"
 msgstr ""
 
@@ -3636,6 +3654,9 @@ msgstr ""
 msgid "Unlimited"
 msgstr ""
 
+msgid "Up and Down"
+msgstr ""
+
 msgid "Usk"
 msgstr ""
 
diff --git a/po/pysol.pot b/po/pysol.pot
index 5554841e..c3254d92 100644
--- a/po/pysol.pot
+++ b/po/pysol.pot
@@ -14,7 +14,7 @@ msgid ""
 msgstr ""
 "#-#-#-#-#  pysol-1.pot (PACKAGE VERSION)  #-#-#-#-#\n"
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: Thu Dec  7 15:27:04 2006\n"
+"POT-Creation-Date: Fri Jan 12 13:35:13 2007\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -24,7 +24,7 @@ msgstr ""
 "Generated-By: pygettext.py 1.5\n"
 "#-#-#-#-#  pysol-2.pot (PACKAGE VERSION)  #-#-#-#-#\n"
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2006-12-07 15:27+0300\n"
+"POT-Creation-Date: 2007-01-12 13:35+0300\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -32,57 +32,57 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: pysollib/actions.py:259 pysollib/tile/toolbar.py:236
-#: pysollib/tk/toolbar.py:197
+#: pysollib/actions.py:257 pysollib/tile/toolbar.py:189
+#: pysollib/tk/toolbar.py:192
 msgid "New game"
 msgstr ""
 
-#: pysollib/actions.py:272 pysollib/tile/menubar.py:820
-#: pysollib/tile/menubar.py:834 pysollib/tk/menubar.py:815
-#: pysollib/tk/menubar.py:829
+#: pysollib/actions.py:270 pysollib/tile/menubar.py:822
+#: pysollib/tile/menubar.py:836 pysollib/tk/menubar.py:818
+#: pysollib/tk/menubar.py:832
 msgid "Select game"
 msgstr ""
 
-#: pysollib/actions.py:286
+#: pysollib/actions.py:284
 msgid "Invalid game number"
 msgstr ""
 
-#: pysollib/actions.py:287
+#: pysollib/actions.py:285
 msgid "Invalid game number\n"
 msgstr ""
 
-#: pysollib/actions.py:304
+#: pysollib/actions.py:302
 msgid "Select next game number"
 msgstr ""
 
-#: pysollib/actions.py:313 pysollib/actions.py:323
+#: pysollib/actions.py:311 pysollib/actions.py:321
 msgid "Select new game number"
 msgstr ""
 
-#: pysollib/actions.py:314
+#: pysollib/actions.py:312
 msgid ""
 "\n"
 "\n"
 "Enter new game number"
 msgstr ""
 
-#: pysollib/actions.py:315
+#: pysollib/actions.py:313
 msgid "&Next number"
 msgstr ""
 
-#: pysollib/actions.py:315 pysollib/app.py:881 pysollib/app.py:1164
-#: pysollib/app.py:1176 pysollib/game.py:933 pysollib/game.py:1865
+#: pysollib/actions.py:313 pysollib/app.py:886 pysollib/app.py:1169
+#: pysollib/app.py:1181 pysollib/game.py:950 pysollib/game.py:2048
 #: pysollib/tile/colorsdialog.py:123 pysollib/tile/edittextdialog.py:83
-#: pysollib/tile/fontsdialog.py:145 pysollib/tile/fontsdialog.py:205
-#: pysollib/tile/gameinfodialog.py:155 pysollib/tile/menubar.py:1335
-#: pysollib/tile/playeroptionsdialog.py:111 pysollib/tile/selectcardset.py:388
+#: pysollib/tile/fontsdialog.py:144 pysollib/tile/fontsdialog.py:204
+#: pysollib/tile/gameinfodialog.py:155 pysollib/tile/menubar.py:1334
+#: pysollib/tile/playeroptionsdialog.py:111 pysollib/tile/selectcardset.py:387
 #: pysollib/tile/selecttile.py:161 pysollib/tile/soundoptionsdialog.py:168
 #: pysollib/tile/soundoptionsdialog.py:206 pysollib/tile/timeoutsdialog.py:94
-#: pysollib/tile/tkhtml.py:501 pysollib/tile/tkstats.py:211
-#: pysollib/tile/tkstats.py:381 pysollib/tile/tkstats.py:450
-#: pysollib/tile/tkstats.py:473 pysollib/tile/tkstats.py:516
-#: pysollib/tile/tkstats.py:587 pysollib/tile/tkstats.py:671
-#: pysollib/tile/tkwidget.py:146 pysollib/tile/tkwidget.py:319
+#: pysollib/tile/tkhtml.py:501 pysollib/tile/tkstats.py:214
+#: pysollib/tile/tkstats.py:384 pysollib/tile/tkstats.py:457
+#: pysollib/tile/tkstats.py:480 pysollib/tile/tkstats.py:523
+#: pysollib/tile/tkstats.py:594 pysollib/tile/tkstats.py:678
+#: pysollib/tile/tkwidget.py:154 pysollib/tile/tkwidget.py:329
 #: pysollib/tk/colorsdialog.py:122 pysollib/tk/edittextdialog.py:82
 #: pysollib/tk/fontsdialog.py:143 pysollib/tk/fontsdialog.py:205
 #: pysollib/tk/gameinfodialog.py:155 pysollib/tk/playeroptionsdialog.py:85
@@ -90,26 +90,26 @@ msgstr ""
 #: pysollib/tk/selectcardset.py:397 pysollib/tk/selecttile.py:159
 #: pysollib/tk/soundoptionsdialog.py:170 pysollib/tk/soundoptionsdialog.py:211
 #: pysollib/tk/timeoutsdialog.py:92 pysollib/tk/tkhtml.py:500
-#: pysollib/tk/tkstats.py:288 pysollib/tk/tkstats.py:512
-#: pysollib/tk/tkstats.py:579 pysollib/tk/tkstats.py:594
-#: pysollib/tk/tkstats.py:636 pysollib/tk/tkstats.py:708
-#: pysollib/tk/tkstats.py:792 pysollib/tk/tkwidget.py:159
+#: pysollib/tk/tkstats.py:288 pysollib/tk/tkstats.py:514
+#: pysollib/tk/tkstats.py:581 pysollib/tk/tkstats.py:596
+#: pysollib/tk/tkstats.py:638 pysollib/tk/tkstats.py:710
+#: pysollib/tk/tkstats.py:794 pysollib/tk/tkwidget.py:160
 #: pysollib/tk/tkwidget.py:324
 msgid "&OK"
 msgstr ""
 
-#: pysollib/actions.py:315 pysollib/app.py:882 pysollib/app.py:1176
-#: pysollib/game.py:933 pysollib/game.py:1316 pysollib/game.py:1331
-#: pysollib/game.py:1338 pysollib/game.py:1344
+#: pysollib/actions.py:313 pysollib/app.py:887 pysollib/app.py:1181
+#: pysollib/game.py:950 pysollib/game.py:1502 pysollib/game.py:1518
+#: pysollib/game.py:1525 pysollib/game.py:1531
 #: pysollib/tile/colorsdialog.py:123 pysollib/tile/edittextdialog.py:83
-#: pysollib/tile/fontsdialog.py:145 pysollib/tile/fontsdialog.py:205
+#: pysollib/tile/fontsdialog.py:144 pysollib/tile/fontsdialog.py:204
 #: pysollib/tile/playeroptionsdialog.py:111 pysollib/tile/selectcardset.py:237
-#: pysollib/tile/selectgame.py:267 pysollib/tile/selectgame.py:397
+#: pysollib/tile/selectgame.py:267 pysollib/tile/selectgame.py:398
 #: pysollib/tile/selecttile.py:161 pysollib/tile/soundoptionsdialog.py:168
-#: pysollib/tile/timeoutsdialog.py:94 pysollib/tile/tkwidget.py:319
+#: pysollib/tile/timeoutsdialog.py:94 pysollib/tile/tkwidget.py:329
 #: pysollib/tk/colorsdialog.py:122 pysollib/tk/edittextdialog.py:82
 #: pysollib/tk/fontsdialog.py:143 pysollib/tk/fontsdialog.py:205
-#: pysollib/tk/menubar.py:1122 pysollib/tk/menubar.py:1124
+#: pysollib/tk/menubar.py:1133 pysollib/tk/menubar.py:1135
 #: pysollib/tk/playeroptionsdialog.py:85
 #: pysollib/tk/playeroptionsdialog.py:160 pysollib/tk/selectcardset.py:241
 #: pysollib/tk/selectgame.py:266 pysollib/tk/selectgame.py:407
@@ -118,122 +118,122 @@ msgstr ""
 msgid "&Cancel"
 msgstr ""
 
-#: pysollib/actions.py:331
+#: pysollib/actions.py:329
 msgid "Select random game"
 msgstr ""
 
-#: pysollib/actions.py:367
+#: pysollib/actions.py:365
 msgid "Select next game"
 msgstr ""
 
-#: pysollib/actions.py:400 pysollib/tile/toolbar.py:250
-#: pysollib/tk/toolbar.py:211
+#: pysollib/actions.py:398 pysollib/tile/toolbar.py:203
+#: pysollib/tk/toolbar.py:206
 msgid "Quit "
 msgstr ""
 
-#: pysollib/actions.py:451
+#: pysollib/actions.py:449
 msgid "Clear bookmarks"
 msgstr ""
 
-#: pysollib/actions.py:452
+#: pysollib/actions.py:450
 msgid "Clear all bookmarks ?"
 msgstr ""
 
-#: pysollib/actions.py:462
+#: pysollib/actions.py:460
 msgid "Restart game"
 msgstr ""
 
-#: pysollib/actions.py:463
+#: pysollib/actions.py:461
 msgid "Restart this game ?"
 msgstr ""
 
-#: pysollib/actions.py:504
+#: pysollib/actions.py:502
 msgid ""
 "Comments for %s:\n"
 "\n"
 msgstr ""
 
-#: pysollib/actions.py:506
+#: pysollib/actions.py:504
 msgid "Comments for "
 msgstr ""
 
-#: pysollib/actions.py:524 pysollib/actions.py:552
+#: pysollib/actions.py:522 pysollib/actions.py:550
 msgid "Error while writing to file"
 msgstr ""
 
-#: pysollib/actions.py:527 pysollib/actions.py:555
+#: pysollib/actions.py:525 pysollib/actions.py:553
 msgid " Info"
 msgstr ""
 
-#: pysollib/actions.py:528
+#: pysollib/actions.py:526
 msgid ""
 "Comments were appended to\n"
 "\n"
 msgstr ""
 
-#: pysollib/actions.py:539
+#: pysollib/actions.py:537
 msgid "Demo statistics"
 msgstr ""
 
-#: pysollib/actions.py:542
+#: pysollib/actions.py:540
 msgid "Your statistics"
 msgstr ""
 
-#: pysollib/actions.py:556
+#: pysollib/actions.py:554
 msgid ""
 " were appended to\n"
 "\n"
 msgstr ""
 
-#: pysollib/actions.py:571
+#: pysollib/actions.py:569
 msgid " Demo"
 msgstr ""
 
-#: pysollib/actions.py:571
+#: pysollib/actions.py:569
 msgid " Demo "
 msgstr ""
 
-#: pysollib/actions.py:574 pysollib/actions.py:593
+#: pysollib/actions.py:572 pysollib/actions.py:591
 msgid " for "
 msgstr ""
 
-#: pysollib/actions.py:580 pysollib/stats.py:206
+#: pysollib/actions.py:578 pysollib/stats.py:205
 msgid "Statistics for "
 msgstr ""
 
-#: pysollib/actions.py:583 pysollib/tile/selectgame.py:344
-#: pysollib/tile/toolbar.py:247 pysollib/tk/selectgame.py:350
-#: pysollib/tk/toolbar.py:208
+#: pysollib/actions.py:581 pysollib/tile/selectgame.py:345
+#: pysollib/tile/toolbar.py:200 pysollib/tk/selectgame.py:350
+#: pysollib/tk/toolbar.py:203
 msgid "Statistics"
 msgstr ""
 
-#: pysollib/actions.py:587 data/glade-translations:31
+#: pysollib/actions.py:585 data/glade-translations:31
 msgid "Full log"
 msgstr ""
 
-#: pysollib/actions.py:590 data/glade-translations:32
+#: pysollib/actions.py:588 data/glade-translations:32
 msgid "Session log"
 msgstr ""
 
-#: pysollib/actions.py:596
+#: pysollib/actions.py:594
 msgid "Game Info"
 msgstr ""
 
-#: pysollib/actions.py:612
+#: pysollib/actions.py:610
 msgid "Reset all statistics"
 msgstr ""
 
-#: pysollib/actions.py:613
+#: pysollib/actions.py:611
 msgid ""
 "Reset ALL statistics and logs for player\n"
 "%s ?"
 msgstr ""
 
-#: pysollib/actions.py:619
+#: pysollib/actions.py:617
 msgid "Reset game statistics"
 msgstr ""
 
-#: pysollib/actions.py:620
+#: pysollib/actions.py:618
 msgid ""
 "Reset statistics and logs for player\n"
 "%s\n"
@@ -241,23 +241,23 @@ msgid ""
 "%s ?"
 msgstr ""
 
-#: pysollib/actions.py:676
+#: pysollib/actions.py:674
 msgid "Play demo"
 msgstr ""
 
-#: pysollib/actions.py:687
+#: pysollib/actions.py:685
 msgid "Set player options"
 msgstr ""
 
-#: pysollib/actions.py:701 data/glade-translations:40
+#: pysollib/actions.py:699 data/glade-translations:40
 msgid "Set colors"
 msgstr ""
 
-#: pysollib/actions.py:721
+#: pysollib/actions.py:719
 msgid "Set fonts"
 msgstr ""
 
-#: pysollib/actions.py:730 data/glade-translations:33
+#: pysollib/actions.py:728 data/glade-translations:33
 msgid "Set timeouts"
 msgstr ""
 
@@ -265,29 +265,29 @@ msgstr ""
 msgid "Unknown"
 msgstr ""
 
-#: pysollib/app.py:883 pysollib/game.py:1316 pysollib/game.py:1331
-#: pysollib/game.py:1338 pysollib/game.py:1344 pysollib/tile/menubar.py:366
-#: pysollib/tk/menubar.py:363
+#: pysollib/app.py:888 pysollib/game.py:1502 pysollib/game.py:1518
+#: pysollib/game.py:1525 pysollib/game.py:1531 pysollib/tile/menubar.py:361
+#: pysollib/tk/menubar.py:358
 msgid "&New game"
 msgstr ""
 
-#: pysollib/app.py:1026
+#: pysollib/app.py:1031
 msgid "Loading %s %s..."
 msgstr ""
 
-#: pysollib/app.py:1061
+#: pysollib/app.py:1066
 msgid " load error"
 msgstr ""
 
-#: pysollib/app.py:1062
+#: pysollib/app.py:1067
 msgid "Error while loading "
 msgstr ""
 
-#: pysollib/app.py:1156
+#: pysollib/app.py:1161
 msgid "Incompatible "
 msgstr ""
 
-#: pysollib/app.py:1158
+#: pysollib/app.py:1163
 msgid ""
 "The currently selected %s %s\n"
 "is not compatible with the game\n"
@@ -296,45 +296,45 @@ msgid ""
 "Please select a %s type %s.\n"
 msgstr ""
 
-#: pysollib/app.py:1174
+#: pysollib/app.py:1179
 msgid "Please select a %s type %s"
 msgstr ""
 
-#: pysollib/game.py:852 pysollib/game.py:858
+#: pysollib/game.py:869 pysollib/game.py:875
 msgid "Player\n"
 msgstr ""
 
-#: pysollib/game.py:929
+#: pysollib/game.py:946
 msgid "Discard current game ?"
 msgstr ""
 
-#: pysollib/game.py:1270
+#: pysollib/game.py:1455
 msgid ""
 "\n"
 "You have reached\n"
 "#%d in the %s of playing time"
 msgstr ""
 
-#: pysollib/game.py:1275
+#: pysollib/game.py:1460
 msgid ""
 "\n"
 "and #%d in the %s of moves"
 msgstr ""
 
-#: pysollib/game.py:1278
+#: pysollib/game.py:1463
 msgid ""
 "\n"
 "You have reached\n"
 "#%d in the %s of moves"
 msgstr ""
 
-#: pysollib/game.py:1307 pysollib/game.py:1323
+#: pysollib/game.py:1493 pysollib/game.py:1510
 #: pysollib/tile/soundoptionsdialog.py:102
 #: pysollib/tk/soundoptionsdialog.py:100
 msgid "Game won"
 msgstr ""
 
-#: pysollib/game.py:1308
+#: pysollib/game.py:1494
 msgid ""
 "\n"
 "Congratulations, this\n"
@@ -345,7 +345,7 @@ msgid ""
 "%s\n"
 msgstr ""
 
-#: pysollib/game.py:1324
+#: pysollib/game.py:1511
 msgid ""
 "\n"
 "Congratulations, you did it !\n"
@@ -355,101 +355,101 @@ msgid ""
 "%s\n"
 msgstr ""
 
-#: pysollib/game.py:1336 pysollib/game.py:1342
+#: pysollib/game.py:1523 pysollib/game.py:1529
 #: pysollib/tile/soundoptionsdialog.py:100
 #: pysollib/tk/soundoptionsdialog.py:98
 msgid "Game finished"
 msgstr ""
 
-#: pysollib/game.py:1337 pysollib/game.py:1866
+#: pysollib/game.py:1524 pysollib/game.py:2049
 msgid ""
 "\n"
 "Game finished\n"
 msgstr ""
 
-#: pysollib/game.py:1343
+#: pysollib/game.py:1530
 msgid ""
 "\n"
 "Game finished, but not without my help...\n"
 msgstr ""
 
-#: pysollib/game.py:1344
+#: pysollib/game.py:1531
 msgid "&Restart"
 msgstr ""
 
-#: pysollib/game.py:1758
+#: pysollib/game.py:1941
 msgid "Score %6d"
 msgstr ""
 
-#: pysollib/game.py:1857
+#: pysollib/game.py:2040
 msgid "&Cool"
 msgstr ""
 
-#: pysollib/game.py:1857
+#: pysollib/game.py:2040
 msgid "&Great"
 msgstr ""
 
-#: pysollib/game.py:1857
+#: pysollib/game.py:2040
 msgid "&Wow"
 msgstr ""
 
-#: pysollib/game.py:1857
+#: pysollib/game.py:2040
 msgid "&Yeah"
 msgstr ""
 
-#: pysollib/game.py:1858 pysollib/game.py:1869 pysollib/game.py:1881
+#: pysollib/game.py:2041 pysollib/game.py:2052 pysollib/game.py:2064
 msgid " Autopilot"
 msgstr ""
 
-#: pysollib/game.py:1859
+#: pysollib/game.py:2042
 msgid ""
 "\n"
 "Game solved in %d moves.\n"
 msgstr ""
 
-#: pysollib/game.py:1880
+#: pysollib/game.py:2063
 msgid "&Hmm"
 msgstr ""
 
-#: pysollib/game.py:1880
+#: pysollib/game.py:2063
 msgid "&Oh well"
 msgstr ""
 
-#: pysollib/game.py:1880
+#: pysollib/game.py:2063
 msgid "&That's life"
 msgstr ""
 
-#: pysollib/game.py:1882
+#: pysollib/game.py:2065
 msgid ""
 "\n"
 "This won't come out...\n"
 msgstr ""
 
-#: pysollib/game.py:2291
+#: pysollib/game.py:2474
 msgid "Set bookmark"
 msgstr ""
 
-#: pysollib/game.py:2292
+#: pysollib/game.py:2475
 msgid "Replace existing bookmark %d ?"
 msgstr ""
 
-#: pysollib/game.py:2314
+#: pysollib/game.py:2497
 msgid "Goto bookmark"
 msgstr ""
 
-#: pysollib/game.py:2315
+#: pysollib/game.py:2498
 msgid "Goto bookmark %d ?"
 msgstr ""
 
-#: pysollib/game.py:2346
+#: pysollib/game.py:2529
 msgid "Open game"
 msgstr ""
 
-#: pysollib/game.py:2357 pysollib/game.py:2366 pysollib/game.py:2371
+#: pysollib/game.py:2540 pysollib/game.py:2549 pysollib/game.py:2554
 msgid "Load game error"
 msgstr ""
 
-#: pysollib/game.py:2358
+#: pysollib/game.py:2541
 msgid ""
 "Error while loading game.\n"
 "\n"
@@ -457,22 +457,22 @@ msgid ""
 "but this could also be a bug you might want to report."
 msgstr ""
 
-#: pysollib/game.py:2367
+#: pysollib/game.py:2550
 msgid "Error while loading game"
 msgstr ""
 
-#: pysollib/game.py:2372
+#: pysollib/game.py:2555
 msgid ""
 "Internal error while loading game.\n"
 "\n"
 "Please report this bug."
 msgstr ""
 
-#: pysollib/game.py:2397
+#: pysollib/game.py:2580
 msgid "Save game error"
 msgstr ""
 
-#: pysollib/game.py:2398
+#: pysollib/game.py:2581
 msgid "Error while saving game"
 msgstr ""
 
@@ -685,8 +685,9 @@ msgid "Puzzle type"
 msgstr ""
 
 #: pysollib/games/auldlangsyne.py:158 pysollib/games/calculation.py:104
-#: pysollib/games/numerica.py:94 pysollib/games/numerica.py:276
-#: pysollib/games/numerica.py:666 pysollib/games/numerica.py:779
+#: pysollib/games/camelot.py:588 pysollib/games/numerica.py:94
+#: pysollib/games/numerica.py:276 pysollib/games/numerica.py:666
+#: pysollib/games/numerica.py:779
 msgid "Tableau. Build regardless of rank and suit."
 msgstr ""
 
@@ -695,14 +696,14 @@ msgid "Foundation. Build up or down regardless of suit."
 msgstr ""
 
 #: pysollib/games/braid.py:248 pysollib/games/camelot.py:555
-#: pysollib/games/napoleon.py:182 pysollib/games/ultra/dashavatara.py:959
+#: pysollib/games/napoleon.py:183 pysollib/games/ultra/dashavatara.py:959
 #: pysollib/games/ultra/hanafuda1.py:257 pysollib/games/ultra/hexadeck.py:1190
 #: pysollib/games/ultra/mughal.py:802
 msgid " Ascending"
 msgstr ""
 
 #: pysollib/games/braid.py:250 pysollib/games/camelot.py:554
-#: pysollib/games/napoleon.py:184 pysollib/games/ultra/dashavatara.py:961
+#: pysollib/games/napoleon.py:185 pysollib/games/ultra/dashavatara.py:961
 #: pysollib/games/ultra/hanafuda1.py:259 pysollib/games/ultra/hexadeck.py:1192
 #: pysollib/games/ultra/mughal.py:804
 msgid " Descending"
@@ -717,12 +718,12 @@ msgid ""
 msgstr ""
 
 #: pysollib/games/canfield.py:528 pysollib/games/special/tarock.py:224
-#: pysollib/stack.py:1410 pysollib/util.py:80
+#: pysollib/stack.py:1389 pysollib/util.py:86
 msgid "King"
 msgstr ""
 
 #: pysollib/games/canfield.py:531 pysollib/games/special/tarock.py:224
-#: pysollib/stack.py:1409 pysollib/util.py:80
+#: pysollib/stack.py:1388 pysollib/util.py:86
 msgid "Queen"
 msgstr ""
 
@@ -739,11 +740,12 @@ msgid "X"
 msgstr ""
 
 #: pysollib/games/golf.py:114 pysollib/games/golf.py:300
-#: pysollib/stack.py:2075
+#: pysollib/stack.py:2054
 msgid "Tableau. No building."
 msgstr ""
 
-#: pysollib/games/golf.py:385 pysollib/stack.py:2008
+#: pysollib/games/golf.py:385 pysollib/games/pileon.py:257
+#: pysollib/stack.py:1987
 msgid "Foundation. Build up regardless of suit."
 msgstr ""
 
@@ -751,7 +753,7 @@ msgstr ""
 msgid "Balance $%d"
 msgstr ""
 
-#: pysollib/games/klondike.py:169 pysollib/stack.py:2116
+#: pysollib/games/klondike.py:169 pysollib/stack.py:2095
 msgid "Tableau. Build down by color."
 msgstr ""
 
@@ -759,32 +761,32 @@ msgstr ""
 msgid "Reserve. Only Kings are acceptable."
 msgstr ""
 
-#: pysollib/games/larasgame.py:163 pysollib/stack.py:1626
+#: pysollib/games/larasgame.py:163 pysollib/stack.py:1605
 msgid "Round %d"
 msgstr ""
 
-#: pysollib/games/mahjongg/mahjongg.py:305
+#: pysollib/games/mahjongg/mahjongg.py:308
 msgid ""
 "No Free\n"
 "Matching\n"
 "Pairs"
 msgstr ""
 
-#: pysollib/games/mahjongg/mahjongg.py:306
+#: pysollib/games/mahjongg/mahjongg.py:309
 msgid ""
 "1 Free\n"
 "Matching\n"
 "Pair"
 msgstr ""
 
-#: pysollib/games/mahjongg/mahjongg.py:307
+#: pysollib/games/mahjongg/mahjongg.py:310
 msgid ""
 " Free\n"
 "Matching\n"
 "Pairs"
 msgstr ""
 
-#: pysollib/games/mahjongg/mahjongg.py:308
+#: pysollib/games/mahjongg/mahjongg.py:311
 msgid ""
 "\n"
 "Tiles\n"
@@ -792,7 +794,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: pysollib/games/mahjongg/mahjongg.py:309
+#: pysollib/games/mahjongg/mahjongg.py:312
 msgid ""
 "\n"
 "Tiles\n"
@@ -862,7 +864,7 @@ msgstr ""
 #: pysollib/games/special/tarock.py:223
 #: pysollib/games/ultra/dashavatara.py:351
 #: pysollib/games/ultra/hexadeck.py:273 pysollib/games/ultra/mughal.py:254
-#: pysollib/stack.py:1411 pysollib/util.py:79
+#: pysollib/stack.py:1390 pysollib/util.py:85
 msgid "Ace"
 msgstr ""
 
@@ -874,7 +876,7 @@ msgstr ""
 msgid "Valet"
 msgstr ""
 
-#: pysollib/games/spider.py:1128
+#: pysollib/games/spider.py:1131
 msgid ""
 "Tableau. Build down regardless of suit. Sequences of cards in the same color "
 "can be moved as a unit."
@@ -1171,37 +1173,37 @@ msgid ""
 "regardless of sequence."
 msgstr ""
 
-#: pysollib/help.py:63
+#: pysollib/help.py:60
 msgid "A Python Solitaire Game Collection\n"
 msgstr ""
 
-#: pysollib/help.py:65
+#: pysollib/help.py:62
 msgid "A World Domination Project\n"
 msgstr ""
 
-#: pysollib/help.py:66
+#: pysollib/help.py:63
 msgid "&Credits..."
 msgstr ""
 
-#: pysollib/help.py:66
+#: pysollib/help.py:63
 msgid "&Nice"
 msgstr ""
 
-#: pysollib/help.py:68
+#: pysollib/help.py:65
 msgid "&Enjoy"
 msgstr ""
 
-#: pysollib/help.py:70
+#: pysollib/help.py:67
 msgid ""
 "Version %s\n"
 "\n"
 msgstr ""
 
-#: pysollib/help.py:71
+#: pysollib/help.py:68
 msgid "About "
 msgstr ""
 
-#: pysollib/help.py:72
+#: pysollib/help.py:69
 msgid ""
 "PySol Fan Club edition\n"
 "%s%s\n"
@@ -1218,11 +1220,11 @@ msgid ""
 "%s"
 msgstr ""
 
-#: pysollib/help.py:101
+#: pysollib/help.py:98
 msgid "Credits"
 msgstr ""
 
-#: pysollib/help.py:102
+#: pysollib/help.py:99
 msgid ""
 " credits go to:\n"
 "\n"
@@ -1237,23 +1239,23 @@ msgid ""
 "for making this program possible"
 msgstr ""
 
-#: pysollib/help.py:137
+#: pysollib/help.py:134
 msgid " HTML Problem"
 msgstr ""
 
-#: pysollib/help.py:138
+#: pysollib/help.py:135
 msgid "Cannot find help document\n"
 msgstr ""
 
-#: pysollib/help.py:151
+#: pysollib/help.py:148
 msgid " Help"
 msgstr ""
 
-#: pysollib/main.py:66 pysollib/main.py:269
+#: pysollib/main.py:64 pysollib/main.py:249
 msgid "%s installation error"
 msgstr ""
 
-#: pysollib/main.py:67
+#: pysollib/main.py:65
 msgid ""
 "No cardsets were found !!!\n"
 "\n"
@@ -1263,26 +1265,23 @@ msgid ""
 "Please check your %s installation.\n"
 msgstr ""
 
-#: pysollib/main.py:74 pysollib/main.py:277 pysollib/tile/menubar.py:385
-#: pysollib/tk/menubar.py:382
+#: pysollib/main.py:72 pysollib/main.py:257 pysollib/tile/menubar.py:381
+#: pysollib/tk/menubar.py:378
 msgid "&Quit"
 msgstr ""
 
-#: pysollib/main.py:96
+#: pysollib/main.py:90
 msgid ""
 "%s: %s\n"
 "try %s --help for more information"
 msgstr ""
 
-#: pysollib/main.py:134
+#: pysollib/main.py:119
 msgid ""
 "Usage: %s [OPTIONS] [FILE]\n"
 "  -g    --game=GAMENAME        start game GAMENAME\n"
 "  -i    --gameid=GAMEID\n"
 "        --french-only\n"
-"  --fg  --foreground=COLOR     foreground color\n"
-"  --bg  --background=COLOR     background color\n"
-"  --fn  --font=FONT            default font\n"
 "        --sound-mod=MOD\n"
 "        --nosound              disable sound support\n"
 "        --noplugins            disable load plugins\n"
@@ -1292,19 +1291,19 @@ msgid ""
 "  MOD - one of following: pss(default), pygame, oss, win\n"
 msgstr ""
 
-#: pysollib/main.py:152
+#: pysollib/main.py:134
 msgid ""
 "%s: too many files\n"
 "try %s --help for more information"
 msgstr ""
 
-#: pysollib/main.py:156
+#: pysollib/main.py:138
 msgid ""
 "%s: invalid file name\n"
 "try %s --help for more information"
 msgstr ""
 
-#: pysollib/main.py:270
+#: pysollib/main.py:250
 msgid ""
 "\n"
 "No games were found !!!\n"
@@ -1315,567 +1314,567 @@ msgid ""
 "Please check your %s installation.\n"
 msgstr ""
 
-#: pysollib/main.py:339
+#: pysollib/main.py:319
 msgid "Welcome to %s"
 msgstr ""
 
-#: pysollib/resource.py:193
+#: pysollib/resource.py:192
 msgid "French type (52 cards)"
 msgstr ""
 
-#: pysollib/resource.py:194
+#: pysollib/resource.py:193
 msgid "Hanafuda type (48 cards)"
 msgstr ""
 
-#: pysollib/resource.py:195
+#: pysollib/resource.py:194
 msgid "Tarock type (78 cards)"
 msgstr ""
 
-#: pysollib/resource.py:196
+#: pysollib/resource.py:195
 msgid "Mahjongg type (42 tiles)"
 msgstr ""
 
-#: pysollib/resource.py:197
+#: pysollib/resource.py:196
 msgid "Hex A Deck type (68 cards)"
 msgstr ""
 
-#: pysollib/resource.py:198
+#: pysollib/resource.py:197
 msgid "Mughal Ganjifa type (96 cards)"
 msgstr ""
 
-#: pysollib/resource.py:199
+#: pysollib/resource.py:198
 msgid "Navagraha Ganjifa type (108 cards)"
 msgstr ""
 
-#: pysollib/resource.py:200
+#: pysollib/resource.py:199
 msgid "Dashavatara Ganjifa type (120 cards)"
 msgstr ""
 
-#: pysollib/resource.py:201
+#: pysollib/resource.py:200
 msgid "Trumps only type (variable cards)"
 msgstr ""
 
-#: pysollib/resource.py:205
+#: pysollib/resource.py:204
 msgid "French"
 msgstr ""
 
-#: pysollib/resource.py:206 pysollib/resource.py:230
+#: pysollib/resource.py:205 pysollib/resource.py:229
 msgid "Hanafuda"
 msgstr ""
 
-#: pysollib/resource.py:207 pysollib/resource.py:246
+#: pysollib/resource.py:206 pysollib/resource.py:245
 msgid "Tarock"
 msgstr ""
 
-#: pysollib/resource.py:208 pysollib/resource.py:233
+#: pysollib/resource.py:207 pysollib/resource.py:232
 msgid "Mahjongg"
 msgstr ""
 
-#: pysollib/resource.py:209 pysollib/resource.py:231
+#: pysollib/resource.py:208 pysollib/resource.py:230
 msgid "Hex A Deck"
 msgstr ""
 
-#: pysollib/resource.py:210
+#: pysollib/resource.py:209
 msgid "Mughal Ganjifa"
 msgstr ""
 
-#: pysollib/resource.py:211
+#: pysollib/resource.py:210
 msgid "Navagraha Ganjifa"
 msgstr ""
 
-#: pysollib/resource.py:212
+#: pysollib/resource.py:211
 msgid "Dashavatara Ganjifa"
 msgstr ""
 
-#: pysollib/resource.py:213
+#: pysollib/resource.py:212
 msgid "Trumps only"
 msgstr ""
 
-#: pysollib/resource.py:218
+#: pysollib/resource.py:217
 msgid "Adult"
 msgstr ""
 
-#: pysollib/resource.py:219
+#: pysollib/resource.py:218
 msgid "Animals"
 msgstr ""
 
-#: pysollib/resource.py:220
+#: pysollib/resource.py:219
 msgid "Anime"
 msgstr ""
 
-#: pysollib/resource.py:221
+#: pysollib/resource.py:220
 msgid "Art"
 msgstr ""
 
-#: pysollib/resource.py:222
+#: pysollib/resource.py:221
 msgid "Cartoons"
 msgstr ""
 
-#: pysollib/resource.py:223
+#: pysollib/resource.py:222
 msgid "Children"
 msgstr ""
 
-#: pysollib/resource.py:224
+#: pysollib/resource.py:223
 msgid "Classic look"
 msgstr ""
 
-#: pysollib/resource.py:225
+#: pysollib/resource.py:224
 msgid "Collectors"
 msgstr ""
 
-#: pysollib/resource.py:226
+#: pysollib/resource.py:225
 msgid "Computers"
 msgstr ""
 
-#: pysollib/resource.py:227
+#: pysollib/resource.py:226
 msgid "Engines"
 msgstr ""
 
-#: pysollib/resource.py:228
+#: pysollib/resource.py:227
 msgid "Fantasy"
 msgstr ""
 
-#: pysollib/resource.py:229
+#: pysollib/resource.py:228
 msgid "Ganjifa"
 msgstr ""
 
-#: pysollib/resource.py:232
+#: pysollib/resource.py:231
 msgid "Holiday"
 msgstr ""
 
-#: pysollib/resource.py:234
+#: pysollib/resource.py:233
 msgid "Movies"
 msgstr ""
 
-#: pysollib/resource.py:235
+#: pysollib/resource.py:234
 msgid "Matrix"
 msgstr ""
 
-#: pysollib/resource.py:236
+#: pysollib/resource.py:235
 msgid "Music"
 msgstr ""
 
-#: pysollib/resource.py:237
+#: pysollib/resource.py:236
 msgid "Nature"
 msgstr ""
 
-#: pysollib/resource.py:238
+#: pysollib/resource.py:237
 msgid "Operating Systems"
 msgstr ""
 
-#: pysollib/resource.py:239
+#: pysollib/resource.py:238
 msgid "People"
 msgstr ""
 
-#: pysollib/resource.py:240
+#: pysollib/resource.py:239
 msgid "Places"
 msgstr ""
 
-#: pysollib/resource.py:241
+#: pysollib/resource.py:240
 msgid "Plain"
 msgstr ""
 
-#: pysollib/resource.py:242
+#: pysollib/resource.py:241
 msgid "Products"
 msgstr ""
 
-#: pysollib/resource.py:243
+#: pysollib/resource.py:242
 msgid "Round cardsets"
 msgstr ""
 
-#: pysollib/resource.py:244
+#: pysollib/resource.py:243
 msgid "Science Fiction"
 msgstr ""
 
-#: pysollib/resource.py:245
+#: pysollib/resource.py:244
 msgid "Sports"
 msgstr ""
 
-#: pysollib/resource.py:247
+#: pysollib/resource.py:246
 msgid "Vehicels"
 msgstr ""
 
-#: pysollib/resource.py:248
+#: pysollib/resource.py:247
 msgid "Video Games"
 msgstr ""
 
-#: pysollib/resource.py:253
+#: pysollib/resource.py:252
 msgid "Australia"
 msgstr ""
 
-#: pysollib/resource.py:254
+#: pysollib/resource.py:253
 msgid "Austria"
 msgstr ""
 
-#: pysollib/resource.py:255
+#: pysollib/resource.py:254
 msgid "Belgium"
 msgstr ""
 
-#: pysollib/resource.py:256
+#: pysollib/resource.py:255
 msgid "Canada"
 msgstr ""
 
-#: pysollib/resource.py:257
+#: pysollib/resource.py:256
 msgid "China"
 msgstr ""
 
-#: pysollib/resource.py:258
+#: pysollib/resource.py:257
 msgid "Czech Republic"
 msgstr ""
 
-#: pysollib/resource.py:259
+#: pysollib/resource.py:258
 msgid "Denmark"
 msgstr ""
 
-#: pysollib/resource.py:260
+#: pysollib/resource.py:259
 msgid "England"
 msgstr ""
 
-#: pysollib/resource.py:261
+#: pysollib/resource.py:260
 msgid "France"
 msgstr ""
 
-#: pysollib/resource.py:262
+#: pysollib/resource.py:261
 msgid "Germany"
 msgstr ""
 
-#: pysollib/resource.py:263
+#: pysollib/resource.py:262
 msgid "Great Britain"
 msgstr ""
 
-#: pysollib/resource.py:264
+#: pysollib/resource.py:263
 msgid "Hungary"
 msgstr ""
 
-#: pysollib/resource.py:265
+#: pysollib/resource.py:264
 msgid "India"
 msgstr ""
 
-#: pysollib/resource.py:266
+#: pysollib/resource.py:265
 msgid "Italy"
 msgstr ""
 
-#: pysollib/resource.py:267
+#: pysollib/resource.py:266
 msgid "Japan"
 msgstr ""
 
-#: pysollib/resource.py:268
+#: pysollib/resource.py:267
 msgid "Netherlands"
 msgstr ""
 
-#: pysollib/resource.py:269
+#: pysollib/resource.py:268
 msgid "Russia"
 msgstr ""
 
-#: pysollib/resource.py:270
+#: pysollib/resource.py:269
 msgid "Spain"
 msgstr ""
 
-#: pysollib/resource.py:271
+#: pysollib/resource.py:270
 msgid "Sweden"
 msgstr ""
 
-#: pysollib/resource.py:272
+#: pysollib/resource.py:271
 msgid "Switzerland"
 msgstr ""
 
-#: pysollib/resource.py:273
+#: pysollib/resource.py:272
 msgid "USA"
 msgstr ""
 
-#: pysollib/settings.py:64 data/glade-translations:29
+#: pysollib/settings.py:67 data/glade-translations:29
 msgid "Top 10"
 msgstr ""
 
-#: pysollib/stack.py:1405
+#: pysollib/stack.py:1384
 msgid "Base card - %s."
 msgstr ""
 
-#: pysollib/stack.py:1406
+#: pysollib/stack.py:1385
 msgid "Empty row cannot be filled."
 msgstr ""
 
-#: pysollib/stack.py:1407
+#: pysollib/stack.py:1386
 msgid "any card"
 msgstr ""
 
-#: pysollib/stack.py:1408 pysollib/util.py:80
+#: pysollib/stack.py:1387 pysollib/util.py:86
 msgid "Jack"
 msgstr ""
 
-#: pysollib/stack.py:1421
+#: pysollib/stack.py:1400
 msgid "No cards"
 msgstr ""
 
-#: pysollib/stack.py:1422
+#: pysollib/stack.py:1401
 msgid "1 card"
 msgstr ""
 
-#: pysollib/stack.py:1423
+#: pysollib/stack.py:1402
 msgid " cards"
 msgstr ""
 
-#: pysollib/stack.py:1635 pysollib/stack.py:1637 pysollib/stack.py:1673
+#: pysollib/stack.py:1614 pysollib/stack.py:1616 pysollib/stack.py:1652
 msgid "Redeal"
 msgstr ""
 
-#: pysollib/stack.py:1637
+#: pysollib/stack.py:1616
 msgid "Stop"
 msgstr ""
 
-#: pysollib/stack.py:1698
+#: pysollib/stack.py:1677
 msgid "Variable redeals."
 msgstr ""
 
-#: pysollib/stack.py:1699
+#: pysollib/stack.py:1678
 msgid "Unlimited redeals."
 msgstr ""
 
-#: pysollib/stack.py:1700
+#: pysollib/stack.py:1679
 msgid "No redeals."
 msgstr ""
 
-#: pysollib/stack.py:1701
+#: pysollib/stack.py:1680
 msgid "One redeal."
 msgstr ""
 
-#: pysollib/stack.py:1702
+#: pysollib/stack.py:1681
 msgid " redeals."
 msgstr ""
 
-#: pysollib/stack.py:1704
+#: pysollib/stack.py:1683
 msgid "Talon."
 msgstr ""
 
-#: pysollib/stack.py:1938 pysollib/stack.py:2389
+#: pysollib/stack.py:1917 pysollib/stack.py:2368
 msgid "Reserve. No building."
 msgstr ""
 
-#: pysollib/stack.py:1976
+#: pysollib/stack.py:1955
 msgid "Foundation."
 msgstr ""
 
-#: pysollib/stack.py:1992
+#: pysollib/stack.py:1971
 msgid "Foundation. Build up by suit."
 msgstr ""
 
-#: pysollib/stack.py:1993
+#: pysollib/stack.py:1972
 msgid "Foundation. Build down by suit."
 msgstr ""
 
-#: pysollib/stack.py:1994 pysollib/stack.py:2010 pysollib/stack.py:2032
+#: pysollib/stack.py:1973 pysollib/stack.py:1989 pysollib/stack.py:2011
 msgid "Foundation. Build by same rank."
 msgstr ""
 
-#: pysollib/stack.py:2009
+#: pysollib/stack.py:1988
 msgid "Foundation. Build down regardless of suit."
 msgstr ""
 
-#: pysollib/stack.py:2030
+#: pysollib/stack.py:2009
 msgid "Foundation. Build up by alternate color."
 msgstr ""
 
-#: pysollib/stack.py:2031
+#: pysollib/stack.py:2010
 msgid "Foundation. Build down by alternate color."
 msgstr ""
 
-#: pysollib/stack.py:2105
+#: pysollib/stack.py:2084
 msgid "Tableau. Build up by alternate color."
 msgstr ""
 
-#: pysollib/stack.py:2106
+#: pysollib/stack.py:2085
 msgid "Tableau. Build down by alternate color."
 msgstr ""
 
-#: pysollib/stack.py:2107 pysollib/stack.py:2117 pysollib/stack.py:2126
-#: pysollib/stack.py:2135 pysollib/stack.py:2145 pysollib/stack.py:2168
-#: pysollib/stack.py:2178
+#: pysollib/stack.py:2086 pysollib/stack.py:2096 pysollib/stack.py:2105
+#: pysollib/stack.py:2114 pysollib/stack.py:2124 pysollib/stack.py:2147
+#: pysollib/stack.py:2157
 msgid "Tableau. Build by same rank."
 msgstr ""
 
-#: pysollib/stack.py:2115
+#: pysollib/stack.py:2094
 msgid "Tableau. Build up by color."
 msgstr ""
 
-#: pysollib/stack.py:2124
+#: pysollib/stack.py:2103
 msgid "Tableau. Build up by suit."
 msgstr ""
 
-#: pysollib/stack.py:2125
+#: pysollib/stack.py:2104
 msgid "Tableau. Build down by suit."
 msgstr ""
 
-#: pysollib/stack.py:2133
+#: pysollib/stack.py:2112
 msgid "Tableau. Build up regardless of suit."
 msgstr ""
 
-#: pysollib/stack.py:2134
+#: pysollib/stack.py:2113
 msgid "Tableau. Build down regardless of suit."
 msgstr ""
 
-#: pysollib/stack.py:2143
+#: pysollib/stack.py:2122
 msgid "Tableau. Build up in any suit but the same."
 msgstr ""
 
-#: pysollib/stack.py:2144
+#: pysollib/stack.py:2123
 msgid "Tableau. Build down in any suit but the same."
 msgstr ""
 
-#: pysollib/stack.py:2166
+#: pysollib/stack.py:2145
 msgid ""
 "Tableau. Build up regardless of suit. Sequences of cards in alternate color "
 "can be moved as a unit."
 msgstr ""
 
-#: pysollib/stack.py:2167
+#: pysollib/stack.py:2146
 msgid ""
 "Tableau. Build down regardless of suit. Sequences of cards in alternate "
 "color can be moved as a unit."
 msgstr ""
 
-#: pysollib/stack.py:2176
+#: pysollib/stack.py:2155
 msgid ""
 "Tableau. Build up regardless of suit. Sequences of cards in the same suit "
 "can be moved as a unit."
 msgstr ""
 
-#: pysollib/stack.py:2177
+#: pysollib/stack.py:2156
 msgid ""
 "Tableau. Build down regardless of suit. Sequences of cards in the same suit "
 "can be moved as a unit."
 msgstr ""
 
-#: pysollib/stack.py:2199
+#: pysollib/stack.py:2178
 msgid ""
 "Tableau. Build up by alternate color, can move any face-up cards regardless "
 "of sequence."
 msgstr ""
 
-#: pysollib/stack.py:2200
+#: pysollib/stack.py:2179
 msgid ""
 "Tableau. Build down by alternate color, can move any face-up cards "
 "regardless of sequence."
 msgstr ""
 
-#: pysollib/stack.py:2201 pysollib/stack.py:2214
+#: pysollib/stack.py:2180 pysollib/stack.py:2193
 msgid ""
 "Tableau. Build by same rank, can move any face-up cards regardless of "
 "sequence."
 msgstr ""
 
-#: pysollib/stack.py:2212
+#: pysollib/stack.py:2191
 msgid ""
 "Tableau. Build up by suit, can move any face-up cards regardless of sequence."
 msgstr ""
 
-#: pysollib/stack.py:2213
+#: pysollib/stack.py:2192
 msgid ""
 "Tableau. Build down by suit, can move any face-up cards regardless of "
 "sequence."
 msgstr ""
 
-#: pysollib/stack.py:2246
+#: pysollib/stack.py:2225
 msgid "Tableau. Build up or down by color."
 msgstr ""
 
-#: pysollib/stack.py:2257
+#: pysollib/stack.py:2236
 msgid "Tableau. Build up or down by alternate color."
 msgstr ""
 
-#: pysollib/stack.py:2268
+#: pysollib/stack.py:2247
 msgid "Tableau. Build up or down by suit."
 msgstr ""
 
-#: pysollib/stack.py:2279
+#: pysollib/stack.py:2258
 msgid "Tableau. Build up or down regardless of suit."
 msgstr ""
 
-#: pysollib/stack.py:2290
+#: pysollib/stack.py:2269
 msgid "Waste."
 msgstr ""
 
-#: pysollib/stack.py:2390
+#: pysollib/stack.py:2369
 msgid "Free cell."
 msgstr ""
 
-#: pysollib/stats.py:53 pysollib/stats.py:119
+#: pysollib/stats.py:52 pysollib/stats.py:118
 msgid "Game"
 msgstr ""
 
-#: pysollib/stats.py:54
+#: pysollib/stats.py:53
 msgid "Played"
 msgstr ""
 
-#: pysollib/stats.py:55 pysollib/stats.py:158
+#: pysollib/stats.py:54 pysollib/stats.py:157
 msgid "Won"
 msgstr ""
 
-#: pysollib/stats.py:56 pysollib/stats.py:158
+#: pysollib/stats.py:55 pysollib/stats.py:157
 msgid "Lost"
 msgstr ""
 
-#: pysollib/stats.py:57 pysollib/tile/statusbar.py:157
-#: pysollib/tk/statusbar.py:156 data/glade-translations:25
+#: pysollib/stats.py:56 pysollib/tile/statusbar.py:147
+#: pysollib/tk/statusbar.py:158 data/glade-translations:25
 msgid "Playing time"
 msgstr ""
 
-#: pysollib/stats.py:58 data/glade-translations:26
+#: pysollib/stats.py:57 data/glade-translations:26
 msgid "Moves"
 msgstr ""
 
-#: pysollib/stats.py:59
+#: pysollib/stats.py:58
 msgid "% won"
 msgstr ""
 
-#: pysollib/stats.py:119
+#: pysollib/stats.py:118
 msgid "Status"
 msgstr ""
 
-#: pysollib/stats.py:119 pysollib/tile/statusbar.py:159
-#: pysollib/tile/tkstats.py:545 pysollib/tk/statusbar.py:158
-#: pysollib/tk/tkstats.py:666
+#: pysollib/stats.py:118 pysollib/tile/statusbar.py:149
+#: pysollib/tile/tkstats.py:552 pysollib/tk/statusbar.py:160
+#: pysollib/tk/tkstats.py:668
 msgid "Game number"
 msgstr ""
 
-#: pysollib/stats.py:119 pysollib/tile/tkstats.py:548
-#: pysollib/tk/tkstats.py:669
+#: pysollib/stats.py:118 pysollib/tile/tkstats.py:555
+#: pysollib/tk/tkstats.py:671
 msgid "Started at"
 msgstr ""
 
-#: pysollib/stats.py:143
+#: pysollib/stats.py:142
 msgid "** UNKNOWN %d **"
 msgstr ""
 
-#: pysollib/stats.py:151
+#: pysollib/stats.py:150
 msgid "** ERROR **"
 msgstr ""
 
-#: pysollib/stats.py:158
+#: pysollib/stats.py:157
 msgid "Loaded"
 msgstr ""
 
-#: pysollib/stats.py:158
+#: pysollib/stats.py:157
 msgid "Not won"
 msgstr ""
 
-#: pysollib/stats.py:158
+#: pysollib/stats.py:157
 msgid "Perfect"
 msgstr ""
 
-#: pysollib/stats.py:205 pysollib/stats.py:236 pysollib/stats.py:242
+#: pysollib/stats.py:204 pysollib/stats.py:235 pysollib/stats.py:241
 msgid "Demo"
 msgstr ""
 
-#: pysollib/stats.py:216 pysollib/tile/tkstats.py:280
-#: pysollib/tk/tkstats.py:418
+#: pysollib/stats.py:215 pysollib/tile/tkstats.py:283
+#: pysollib/tk/tkstats.py:419
 msgid "Total (%d out of %d games)"
 msgstr ""
 
-#: pysollib/stats.py:237
+#: pysollib/stats.py:236
 msgid "Full log for "
 msgstr ""
 
-#: pysollib/stats.py:243
+#: pysollib/stats.py:242
 msgid "Session log for "
 msgstr ""
 
@@ -1885,7 +1884,7 @@ msgid "Text foreground:"
 msgstr ""
 
 #: pysollib/tile/colorsdialog.py:77 pysollib/tile/colorsdialog.py:95
-#: pysollib/tile/fontsdialog.py:186 pysollib/tk/colorsdialog.py:76
+#: pysollib/tile/fontsdialog.py:185 pysollib/tk/colorsdialog.py:76
 #: pysollib/tk/colorsdialog.py:94 pysollib/tk/fontsdialog.py:186
 #: data/glade-translations:49 data/glade-translations:50
 #: data/glade-translations:51 data/glade-translations:52
@@ -1938,8 +1937,8 @@ msgstr ""
 msgid "Select color"
 msgstr ""
 
-#: pysollib/tile/findcarddialog.py:54 pysollib/tile/menubar.py:438
-#: pysollib/tk/findcarddialog.py:54 pysollib/tk/menubar.py:435
+#: pysollib/tile/findcarddialog.py:54 pysollib/tile/menubar.py:434
+#: pysollib/tk/findcarddialog.py:54 pysollib/tk/menubar.py:431
 msgid "Find card"
 msgstr ""
 
@@ -1955,541 +1954,583 @@ msgstr ""
 msgid "Italic"
 msgstr ""
 
-#: pysollib/tile/fontsdialog.py:168 pysollib/tk/fontsdialog.py:168
+#: pysollib/tile/fontsdialog.py:109 pysollib/tile/selectcardset.py:332
+#: pysollib/tk/selectcardset.py:341
+msgid "Size:"
+msgstr ""
+
+#: pysollib/tile/fontsdialog.py:167 pysollib/tk/fontsdialog.py:168
 #: data/glade-translations:58
 msgid "HTML: "
 msgstr ""
 
-#: pysollib/tile/fontsdialog.py:169 pysollib/tk/fontsdialog.py:169
+#: pysollib/tile/fontsdialog.py:168 pysollib/tk/fontsdialog.py:169
 #: data/glade-translations:59
 msgid "Small: "
 msgstr ""
 
-#: pysollib/tile/fontsdialog.py:170 pysollib/tk/fontsdialog.py:170
+#: pysollib/tile/fontsdialog.py:169 pysollib/tk/fontsdialog.py:170
 #: data/glade-translations:60
 msgid "Fixed: "
 msgstr ""
 
-#: pysollib/tile/fontsdialog.py:171 pysollib/tk/fontsdialog.py:171
+#: pysollib/tile/fontsdialog.py:170 pysollib/tk/fontsdialog.py:171
 #: data/glade-translations:61
 msgid "Tableau default: "
 msgstr ""
 
-#: pysollib/tile/fontsdialog.py:172 pysollib/tk/fontsdialog.py:172
+#: pysollib/tile/fontsdialog.py:171 pysollib/tk/fontsdialog.py:172
 #: data/glade-translations:62
 msgid "Tableau fixed: "
 msgstr ""
 
-#: pysollib/tile/fontsdialog.py:173 pysollib/tk/fontsdialog.py:173
+#: pysollib/tile/fontsdialog.py:172 pysollib/tk/fontsdialog.py:173
 #: data/glade-translations:64
 msgid "Tableau large: "
 msgstr ""
 
-#: pysollib/tile/fontsdialog.py:174 pysollib/tk/fontsdialog.py:174
+#: pysollib/tile/fontsdialog.py:173 pysollib/tk/fontsdialog.py:174
 #: data/glade-translations:63
 msgid "Tableau small: "
 msgstr ""
 
-#: pysollib/tile/fontsdialog.py:196 pysollib/tk/fontsdialog.py:196
+#: pysollib/tile/fontsdialog.py:195 pysollib/tk/fontsdialog.py:196
 msgid "Select font"
 msgstr ""
 
-#: pysollib/tile/menubar.py:77 pysollib/tk/menubar.py:75
+#: pysollib/tile/menubar.py:78 pysollib/tk/menubar.py:76
 msgid "Style"
 msgstr ""
 
-#: pysollib/tile/menubar.py:95 pysollib/tk/menubar.py:94
+#: pysollib/tile/menubar.py:86 pysollib/tk/menubar.py:85
 msgid "Compound"
 msgstr ""
 
-#: pysollib/tile/menubar.py:101 pysollib/tk/menubar.py:100
+#: pysollib/tile/menubar.py:92 pysollib/tk/menubar.py:91
 msgid "Hide"
 msgstr ""
 
-#: pysollib/tile/menubar.py:104 pysollib/tk/menubar.py:103
+#: pysollib/tile/menubar.py:95 pysollib/tk/menubar.py:94
 msgid "Top"
 msgstr ""
 
-#: pysollib/tile/menubar.py:107 pysollib/tk/menubar.py:106
+#: pysollib/tile/menubar.py:98 pysollib/tk/menubar.py:97
 msgid "Bottom"
 msgstr ""
 
-#: pysollib/tile/menubar.py:110 pysollib/tk/menubar.py:109
+#: pysollib/tile/menubar.py:101 pysollib/tk/menubar.py:100
 msgid "Left"
 msgstr ""
 
-#: pysollib/tile/menubar.py:113 pysollib/tk/menubar.py:112
+#: pysollib/tile/menubar.py:104 pysollib/tk/menubar.py:103
 msgid "Right"
 msgstr ""
 
-#: pysollib/tile/menubar.py:117 pysollib/tk/menubar.py:116
+#: pysollib/tile/menubar.py:108 pysollib/tk/menubar.py:107
 msgid "Small icons"
 msgstr ""
 
-#: pysollib/tile/menubar.py:120 pysollib/tk/menubar.py:119
+#: pysollib/tile/menubar.py:111 pysollib/tk/menubar.py:110
 msgid "Large icons"
 msgstr ""
 
-#: pysollib/tile/menubar.py:126 pysollib/tk/menubar.py:125
+#: pysollib/tile/menubar.py:117 pysollib/tk/menubar.py:116
 msgid "Customize toolbar"
 msgstr ""
 
-#: pysollib/tile/menubar.py:365 pysollib/tk/menubar.py:362
-msgid "&File"
+#: pysollib/tile/menubar.py:357 pysollib/tk/menubar.py:354
+msgid "apple"
 msgstr ""
 
-#: pysollib/tile/menubar.py:367 pysollib/tk/menubar.py:364
-msgid "R&ecent games"
-msgstr ""
-
-#: pysollib/tile/menubar.py:369 pysollib/tk/menubar.py:366
-msgid "Select &random game"
-msgstr ""
-
-#: pysollib/tile/menubar.py:370 pysollib/tk/menubar.py:367
-msgid "&All games"
-msgstr ""
-
-#: pysollib/tile/menubar.py:371 pysollib/tk/menubar.py:368
-msgid "Games played and &won"
-msgstr ""
-
-#: pysollib/tile/menubar.py:372 pysollib/tk/menubar.py:369
-msgid "Games played and &not won"
-msgstr ""
-
-#: pysollib/tile/menubar.py:373 pysollib/tk/menubar.py:370
-msgid "Games not &played"
-msgstr ""
-
-#: pysollib/tile/menubar.py:374 pysollib/tk/menubar.py:371
-msgid "Select game by nu&mber..."
-msgstr ""
-
-#: pysollib/tile/menubar.py:376 pysollib/tk/menubar.py:373
-msgid "Fa&vorite games"
-msgstr ""
-
-#: pysollib/tile/menubar.py:377 pysollib/tk/menubar.py:374
-msgid "A&dd to favorites"
-msgstr ""
-
-#: pysollib/tile/menubar.py:378 pysollib/tk/menubar.py:375
-msgid "R&emove from favorites"
-msgstr ""
-
-#: pysollib/tile/menubar.py:380 pysollib/tk/menubar.py:377
-msgid "&Open..."
-msgstr ""
-
-#: pysollib/tile/menubar.py:381 pysollib/tk/menubar.py:378
-msgid "&Save"
-msgstr ""
-
-#: pysollib/tile/menubar.py:382 pysollib/tk/menubar.py:379
-msgid "Save &as..."
-msgstr ""
-
-#: pysollib/tile/menubar.py:384 pysollib/tk/menubar.py:381
-msgid "&Hold and quit"
-msgstr ""
-
-#: pysollib/tile/menubar.py:389 pysollib/tile/selectgame.py:397
-#: pysollib/tk/menubar.py:386 pysollib/tk/selectgame.py:407
-msgid "&Select"
-msgstr ""
-
-#: pysollib/tile/menubar.py:394 pysollib/tk/menubar.py:391
-msgid "&Edit"
-msgstr ""
-
-#: pysollib/tile/menubar.py:395 pysollib/tk/menubar.py:392
-msgid "&Undo"
-msgstr ""
-
-#: pysollib/tile/menubar.py:396 pysollib/tk/menubar.py:393
-msgid "&Redo"
-msgstr ""
-
-#: pysollib/tile/menubar.py:397 pysollib/tk/menubar.py:394
-msgid "Redo &all"
-msgstr ""
-
-#: pysollib/tile/menubar.py:400 pysollib/tk/menubar.py:397
-msgid "&Set bookmark"
-msgstr ""
-
-#: pysollib/tile/menubar.py:402 pysollib/tile/menubar.py:406
-#: pysollib/tk/menubar.py:399 pysollib/tk/menubar.py:403
-msgid "Bookmark %d"
-msgstr ""
-
-#: pysollib/tile/menubar.py:404 pysollib/tk/menubar.py:401
-msgid "Go&to bookmark"
-msgstr ""
-
-#: pysollib/tile/menubar.py:409 pysollib/tk/menubar.py:406
-msgid "&Clear bookmarks"
-msgstr ""
-
-#: pysollib/tile/menubar.py:412 pysollib/tile/toolbar.py:237
-#: pysollib/tk/menubar.py:409 pysollib/tk/toolbar.py:198
-msgid "Restart"
-msgstr ""
-
-#: pysollib/tile/menubar.py:414 pysollib/tk/menubar.py:411
-msgid "&Game"
-msgstr ""
-
-#: pysollib/tile/menubar.py:415 pysollib/tk/menubar.py:412
-msgid "&Deal cards"
-msgstr ""
-
-#: pysollib/tile/menubar.py:416 pysollib/tk/menubar.py:413
-msgid "&Auto drop"
-msgstr ""
-
-#: pysollib/tile/menubar.py:417 pysollib/tk/menubar.py:414
-msgid "&Pause"
-msgstr ""
-
-#: pysollib/tile/menubar.py:420 pysollib/tk/menubar.py:417
-msgid "S&tatus..."
-msgstr ""
-
-#: pysollib/tile/menubar.py:421 pysollib/tk/menubar.py:418
-msgid "&Comments..."
-msgstr ""
-
-#: pysollib/tile/menubar.py:423 pysollib/tk/menubar.py:420
-msgid "&Statistics"
-msgstr ""
-
-#: pysollib/tile/menubar.py:424 pysollib/tile/menubar.py:432
-#: pysollib/tk/menubar.py:421 pysollib/tk/menubar.py:429
-msgid "Current game..."
-msgstr ""
-
-#: pysollib/tile/menubar.py:425 pysollib/tile/menubar.py:433
-#: pysollib/tk/menubar.py:422 pysollib/tk/menubar.py:430
-msgid "All games..."
-msgstr ""
-
-#: pysollib/tile/menubar.py:427 pysollib/tk/menubar.py:424
-msgid "Session log..."
-msgstr ""
-
-#: pysollib/tile/menubar.py:428 pysollib/tk/menubar.py:425
-msgid "Full log..."
-msgstr ""
-
-#: pysollib/tile/menubar.py:431 pysollib/tk/menubar.py:428
-msgid "D&emo statistics"
-msgstr ""
-
-#: pysollib/tile/menubar.py:435 pysollib/tk/menubar.py:432
-msgid "&Assist"
-msgstr ""
-
-#: pysollib/tile/menubar.py:436 pysollib/tk/menubar.py:433
-msgid "&Hint"
-msgstr ""
-
-#: pysollib/tile/menubar.py:437 pysollib/tk/menubar.py:434
-msgid "Highlight p&iles"
-msgstr ""
-
-#: pysollib/tile/menubar.py:440 pysollib/tk/menubar.py:437
-msgid "&Demo"
-msgstr ""
-
-#: pysollib/tile/menubar.py:441 pysollib/tk/menubar.py:438
-msgid "Demo (&all games)"
-msgstr ""
-
-#: pysollib/tile/menubar.py:443 pysollib/tk/menubar.py:440
-msgid "Piles description"
-msgstr ""
-
-#: pysollib/tile/menubar.py:447 pysollib/tk/menubar.py:444
-msgid "&Options"
-msgstr ""
-
-#: pysollib/tile/menubar.py:448 pysollib/tk/menubar.py:445
-msgid "&Player options..."
-msgstr ""
-
-#: pysollib/tile/menubar.py:449 pysollib/tk/menubar.py:446
-msgid "&Automatic play"
-msgstr ""
-
-#: pysollib/tile/menubar.py:450 pysollib/tk/menubar.py:447
-msgid "Auto &face up"
-msgstr ""
-
-#: pysollib/tile/menubar.py:451 pysollib/tk/menubar.py:448
-msgid "A&uto drop"
-msgstr ""
-
-#: pysollib/tile/menubar.py:452 pysollib/tk/menubar.py:449
-msgid "Auto &deal"
-msgstr ""
-
-#: pysollib/tile/menubar.py:454 pysollib/tk/menubar.py:451
-msgid "&Quick play"
-msgstr ""
-
-#: pysollib/tile/menubar.py:455 pysollib/tk/menubar.py:452
-msgid "Assist &level"
-msgstr ""
-
-#: pysollib/tile/menubar.py:456 pysollib/tk/menubar.py:453
-msgid "Enable &undo"
-msgstr ""
-
-#: pysollib/tile/menubar.py:457 pysollib/tk/menubar.py:454
-msgid "Enable &bookmarks"
-msgstr ""
-
-#: pysollib/tile/menubar.py:458 pysollib/tk/menubar.py:455
-msgid "Enable &hint"
-msgstr ""
-
-#: pysollib/tile/menubar.py:459 pysollib/tk/menubar.py:456
-msgid "Enable highlight p&iles"
-msgstr ""
-
-#: pysollib/tile/menubar.py:460 pysollib/tk/menubar.py:457
-msgid "Enable highlight &cards"
-msgstr ""
-
-#: pysollib/tile/menubar.py:461 pysollib/tk/menubar.py:458
-msgid "Enable highlight same &rank"
-msgstr ""
-
-#: pysollib/tile/menubar.py:462 pysollib/tk/menubar.py:459
-msgid "Highlight &no matching"
-msgstr ""
-
-#: pysollib/tile/menubar.py:464 pysollib/tk/menubar.py:461
-msgid "&Show removed tiles (in Mahjongg games)"
-msgstr ""
-
-#: pysollib/tile/menubar.py:465 pysollib/tk/menubar.py:462
-msgid "Show hint &arrow (in Shisen-Sho games)"
-msgstr ""
-
-#: pysollib/tile/menubar.py:467 pysollib/tk/menubar.py:464
-msgid "&Sound..."
-msgstr ""
-
-#: pysollib/tile/menubar.py:475 pysollib/tk/menubar.py:472
-msgid "Cards&et..."
-msgstr ""
-
-#: pysollib/tile/menubar.py:476 pysollib/tk/menubar.py:473
-msgid "Table t&ile..."
-msgstr ""
-
-#: pysollib/tile/menubar.py:478 pysollib/tk/menubar.py:475
-msgid "Card &background"
-msgstr ""
-
-#: pysollib/tile/menubar.py:479 pysollib/tk/menubar.py:476
-msgid "Card &view"
-msgstr ""
-
-#: pysollib/tile/menubar.py:480 pysollib/tk/menubar.py:477
-msgid "Card shado&w"
-msgstr ""
-
-#: pysollib/tile/menubar.py:481 pysollib/tk/menubar.py:478
-msgid "Shade &legal moves"
-msgstr ""
-
-#: pysollib/tile/menubar.py:482 pysollib/tk/menubar.py:479
-msgid "&Negative cards bottom"
-msgstr ""
-
-#: pysollib/tile/menubar.py:483 pysollib/tk/menubar.py:480
-msgid "Shrink face-down cards"
-msgstr ""
-
-#: pysollib/tile/menubar.py:484 pysollib/tk/menubar.py:481
-msgid "Shade &filled stacks"
-msgstr ""
-
-#: pysollib/tile/menubar.py:485 pysollib/tk/menubar.py:482
-msgid "A&nimations"
-msgstr ""
-
-#: pysollib/tile/menubar.py:486 pysollib/tk/menubar.py:483
-msgid "&None"
-msgstr ""
-
-#: pysollib/tile/menubar.py:487 pysollib/tk/menubar.py:484
-msgid "&Timer based"
-msgstr ""
-
-#: pysollib/tile/menubar.py:488 pysollib/tk/menubar.py:485
-msgid "&Fast"
-msgstr ""
-
-#: pysollib/tile/menubar.py:489 pysollib/tk/menubar.py:486
-msgid "&Slow"
-msgstr ""
-
-#: pysollib/tile/menubar.py:490 pysollib/tk/menubar.py:487
-msgid "&Very slow"
-msgstr ""
-
-#: pysollib/tile/menubar.py:491 pysollib/tk/menubar.py:488
-msgid "&Mouse"
-msgstr ""
-
-#: pysollib/tile/menubar.py:492 pysollib/tk/menubar.py:489
-msgid "&Drag-and-Drop"
-msgstr ""
-
-#: pysollib/tile/menubar.py:493 pysollib/tk/menubar.py:490
-msgid "&Point-and-Click"
-msgstr ""
-
-#: pysollib/tile/menubar.py:494 pysollib/tk/menubar.py:491
-msgid "&Sticky mouse"
-msgstr ""
-
-#: pysollib/tile/menubar.py:496 pysollib/tk/menubar.py:493
-msgid "Use mouse for undo/redo"
-msgstr ""
-
-#: pysollib/tile/menubar.py:498 pysollib/tk/menubar.py:495
-msgid "&Fonts..."
-msgstr ""
-
-#: pysollib/tile/menubar.py:499 pysollib/tk/menubar.py:496
-msgid "&Colors..."
-msgstr ""
-
-#: pysollib/tile/menubar.py:500 pysollib/tk/menubar.py:497
-msgid "Time&outs..."
-msgstr ""
-
-#: pysollib/tile/menubar.py:502
-msgid "Set t&heme"
-msgstr ""
-
-#: pysollib/tile/menubar.py:504 pysollib/tk/menubar.py:499
-msgid "&Toolbar"
-msgstr ""
-
-#: pysollib/tile/menubar.py:506 pysollib/tk/menubar.py:501
-msgid "Stat&usbar"
-msgstr ""
-
-#: pysollib/tile/menubar.py:507 pysollib/tk/menubar.py:502
-msgid "Show &statusbar"
-msgstr ""
-
-#: pysollib/tile/menubar.py:508 pysollib/tk/menubar.py:503
-msgid "Show &number of cards"
-msgstr ""
-
-#: pysollib/tile/menubar.py:509 pysollib/tk/menubar.py:504
-msgid "Show &help bar"
-msgstr ""
-
-#: pysollib/tile/menubar.py:510 pysollib/tk/menubar.py:505
-msgid "Save games &geometry"
-msgstr ""
-
-#: pysollib/tile/menubar.py:511 pysollib/tk/menubar.py:506
-msgid "&Demo logo"
-msgstr ""
-
-#: pysollib/tile/menubar.py:512 pysollib/tk/menubar.py:507
-msgid "Startup splash sc&reen"
-msgstr ""
-
-#: pysollib/tile/menubar.py:518 pysollib/tk/menubar.py:513
-msgid "&Help"
-msgstr ""
-
-#: pysollib/tile/menubar.py:519 pysollib/tk/menubar.py:514
-msgid "&Contents"
-msgstr ""
-
-#: pysollib/tile/menubar.py:520 pysollib/tk/menubar.py:515
-msgid "&How to play"
-msgstr ""
-
-#: pysollib/tile/menubar.py:521 pysollib/tk/menubar.py:516
-msgid "&Rules for this game"
-msgstr ""
-
-#: pysollib/tile/menubar.py:522 pysollib/tk/menubar.py:517
-msgid "&License terms"
-msgstr ""
-
-#: pysollib/tile/menubar.py:525 pysollib/tk/menubar.py:520
+#: pysollib/tile/menubar.py:358 pysollib/tile/menubar.py:524
+#: pysollib/tk/menubar.py:355 pysollib/tk/menubar.py:520
 msgid "&About "
 msgstr ""
 
-#: pysollib/tile/menubar.py:637 pysollib/tk/menubar.py:632
+#: pysollib/tile/menubar.py:360 pysollib/tk/menubar.py:357
+msgid "&File"
+msgstr ""
+
+#: pysollib/tile/menubar.py:362 pysollib/tk/menubar.py:359
+msgid "R&ecent games"
+msgstr ""
+
+#: pysollib/tile/menubar.py:364 pysollib/tk/menubar.py:361
+msgid "Select &random game"
+msgstr ""
+
+#: pysollib/tile/menubar.py:365 pysollib/tk/menubar.py:362
+msgid "&All games"
+msgstr ""
+
+#: pysollib/tile/menubar.py:366 pysollib/tk/menubar.py:363
+msgid "Games played and &won"
+msgstr ""
+
+#: pysollib/tile/menubar.py:367 pysollib/tk/menubar.py:364
+msgid "Games played and &not won"
+msgstr ""
+
+#: pysollib/tile/menubar.py:368 pysollib/tk/menubar.py:365
+msgid "Games not &played"
+msgstr ""
+
+#: pysollib/tile/menubar.py:369 pysollib/tk/menubar.py:366
+msgid "Select game by nu&mber..."
+msgstr ""
+
+#: pysollib/tile/menubar.py:371 pysollib/tk/menubar.py:368
+msgid "Fa&vorite games"
+msgstr ""
+
+#: pysollib/tile/menubar.py:372 pysollib/tk/menubar.py:369
+msgid "A&dd to favorites"
+msgstr ""
+
+#: pysollib/tile/menubar.py:373 pysollib/tk/menubar.py:370
+msgid "R&emove from favorites"
+msgstr ""
+
+#: pysollib/tile/menubar.py:375 pysollib/tk/menubar.py:372
+msgid "&Open..."
+msgstr ""
+
+#: pysollib/tile/menubar.py:376 pysollib/tk/menubar.py:373
+msgid "&Save"
+msgstr ""
+
+#: pysollib/tile/menubar.py:377 pysollib/tk/menubar.py:374
+msgid "Save &as..."
+msgstr ""
+
+#: pysollib/tile/menubar.py:379 pysollib/tk/menubar.py:376
+msgid "&Hold and quit"
+msgstr ""
+
+#: pysollib/tile/menubar.py:385 pysollib/tile/selectgame.py:398
+#: pysollib/tk/menubar.py:382 pysollib/tk/selectgame.py:407
+msgid "&Select"
+msgstr ""
+
+#: pysollib/tile/menubar.py:390 pysollib/tk/menubar.py:387
+msgid "&Edit"
+msgstr ""
+
+#: pysollib/tile/menubar.py:391 pysollib/tk/menubar.py:388
+msgid "&Undo"
+msgstr ""
+
+#: pysollib/tile/menubar.py:392 pysollib/tk/menubar.py:389
+msgid "&Redo"
+msgstr ""
+
+#: pysollib/tile/menubar.py:393 pysollib/tk/menubar.py:390
+msgid "Redo &all"
+msgstr ""
+
+#: pysollib/tile/menubar.py:396 pysollib/tk/menubar.py:393
+msgid "&Set bookmark"
+msgstr ""
+
+#: pysollib/tile/menubar.py:398 pysollib/tile/menubar.py:402
+#: pysollib/tk/menubar.py:395 pysollib/tk/menubar.py:399
+msgid "Bookmark %d"
+msgstr ""
+
+#: pysollib/tile/menubar.py:400 pysollib/tk/menubar.py:397
+msgid "Go&to bookmark"
+msgstr ""
+
+#: pysollib/tile/menubar.py:405 pysollib/tk/menubar.py:402
+msgid "&Clear bookmarks"
+msgstr ""
+
+#: pysollib/tile/menubar.py:408 pysollib/tile/toolbar.py:190
+#: pysollib/tk/menubar.py:405 pysollib/tk/toolbar.py:193
+msgid "Restart"
+msgstr ""
+
+#: pysollib/tile/menubar.py:410 pysollib/tk/menubar.py:407
+msgid "&Game"
+msgstr ""
+
+#: pysollib/tile/menubar.py:411 pysollib/tk/menubar.py:408
+msgid "&Deal cards"
+msgstr ""
+
+#: pysollib/tile/menubar.py:412 pysollib/tk/menubar.py:409
+msgid "&Auto drop"
+msgstr ""
+
+#: pysollib/tile/menubar.py:413 pysollib/tk/menubar.py:410
+msgid "&Pause"
+msgstr ""
+
+#: pysollib/tile/menubar.py:416 pysollib/tk/menubar.py:413
+msgid "S&tatus..."
+msgstr ""
+
+#: pysollib/tile/menubar.py:417 pysollib/tk/menubar.py:414
+msgid "&Comments..."
+msgstr ""
+
+#: pysollib/tile/menubar.py:419 pysollib/tk/menubar.py:416
+msgid "&Statistics"
+msgstr ""
+
+#: pysollib/tile/menubar.py:420 pysollib/tile/menubar.py:428
+#: pysollib/tk/menubar.py:417 pysollib/tk/menubar.py:425
+msgid "Current game..."
+msgstr ""
+
+#: pysollib/tile/menubar.py:421 pysollib/tile/menubar.py:429
+#: pysollib/tk/menubar.py:418 pysollib/tk/menubar.py:426
+msgid "All games..."
+msgstr ""
+
+#: pysollib/tile/menubar.py:423 pysollib/tk/menubar.py:420
+msgid "Session log..."
+msgstr ""
+
+#: pysollib/tile/menubar.py:424 pysollib/tk/menubar.py:421
+msgid "Full log..."
+msgstr ""
+
+#: pysollib/tile/menubar.py:427 pysollib/tk/menubar.py:424
+msgid "D&emo statistics"
+msgstr ""
+
+#: pysollib/tile/menubar.py:431 pysollib/tk/menubar.py:428
+msgid "&Assist"
+msgstr ""
+
+#: pysollib/tile/menubar.py:432 pysollib/tk/menubar.py:429
+msgid "&Hint"
+msgstr ""
+
+#: pysollib/tile/menubar.py:433 pysollib/tk/menubar.py:430
+msgid "Highlight p&iles"
+msgstr ""
+
+#: pysollib/tile/menubar.py:436 pysollib/tk/menubar.py:433
+msgid "&Demo"
+msgstr ""
+
+#: pysollib/tile/menubar.py:437 pysollib/tk/menubar.py:434
+msgid "Demo (&all games)"
+msgstr ""
+
+#: pysollib/tile/menubar.py:439 pysollib/tk/menubar.py:436
+msgid "Piles description"
+msgstr ""
+
+#: pysollib/tile/menubar.py:443 pysollib/tk/menubar.py:440
+msgid "&Options"
+msgstr ""
+
+#: pysollib/tile/menubar.py:444 pysollib/tk/menubar.py:441
+msgid "&Player options..."
+msgstr ""
+
+#: pysollib/tile/menubar.py:445 pysollib/tk/menubar.py:442
+msgid "&Automatic play"
+msgstr ""
+
+#: pysollib/tile/menubar.py:446 pysollib/tk/menubar.py:443
+msgid "Auto &face up"
+msgstr ""
+
+#: pysollib/tile/menubar.py:447 pysollib/tk/menubar.py:444
+msgid "A&uto drop"
+msgstr ""
+
+#: pysollib/tile/menubar.py:448 pysollib/tk/menubar.py:445
+msgid "Auto &deal"
+msgstr ""
+
+#: pysollib/tile/menubar.py:450 pysollib/tk/menubar.py:447
+msgid "&Quick play"
+msgstr ""
+
+#: pysollib/tile/menubar.py:451 pysollib/tk/menubar.py:448
+msgid "Assist &level"
+msgstr ""
+
+#: pysollib/tile/menubar.py:452 pysollib/tk/menubar.py:449
+msgid "Enable &undo"
+msgstr ""
+
+#: pysollib/tile/menubar.py:453 pysollib/tk/menubar.py:450
+msgid "Enable &bookmarks"
+msgstr ""
+
+#: pysollib/tile/menubar.py:454 pysollib/tk/menubar.py:451
+msgid "Enable &hint"
+msgstr ""
+
+#: pysollib/tile/menubar.py:455 pysollib/tk/menubar.py:452
+msgid "Enable highlight p&iles"
+msgstr ""
+
+#: pysollib/tile/menubar.py:456 pysollib/tk/menubar.py:453
+msgid "Enable highlight &cards"
+msgstr ""
+
+#: pysollib/tile/menubar.py:457 pysollib/tk/menubar.py:454
+msgid "Enable highlight same &rank"
+msgstr ""
+
+#: pysollib/tile/menubar.py:458 pysollib/tk/menubar.py:455
+msgid "Highlight &no matching"
+msgstr ""
+
+#: pysollib/tile/menubar.py:460 pysollib/tk/menubar.py:457
+msgid "&Show removed tiles (in Mahjongg games)"
+msgstr ""
+
+#: pysollib/tile/menubar.py:461 pysollib/tk/menubar.py:458
+msgid "Show hint &arrow (in Shisen-Sho games)"
+msgstr ""
+
+#: pysollib/tile/menubar.py:463 pysollib/tk/menubar.py:460
+msgid "&Sound..."
+msgstr ""
+
+#: pysollib/tile/menubar.py:471 pysollib/tk/menubar.py:468
+msgid "Cards&et..."
+msgstr ""
+
+#: pysollib/tile/menubar.py:472 pysollib/tk/menubar.py:469
+msgid "Table t&ile..."
+msgstr ""
+
+#: pysollib/tile/menubar.py:474 pysollib/tk/menubar.py:471
+msgid "Card &background"
+msgstr ""
+
+#: pysollib/tile/menubar.py:475 pysollib/tk/menubar.py:472
+msgid "Card &view"
+msgstr ""
+
+#: pysollib/tile/menubar.py:476 pysollib/tk/menubar.py:473
+msgid "Card shado&w"
+msgstr ""
+
+#: pysollib/tile/menubar.py:477 pysollib/tk/menubar.py:474
+msgid "Shade &legal moves"
+msgstr ""
+
+#: pysollib/tile/menubar.py:478 pysollib/tk/menubar.py:475
+msgid "&Negative cards bottom"
+msgstr ""
+
+#: pysollib/tile/menubar.py:479 pysollib/tk/menubar.py:476
+msgid "Shrink face-down cards"
+msgstr ""
+
+#: pysollib/tile/menubar.py:480 pysollib/tk/menubar.py:477
+msgid "Shade &filled stacks"
+msgstr ""
+
+#: pysollib/tile/menubar.py:481 pysollib/tk/menubar.py:478
+msgid "A&nimations"
+msgstr ""
+
+#: pysollib/tile/menubar.py:482 pysollib/tk/menubar.py:479
+msgid "&None"
+msgstr ""
+
+#: pysollib/tile/menubar.py:483 pysollib/tk/menubar.py:480
+msgid "&Timer based"
+msgstr ""
+
+#: pysollib/tile/menubar.py:484 pysollib/tk/menubar.py:481
+msgid "&Fast"
+msgstr ""
+
+#: pysollib/tile/menubar.py:485 pysollib/tk/menubar.py:482
+msgid "&Slow"
+msgstr ""
+
+#: pysollib/tile/menubar.py:486 pysollib/tk/menubar.py:483
+msgid "&Very slow"
+msgstr ""
+
+#: pysollib/tile/menubar.py:488 pysollib/tk/menubar.py:485
+msgid "&Redeal animation"
+msgstr ""
+
+#: pysollib/tile/menubar.py:489 pysollib/tk/menubar.py:486
+msgid "&Winning animation"
+msgstr ""
+
+#: pysollib/tile/menubar.py:490 pysollib/tk/menubar.py:487
+msgid "&Mouse"
+msgstr ""
+
+#: pysollib/tile/menubar.py:491 pysollib/tk/menubar.py:488
+msgid "&Drag-and-Drop"
+msgstr ""
+
+#: pysollib/tile/menubar.py:492 pysollib/tk/menubar.py:489
+msgid "&Point-and-Click"
+msgstr ""
+
+#: pysollib/tile/menubar.py:493 pysollib/tk/menubar.py:490
+msgid "&Sticky mouse"
+msgstr ""
+
+#: pysollib/tile/menubar.py:495 pysollib/tk/menubar.py:492
+msgid "Use mouse for undo/redo"
+msgstr ""
+
+#: pysollib/tile/menubar.py:497 pysollib/tk/menubar.py:494
+msgid "&Fonts..."
+msgstr ""
+
+#: pysollib/tile/menubar.py:498 pysollib/tk/menubar.py:495
+msgid "&Colors..."
+msgstr ""
+
+#: pysollib/tile/menubar.py:499 pysollib/tk/menubar.py:496
+msgid "Time&outs..."
+msgstr ""
+
+#: pysollib/tile/menubar.py:502 pysollib/tk/menubar.py:498
+msgid "&Toolbar"
+msgstr ""
+
+#: pysollib/tile/menubar.py:504 pysollib/tk/menubar.py:500
+msgid "Stat&usbar"
+msgstr ""
+
+#: pysollib/tile/menubar.py:505 pysollib/tk/menubar.py:501
+msgid "Show &statusbar"
+msgstr ""
+
+#: pysollib/tile/menubar.py:506 pysollib/tk/menubar.py:502
+msgid "Show &number of cards"
+msgstr ""
+
+#: pysollib/tile/menubar.py:507 pysollib/tk/menubar.py:503
+msgid "Show &help bar"
+msgstr ""
+
+#: pysollib/tile/menubar.py:508 pysollib/tk/menubar.py:504
+msgid "Save games &geometry"
+msgstr ""
+
+#: pysollib/tile/menubar.py:509 pysollib/tk/menubar.py:505
+msgid "&Demo logo"
+msgstr ""
+
+#: pysollib/tile/menubar.py:510 pysollib/tk/menubar.py:506
+msgid "Startup splash sc&reen"
+msgstr ""
+
+#: pysollib/tile/menubar.py:516 pysollib/tk/menubar.py:512
+msgid "&Help"
+msgstr ""
+
+#: pysollib/tile/menubar.py:517 pysollib/tk/menubar.py:513
+msgid "&Contents"
+msgstr ""
+
+#: pysollib/tile/menubar.py:518 pysollib/tk/menubar.py:514
+msgid "&How to play"
+msgstr ""
+
+#: pysollib/tile/menubar.py:519 pysollib/tk/menubar.py:515
+msgid "&Rules for this game"
+msgstr ""
+
+#: pysollib/tile/menubar.py:520 pysollib/tk/menubar.py:516
+msgid "&License terms"
+msgstr ""
+
+#: pysollib/tile/menubar.py:637 pysollib/tk/menubar.py:633
 msgid "All &games..."
 msgstr ""
 
-#: pysollib/tile/menubar.py:639 pysollib/tk/menubar.py:634
+#: pysollib/tile/menubar.py:639 pysollib/tk/menubar.py:635
 msgid "Playable pre&view..."
 msgstr ""
 
-#: pysollib/tile/menubar.py:688 pysollib/tk/menubar.py:683
+#: pysollib/tile/menubar.py:690 pysollib/tk/menubar.py:686
 msgid "&Mahjongg games"
 msgstr ""
 
-#: pysollib/tile/menubar.py:726 pysollib/tk/menubar.py:721
+#: pysollib/tile/menubar.py:728 pysollib/tk/menubar.py:724
 msgid "&Popular games"
 msgstr ""
 
-#: pysollib/tile/menubar.py:734 pysollib/tk/menubar.py:729
+#: pysollib/tile/menubar.py:736 pysollib/tk/menubar.py:732
 msgid "&French games"
 msgstr ""
 
-#: pysollib/tile/menubar.py:741 pysollib/tk/menubar.py:736
+#: pysollib/tile/menubar.py:743 pysollib/tk/menubar.py:739
 msgid "&Oriental games"
 msgstr ""
 
-#: pysollib/tile/menubar.py:749 pysollib/tk/menubar.py:744
+#: pysollib/tile/menubar.py:751 pysollib/tk/menubar.py:747
 msgid "&Special games"
 msgstr ""
 
-#: pysollib/tile/menubar.py:755 pysollib/tk/menubar.py:750
+#: pysollib/tile/menubar.py:757 pysollib/tk/menubar.py:753
 msgid "&All games by name"
 msgstr ""
 
-#: pysollib/tile/menubar.py:1028 pysollib/tk/menubar.py:1023
+#: pysollib/tile/menubar.py:1030 pysollib/tk/menubar.py:1026
 #: data/glade-translations:72
 msgid "Sound settings"
 msgstr ""
 
-#: pysollib/tile/menubar.py:1128 pysollib/tk/menubar.py:1127
+#: pysollib/tile/menubar.py:1138 pysollib/tk/menubar.py:1138
 msgid "Select "
 msgstr ""
 
-#: pysollib/tile/menubar.py:1175 pysollib/tk/menubar.py:1179
+#: pysollib/tile/menubar.py:1185 pysollib/tk/menubar.py:1190
 msgid "Select table background"
 msgstr ""
 
-#: pysollib/tile/menubar.py:1330
+#: pysollib/tile/menubar.py:1329
 msgid "Change theme"
 msgstr ""
 
-#: pysollib/tile/menubar.py:1331
+#: pysollib/tile/menubar.py:1330
 msgid ""
 "This settings will take effect\n"
 "the next time you restart "
 msgstr ""
 
+#: pysollib/tile/menubar.py:1338
+msgid "Set t&heme"
+msgstr ""
+
+#: pysollib/tile/menubar.py:1344
+msgid "Default"
+msgstr ""
+
+#: pysollib/tile/menubar.py:1345
+msgid "Classic"
+msgstr ""
+
+#: pysollib/tile/menubar.py:1346
+msgid "Revitalized"
+msgstr ""
+
+#: pysollib/tile/menubar.py:1347
+msgid "Windows native"
+msgstr ""
+
+#: pysollib/tile/menubar.py:1348
+msgid "XP Native"
+msgstr ""
+
+#: pysollib/tile/menubar.py:1349
+msgid "Aqua"
+msgstr ""
+
 #: pysollib/tile/playeroptionsdialog.py:72
 #: pysollib/tk/playeroptionsdialog.py:112
 msgid ""
@@ -2563,12 +2604,12 @@ msgstr ""
 msgid "XLarge cardsets"
 msgstr ""
 
-#: pysollib/tile/selectcardset.py:236 pysollib/tk/menubar.py:1124
+#: pysollib/tile/selectcardset.py:236 pysollib/tk/menubar.py:1135
 msgid "&Info..."
 msgstr ""
 
-#: pysollib/tile/selectcardset.py:237 pysollib/tk/menubar.py:1122
-#: pysollib/tk/menubar.py:1124 pysollib/tk/selectcardset.py:241
+#: pysollib/tile/selectcardset.py:237 pysollib/tk/menubar.py:1133
+#: pysollib/tk/menubar.py:1135 pysollib/tk/selectcardset.py:241
 msgid "&Load"
 msgstr ""
 
@@ -2576,7 +2617,7 @@ msgstr ""
 msgid "About cardset"
 msgstr ""
 
-#: pysollib/tile/selectcardset.py:327 pysollib/tile/selectgame.py:354
+#: pysollib/tile/selectcardset.py:327 pysollib/tile/selectgame.py:355
 #: pysollib/tk/selectcardset.py:336 pysollib/tk/selectgame.py:365
 msgid "Type:"
 msgstr ""
@@ -2593,10 +2634,6 @@ msgstr ""
 msgid "Year:"
 msgstr ""
 
-#: pysollib/tile/selectcardset.py:332 pysollib/tk/selectcardset.py:341
-msgid "Size:"
-msgstr ""
-
 #: pysollib/tile/selectgame.py:101 pysollib/tk/selectgame.py:100
 msgid "(no games)"
 msgstr ""
@@ -2626,7 +2663,7 @@ msgid "by Compatibility"
 msgstr ""
 
 #: pysollib/tile/selectgame.py:153 pysollib/tk/selectgame.py:152
-msgid "New games in v."
+msgid "New games in v. "
 msgstr ""
 
 #: pysollib/tile/selectgame.py:156 pysollib/tk/selectgame.py:155
@@ -2649,27 +2686,27 @@ msgstr ""
 msgid "by Skill Level"
 msgstr ""
 
-#: pysollib/tile/selectgame.py:171 pysollib/tile/selectgame.py:523
+#: pysollib/tile/selectgame.py:171 pysollib/tile/selectgame.py:524
 #: pysollib/tk/selectgame.py:170 pysollib/tk/selectgame.py:533
 msgid "Luck only"
 msgstr ""
 
-#: pysollib/tile/selectgame.py:172 pysollib/tile/selectgame.py:524
+#: pysollib/tile/selectgame.py:172 pysollib/tile/selectgame.py:525
 #: pysollib/tk/selectgame.py:171 pysollib/tk/selectgame.py:534
 msgid "Mostly luck"
 msgstr ""
 
-#: pysollib/tile/selectgame.py:173 pysollib/tile/selectgame.py:525
+#: pysollib/tile/selectgame.py:173 pysollib/tile/selectgame.py:526
 #: pysollib/tk/selectgame.py:172 pysollib/tk/selectgame.py:535
 msgid "Balanced"
 msgstr ""
 
-#: pysollib/tile/selectgame.py:174 pysollib/tile/selectgame.py:526
+#: pysollib/tile/selectgame.py:174 pysollib/tile/selectgame.py:527
 #: pysollib/tk/selectgame.py:173 pysollib/tk/selectgame.py:536
 msgid "Mostly skill"
 msgstr ""
 
-#: pysollib/tile/selectgame.py:175 pysollib/tile/selectgame.py:527
+#: pysollib/tile/selectgame.py:175 pysollib/tile/selectgame.py:528
 #: pysollib/tk/selectgame.py:174 pysollib/tk/selectgame.py:537
 msgid "Skill only"
 msgstr ""
@@ -2786,81 +2823,81 @@ msgstr ""
 msgid "Relaxed Variants"
 msgstr ""
 
-#: pysollib/tile/selectgame.py:341 pysollib/tk/selectgame.py:349
+#: pysollib/tile/selectgame.py:342 pysollib/tk/selectgame.py:349
 msgid "About game"
 msgstr ""
 
-#: pysollib/tile/selectgame.py:351 pysollib/tk/selectgame.py:362
+#: pysollib/tile/selectgame.py:352 pysollib/tk/selectgame.py:362
 msgid "Name:"
 msgstr ""
 
-#: pysollib/tile/selectgame.py:352 pysollib/tk/selectgame.py:363
+#: pysollib/tile/selectgame.py:353 pysollib/tk/selectgame.py:363
 msgid "Alternate names:"
 msgstr ""
 
-#: pysollib/tile/selectgame.py:353 pysollib/tk/selectgame.py:364
+#: pysollib/tile/selectgame.py:354 pysollib/tk/selectgame.py:364
 msgid "Category:"
 msgstr ""
 
-#: pysollib/tile/selectgame.py:355 pysollib/tk/selectgame.py:366
+#: pysollib/tile/selectgame.py:356 pysollib/tk/selectgame.py:366
 msgid "Skill level:"
 msgstr ""
 
-#: pysollib/tile/selectgame.py:356 pysollib/tk/selectgame.py:367
+#: pysollib/tile/selectgame.py:357 pysollib/tk/selectgame.py:367
 msgid "Decks:"
 msgstr ""
 
-#: pysollib/tile/selectgame.py:357 pysollib/tk/selectgame.py:368
+#: pysollib/tile/selectgame.py:358 pysollib/tk/selectgame.py:368
 msgid "Redeals:"
 msgstr ""
 
-#: pysollib/tile/selectgame.py:359 pysollib/tk/selectgame.py:370
+#: pysollib/tile/selectgame.py:360 pysollib/tk/selectgame.py:370
 msgid "Played:"
 msgstr ""
 
-#: pysollib/tile/selectgame.py:360 pysollib/tile/tkstats.py:107
+#: pysollib/tile/selectgame.py:361 pysollib/tile/tkstats.py:107
 #: pysollib/tile/tkstats.py:159 pysollib/tk/selectgame.py:371
 #: pysollib/tk/tkstats.py:111 pysollib/tk/tkstats.py:163
 #: data/glade-translations:9 data/glade-translations:13
 msgid "Won:"
 msgstr ""
 
-#: pysollib/tile/selectgame.py:361 pysollib/tile/tkstats.py:108
+#: pysollib/tile/selectgame.py:362 pysollib/tile/tkstats.py:108
 #: pysollib/tile/tkstats.py:160 pysollib/tk/selectgame.py:372
 #: pysollib/tk/tkstats.py:112 pysollib/tk/tkstats.py:164
 #: data/glade-translations:11 data/glade-translations:14
 msgid "Lost:"
 msgstr ""
 
-#: pysollib/tile/selectgame.py:362 pysollib/tile/tkstats.py:615
-#: pysollib/tk/selectgame.py:373 pysollib/tk/tkstats.py:736
+#: pysollib/tile/selectgame.py:363 pysollib/tile/tkstats.py:622
+#: pysollib/tk/selectgame.py:373 pysollib/tk/tkstats.py:738
 #: data/glade-translations:18
 msgid "Playing time:"
 msgstr ""
 
-#: pysollib/tile/selectgame.py:363 pysollib/tile/tkstats.py:622
-#: pysollib/tk/selectgame.py:374 pysollib/tk/tkstats.py:743
+#: pysollib/tile/selectgame.py:364 pysollib/tile/tkstats.py:629
+#: pysollib/tk/selectgame.py:374 pysollib/tk/tkstats.py:745
 #: data/glade-translations:19
 msgid "Moves:"
 msgstr ""
 
-#: pysollib/tile/selectgame.py:364 pysollib/tk/selectgame.py:375
+#: pysollib/tile/selectgame.py:365 pysollib/tk/selectgame.py:375
 msgid "% won:"
 msgstr ""
 
-#: pysollib/tile/selectgame.py:396 pysollib/tk/selectgame.py:407
+#: pysollib/tile/selectgame.py:397 pysollib/tk/selectgame.py:407
 msgid "&Rules"
 msgstr ""
 
-#: pysollib/tile/selectgame.py:476 pysollib/tk/selectgame.py:486
+#: pysollib/tile/selectgame.py:477 pysollib/tk/selectgame.py:486
 msgid "Playable Preview - "
 msgstr ""
 
-#: pysollib/tile/selectgame.py:530 pysollib/tk/selectgame.py:540
+#: pysollib/tile/selectgame.py:531 pysollib/tk/selectgame.py:540
 msgid "variable"
 msgstr ""
 
-#: pysollib/tile/selectgame.py:531 pysollib/tk/selectgame.py:541
+#: pysollib/tile/selectgame.py:532 pysollib/tk/selectgame.py:541
 msgid "unlimited"
 msgstr ""
 
@@ -2944,13 +2981,13 @@ msgstr ""
 msgid "No move"
 msgstr ""
 
-#: pysollib/tile/soundoptionsdialog.py:94 pysollib/tile/toolbar.py:242
-#: pysollib/tk/soundoptionsdialog.py:92 pysollib/tk/toolbar.py:203
+#: pysollib/tile/soundoptionsdialog.py:94 pysollib/tile/toolbar.py:195
+#: pysollib/tk/soundoptionsdialog.py:92 pysollib/tk/toolbar.py:198
 msgid "Undo"
 msgstr ""
 
-#: pysollib/tile/soundoptionsdialog.py:95 pysollib/tile/toolbar.py:243
-#: pysollib/tk/soundoptionsdialog.py:93 pysollib/tk/toolbar.py:204
+#: pysollib/tile/soundoptionsdialog.py:95 pysollib/tile/toolbar.py:196
+#: pysollib/tk/soundoptionsdialog.py:93 pysollib/tk/toolbar.py:199
 msgid "Redo"
 msgstr ""
 
@@ -2993,8 +3030,7 @@ msgid "Music volume:"
 msgstr ""
 
 #: pysollib/tile/soundoptionsdialog.py:145
-#: pysollib/tk/soundoptionsdialog.py:144 data/glade-translations:76
-msgid "Enable samles"
+msgid "Enable samples"
 msgstr ""
 
 #: pysollib/tile/soundoptionsdialog.py:168
@@ -3014,11 +3050,11 @@ msgid ""
 "the next time you restart "
 msgstr ""
 
-#: pysollib/tile/statusbar.py:158 pysollib/tk/statusbar.py:157
+#: pysollib/tile/statusbar.py:148 pysollib/tk/statusbar.py:159
 msgid "Moves/Total moves"
 msgstr ""
 
-#: pysollib/tile/statusbar.py:160 pysollib/tk/statusbar.py:159
+#: pysollib/tile/statusbar.py:150 pysollib/tk/statusbar.py:161
 msgid "Games played: won/lost"
 msgstr ""
 
@@ -3047,19 +3083,19 @@ msgstr ""
 msgid "Highlight same rank:"
 msgstr ""
 
-#: pysollib/tile/tkconst.py:105 pysollib/tk/tkconst.py:103
+#: pysollib/tile/tkconst.py:109 pysollib/tk/tkconst.py:107
 msgid "Icons only"
 msgstr ""
 
-#: pysollib/tile/tkconst.py:106 pysollib/tk/tkconst.py:104
+#: pysollib/tile/tkconst.py:110 pysollib/tk/tkconst.py:108
 msgid "Text below icons"
 msgstr ""
 
-#: pysollib/tile/tkconst.py:107 pysollib/tk/tkconst.py:105
+#: pysollib/tile/tkconst.py:111 pysollib/tk/tkconst.py:109
 msgid "Text beside icons"
 msgstr ""
 
-#: pysollib/tile/tkconst.py:108 pysollib/tk/tkconst.py:106
+#: pysollib/tile/tkconst.py:112 pysollib/tk/tkconst.py:110
 msgid "Text only"
 msgstr ""
 
@@ -3114,244 +3150,232 @@ msgstr ""
 msgid "Total:"
 msgstr ""
 
-#: pysollib/tile/tkstats.py:201 pysollib/tk/tkstats.py:278
+#: pysollib/tile/tkstats.py:204 pysollib/tk/tkstats.py:278
 msgid "No games"
 msgstr ""
 
-#: pysollib/tile/tkstats.py:212 pysollib/tk/tkstats.py:289
+#: pysollib/tile/tkstats.py:215 pysollib/tk/tkstats.py:289
 msgid "&All games..."
 msgstr ""
 
-#: pysollib/tile/tkstats.py:214 pysollib/tk/tkstats.py:291
+#: pysollib/tile/tkstats.py:217 pysollib/tk/tkstats.py:291
 msgid "&Reset..."
 msgstr ""
 
-#: pysollib/tile/tkstats.py:380
+#: pysollib/tile/tkstats.py:383
 msgid "&Play this game"
 msgstr ""
 
-#: pysollib/tile/tkstats.py:382 pysollib/tile/tkstats.py:451
-#: pysollib/tile/tkstats.py:474 pysollib/tk/tkstats.py:513
-#: pysollib/tk/tkstats.py:579 pysollib/tk/tkstats.py:594
+#: pysollib/tile/tkstats.py:385 pysollib/tile/tkstats.py:458
+#: pysollib/tile/tkstats.py:481 pysollib/tk/tkstats.py:515
+#: pysollib/tk/tkstats.py:581 pysollib/tk/tkstats.py:596
 msgid "&Save to file"
 msgstr ""
 
-#: pysollib/tile/tkstats.py:383 pysollib/tk/tkstats.py:514
+#: pysollib/tile/tkstats.py:386 pysollib/tk/tkstats.py:516
 msgid "&Reset all..."
 msgstr ""
 
-#: pysollib/tile/tkstats.py:450 pysollib/tk/tkstats.py:579
+#: pysollib/tile/tkstats.py:457 pysollib/tk/tkstats.py:581
 msgid "Session &log..."
 msgstr ""
 
-#: pysollib/tile/tkstats.py:473 pysollib/tk/tkstats.py:594
+#: pysollib/tile/tkstats.py:480 pysollib/tk/tkstats.py:596
 msgid "&Full log..."
 msgstr ""
 
-#: pysollib/tile/tkstats.py:489 pysollib/tk/tkstats.py:609
+#: pysollib/tile/tkstats.py:496 pysollib/tk/tkstats.py:611
 msgid "Highlight piles: "
 msgstr ""
 
-#: pysollib/tile/tkstats.py:490 pysollib/tk/tkstats.py:610
+#: pysollib/tile/tkstats.py:497 pysollib/tk/tkstats.py:612
 msgid "Highlight cards: "
 msgstr ""
 
-#: pysollib/tile/tkstats.py:491 pysollib/tk/tkstats.py:611
+#: pysollib/tile/tkstats.py:498 pysollib/tk/tkstats.py:613
 msgid "Highlight same rank: "
 msgstr ""
 
-#: pysollib/tile/tkstats.py:494 pysollib/tk/tkstats.py:614
+#: pysollib/tile/tkstats.py:501 pysollib/tk/tkstats.py:616
 msgid ""
 "\n"
 "Redeals: "
 msgstr ""
 
-#: pysollib/tile/tkstats.py:495 pysollib/tk/tkstats.py:615
+#: pysollib/tile/tkstats.py:502 pysollib/tk/tkstats.py:617
 msgid ""
 "\n"
 "Cards in Talon: "
 msgstr ""
 
-#: pysollib/tile/tkstats.py:497 pysollib/tk/tkstats.py:617
+#: pysollib/tile/tkstats.py:504 pysollib/tk/tkstats.py:619
 msgid ""
 "\n"
 "Cards in Waste: "
 msgstr ""
 
-#: pysollib/tile/tkstats.py:499 pysollib/tk/tkstats.py:619
+#: pysollib/tile/tkstats.py:506 pysollib/tk/tkstats.py:621
 msgid ""
 "\n"
 "Cards in Foundations: "
 msgstr ""
 
-#: pysollib/tile/tkstats.py:502 pysollib/tk/tkstats.py:622
+#: pysollib/tile/tkstats.py:509 pysollib/tk/tkstats.py:624
 msgid "Game status"
 msgstr ""
 
-#: pysollib/tile/tkstats.py:505 pysollib/tk/tkstats.py:625
+#: pysollib/tile/tkstats.py:512 pysollib/tk/tkstats.py:627
 msgid "Playing time: "
 msgstr ""
 
-#: pysollib/tile/tkstats.py:506 pysollib/tk/tkstats.py:626
+#: pysollib/tile/tkstats.py:513 pysollib/tk/tkstats.py:628
 msgid "Started at: "
 msgstr ""
 
-#: pysollib/tile/tkstats.py:507 pysollib/tk/tkstats.py:627
+#: pysollib/tile/tkstats.py:514 pysollib/tk/tkstats.py:629
 msgid "Moves: "
 msgstr ""
 
-#: pysollib/tile/tkstats.py:508 pysollib/tk/tkstats.py:628
+#: pysollib/tile/tkstats.py:515 pysollib/tk/tkstats.py:630
 msgid "Undo moves: "
 msgstr ""
 
-#: pysollib/tile/tkstats.py:509 pysollib/tk/tkstats.py:629
+#: pysollib/tile/tkstats.py:516 pysollib/tk/tkstats.py:631
 msgid "Bookmark moves: "
 msgstr ""
 
-#: pysollib/tile/tkstats.py:510 pysollib/tk/tkstats.py:630
+#: pysollib/tile/tkstats.py:517 pysollib/tk/tkstats.py:632
 msgid "Demo moves: "
 msgstr ""
 
-#: pysollib/tile/tkstats.py:511 pysollib/tk/tkstats.py:631
+#: pysollib/tile/tkstats.py:518 pysollib/tk/tkstats.py:633
 msgid "Total player moves: "
 msgstr ""
 
-#: pysollib/tile/tkstats.py:512 pysollib/tk/tkstats.py:632
+#: pysollib/tile/tkstats.py:519 pysollib/tk/tkstats.py:634
 msgid "Total moves in this game: "
 msgstr ""
 
-#: pysollib/tile/tkstats.py:513 pysollib/tk/tkstats.py:633
+#: pysollib/tile/tkstats.py:520 pysollib/tk/tkstats.py:635
 msgid "Hints: "
 msgstr ""
 
-#: pysollib/tile/tkstats.py:517 pysollib/tk/tkstats.py:637
+#: pysollib/tile/tkstats.py:524 pysollib/tk/tkstats.py:639
 msgid "&Statistics..."
 msgstr ""
 
-#: pysollib/tile/tkstats.py:542 pysollib/tk/tkstats.py:663
+#: pysollib/tile/tkstats.py:549 pysollib/tk/tkstats.py:665
 msgid "N"
 msgstr ""
 
-#: pysollib/tile/tkstats.py:551 pysollib/tk/tkstats.py:672
+#: pysollib/tile/tkstats.py:558 pysollib/tk/tkstats.py:674
 msgid "Result"
 msgstr ""
 
-#: pysollib/tile/tkstats.py:607 pysollib/tk/tkstats.py:728
+#: pysollib/tile/tkstats.py:614 pysollib/tk/tkstats.py:730
 #: data/glade-translations:21
 msgid "Minimum"
 msgstr ""
 
-#: pysollib/tile/tkstats.py:608 pysollib/tk/tkstats.py:729
+#: pysollib/tile/tkstats.py:615 pysollib/tk/tkstats.py:731
 #: data/glade-translations:22
 msgid "Maximum"
 msgstr ""
 
-#: pysollib/tile/tkstats.py:609 pysollib/tk/tkstats.py:730
+#: pysollib/tile/tkstats.py:616 pysollib/tk/tkstats.py:732
 #: data/glade-translations:23
 msgid "Average"
 msgstr ""
 
-#: pysollib/tile/tkstats.py:629 pysollib/tk/tkstats.py:750
+#: pysollib/tile/tkstats.py:636 pysollib/tk/tkstats.py:752
 #: data/glade-translations:20
 msgid "Total moves:"
 msgstr ""
 
-#: pysollib/tile/tkstats.py:660 pysollib/tk/tkstats.py:781
+#: pysollib/tile/tkstats.py:667 pysollib/tk/tkstats.py:783
 msgid "No TOP for this game"
 msgstr ""
 
-#: pysollib/tile/toolbar.py:236 pysollib/tk/toolbar.py:197
+#: pysollib/tile/toolbar.py:189 pysollib/tk/toolbar.py:192
 msgid "New"
 msgstr ""
 
-#: pysollib/tile/toolbar.py:237 pysollib/tk/toolbar.py:198
+#: pysollib/tile/toolbar.py:190 pysollib/tk/toolbar.py:193
 msgid ""
 "Restart the\n"
 "current game"
 msgstr ""
 
-#: pysollib/tile/toolbar.py:239 pysollib/tk/toolbar.py:200
+#: pysollib/tile/toolbar.py:192 pysollib/tk/toolbar.py:195
 msgid "Open"
 msgstr ""
 
-#: pysollib/tile/toolbar.py:239 pysollib/tk/toolbar.py:200
+#: pysollib/tile/toolbar.py:192 pysollib/tk/toolbar.py:195
 msgid ""
 "Open a\n"
 "saved game"
 msgstr ""
 
-#: pysollib/tile/toolbar.py:240 pysollib/tk/toolbar.py:201
+#: pysollib/tile/toolbar.py:193 pysollib/tk/toolbar.py:196
 msgid "Save"
 msgstr ""
 
-#: pysollib/tile/toolbar.py:240 pysollib/tk/toolbar.py:201
+#: pysollib/tile/toolbar.py:193 pysollib/tk/toolbar.py:196
 msgid "Save game"
 msgstr ""
 
-#: pysollib/tile/toolbar.py:242 pysollib/tk/toolbar.py:203
+#: pysollib/tile/toolbar.py:195 pysollib/tk/toolbar.py:198
 msgid "Undo last move"
 msgstr ""
 
-#: pysollib/tile/toolbar.py:243 pysollib/tk/toolbar.py:204
+#: pysollib/tile/toolbar.py:196 pysollib/tk/toolbar.py:199
 msgid "Redo last move"
 msgstr ""
 
-#: pysollib/tile/toolbar.py:244 pysollib/tk/toolbar.py:205
+#: pysollib/tile/toolbar.py:197 pysollib/tk/toolbar.py:200
 msgid "Auto drop cards"
 msgstr ""
 
-#: pysollib/tile/toolbar.py:244 pysollib/tk/toolbar.py:205
+#: pysollib/tile/toolbar.py:197 pysollib/tk/toolbar.py:200
 msgid "Autodrop"
 msgstr ""
 
-#: pysollib/tile/toolbar.py:245 pysollib/tk/toolbar.py:206
+#: pysollib/tile/toolbar.py:198 pysollib/tk/toolbar.py:201
 msgid "Pause"
 msgstr ""
 
-#: pysollib/tile/toolbar.py:245 pysollib/tk/toolbar.py:206
+#: pysollib/tile/toolbar.py:198 pysollib/tk/toolbar.py:201
 msgid "Pause game"
 msgstr ""
 
-#: pysollib/tile/toolbar.py:247 pysollib/tk/toolbar.py:208
+#: pysollib/tile/toolbar.py:200 pysollib/tk/toolbar.py:203
 msgid "View statistics"
 msgstr ""
 
-#: pysollib/tile/toolbar.py:248 pysollib/tk/toolbar.py:209
+#: pysollib/tile/toolbar.py:201 pysollib/tk/toolbar.py:204
 msgid "Rules"
 msgstr ""
 
-#: pysollib/tile/toolbar.py:248 pysollib/tk/toolbar.py:209
+#: pysollib/tile/toolbar.py:201 pysollib/tk/toolbar.py:204
 msgid "Rules for this game"
 msgstr ""
 
-#: pysollib/tile/toolbar.py:250 pysollib/tk/toolbar.py:211
+#: pysollib/tile/toolbar.py:203 pysollib/tk/toolbar.py:206
 msgid "Quit"
 msgstr ""
 
-#: pysollib/tile/toolbar.py:265 pysollib/tk/toolbar.py:225
+#: pysollib/tile/toolbar.py:217 pysollib/tk/toolbar.py:220
 msgid "Player"
 msgstr ""
 
-#: pysollib/tile/toolbar.py:266 pysollib/tk/toolbar.py:226
+#: pysollib/tile/toolbar.py:218 pysollib/tk/toolbar.py:221
 msgid "Player options"
 msgstr ""
 
-#: pysollib/tile/toolbar.py:485 pysollib/tk/toolbar.py:466
+#: pysollib/tile/toolbar.py:390 pysollib/tk/toolbar.py:431
 msgid "Toolbar"
 msgstr ""
 
-#: pysollib/tk/menubar.py:84
-msgid "Relief"
-msgstr ""
-
-#: pysollib/tk/menubar.py:85
-msgid "Flat"
-msgstr ""
-
-#: pysollib/tk/menubar.py:89
-msgid "Raised"
-msgstr ""
-
 #: pysollib/tk/playeroptionsdialog.py:120
 msgid "Choose..."
 msgstr ""
@@ -3360,31 +3384,35 @@ msgstr ""
 msgid "Select name"
 msgstr ""
 
-#: pysollib/util.py:75
+#: pysollib/tk/soundoptionsdialog.py:144 data/glade-translations:76
+msgid "Enable samles"
+msgstr ""
+
+#: pysollib/util.py:81
 msgid "Club"
 msgstr ""
 
-#: pysollib/util.py:75
+#: pysollib/util.py:81
 msgid "Diamond"
 msgstr ""
 
-#: pysollib/util.py:75
+#: pysollib/util.py:81
 msgid "Heart"
 msgstr ""
 
-#: pysollib/util.py:75
+#: pysollib/util.py:81
 msgid "Spade"
 msgstr ""
 
-#: pysollib/util.py:76
+#: pysollib/util.py:82
 msgid "black"
 msgstr ""
 
-#: pysollib/util.py:76
+#: pysollib/util.py:82
 msgid "red"
 msgstr ""
 
-#: pysollib/util.py:101
+#: pysollib/util.py:107
 msgid "cardset"
 msgstr ""
 
diff --git a/po/ru_games.po b/po/ru_games.po
index e2ef3e0c..a6748b1c 100644
--- a/po/ru_games.po
+++ b/po/ru_games.po
@@ -5,8 +5,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PySol 0.0.1\n"
-"POT-Creation-Date: Thu Dec  7 15:25:59 2006\n"
-"PO-Revision-Date: 2006-12-07 15:51+0300\n"
+"POT-Creation-Date: Fri Jan 12 13:34:09 2007\n"
+"PO-Revision-Date: 2007-01-13 20:30+0300\n"
 "Last-Translator: Скоморох <skomoroh@gmail.com>\n"
 "Language-Team: Russian <ru@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -256,6 +256,9 @@ msgstr "Бельведер"
 msgid "Betsy Ross"
 msgstr "Бетси Росс"
 
+msgid "Big Ben"
+msgstr "Большой Бен"
+
 msgid "Big Bertha"
 msgstr "Большая Берта"
 
@@ -428,6 +431,9 @@ msgstr "Клоп"
 msgid "Busy Aces"
 msgstr "Занятые тузы"
 
+msgid "Busy Cards"
+msgstr "Занятые карты"
+
 msgid "Butterfly"
 msgstr "Бабочка"
 
@@ -440,6 +446,9 @@ msgstr "Вычисление"
 msgid "Camelot"
 msgstr "Камелот"
 
+msgid "Can Can"
+msgstr "Канкан"
+
 msgid "Canfield"
 msgstr "Кенфилд"
 
@@ -573,6 +582,9 @@ msgstr "Цитадель"
 msgid "Clink"
 msgstr "Застенок"
 
+msgid "Clock"
+msgstr "Часы"
+
 msgid "Clover Leaf"
 msgstr "Лепесток клевера"
 
@@ -810,6 +822,9 @@ msgstr "Двойной Клондайк"
 msgid "Double Klondike by Threes"
 msgstr "Двойной Клондайк по три"
 
+msgid "Double Line"
+msgstr "Двойной ряд"
+
 msgid "Double Mahjongg Big Castle"
 msgstr "Двойной Маджонг Большой замок"
 
@@ -837,6 +852,9 @@ msgstr "Двойной Маджонг Два квадрата"
 msgid "Double Measure"
 msgstr "Двойная Мера"
 
+msgid "Double Pyramid"
+msgstr "Двойная пирамида"
+
 msgid "Double Rail"
 msgstr "Двойные рельсы"
 
@@ -1155,8 +1173,11 @@ msgstr "Четыре кучи"
 msgid "Four Winds"
 msgstr "Четыре ветра"
 
+msgid "Four by Four"
+msgstr "Четыре по четыре"
+
 msgid "Foursome"
-msgstr "Четвёрки"
+msgstr "По четыре"
 
 msgid "Fourteen"
 msgstr "Четырнадцать"
@@ -1373,6 +1394,9 @@ msgstr "Заяц"
 msgid "Harvestman"
 msgstr "Сенокосец"
 
+msgid "Hawaiian"
+msgstr "Гавайский"
+
 msgid "Hayagriva"
 msgstr ""
 
@@ -1389,7 +1413,7 @@ msgid "Helios"
 msgstr "Гелиос"
 
 msgid "Hemispheres"
-msgstr ""
+msgstr "Полушария"
 
 msgid "Hex A Klon"
 msgstr "Шестнадцатиричный Клондайк"
@@ -2663,6 +2687,9 @@ msgstr "Сова"
 msgid "Ox"
 msgstr "Бык"
 
+msgid "Paganini"
+msgstr "Паганини"
+
 #, fuzzy
 msgid "Pagat"
 msgstr "Пагода"
@@ -2955,21 +2982,6 @@ msgstr "Роберт"
 msgid "Robin"
 msgstr "Робин"
 
-msgid "Rock Hopper"
-msgstr ""
-
-msgid "Rock Hopper 6x6"
-msgstr ""
-
-msgid "Rock Hopper 7x7"
-msgstr ""
-
-msgid "Rock Hopper Cross 1"
-msgstr ""
-
-msgid "Rock Hopper Cross 2"
-msgstr ""
-
 msgid "Rocket"
 msgstr "Ракета"
 
@@ -3037,6 +3049,9 @@ msgstr "Русский солитер"
 msgid "Russian Spider"
 msgstr "Русский паук"
 
+msgid "S Patience"
+msgstr "S-пасьянс"
+
 msgid "Salic Law"
 msgstr "Салический закон"
 
@@ -3602,6 +3617,9 @@ msgstr "Древо жизни"
 msgid "Trefoil"
 msgstr "Клевер"
 
+msgid "Triangle"
+msgstr "Треугольник"
+
 msgid "Trika"
 msgstr ""
 
@@ -3687,6 +3705,9 @@ msgstr "Объединённый квадрата"
 msgid "Unlimited"
 msgstr "Неограниченный"
 
+msgid "Up and Down"
+msgstr "Вверх и вниз"
+
 msgid "Usk"
 msgstr ""
 
diff --git a/po/ru_pysol.po b/po/ru_pysol.po
index 5df263e2..a3430288 100644
--- a/po/ru_pysol.po
+++ b/po/ru_pysol.po
@@ -5,8 +5,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PySol 0.0.1\n"
-"POT-Creation-Date: Thu Dec  7 15:27:04 2006\n"
-"PO-Revision-Date: 2006-11-30 16:36+0300\n"
+"POT-Creation-Date: Fri Jan 12 13:35:13 2007\n"
+"PO-Revision-Date: 2007-01-12 13:44+0300\n"
 "Last-Translator: Скоморох <skomoroh@gmail.com>\n"
 "Language-Team: Russian <ru@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -14,34 +14,34 @@ msgstr ""
 "Content-Transfer-Encoding: utf-8\n"
 "Generated-By: pygettext.py 1.5\n"
 
-#: pysollib/actions.py:259 pysollib/tile/toolbar.py:236
-#: pysollib/tk/toolbar.py:197
+#: pysollib/actions.py:257 pysollib/tile/toolbar.py:189
+#: pysollib/tk/toolbar.py:192
 msgid "New game"
 msgstr "Новая игра"
 
-#: pysollib/actions.py:272 pysollib/tile/menubar.py:820
-#: pysollib/tile/menubar.py:834 pysollib/tk/menubar.py:815
-#: pysollib/tk/menubar.py:829
+#: pysollib/actions.py:270 pysollib/tile/menubar.py:822
+#: pysollib/tile/menubar.py:836 pysollib/tk/menubar.py:818
+#: pysollib/tk/menubar.py:832
 msgid "Select game"
 msgstr "Выбрать игру"
 
-#: pysollib/actions.py:286
+#: pysollib/actions.py:284
 msgid "Invalid game number"
 msgstr "Неправильный номер игры"
 
-#: pysollib/actions.py:287
+#: pysollib/actions.py:285
 msgid "Invalid game number\n"
 msgstr "Неправильный номер игры\n"
 
-#: pysollib/actions.py:304
+#: pysollib/actions.py:302
 msgid "Select next game number"
 msgstr "Выберите номер следующей игры"
 
-#: pysollib/actions.py:313 pysollib/actions.py:323
+#: pysollib/actions.py:311 pysollib/actions.py:321
 msgid "Select new game number"
 msgstr "Выберите номер новой игры"
 
-#: pysollib/actions.py:314
+#: pysollib/actions.py:312
 msgid ""
 "\n"
 "\n"
@@ -51,23 +51,23 @@ msgstr ""
 "\n"
 "Введите номер новой игры"
 
-#: pysollib/actions.py:315
+#: pysollib/actions.py:313
 msgid "&Next number"
 msgstr "&Следующий номер"
 
-#: pysollib/actions.py:315 pysollib/app.py:881 pysollib/app.py:1164
-#: pysollib/app.py:1176 pysollib/game.py:933 pysollib/game.py:1865
+#: pysollib/actions.py:313 pysollib/app.py:886 pysollib/app.py:1169
+#: pysollib/app.py:1181 pysollib/game.py:950 pysollib/game.py:2048
 #: pysollib/tile/colorsdialog.py:123 pysollib/tile/edittextdialog.py:83
-#: pysollib/tile/fontsdialog.py:145 pysollib/tile/fontsdialog.py:205
-#: pysollib/tile/gameinfodialog.py:155 pysollib/tile/menubar.py:1335
-#: pysollib/tile/playeroptionsdialog.py:111 pysollib/tile/selectcardset.py:388
+#: pysollib/tile/fontsdialog.py:144 pysollib/tile/fontsdialog.py:204
+#: pysollib/tile/gameinfodialog.py:155 pysollib/tile/menubar.py:1334
+#: pysollib/tile/playeroptionsdialog.py:111 pysollib/tile/selectcardset.py:387
 #: pysollib/tile/selecttile.py:161 pysollib/tile/soundoptionsdialog.py:168
 #: pysollib/tile/soundoptionsdialog.py:206 pysollib/tile/timeoutsdialog.py:94
-#: pysollib/tile/tkhtml.py:501 pysollib/tile/tkstats.py:211
-#: pysollib/tile/tkstats.py:381 pysollib/tile/tkstats.py:450
-#: pysollib/tile/tkstats.py:473 pysollib/tile/tkstats.py:516
-#: pysollib/tile/tkstats.py:587 pysollib/tile/tkstats.py:671
-#: pysollib/tile/tkwidget.py:146 pysollib/tile/tkwidget.py:319
+#: pysollib/tile/tkhtml.py:501 pysollib/tile/tkstats.py:214
+#: pysollib/tile/tkstats.py:384 pysollib/tile/tkstats.py:457
+#: pysollib/tile/tkstats.py:480 pysollib/tile/tkstats.py:523
+#: pysollib/tile/tkstats.py:594 pysollib/tile/tkstats.py:678
+#: pysollib/tile/tkwidget.py:154 pysollib/tile/tkwidget.py:329
 #: pysollib/tk/colorsdialog.py:122 pysollib/tk/edittextdialog.py:82
 #: pysollib/tk/fontsdialog.py:143 pysollib/tk/fontsdialog.py:205
 #: pysollib/tk/gameinfodialog.py:155 pysollib/tk/playeroptionsdialog.py:85
@@ -75,26 +75,26 @@ msgstr "&Следующий номер"
 #: pysollib/tk/selectcardset.py:397 pysollib/tk/selecttile.py:159
 #: pysollib/tk/soundoptionsdialog.py:170 pysollib/tk/soundoptionsdialog.py:211
 #: pysollib/tk/timeoutsdialog.py:92 pysollib/tk/tkhtml.py:500
-#: pysollib/tk/tkstats.py:288 pysollib/tk/tkstats.py:512
-#: pysollib/tk/tkstats.py:579 pysollib/tk/tkstats.py:594
-#: pysollib/tk/tkstats.py:636 pysollib/tk/tkstats.py:708
-#: pysollib/tk/tkstats.py:792 pysollib/tk/tkwidget.py:159
+#: pysollib/tk/tkstats.py:288 pysollib/tk/tkstats.py:514
+#: pysollib/tk/tkstats.py:581 pysollib/tk/tkstats.py:596
+#: pysollib/tk/tkstats.py:638 pysollib/tk/tkstats.py:710
+#: pysollib/tk/tkstats.py:794 pysollib/tk/tkwidget.py:160
 #: pysollib/tk/tkwidget.py:324
 msgid "&OK"
 msgstr "&ОК"
 
-#: pysollib/actions.py:315 pysollib/app.py:882 pysollib/app.py:1176
-#: pysollib/game.py:933 pysollib/game.py:1316 pysollib/game.py:1331
-#: pysollib/game.py:1338 pysollib/game.py:1344
+#: pysollib/actions.py:313 pysollib/app.py:887 pysollib/app.py:1181
+#: pysollib/game.py:950 pysollib/game.py:1502 pysollib/game.py:1518
+#: pysollib/game.py:1525 pysollib/game.py:1531
 #: pysollib/tile/colorsdialog.py:123 pysollib/tile/edittextdialog.py:83
-#: pysollib/tile/fontsdialog.py:145 pysollib/tile/fontsdialog.py:205
+#: pysollib/tile/fontsdialog.py:144 pysollib/tile/fontsdialog.py:204
 #: pysollib/tile/playeroptionsdialog.py:111 pysollib/tile/selectcardset.py:237
-#: pysollib/tile/selectgame.py:267 pysollib/tile/selectgame.py:397
+#: pysollib/tile/selectgame.py:267 pysollib/tile/selectgame.py:398
 #: pysollib/tile/selecttile.py:161 pysollib/tile/soundoptionsdialog.py:168
-#: pysollib/tile/timeoutsdialog.py:94 pysollib/tile/tkwidget.py:319
+#: pysollib/tile/timeoutsdialog.py:94 pysollib/tile/tkwidget.py:329
 #: pysollib/tk/colorsdialog.py:122 pysollib/tk/edittextdialog.py:82
 #: pysollib/tk/fontsdialog.py:143 pysollib/tk/fontsdialog.py:205
-#: pysollib/tk/menubar.py:1122 pysollib/tk/menubar.py:1124
+#: pysollib/tk/menubar.py:1133 pysollib/tk/menubar.py:1135
 #: pysollib/tk/playeroptionsdialog.py:85
 #: pysollib/tk/playeroptionsdialog.py:160 pysollib/tk/selectcardset.py:241
 #: pysollib/tk/selectgame.py:266 pysollib/tk/selectgame.py:407
@@ -103,36 +103,36 @@ msgstr "&ОК"
 msgid "&Cancel"
 msgstr "От&мена"
 
-#: pysollib/actions.py:331
+#: pysollib/actions.py:329
 msgid "Select random game"
 msgstr "Выбор случайной игры"
 
-#: pysollib/actions.py:367
+#: pysollib/actions.py:365
 msgid "Select next game"
 msgstr "Выбрать следующую игру"
 
-#: pysollib/actions.py:400 pysollib/tile/toolbar.py:250
-#: pysollib/tk/toolbar.py:211
+#: pysollib/actions.py:398 pysollib/tile/toolbar.py:203
+#: pysollib/tk/toolbar.py:206
 msgid "Quit "
 msgstr "Выйти из "
 
-#: pysollib/actions.py:451
+#: pysollib/actions.py:449
 msgid "Clear bookmarks"
 msgstr "Удалить закладки"
 
-#: pysollib/actions.py:452
+#: pysollib/actions.py:450
 msgid "Clear all bookmarks ?"
 msgstr "Удалить все закладки?"
 
-#: pysollib/actions.py:462
+#: pysollib/actions.py:460
 msgid "Restart game"
 msgstr "Начать игру с начала"
 
-#: pysollib/actions.py:463
+#: pysollib/actions.py:461
 msgid "Restart this game ?"
 msgstr "Начать игру с начала?"
 
-#: pysollib/actions.py:504
+#: pysollib/actions.py:502
 msgid ""
 "Comments for %s:\n"
 "\n"
@@ -140,19 +140,19 @@ msgstr ""
 "Комментарий для %s:\n"
 "\n"
 
-#: pysollib/actions.py:506
+#: pysollib/actions.py:504
 msgid "Comments for "
 msgstr "Комментарий для "
 
-#: pysollib/actions.py:524 pysollib/actions.py:552
+#: pysollib/actions.py:522 pysollib/actions.py:550
 msgid "Error while writing to file"
 msgstr "Ошибка при записи в файл"
 
-#: pysollib/actions.py:527 pysollib/actions.py:555
+#: pysollib/actions.py:525 pysollib/actions.py:553
 msgid " Info"
 msgstr " Информация"
 
-#: pysollib/actions.py:528
+#: pysollib/actions.py:526
 msgid ""
 "Comments were appended to\n"
 "\n"
@@ -160,15 +160,15 @@ msgstr ""
 "Комментарий добавлен в файл\n"
 "\n"
 
-#: pysollib/actions.py:539
+#: pysollib/actions.py:537
 msgid "Demo statistics"
 msgstr "Статистика демо"
 
-#: pysollib/actions.py:542
+#: pysollib/actions.py:540
 msgid "Your statistics"
 msgstr "Ваша статистика"
 
-#: pysollib/actions.py:556
+#: pysollib/actions.py:554
 msgid ""
 " were appended to\n"
 "\n"
@@ -176,45 +176,45 @@ msgstr ""
 " добавлена в файл\n"
 "\n"
 
-#: pysollib/actions.py:571
+#: pysollib/actions.py:569
 msgid " Demo"
 msgstr " Демо"
 
-#: pysollib/actions.py:571
+#: pysollib/actions.py:569
 msgid " Demo "
 msgstr " Демо "
 
-#: pysollib/actions.py:574 pysollib/actions.py:593
+#: pysollib/actions.py:572 pysollib/actions.py:591
 msgid " for "
 msgstr " для "
 
-#: pysollib/actions.py:580 pysollib/stats.py:206
+#: pysollib/actions.py:578 pysollib/stats.py:205
 msgid "Statistics for "
 msgstr "Статистика игры "
 
-#: pysollib/actions.py:583 pysollib/tile/selectgame.py:344
-#: pysollib/tile/toolbar.py:247 pysollib/tk/selectgame.py:350
-#: pysollib/tk/toolbar.py:208
+#: pysollib/actions.py:581 pysollib/tile/selectgame.py:345
+#: pysollib/tile/toolbar.py:200 pysollib/tk/selectgame.py:350
+#: pysollib/tk/toolbar.py:203
 msgid "Statistics"
 msgstr "Статистика"
 
-#: pysollib/actions.py:587 data/glade-translations:31
+#: pysollib/actions.py:585 data/glade-translations:31
 msgid "Full log"
 msgstr "Полный лог"
 
-#: pysollib/actions.py:590 data/glade-translations:32
+#: pysollib/actions.py:588 data/glade-translations:32
 msgid "Session log"
 msgstr "Лог сессии"
 
-#: pysollib/actions.py:596
+#: pysollib/actions.py:594
 msgid "Game Info"
 msgstr "Информация об игре"
 
-#: pysollib/actions.py:612
+#: pysollib/actions.py:610
 msgid "Reset all statistics"
 msgstr "Очистить всю статистику"
 
-#: pysollib/actions.py:613
+#: pysollib/actions.py:611
 msgid ""
 "Reset ALL statistics and logs for player\n"
 "%s ?"
@@ -222,11 +222,11 @@ msgstr ""
 "Очистить всю статистику и лог для игрока\n"
 "%s?"
 
-#: pysollib/actions.py:619
+#: pysollib/actions.py:617
 msgid "Reset game statistics"
 msgstr "Очистить статистику игры"
 
-#: pysollib/actions.py:620
+#: pysollib/actions.py:618
 msgid ""
 "Reset statistics and logs for player\n"
 "%s\n"
@@ -238,23 +238,23 @@ msgstr ""
 "и игры\n"
 "%s?"
 
-#: pysollib/actions.py:676
+#: pysollib/actions.py:674
 msgid "Play demo"
 msgstr "Показать демо"
 
-#: pysollib/actions.py:687
+#: pysollib/actions.py:685
 msgid "Set player options"
 msgstr "Установить настройки игрока"
 
-#: pysollib/actions.py:701 data/glade-translations:40
+#: pysollib/actions.py:699 data/glade-translations:40
 msgid "Set colors"
 msgstr "Настроить цвета"
 
-#: pysollib/actions.py:721
+#: pysollib/actions.py:719
 msgid "Set fonts"
 msgstr "Настроить шрифт"
 
-#: pysollib/actions.py:730 data/glade-translations:33
+#: pysollib/actions.py:728 data/glade-translations:33
 msgid "Set timeouts"
 msgstr "Настроить таймауты"
 
@@ -262,29 +262,29 @@ msgstr "Настроить таймауты"
 msgid "Unknown"
 msgstr "Неизвестный"
 
-#: pysollib/app.py:883 pysollib/game.py:1316 pysollib/game.py:1331
-#: pysollib/game.py:1338 pysollib/game.py:1344 pysollib/tile/menubar.py:366
-#: pysollib/tk/menubar.py:363
+#: pysollib/app.py:888 pysollib/game.py:1502 pysollib/game.py:1518
+#: pysollib/game.py:1525 pysollib/game.py:1531 pysollib/tile/menubar.py:361
+#: pysollib/tk/menubar.py:358
 msgid "&New game"
 msgstr "&Новая игра"
 
-#: pysollib/app.py:1026
+#: pysollib/app.py:1031
 msgid "Loading %s %s..."
 msgstr "Загружается %s %s..."
 
-#: pysollib/app.py:1061
+#: pysollib/app.py:1066
 msgid " load error"
 msgstr " ошибка при загрузке"
 
-#: pysollib/app.py:1062
+#: pysollib/app.py:1067
 msgid "Error while loading "
 msgstr "Ошибка при загрузке"
 
-#: pysollib/app.py:1156
+#: pysollib/app.py:1161
 msgid "Incompatible "
 msgstr "Несовместимый "
 
-#: pysollib/app.py:1158
+#: pysollib/app.py:1163
 msgid ""
 "The currently selected %s %s\n"
 "is not compatible with the game\n"
@@ -298,19 +298,19 @@ msgstr ""
 "\n"
 "Необходимо выбрать %s типа %s.\n"
 
-#: pysollib/app.py:1174
+#: pysollib/app.py:1179
 msgid "Please select a %s type %s"
 msgstr "Выберите %s типа %s"
 
-#: pysollib/game.py:852 pysollib/game.py:858
+#: pysollib/game.py:869 pysollib/game.py:875
 msgid "Player\n"
 msgstr "Игрок\n"
 
-#: pysollib/game.py:929
+#: pysollib/game.py:946
 msgid "Discard current game ?"
 msgstr "Завершить текущую игру?"
 
-#: pysollib/game.py:1270
+#: pysollib/game.py:1455
 msgid ""
 "\n"
 "You have reached\n"
@@ -320,7 +320,7 @@ msgstr ""
 "Вы достигли\n"
 "#%d в %s игрового времени"
 
-#: pysollib/game.py:1275
+#: pysollib/game.py:1460
 msgid ""
 "\n"
 "and #%d in the %s of moves"
@@ -328,7 +328,7 @@ msgstr ""
 "\n"
 "и #%d в %s количества ходов"
 
-#: pysollib/game.py:1278
+#: pysollib/game.py:1463
 msgid ""
 "\n"
 "You have reached\n"
@@ -338,13 +338,13 @@ msgstr ""
 "Вы достигли\n"
 "#%d в %s количества ходов"
 
-#: pysollib/game.py:1307 pysollib/game.py:1323
+#: pysollib/game.py:1493 pysollib/game.py:1510
 #: pysollib/tile/soundoptionsdialog.py:102
 #: pysollib/tk/soundoptionsdialog.py:100
 msgid "Game won"
 msgstr "Игра выиграна"
 
-#: pysollib/game.py:1308
+#: pysollib/game.py:1494
 msgid ""
 "\n"
 "Congratulations, this\n"
@@ -363,7 +363,7 @@ msgstr ""
 "Количество ходов: %s\n"
 "%s\n"
 
-#: pysollib/game.py:1324
+#: pysollib/game.py:1511
 msgid ""
 "\n"
 "Congratulations, you did it !\n"
@@ -380,13 +380,13 @@ msgstr ""
 "Количество ходов: %s\n"
 "%s\n"
 
-#: pysollib/game.py:1336 pysollib/game.py:1342
+#: pysollib/game.py:1523 pysollib/game.py:1529
 #: pysollib/tile/soundoptionsdialog.py:100
 #: pysollib/tk/soundoptionsdialog.py:98
 msgid "Game finished"
 msgstr "Игра закончена"
 
-#: pysollib/game.py:1337 pysollib/game.py:1866
+#: pysollib/game.py:1524 pysollib/game.py:2049
 msgid ""
 "\n"
 "Game finished\n"
@@ -394,7 +394,7 @@ msgstr ""
 "\n"
 "Игра закончена\n"
 
-#: pysollib/game.py:1343
+#: pysollib/game.py:1530
 msgid ""
 "\n"
 "Game finished, but not without my help...\n"
@@ -402,35 +402,35 @@ msgstr ""
 "\n"
 "Игра закончена, но не без моей помощи...\n"
 
-#: pysollib/game.py:1344
+#: pysollib/game.py:1531
 msgid "&Restart"
 msgstr "&Начало"
 
-#: pysollib/game.py:1758
+#: pysollib/game.py:1941
 msgid "Score %6d"
 msgstr "Счёт %6d"
 
-#: pysollib/game.py:1857
+#: pysollib/game.py:2040
 msgid "&Cool"
 msgstr "&Отлично"
 
-#: pysollib/game.py:1857
+#: pysollib/game.py:2040
 msgid "&Great"
 msgstr "&Здорово"
 
-#: pysollib/game.py:1857
+#: pysollib/game.py:2040
 msgid "&Wow"
 msgstr "&Ура"
 
-#: pysollib/game.py:1857
+#: pysollib/game.py:2040
 msgid "&Yeah"
 msgstr "&Ага"
 
-#: pysollib/game.py:1858 pysollib/game.py:1869 pysollib/game.py:1881
+#: pysollib/game.py:2041 pysollib/game.py:2052 pysollib/game.py:2064
 msgid " Autopilot"
 msgstr " Автопилот"
 
-#: pysollib/game.py:1859
+#: pysollib/game.py:2042
 msgid ""
 "\n"
 "Game solved in %d moves.\n"
@@ -438,19 +438,19 @@ msgstr ""
 "\n"
 "Игра решена за %d ходов\n"
 
-#: pysollib/game.py:1880
+#: pysollib/game.py:2063
 msgid "&Hmm"
 msgstr "&Хмм"
 
-#: pysollib/game.py:1880
+#: pysollib/game.py:2063
 msgid "&Oh well"
 msgstr "&Ох"
 
-#: pysollib/game.py:1880
+#: pysollib/game.py:2063
 msgid "&That's life"
 msgstr "&Такова жизнь"
 
-#: pysollib/game.py:1882
+#: pysollib/game.py:2065
 msgid ""
 "\n"
 "This won't come out...\n"
@@ -458,31 +458,31 @@ msgstr ""
 "\n"
 "Не удалось...\n"
 
-#: pysollib/game.py:2291
+#: pysollib/game.py:2474
 msgid "Set bookmark"
 msgstr "Установить закладку"
 
-#: pysollib/game.py:2292
+#: pysollib/game.py:2475
 msgid "Replace existing bookmark %d ?"
 msgstr "Заменить существующую закладку %d ?"
 
-#: pysollib/game.py:2314
+#: pysollib/game.py:2497
 msgid "Goto bookmark"
 msgstr "Перейти к закладке"
 
-#: pysollib/game.py:2315
+#: pysollib/game.py:2498
 msgid "Goto bookmark %d ?"
 msgstr "Перейти к закладке %d ?"
 
-#: pysollib/game.py:2346
+#: pysollib/game.py:2529
 msgid "Open game"
 msgstr "Открыть игру"
 
-#: pysollib/game.py:2357 pysollib/game.py:2366 pysollib/game.py:2371
+#: pysollib/game.py:2540 pysollib/game.py:2549 pysollib/game.py:2554
 msgid "Load game error"
 msgstr "Ошибка при загрузке игры"
 
-#: pysollib/game.py:2358
+#: pysollib/game.py:2541
 msgid ""
 "Error while loading game.\n"
 "\n"
@@ -494,11 +494,11 @@ msgstr ""
 "Возможно повреждён файл,\n"
 "или ошибка в программе."
 
-#: pysollib/game.py:2367
+#: pysollib/game.py:2550
 msgid "Error while loading game"
 msgstr "Ошибка при загрузке игры"
 
-#: pysollib/game.py:2372
+#: pysollib/game.py:2555
 msgid ""
 "Internal error while loading game.\n"
 "\n"
@@ -508,11 +508,11 @@ msgstr ""
 "\n"
 "Пожалуйста сообщите об этой ошибке."
 
-#: pysollib/game.py:2397
+#: pysollib/game.py:2580
 msgid "Save game error"
 msgstr "Ошибка при сохранении игры"
 
-#: pysollib/game.py:2398
+#: pysollib/game.py:2581
 msgid "Error while saving game"
 msgstr "Ошибка при сохранении игры"
 
@@ -725,25 +725,25 @@ msgid "Puzzle type"
 msgstr "Пазлы"
 
 #: pysollib/games/auldlangsyne.py:158 pysollib/games/calculation.py:104
-#: pysollib/games/numerica.py:94 pysollib/games/numerica.py:276
-#: pysollib/games/numerica.py:666 pysollib/games/numerica.py:779
+#: pysollib/games/camelot.py:588 pysollib/games/numerica.py:94
+#: pysollib/games/numerica.py:276 pysollib/games/numerica.py:666
+#: pysollib/games/numerica.py:779
 msgid "Tableau. Build regardless of rank and suit."
 msgstr "Игровой стол. Складывать не считаясь с мастью и достоинством."
 
 #: pysollib/games/auldlangsyne.py:555
-#, fuzzy
 msgid "Foundation. Build up or down regardless of suit."
-msgstr "Базовая ячейка. Складывать не считаясь с мастью."
+msgstr "Базовая ячейка. Складывать по возрастанию или убыванию не считаясь с мастью."
 
 #: pysollib/games/braid.py:248 pysollib/games/camelot.py:555
-#: pysollib/games/napoleon.py:182 pysollib/games/ultra/dashavatara.py:959
+#: pysollib/games/napoleon.py:183 pysollib/games/ultra/dashavatara.py:959
 #: pysollib/games/ultra/hanafuda1.py:257 pysollib/games/ultra/hexadeck.py:1190
 #: pysollib/games/ultra/mughal.py:802
 msgid " Ascending"
 msgstr " вверх"
 
 #: pysollib/games/braid.py:250 pysollib/games/camelot.py:554
-#: pysollib/games/napoleon.py:184 pysollib/games/ultra/dashavatara.py:961
+#: pysollib/games/napoleon.py:185 pysollib/games/ultra/dashavatara.py:961
 #: pysollib/games/ultra/hanafuda1.py:259 pysollib/games/ultra/hexadeck.py:1192
 #: pysollib/games/ultra/mughal.py:804
 msgid " Descending"
@@ -762,12 +762,12 @@ msgstr ""
 "4:  8  Д  3  7  В  2  6 10  Т  5  9  К"
 
 #: pysollib/games/canfield.py:528 pysollib/games/special/tarock.py:224
-#: pysollib/stack.py:1410 pysollib/util.py:80
+#: pysollib/stack.py:1389 pysollib/util.py:86
 msgid "King"
 msgstr "Король"
 
 #: pysollib/games/canfield.py:531 pysollib/games/special/tarock.py:224
-#: pysollib/stack.py:1409 pysollib/util.py:80
+#: pysollib/stack.py:1388 pysollib/util.py:86
 msgid "Queen"
 msgstr "Королева"
 
@@ -785,11 +785,12 @@ msgid "X"
 msgstr "Х"
 
 #: pysollib/games/golf.py:114 pysollib/games/golf.py:300
-#: pysollib/stack.py:2075
+#: pysollib/stack.py:2054
 msgid "Tableau. No building."
 msgstr "Игровой стол. Без выкладывания."
 
-#: pysollib/games/golf.py:385 pysollib/stack.py:2008
+#: pysollib/games/golf.py:385 pysollib/games/pileon.py:257
+#: pysollib/stack.py:1987
 msgid "Foundation. Build up regardless of suit."
 msgstr "Базовая ячейка. Складывать по возрастанию не считаясь с мастью."
 
@@ -797,7 +798,7 @@ msgstr "Базовая ячейка. Складывать по возраста
 msgid "Balance $%d"
 msgstr "Баланс $%d"
 
-#: pysollib/games/klondike.py:169 pysollib/stack.py:2116
+#: pysollib/games/klondike.py:169 pysollib/stack.py:2095
 msgid "Tableau. Build down by color."
 msgstr "Игровой стол. Складывать по убыванию в соответствии с цветом."
 
@@ -805,11 +806,11 @@ msgstr "Игровой стол. Складывать по убыванию в 
 msgid "Reserve. Only Kings are acceptable."
 msgstr "Резерв. Только для королей."
 
-#: pysollib/games/larasgame.py:163 pysollib/stack.py:1626
+#: pysollib/games/larasgame.py:163 pysollib/stack.py:1605
 msgid "Round %d"
 msgstr "Раунд %d"
 
-#: pysollib/games/mahjongg/mahjongg.py:305
+#: pysollib/games/mahjongg/mahjongg.py:308
 msgid ""
 "No Free\n"
 "Matching\n"
@@ -819,7 +820,7 @@ msgstr ""
 "свободных\n"
 "пар"
 
-#: pysollib/games/mahjongg/mahjongg.py:306
+#: pysollib/games/mahjongg/mahjongg.py:309
 msgid ""
 "1 Free\n"
 "Matching\n"
@@ -829,7 +830,7 @@ msgstr ""
 "свободная\n"
 "пара"
 
-#: pysollib/games/mahjongg/mahjongg.py:307
+#: pysollib/games/mahjongg/mahjongg.py:310
 msgid ""
 " Free\n"
 "Matching\n"
@@ -839,7 +840,7 @@ msgstr ""
 "свободных\n"
 "пар"
 
-#: pysollib/games/mahjongg/mahjongg.py:308
+#: pysollib/games/mahjongg/mahjongg.py:311
 msgid ""
 "\n"
 "Tiles\n"
@@ -850,7 +851,7 @@ msgstr ""
 "удалено\n"
 "\n"
 
-#: pysollib/games/mahjongg/mahjongg.py:309
+#: pysollib/games/mahjongg/mahjongg.py:312
 msgid ""
 "\n"
 "Tiles\n"
@@ -934,7 +935,7 @@ msgstr "Жезлы"
 #: pysollib/games/special/tarock.py:223
 #: pysollib/games/ultra/dashavatara.py:351
 #: pysollib/games/ultra/hexadeck.py:273 pysollib/games/ultra/mughal.py:254
-#: pysollib/stack.py:1411 pysollib/util.py:79
+#: pysollib/stack.py:1390 pysollib/util.py:85
 msgid "Ace"
 msgstr "Туз"
 
@@ -946,7 +947,7 @@ msgstr "Паж"
 msgid "Valet"
 msgstr "Валет"
 
-#: pysollib/games/spider.py:1128
+#: pysollib/games/spider.py:1131
 msgid ""
 "Tableau. Build down regardless of suit. Sequences of cards in the same color "
 "can be moved as a unit."
@@ -1257,27 +1258,27 @@ msgstr ""
 "Игровой стол. Складывать по убыванию не считаясь с мастью, можно перемещать "
 "любую серию открытых карт."
 
-#: pysollib/help.py:63
+#: pysollib/help.py:60
 msgid "A Python Solitaire Game Collection\n"
 msgstr "Коллекция питоновских пасьянсов\n"
 
-#: pysollib/help.py:65
+#: pysollib/help.py:62
 msgid "A World Domination Project\n"
 msgstr "Всемирный непревзойдённый проект\n"
 
-#: pysollib/help.py:66
+#: pysollib/help.py:63
 msgid "&Credits..."
 msgstr "&Благодарности..."
 
-#: pysollib/help.py:66
+#: pysollib/help.py:63
 msgid "&Nice"
 msgstr "&Отлично"
 
-#: pysollib/help.py:68
+#: pysollib/help.py:65
 msgid "&Enjoy"
 msgstr "&Наслаждайтесь"
 
-#: pysollib/help.py:70
+#: pysollib/help.py:67
 msgid ""
 "Version %s\n"
 "\n"
@@ -1285,11 +1286,11 @@ msgstr ""
 "Версия %s\n"
 "\n"
 
-#: pysollib/help.py:71
+#: pysollib/help.py:68
 msgid "About "
 msgstr "О программе "
 
-#: pysollib/help.py:72
+#: pysollib/help.py:69
 msgid ""
 "PySol Fan Club edition\n"
 "%s%s\n"
@@ -1320,11 +1321,11 @@ msgstr ""
 "об этом приложении посетите сайт\n"
 "%s"
 
-#: pysollib/help.py:101
+#: pysollib/help.py:98
 msgid "Credits"
 msgstr "Благодарности"
 
-#: pysollib/help.py:102
+#: pysollib/help.py:99
 msgid ""
 " credits go to:\n"
 "\n"
@@ -1339,23 +1340,23 @@ msgid ""
 "for making this program possible"
 msgstr ""
 
-#: pysollib/help.py:137
+#: pysollib/help.py:134
 msgid " HTML Problem"
 msgstr " проблема с HTML"
 
-#: pysollib/help.py:138
+#: pysollib/help.py:135
 msgid "Cannot find help document\n"
 msgstr "Не найден файл помощи\n"
 
-#: pysollib/help.py:151
+#: pysollib/help.py:148
 msgid " Help"
 msgstr " Помощь"
 
-#: pysollib/main.py:66 pysollib/main.py:269
+#: pysollib/main.py:64 pysollib/main.py:249
 msgid "%s installation error"
 msgstr "%s проблема с установкой"
 
-#: pysollib/main.py:67
+#: pysollib/main.py:65
 msgid ""
 "No cardsets were found !!!\n"
 "\n"
@@ -1371,12 +1372,12 @@ msgstr ""
 "\n"
 "Пожалуйста проверьте установку %s.\n"
 
-#: pysollib/main.py:74 pysollib/main.py:277 pysollib/tile/menubar.py:385
-#: pysollib/tk/menubar.py:382
+#: pysollib/main.py:72 pysollib/main.py:257 pysollib/tile/menubar.py:381
+#: pysollib/tk/menubar.py:378
 msgid "&Quit"
 msgstr "В&ыход"
 
-#: pysollib/main.py:96
+#: pysollib/main.py:90
 msgid ""
 "%s: %s\n"
 "try %s --help for more information"
@@ -1384,15 +1385,12 @@ msgstr ""
 "%s: %s\n"
 "попробуйте %s --help для получения более подробной информации"
 
-#: pysollib/main.py:134
+#: pysollib/main.py:119
 msgid ""
 "Usage: %s [OPTIONS] [FILE]\n"
 "  -g    --game=GAMENAME        start game GAMENAME\n"
 "  -i    --gameid=GAMEID\n"
 "        --french-only\n"
-"  --fg  --foreground=COLOR     foreground color\n"
-"  --bg  --background=COLOR     background color\n"
-"  --fn  --font=FONT            default font\n"
 "        --sound-mod=MOD\n"
 "        --nosound              disable sound support\n"
 "        --noplugins            disable load plugins\n"
@@ -1405,9 +1403,6 @@ msgstr ""
 "  -g    --game=GAMENAME        начинать с игры GAMENAME\n"
 "  -i    --gameid=GAMEID\n"
 "        --french-only\n"
-"  --fg  --foreground=COLOR     цвет текста\n"
-"  --bg  --background=COLOR     цвет фона\n"
-"  --fn  --font=FONT            шрифт по умолчанию\n"
 "        --sound-mod=MOD\n"
 "        --nosound              отключить звук\n"
 "        --noplugins            отключить загрузку плагинов\n"
@@ -1416,7 +1411,7 @@ msgstr ""
 "  FILE - имя файла сохранённой игры\n"
 "  MOD - одно из следующих значений: pss(default), pygame, oss, win\n"
 
-#: pysollib/main.py:152
+#: pysollib/main.py:134
 msgid ""
 "%s: too many files\n"
 "try %s --help for more information"
@@ -1424,7 +1419,7 @@ msgstr ""
 "\"%s: слишком много файлов\n"
 "попробуйте %s --help для получения более подробной информации"
 
-#: pysollib/main.py:156
+#: pysollib/main.py:138
 msgid ""
 "%s: invalid file name\n"
 "try %s --help for more information"
@@ -1432,7 +1427,7 @@ msgstr ""
 "%s: неправильное имя файла\n"
 "попробуйте %s --help для получения более подробной информации"
 
-#: pysollib/main.py:270
+#: pysollib/main.py:250
 msgid ""
 "\n"
 "No games were found !!!\n"
@@ -1450,413 +1445,413 @@ msgstr ""
 "\n"
 "Пожалуйста проверьте установку %s.\n"
 
-#: pysollib/main.py:339
+#: pysollib/main.py:319
 msgid "Welcome to %s"
 msgstr "Добро пожаловать в %s"
 
-#: pysollib/resource.py:193
+#: pysollib/resource.py:192
 msgid "French type (52 cards)"
 msgstr "Классические (52 карты)"
 
-#: pysollib/resource.py:194
+#: pysollib/resource.py:193
 msgid "Hanafuda type (48 cards)"
 msgstr "Ханафуда (48 карт)"
 
-#: pysollib/resource.py:195
+#: pysollib/resource.py:194
 msgid "Tarock type (78 cards)"
 msgstr "Таро (78 карт)"
 
-#: pysollib/resource.py:196
+#: pysollib/resource.py:195
 msgid "Mahjongg type (42 tiles)"
 msgstr "Маджонг (42 фишки)"
 
-#: pysollib/resource.py:197
+#: pysollib/resource.py:196
 msgid "Hex A Deck type (68 cards)"
 msgstr "Hex A Deck (68 карт)"
 
-#: pysollib/resource.py:198
+#: pysollib/resource.py:197
 msgid "Mughal Ganjifa type (96 cards)"
 msgstr "Мугал Ганджифа (96 карт)"
 
-#: pysollib/resource.py:199
+#: pysollib/resource.py:198
 msgid "Navagraha Ganjifa type (108 cards)"
 msgstr "Наваграха Ганджифа (108 карт)"
 
-#: pysollib/resource.py:200
+#: pysollib/resource.py:199
 msgid "Dashavatara Ganjifa type (120 cards)"
 msgstr "Дашаватара Ганджифа (120 карт)"
 
-#: pysollib/resource.py:201
+#: pysollib/resource.py:200
 msgid "Trumps only type (variable cards)"
 msgstr "Без мастей (переменное количество карт)"
 
-#: pysollib/resource.py:205
+#: pysollib/resource.py:204
 msgid "French"
 msgstr "Классические"
 
-#: pysollib/resource.py:206 pysollib/resource.py:230
+#: pysollib/resource.py:205 pysollib/resource.py:229
 msgid "Hanafuda"
 msgstr "Ханафуда"
 
-#: pysollib/resource.py:207 pysollib/resource.py:246
+#: pysollib/resource.py:206 pysollib/resource.py:245
 msgid "Tarock"
 msgstr "Таро"
 
-#: pysollib/resource.py:208 pysollib/resource.py:233
+#: pysollib/resource.py:207 pysollib/resource.py:232
 msgid "Mahjongg"
 msgstr "Маджонг"
 
-#: pysollib/resource.py:209 pysollib/resource.py:231
+#: pysollib/resource.py:208 pysollib/resource.py:230
 msgid "Hex A Deck"
 msgstr "Hex A Deck"
 
-#: pysollib/resource.py:210
+#: pysollib/resource.py:209
 msgid "Mughal Ganjifa"
 msgstr "Мугал Ганджифа"
 
-#: pysollib/resource.py:211
+#: pysollib/resource.py:210
 msgid "Navagraha Ganjifa"
 msgstr "Наваграха Ганджифа"
 
-#: pysollib/resource.py:212
+#: pysollib/resource.py:211
 msgid "Dashavatara Ganjifa"
 msgstr "Дашаватара Ганджифа"
 
-#: pysollib/resource.py:213
+#: pysollib/resource.py:212
 msgid "Trumps only"
 msgstr "Без мастей"
 
-#: pysollib/resource.py:218
+#: pysollib/resource.py:217
 msgid "Adult"
 msgstr "Для взрослых"
 
-#: pysollib/resource.py:219
+#: pysollib/resource.py:218
 msgid "Animals"
 msgstr "Животные"
 
-#: pysollib/resource.py:220
+#: pysollib/resource.py:219
 msgid "Anime"
 msgstr "Мультфильмы"
 
-#: pysollib/resource.py:221
+#: pysollib/resource.py:220
 msgid "Art"
 msgstr "Искусство"
 
-#: pysollib/resource.py:222
+#: pysollib/resource.py:221
 msgid "Cartoons"
 msgstr "Комиксы"
 
-#: pysollib/resource.py:223
+#: pysollib/resource.py:222
 msgid "Children"
 msgstr "Дети"
 
-#: pysollib/resource.py:224
+#: pysollib/resource.py:223
 msgid "Classic look"
 msgstr "Классический вид"
 
-#: pysollib/resource.py:225
+#: pysollib/resource.py:224
 msgid "Collectors"
 msgstr "Коллекционные"
 
-#: pysollib/resource.py:226
+#: pysollib/resource.py:225
 msgid "Computers"
 msgstr "Компьютеры"
 
-#: pysollib/resource.py:227
+#: pysollib/resource.py:226
 msgid "Engines"
 msgstr "Машины"
 
-#: pysollib/resource.py:228
+#: pysollib/resource.py:227
 msgid "Fantasy"
 msgstr "Фентези"
 
-#: pysollib/resource.py:229
+#: pysollib/resource.py:228
 msgid "Ganjifa"
 msgstr "Ганджифа"
 
-#: pysollib/resource.py:232
+#: pysollib/resource.py:231
 msgid "Holiday"
 msgstr "Праздники"
 
-#: pysollib/resource.py:234
+#: pysollib/resource.py:233
 msgid "Movies"
 msgstr "Фильмы"
 
-#: pysollib/resource.py:235
+#: pysollib/resource.py:234
 msgid "Matrix"
 msgstr "Мозаика"
 
-#: pysollib/resource.py:236
+#: pysollib/resource.py:235
 msgid "Music"
 msgstr "Музыка"
 
-#: pysollib/resource.py:237
+#: pysollib/resource.py:236
 msgid "Nature"
 msgstr "Природа"
 
-#: pysollib/resource.py:238
+#: pysollib/resource.py:237
 msgid "Operating Systems"
 msgstr "Операционные системы"
 
-#: pysollib/resource.py:239
+#: pysollib/resource.py:238
 msgid "People"
 msgstr "Люди"
 
-#: pysollib/resource.py:240
+#: pysollib/resource.py:239
 msgid "Places"
 msgstr "Дома"
 
-#: pysollib/resource.py:241
+#: pysollib/resource.py:240
 msgid "Plain"
 msgstr "Простые"
 
-#: pysollib/resource.py:242
+#: pysollib/resource.py:241
 msgid "Products"
 msgstr "Продукты"
 
-#: pysollib/resource.py:243
+#: pysollib/resource.py:242
 msgid "Round cardsets"
 msgstr "Закруглённые"
 
-#: pysollib/resource.py:244
+#: pysollib/resource.py:243
 msgid "Science Fiction"
 msgstr "Научная фантастика"
 
-#: pysollib/resource.py:245
+#: pysollib/resource.py:244
 msgid "Sports"
 msgstr "Спорт"
 
-#: pysollib/resource.py:247
+#: pysollib/resource.py:246
 msgid "Vehicels"
 msgstr "Транспортные средства"
 
-#: pysollib/resource.py:248
+#: pysollib/resource.py:247
 msgid "Video Games"
 msgstr "Видеоигры"
 
-#: pysollib/resource.py:253
+#: pysollib/resource.py:252
 msgid "Australia"
 msgstr "Австралия"
 
-#: pysollib/resource.py:254
+#: pysollib/resource.py:253
 msgid "Austria"
 msgstr "Австрия"
 
-#: pysollib/resource.py:255
+#: pysollib/resource.py:254
 msgid "Belgium"
 msgstr "Бельгия"
 
-#: pysollib/resource.py:256
+#: pysollib/resource.py:255
 msgid "Canada"
 msgstr "Канада"
 
-#: pysollib/resource.py:257
+#: pysollib/resource.py:256
 msgid "China"
 msgstr "Китай"
 
-#: pysollib/resource.py:258
+#: pysollib/resource.py:257
 msgid "Czech Republic"
 msgstr "Чехия"
 
-#: pysollib/resource.py:259
+#: pysollib/resource.py:258
 msgid "Denmark"
 msgstr "Дания"
 
-#: pysollib/resource.py:260
+#: pysollib/resource.py:259
 msgid "England"
 msgstr "Англия"
 
-#: pysollib/resource.py:261
+#: pysollib/resource.py:260
 msgid "France"
 msgstr "Франция"
 
-#: pysollib/resource.py:262
+#: pysollib/resource.py:261
 msgid "Germany"
 msgstr "Германия"
 
-#: pysollib/resource.py:263
+#: pysollib/resource.py:262
 msgid "Great Britain"
 msgstr "Великобритания"
 
-#: pysollib/resource.py:264
+#: pysollib/resource.py:263
 msgid "Hungary"
 msgstr "Венгрия"
 
-#: pysollib/resource.py:265
+#: pysollib/resource.py:264
 msgid "India"
 msgstr "Индия"
 
-#: pysollib/resource.py:266
+#: pysollib/resource.py:265
 msgid "Italy"
 msgstr "Италия"
 
-#: pysollib/resource.py:267
+#: pysollib/resource.py:266
 msgid "Japan"
 msgstr "Япония"
 
-#: pysollib/resource.py:268
+#: pysollib/resource.py:267
 msgid "Netherlands"
 msgstr "Голландия"
 
-#: pysollib/resource.py:269
+#: pysollib/resource.py:268
 msgid "Russia"
 msgstr "Россия"
 
-#: pysollib/resource.py:270
+#: pysollib/resource.py:269
 msgid "Spain"
 msgstr "Испания"
 
-#: pysollib/resource.py:271
+#: pysollib/resource.py:270
 msgid "Sweden"
 msgstr "Швеция"
 
-#: pysollib/resource.py:272
+#: pysollib/resource.py:271
 msgid "Switzerland"
 msgstr "Швейцария"
 
-#: pysollib/resource.py:273
+#: pysollib/resource.py:272
 msgid "USA"
 msgstr "США"
 
-#: pysollib/settings.py:64 data/glade-translations:29
+#: pysollib/settings.py:67 data/glade-translations:29
 msgid "Top 10"
 msgstr "Top 10"
 
-#: pysollib/stack.py:1405
+#: pysollib/stack.py:1384
 msgid "Base card - %s."
 msgstr "Базовая карта - %s."
 
-#: pysollib/stack.py:1406
+#: pysollib/stack.py:1385
 msgid "Empty row cannot be filled."
 msgstr "Пустой ряд не заполняется."
 
-#: pysollib/stack.py:1407
+#: pysollib/stack.py:1386
 msgid "any card"
 msgstr "любая карта"
 
-#: pysollib/stack.py:1408 pysollib/util.py:80
+#: pysollib/stack.py:1387 pysollib/util.py:86
 msgid "Jack"
 msgstr "Валет"
 
-#: pysollib/stack.py:1421
+#: pysollib/stack.py:1400
 msgid "No cards"
 msgstr "Нет карт"
 
-#: pysollib/stack.py:1422
+#: pysollib/stack.py:1401
 msgid "1 card"
 msgstr "1 карта"
 
-#: pysollib/stack.py:1423
+#: pysollib/stack.py:1402
 msgid " cards"
 msgstr " карт"
 
-#: pysollib/stack.py:1635 pysollib/stack.py:1637 pysollib/stack.py:1673
+#: pysollib/stack.py:1614 pysollib/stack.py:1616 pysollib/stack.py:1652
 msgid "Redeal"
 msgstr "Сдать"
 
-#: pysollib/stack.py:1637
+#: pysollib/stack.py:1616
 msgid "Stop"
 msgstr "Стоп"
 
-#: pysollib/stack.py:1698
+#: pysollib/stack.py:1677
 msgid "Variable redeals."
 msgstr "Переменное количество пересдач."
 
-#: pysollib/stack.py:1699
+#: pysollib/stack.py:1678
 msgid "Unlimited redeals."
 msgstr "Неограниченное количество пересдач."
 
-#: pysollib/stack.py:1700
+#: pysollib/stack.py:1679
 msgid "No redeals."
 msgstr "Без пересдачи."
 
-#: pysollib/stack.py:1701
+#: pysollib/stack.py:1680
 msgid "One redeal."
 msgstr "1 пересдача."
 
-#: pysollib/stack.py:1702
+#: pysollib/stack.py:1681
 msgid " redeals."
 msgstr " пересдачи."
 
-#: pysollib/stack.py:1704
+#: pysollib/stack.py:1683
 msgid "Talon."
 msgstr "Колода."
 
-#: pysollib/stack.py:1938 pysollib/stack.py:2389
+#: pysollib/stack.py:1917 pysollib/stack.py:2368
 msgid "Reserve. No building."
 msgstr "Резерв. Без выкладывания."
 
-#: pysollib/stack.py:1976
+#: pysollib/stack.py:1955
 msgid "Foundation."
 msgstr "Базовая ячейка"
 
-#: pysollib/stack.py:1992
+#: pysollib/stack.py:1971
 msgid "Foundation. Build up by suit."
 msgstr "Базовая ячейка. Складывать по возрастанию в соответствии с мастью."
 
-#: pysollib/stack.py:1993
+#: pysollib/stack.py:1972
 msgid "Foundation. Build down by suit."
 msgstr "Базовая ячейка. Складывать по убыванию в соответствии с мастью."
 
-#: pysollib/stack.py:1994 pysollib/stack.py:2010 pysollib/stack.py:2032
+#: pysollib/stack.py:1973 pysollib/stack.py:1989 pysollib/stack.py:2011
 msgid "Foundation. Build by same rank."
 msgstr "Базовая ячейка. Складывать в соответствии с достоинством."
 
-#: pysollib/stack.py:2009
+#: pysollib/stack.py:1988
 msgid "Foundation. Build down regardless of suit."
 msgstr "Базовая ячейка. Складывать не считаясь с мастью."
 
-#: pysollib/stack.py:2030
+#: pysollib/stack.py:2009
 msgid "Foundation. Build up by alternate color."
 msgstr "Базовая ячейка. Складывать по возрастанию чередуя цвет."
 
-#: pysollib/stack.py:2031
+#: pysollib/stack.py:2010
 msgid "Foundation. Build down by alternate color."
 msgstr "Базовая ячейка. Складывать по убыванию чередуя цвет."
 
-#: pysollib/stack.py:2105
+#: pysollib/stack.py:2084
 msgid "Tableau. Build up by alternate color."
 msgstr "Игровой стол. Складывать по возрастанию чередуя цвет."
 
-#: pysollib/stack.py:2106
+#: pysollib/stack.py:2085
 msgid "Tableau. Build down by alternate color."
 msgstr "Игровой стол. Складывать по убыванию чередуя цвет."
 
-#: pysollib/stack.py:2107 pysollib/stack.py:2117 pysollib/stack.py:2126
-#: pysollib/stack.py:2135 pysollib/stack.py:2145 pysollib/stack.py:2168
-#: pysollib/stack.py:2178
+#: pysollib/stack.py:2086 pysollib/stack.py:2096 pysollib/stack.py:2105
+#: pysollib/stack.py:2114 pysollib/stack.py:2124 pysollib/stack.py:2147
+#: pysollib/stack.py:2157
 msgid "Tableau. Build by same rank."
 msgstr "Игровой стол. Складывать в соответствии с достоинством."
 
-#: pysollib/stack.py:2115
+#: pysollib/stack.py:2094
 msgid "Tableau. Build up by color."
 msgstr "Игровой стол. Складывать по возрастанию в соответствии с цветом."
 
-#: pysollib/stack.py:2124
+#: pysollib/stack.py:2103
 msgid "Tableau. Build up by suit."
 msgstr "Игровой стол. Складывать по возрастанию в соответствии с мастью."
 
-#: pysollib/stack.py:2125
+#: pysollib/stack.py:2104
 msgid "Tableau. Build down by suit."
 msgstr "Игровой стол. Складывать по убыванию в соответствии с мастью."
 
-#: pysollib/stack.py:2133
+#: pysollib/stack.py:2112
 msgid "Tableau. Build up regardless of suit."
 msgstr "Игровой стол. Складывать по возрастанию не считаясь с мастью."
 
-#: pysollib/stack.py:2134
+#: pysollib/stack.py:2113
 msgid "Tableau. Build down regardless of suit."
 msgstr "Игровой стол. Складывать по убыванию не считаясь с мастью."
 
-#: pysollib/stack.py:2143
+#: pysollib/stack.py:2122
 msgid "Tableau. Build up in any suit but the same."
 msgstr "Игровой стол. Складывать по возрастанию в любую масть кроме такой же."
 
-#: pysollib/stack.py:2144
+#: pysollib/stack.py:2123
 msgid "Tableau. Build down in any suit but the same."
 msgstr "Игровой стол. Складывать по убыванию в любую масть кроме такой же."
 
-#: pysollib/stack.py:2166
+#: pysollib/stack.py:2145
 msgid ""
 "Tableau. Build up regardless of suit. Sequences of cards in alternate color "
 "can be moved as a unit."
@@ -1864,7 +1859,7 @@ msgstr ""
 "Игровой стол. Складывать по возрастанию не считаясь с мастью. Можно "
 "перемещать серии карт чередующихся цветом."
 
-#: pysollib/stack.py:2167
+#: pysollib/stack.py:2146
 msgid ""
 "Tableau. Build down regardless of suit. Sequences of cards in alternate "
 "color can be moved as a unit."
@@ -1872,7 +1867,7 @@ msgstr ""
 "Игровой стол. Складывать по убыванию не считаясь с мастью. Можно перемещать "
 "серии карт чередующихся цветом."
 
-#: pysollib/stack.py:2176
+#: pysollib/stack.py:2155
 msgid ""
 "Tableau. Build up regardless of suit. Sequences of cards in the same suit "
 "can be moved as a unit."
@@ -1880,7 +1875,7 @@ msgstr ""
 "Игровой стол. Складывать по возрастанию не считаясь с мастью. Можно "
 "перемещать серии карт одинаковой масти."
 
-#: pysollib/stack.py:2177
+#: pysollib/stack.py:2156
 msgid ""
 "Tableau. Build down regardless of suit. Sequences of cards in the same suit "
 "can be moved as a unit."
@@ -1888,7 +1883,7 @@ msgstr ""
 "Игровой стол. Складывать по убыванию не считаясь с мастью. Можно перемещать "
 "серии карт одинаковой масти."
 
-#: pysollib/stack.py:2199
+#: pysollib/stack.py:2178
 msgid ""
 "Tableau. Build up by alternate color, can move any face-up cards regardless "
 "of sequence."
@@ -1896,7 +1891,7 @@ msgstr ""
 "Игровой стол. Складывать по возрастанию чередуя цвет, можно перемещать любую "
 "серию открытых карт."
 
-#: pysollib/stack.py:2200
+#: pysollib/stack.py:2179
 msgid ""
 "Tableau. Build down by alternate color, can move any face-up cards "
 "regardless of sequence."
@@ -1904,7 +1899,7 @@ msgstr ""
 "Игровой стол. Складывать по убыванию чередуя цвет, можно перемещать любую "
 "серию открытых карт."
 
-#: pysollib/stack.py:2201 pysollib/stack.py:2214
+#: pysollib/stack.py:2180 pysollib/stack.py:2193
 msgid ""
 "Tableau. Build by same rank, can move any face-up cards regardless of "
 "sequence."
@@ -1912,14 +1907,14 @@ msgstr ""
 "Игровой стол. Складывать в соответствии с достоинством, можно перемещать "
 "любую серию открытых карт."
 
-#: pysollib/stack.py:2212
+#: pysollib/stack.py:2191
 msgid ""
 "Tableau. Build up by suit, can move any face-up cards regardless of sequence."
 msgstr ""
 "Игровой стол. Складывать по возрастанию в соответствии с мастью, можно "
 "перемещать любую серию открытых карт."
 
-#: pysollib/stack.py:2213
+#: pysollib/stack.py:2192
 msgid ""
 "Tableau. Build down by suit, can move any face-up cards regardless of "
 "sequence."
@@ -1927,111 +1922,111 @@ msgstr ""
 "Игровой стол. Складывать по убыванию в соответствии с мастью, можно "
 "перемещать любую серию открытых карт."
 
-#: pysollib/stack.py:2246
+#: pysollib/stack.py:2225
 msgid "Tableau. Build up or down by color."
 msgstr ""
 "Игровой стол. Складывать по возрастанию или убыванию в соответствии с цветом."
 
-#: pysollib/stack.py:2257
+#: pysollib/stack.py:2236
 msgid "Tableau. Build up or down by alternate color."
 msgstr "Игровой стол. Складывать по возрастанию или убыванию чередуя цвет."
 
-#: pysollib/stack.py:2268
+#: pysollib/stack.py:2247
 msgid "Tableau. Build up or down by suit."
 msgstr ""
 "Игровой стол. Складывать по возрастанию или убыванию в соответствии с мастью."
 
-#: pysollib/stack.py:2279
+#: pysollib/stack.py:2258
 msgid "Tableau. Build up or down regardless of suit."
 msgstr ""
 "Игровой стол. Складывать по возрастанию или убыванию не считаясь с мастью."
 
-#: pysollib/stack.py:2290
+#: pysollib/stack.py:2269
 msgid "Waste."
 msgstr "Сброс."
 
-#: pysollib/stack.py:2390
+#: pysollib/stack.py:2369
 msgid "Free cell."
 msgstr "Свободная ячейка."
 
-#: pysollib/stats.py:53 pysollib/stats.py:119
+#: pysollib/stats.py:52 pysollib/stats.py:118
 msgid "Game"
 msgstr "Игра"
 
-#: pysollib/stats.py:54
+#: pysollib/stats.py:53
 msgid "Played"
 msgstr "Играл"
 
-#: pysollib/stats.py:55 pysollib/stats.py:158
+#: pysollib/stats.py:54 pysollib/stats.py:157
 msgid "Won"
 msgstr "Выиграл"
 
-#: pysollib/stats.py:56 pysollib/stats.py:158
+#: pysollib/stats.py:55 pysollib/stats.py:157
 msgid "Lost"
 msgstr "Проиграл"
 
-#: pysollib/stats.py:57 pysollib/tile/statusbar.py:157
-#: pysollib/tk/statusbar.py:156 data/glade-translations:25
+#: pysollib/stats.py:56 pysollib/tile/statusbar.py:147
+#: pysollib/tk/statusbar.py:158 data/glade-translations:25
 msgid "Playing time"
 msgstr "Время игры"
 
-#: pysollib/stats.py:58 data/glade-translations:26
+#: pysollib/stats.py:57 data/glade-translations:26
 msgid "Moves"
 msgstr "Ходов"
 
-#: pysollib/stats.py:59
+#: pysollib/stats.py:58
 msgid "% won"
 msgstr "% побед"
 
-#: pysollib/stats.py:119
+#: pysollib/stats.py:118
 msgid "Status"
 msgstr "Статус"
 
-#: pysollib/stats.py:119 pysollib/tile/statusbar.py:159
-#: pysollib/tile/tkstats.py:545 pysollib/tk/statusbar.py:158
-#: pysollib/tk/tkstats.py:666
+#: pysollib/stats.py:118 pysollib/tile/statusbar.py:149
+#: pysollib/tile/tkstats.py:552 pysollib/tk/statusbar.py:160
+#: pysollib/tk/tkstats.py:668
 msgid "Game number"
 msgstr "Номер игры"
 
-#: pysollib/stats.py:119 pysollib/tile/tkstats.py:548
-#: pysollib/tk/tkstats.py:669
+#: pysollib/stats.py:118 pysollib/tile/tkstats.py:555
+#: pysollib/tk/tkstats.py:671
 msgid "Started at"
 msgstr "Игра начата"
 
-#: pysollib/stats.py:143
+#: pysollib/stats.py:142
 msgid "** UNKNOWN %d **"
 msgstr ""
 
-#: pysollib/stats.py:151
+#: pysollib/stats.py:150
 msgid "** ERROR **"
 msgstr ""
 
-#: pysollib/stats.py:158
+#: pysollib/stats.py:157
 msgid "Loaded"
 msgstr "Загружал"
 
-#: pysollib/stats.py:158
+#: pysollib/stats.py:157
 msgid "Not won"
 msgstr "Не выиграл"
 
-#: pysollib/stats.py:158
+#: pysollib/stats.py:157
 msgid "Perfect"
 msgstr "Великолепная"
 
-#: pysollib/stats.py:205 pysollib/stats.py:236 pysollib/stats.py:242
+#: pysollib/stats.py:204 pysollib/stats.py:235 pysollib/stats.py:241
 msgid "Demo"
 msgstr "Демо"
 
-#: pysollib/stats.py:216 pysollib/tile/tkstats.py:280
-#: pysollib/tk/tkstats.py:418
+#: pysollib/stats.py:215 pysollib/tile/tkstats.py:283
+#: pysollib/tk/tkstats.py:419
 msgid "Total (%d out of %d games)"
 msgstr "Всего (%d из %d игр)"
 
-#: pysollib/stats.py:237
+#: pysollib/stats.py:236
 msgid "Full log for "
 msgstr "Полный лог для "
 
-#: pysollib/stats.py:243
+#: pysollib/stats.py:242
 msgid "Session log for "
 msgstr "Лог сессии для "
 
@@ -2041,7 +2036,7 @@ msgid "Text foreground:"
 msgstr "Цвет текста:"
 
 #: pysollib/tile/colorsdialog.py:77 pysollib/tile/colorsdialog.py:95
-#: pysollib/tile/fontsdialog.py:186 pysollib/tk/colorsdialog.py:76
+#: pysollib/tile/fontsdialog.py:185 pysollib/tk/colorsdialog.py:76
 #: pysollib/tk/colorsdialog.py:94 pysollib/tk/fontsdialog.py:186
 #: data/glade-translations:49 data/glade-translations:50
 #: data/glade-translations:51 data/glade-translations:52
@@ -2094,8 +2089,8 @@ msgstr "Подсветка отсутствия совпадения:"
 msgid "Select color"
 msgstr "Выбрать цвет"
 
-#: pysollib/tile/findcarddialog.py:54 pysollib/tile/menubar.py:438
-#: pysollib/tk/findcarddialog.py:54 pysollib/tk/menubar.py:435
+#: pysollib/tile/findcarddialog.py:54 pysollib/tile/menubar.py:434
+#: pysollib/tk/findcarddialog.py:54 pysollib/tk/menubar.py:431
 msgid "Find card"
 msgstr "Найти карту"
 
@@ -2111,536 +2106,551 @@ msgstr "Жирный"
 msgid "Italic"
 msgstr "Наклонный"
 
-#: pysollib/tile/fontsdialog.py:168 pysollib/tk/fontsdialog.py:168
+#: pysollib/tile/fontsdialog.py:109 pysollib/tile/selectcardset.py:332
+#: pysollib/tk/selectcardset.py:341
+msgid "Size:"
+msgstr "Размер:"
+
+#: pysollib/tile/fontsdialog.py:167 pysollib/tk/fontsdialog.py:168
 #: data/glade-translations:58
 msgid "HTML: "
 msgstr "HTML: "
 
-#: pysollib/tile/fontsdialog.py:169 pysollib/tk/fontsdialog.py:169
+#: pysollib/tile/fontsdialog.py:168 pysollib/tk/fontsdialog.py:169
 #: data/glade-translations:59
 msgid "Small: "
 msgstr "Маленький: "
 
-#: pysollib/tile/fontsdialog.py:170 pysollib/tk/fontsdialog.py:170
+#: pysollib/tile/fontsdialog.py:169 pysollib/tk/fontsdialog.py:170
 #: data/glade-translations:60
 msgid "Fixed: "
 msgstr "Моноширинный: "
 
-#: pysollib/tile/fontsdialog.py:171 pysollib/tk/fontsdialog.py:171
+#: pysollib/tile/fontsdialog.py:170 pysollib/tk/fontsdialog.py:171
 #: data/glade-translations:61
 msgid "Tableau default: "
 msgstr "Игровой стол по умолчанию: "
 
-#: pysollib/tile/fontsdialog.py:172 pysollib/tk/fontsdialog.py:172
+#: pysollib/tile/fontsdialog.py:171 pysollib/tk/fontsdialog.py:172
 #: data/glade-translations:62
 msgid "Tableau fixed: "
 msgstr "Игровой стол моноширинный: "
 
-#: pysollib/tile/fontsdialog.py:173 pysollib/tk/fontsdialog.py:173
+#: pysollib/tile/fontsdialog.py:172 pysollib/tk/fontsdialog.py:173
 #: data/glade-translations:64
 msgid "Tableau large: "
 msgstr "Игровой стол большой: "
 
-#: pysollib/tile/fontsdialog.py:174 pysollib/tk/fontsdialog.py:174
+#: pysollib/tile/fontsdialog.py:173 pysollib/tk/fontsdialog.py:174
 #: data/glade-translations:63
 msgid "Tableau small: "
 msgstr "Игровой стол маленький: "
 
-#: pysollib/tile/fontsdialog.py:196 pysollib/tk/fontsdialog.py:196
+#: pysollib/tile/fontsdialog.py:195 pysollib/tk/fontsdialog.py:196
 msgid "Select font"
 msgstr "Выбрать шрифт"
 
-#: pysollib/tile/menubar.py:77 pysollib/tk/menubar.py:75
+#: pysollib/tile/menubar.py:78 pysollib/tk/menubar.py:76
 msgid "Style"
 msgstr "Стиль"
 
-#: pysollib/tile/menubar.py:95 pysollib/tk/menubar.py:94
+#: pysollib/tile/menubar.py:86 pysollib/tk/menubar.py:85
 msgid "Compound"
 msgstr "Компоновка"
 
-#: pysollib/tile/menubar.py:101 pysollib/tk/menubar.py:100
+#: pysollib/tile/menubar.py:92 pysollib/tk/menubar.py:91
 msgid "Hide"
 msgstr "Спрятать"
 
-#: pysollib/tile/menubar.py:104 pysollib/tk/menubar.py:103
+#: pysollib/tile/menubar.py:95 pysollib/tk/menubar.py:94
 msgid "Top"
 msgstr "Сверху"
 
-#: pysollib/tile/menubar.py:107 pysollib/tk/menubar.py:106
+#: pysollib/tile/menubar.py:98 pysollib/tk/menubar.py:97
 msgid "Bottom"
 msgstr "Внизу"
 
-#: pysollib/tile/menubar.py:110 pysollib/tk/menubar.py:109
+#: pysollib/tile/menubar.py:101 pysollib/tk/menubar.py:100
 msgid "Left"
 msgstr "Слева"
 
-#: pysollib/tile/menubar.py:113 pysollib/tk/menubar.py:112
+#: pysollib/tile/menubar.py:104 pysollib/tk/menubar.py:103
 msgid "Right"
 msgstr "Справа"
 
-#: pysollib/tile/menubar.py:117 pysollib/tk/menubar.py:116
+#: pysollib/tile/menubar.py:108 pysollib/tk/menubar.py:107
 msgid "Small icons"
 msgstr "Маленькие пиктограммы"
 
-#: pysollib/tile/menubar.py:120 pysollib/tk/menubar.py:119
+#: pysollib/tile/menubar.py:111 pysollib/tk/menubar.py:110
 msgid "Large icons"
 msgstr "Большие пиктограммы"
 
-#: pysollib/tile/menubar.py:126 pysollib/tk/menubar.py:125
+#: pysollib/tile/menubar.py:117 pysollib/tk/menubar.py:116
 msgid "Customize toolbar"
 msgstr "Настроить панель инструментов"
 
-#: pysollib/tile/menubar.py:365 pysollib/tk/menubar.py:362
-msgid "&File"
-msgstr "&Файл"
+#: pysollib/tile/menubar.py:357 pysollib/tk/menubar.py:354
+#, fuzzy
+msgid "apple"
+msgstr "Клён"
 
-#: pysollib/tile/menubar.py:367 pysollib/tk/menubar.py:364
-msgid "R&ecent games"
-msgstr "Выбрать н&едавнюю игру"
-
-#: pysollib/tile/menubar.py:369 pysollib/tk/menubar.py:366
-msgid "Select &random game"
-msgstr "С&лучайная игра"
-
-#: pysollib/tile/menubar.py:370 pysollib/tk/menubar.py:367
-msgid "&All games"
-msgstr "&Все игры"
-
-#: pysollib/tile/menubar.py:371 pysollib/tk/menubar.py:368
-msgid "Games played and &won"
-msgstr "&Выигранные игры"
-
-#: pysollib/tile/menubar.py:372 pysollib/tk/menubar.py:369
-msgid "Games played and &not won"
-msgstr "&Невыигранные игры"
-
-#: pysollib/tile/menubar.py:373 pysollib/tk/menubar.py:370
-msgid "Games not &played"
-msgstr "Не&сыгранные игры"
-
-#: pysollib/tile/menubar.py:374 pysollib/tk/menubar.py:371
-msgid "Select game by nu&mber..."
-msgstr "Выбрать игру по &номеру..."
-
-#: pysollib/tile/menubar.py:376 pysollib/tk/menubar.py:373
-msgid "Fa&vorite games"
-msgstr "&Избранные игры"
-
-#: pysollib/tile/menubar.py:377 pysollib/tk/menubar.py:374
-msgid "A&dd to favorites"
-msgstr "&Добавить в избранное"
-
-#: pysollib/tile/menubar.py:378 pysollib/tk/menubar.py:375
-msgid "R&emove from favorites"
-msgstr "&Удалить из избранных"
-
-#: pysollib/tile/menubar.py:380 pysollib/tk/menubar.py:377
-msgid "&Open..."
-msgstr "&Открыть..."
-
-#: pysollib/tile/menubar.py:381 pysollib/tk/menubar.py:378
-msgid "&Save"
-msgstr "&Сохранить"
-
-#: pysollib/tile/menubar.py:382 pysollib/tk/menubar.py:379
-msgid "Save &as..."
-msgstr "Сохранить &как..."
-
-#: pysollib/tile/menubar.py:384 pysollib/tk/menubar.py:381
-msgid "&Hold and quit"
-msgstr "Со&храниться и выйти"
-
-#: pysollib/tile/menubar.py:389 pysollib/tile/selectgame.py:397
-#: pysollib/tk/menubar.py:386 pysollib/tk/selectgame.py:407
-msgid "&Select"
-msgstr "&Выбрать"
-
-#: pysollib/tile/menubar.py:394 pysollib/tk/menubar.py:391
-msgid "&Edit"
-msgstr "Р&едактировать"
-
-#: pysollib/tile/menubar.py:395 pysollib/tk/menubar.py:392
-msgid "&Undo"
-msgstr "&Отмена"
-
-#: pysollib/tile/menubar.py:396 pysollib/tk/menubar.py:393
-msgid "&Redo"
-msgstr "&Повтор"
-
-#: pysollib/tile/menubar.py:397 pysollib/tk/menubar.py:394
-msgid "Redo &all"
-msgstr "Вернуть все"
-
-#: pysollib/tile/menubar.py:400 pysollib/tk/menubar.py:397
-msgid "&Set bookmark"
-msgstr "Установить &закладку"
-
-#: pysollib/tile/menubar.py:402 pysollib/tile/menubar.py:406
-#: pysollib/tk/menubar.py:399 pysollib/tk/menubar.py:403
-msgid "Bookmark %d"
-msgstr "Закладка %d"
-
-#: pysollib/tile/menubar.py:404 pysollib/tk/menubar.py:401
-msgid "Go&to bookmark"
-msgstr "&Перейти к закладке"
-
-#: pysollib/tile/menubar.py:409 pysollib/tk/menubar.py:406
-msgid "&Clear bookmarks"
-msgstr "О&чистить закладки"
-
-#: pysollib/tile/menubar.py:412 pysollib/tile/toolbar.py:237
-#: pysollib/tk/menubar.py:409 pysollib/tk/toolbar.py:198
-msgid "Restart"
-msgstr "Начало"
-
-#: pysollib/tile/menubar.py:414 pysollib/tk/menubar.py:411
-msgid "&Game"
-msgstr "&Игра"
-
-#: pysollib/tile/menubar.py:415 pysollib/tk/menubar.py:412
-msgid "&Deal cards"
-msgstr "&Сдать карты"
-
-#: pysollib/tile/menubar.py:416 pysollib/tk/menubar.py:413
-msgid "&Auto drop"
-msgstr "С&бросить карты"
-
-#: pysollib/tile/menubar.py:417 pysollib/tk/menubar.py:414
-msgid "&Pause"
-msgstr "&Пауза"
-
-#: pysollib/tile/menubar.py:420 pysollib/tk/menubar.py:417
-msgid "S&tatus..."
-msgstr "С&татус"
-
-#: pysollib/tile/menubar.py:421 pysollib/tk/menubar.py:418
-msgid "&Comments..."
-msgstr "&Комментарии..."
-
-#: pysollib/tile/menubar.py:423 pysollib/tk/menubar.py:420
-msgid "&Statistics"
-msgstr "Ст&атистика"
-
-#: pysollib/tile/menubar.py:424 pysollib/tile/menubar.py:432
-#: pysollib/tk/menubar.py:421 pysollib/tk/menubar.py:429
-msgid "Current game..."
-msgstr "Текущая игра..."
-
-#: pysollib/tile/menubar.py:425 pysollib/tile/menubar.py:433
-#: pysollib/tk/menubar.py:422 pysollib/tk/menubar.py:430
-msgid "All games..."
-msgstr "Все игры..."
-
-#: pysollib/tile/menubar.py:427 pysollib/tk/menubar.py:424
-msgid "Session log..."
-msgstr "Лог сессии..."
-
-#: pysollib/tile/menubar.py:428 pysollib/tk/menubar.py:425
-msgid "Full log..."
-msgstr "Полный лог..."
-
-#: pysollib/tile/menubar.py:431 pysollib/tk/menubar.py:428
-msgid "D&emo statistics"
-msgstr "Статистика демо"
-
-#: pysollib/tile/menubar.py:435 pysollib/tk/menubar.py:432
-msgid "&Assist"
-msgstr "&Подсказка"
-
-#: pysollib/tile/menubar.py:436 pysollib/tk/menubar.py:433
-msgid "&Hint"
-msgstr "Подсказать &ход"
-
-#: pysollib/tile/menubar.py:437 pysollib/tk/menubar.py:434
-msgid "Highlight p&iles"
-msgstr "П&оказать группы"
-
-#: pysollib/tile/menubar.py:440 pysollib/tk/menubar.py:437
-msgid "&Demo"
-msgstr "&Демо"
-
-#: pysollib/tile/menubar.py:441 pysollib/tk/menubar.py:438
-msgid "Demo (&all games)"
-msgstr "Демо (&все игры)"
-
-#: pysollib/tile/menubar.py:443 pysollib/tk/menubar.py:440
-msgid "Piles description"
-msgstr "Описания ячеек"
-
-#: pysollib/tile/menubar.py:447 pysollib/tk/menubar.py:444
-msgid "&Options"
-msgstr "&Настройка"
-
-#: pysollib/tile/menubar.py:448 pysollib/tk/menubar.py:445
-msgid "&Player options..."
-msgstr "Настройки &игрока..."
-
-#: pysollib/tile/menubar.py:449 pysollib/tk/menubar.py:446
-msgid "&Automatic play"
-msgstr "Настройки &автоматической игры"
-
-#: pysollib/tile/menubar.py:450 pysollib/tk/menubar.py:447
-msgid "Auto &face up"
-msgstr "Автоматически &переворачивать"
-
-#: pysollib/tile/menubar.py:451 pysollib/tk/menubar.py:448
-msgid "A&uto drop"
-msgstr "А&втоматически сбрасывать карты"
-
-#: pysollib/tile/menubar.py:452 pysollib/tk/menubar.py:449
-msgid "Auto &deal"
-msgstr "Автоматически &сдавать карты"
-
-#: pysollib/tile/menubar.py:454 pysollib/tk/menubar.py:451
-msgid "&Quick play"
-msgstr "&Быстрая игра"
-
-#: pysollib/tile/menubar.py:455 pysollib/tk/menubar.py:452
-msgid "Assist &level"
-msgstr "&Уровень подсказки"
-
-#: pysollib/tile/menubar.py:456 pysollib/tk/menubar.py:453
-msgid "Enable &undo"
-msgstr "Разрешить &возврат хода"
-
-#: pysollib/tile/menubar.py:457 pysollib/tk/menubar.py:454
-msgid "Enable &bookmarks"
-msgstr "Разрешить &закладки"
-
-#: pysollib/tile/menubar.py:458 pysollib/tk/menubar.py:455
-msgid "Enable &hint"
-msgstr "Разрешить &подсказки"
-
-#: pysollib/tile/menubar.py:459 pysollib/tk/menubar.py:456
-msgid "Enable highlight p&iles"
-msgstr "Разрешить показывать к&учи"
-
-#: pysollib/tile/menubar.py:460 pysollib/tk/menubar.py:457
-msgid "Enable highlight &cards"
-msgstr "Разрешить показывать &карты"
-
-#: pysollib/tile/menubar.py:461 pysollib/tk/menubar.py:458
-msgid "Enable highlight same &rank"
-msgstr "Разрешить показывать карты &одного достоинства"
-
-#: pysollib/tile/menubar.py:462 pysollib/tk/menubar.py:459
-msgid "Highlight &no matching"
-msgstr "Подсветка отсутствия &совпадения"
-
-#: pysollib/tile/menubar.py:464 pysollib/tk/menubar.py:461
-msgid "&Show removed tiles (in Mahjongg games)"
-msgstr "Показывать удалённые (в Маджонг)"
-
-#: pysollib/tile/menubar.py:465 pysollib/tk/menubar.py:462
-msgid "Show hint &arrow (in Shisen-Sho games)"
-msgstr "Показывать стрелку (в Шисен-Сё)"
-
-#: pysollib/tile/menubar.py:467 pysollib/tk/menubar.py:464
-msgid "&Sound..."
-msgstr "&Звук..."
-
-#: pysollib/tile/menubar.py:475 pysollib/tk/menubar.py:472
-msgid "Cards&et..."
-msgstr "Коло&да..."
-
-#: pysollib/tile/menubar.py:476 pysollib/tk/menubar.py:473
-msgid "Table t&ile..."
-msgstr "Игровой &стол..."
-
-#: pysollib/tile/menubar.py:478 pysollib/tk/menubar.py:475
-msgid "Card &background"
-msgstr "&Рубашка карты"
-
-#: pysollib/tile/menubar.py:479 pysollib/tk/menubar.py:476
-msgid "Card &view"
-msgstr "&Вид карты"
-
-#: pysollib/tile/menubar.py:480 pysollib/tk/menubar.py:477
-msgid "Card shado&w"
-msgstr "Тень карты"
-
-#: pysollib/tile/menubar.py:481 pysollib/tk/menubar.py:478
-msgid "Shade &legal moves"
-msgstr "Подсвечивать &разрешённые ходы"
-
-#: pysollib/tile/menubar.py:482 pysollib/tk/menubar.py:479
-msgid "&Negative cards bottom"
-msgstr "&Негативные контуры карты"
-
-#: pysollib/tile/menubar.py:483 pysollib/tk/menubar.py:480
-msgid "Shrink face-down cards"
-msgstr "Сжимать закрытые карты"
-
-#: pysollib/tile/menubar.py:484 pysollib/tk/menubar.py:481
-msgid "Shade &filled stacks"
-msgstr "Затемнять заполненные ячейки"
-
-#: pysollib/tile/menubar.py:485 pysollib/tk/menubar.py:482
-msgid "A&nimations"
-msgstr "Анимаци&я"
-
-#: pysollib/tile/menubar.py:486 pysollib/tk/menubar.py:483
-msgid "&None"
-msgstr "&Нет"
-
-#: pysollib/tile/menubar.py:487 pysollib/tk/menubar.py:484
-msgid "&Timer based"
-msgstr "Базирующаяся на &таймере"
-
-#: pysollib/tile/menubar.py:488 pysollib/tk/menubar.py:485
-msgid "&Fast"
-msgstr "&Быстрая"
-
-#: pysollib/tile/menubar.py:489 pysollib/tk/menubar.py:486
-msgid "&Slow"
-msgstr "&Медленная"
-
-#: pysollib/tile/menubar.py:490 pysollib/tk/menubar.py:487
-msgid "&Very slow"
-msgstr "&Очень медленная"
-
-#: pysollib/tile/menubar.py:491 pysollib/tk/menubar.py:488
-msgid "&Mouse"
-msgstr "&Мышь"
-
-#: pysollib/tile/menubar.py:492 pysollib/tk/menubar.py:489
-msgid "&Drag-and-Drop"
-msgstr ""
-
-#: pysollib/tile/menubar.py:493 pysollib/tk/menubar.py:490
-msgid "&Point-and-Click"
-msgstr ""
-
-#: pysollib/tile/menubar.py:494 pysollib/tk/menubar.py:491
-msgid "&Sticky mouse"
-msgstr "&Липкая мышь"
-
-#: pysollib/tile/menubar.py:496 pysollib/tk/menubar.py:493
-msgid "Use mouse for undo/redo"
-msgstr "Использовать мышь для вперёд/назад"
-
-#: pysollib/tile/menubar.py:498 pysollib/tk/menubar.py:495
-msgid "&Fonts..."
-msgstr "&Шрифты..."
-
-#: pysollib/tile/menubar.py:499 pysollib/tk/menubar.py:496
-msgid "&Colors..."
-msgstr "&Цвета..."
-
-#: pysollib/tile/menubar.py:500 pysollib/tk/menubar.py:497
-msgid "Time&outs..."
-msgstr "Тайма&уты..."
-
-#: pysollib/tile/menubar.py:502
-msgid "Set t&heme"
-msgstr "Установить &тему"
-
-#: pysollib/tile/menubar.py:504 pysollib/tk/menubar.py:499
-msgid "&Toolbar"
-msgstr "Панель и&нструментов"
-
-#: pysollib/tile/menubar.py:506 pysollib/tk/menubar.py:501
-msgid "Stat&usbar"
-msgstr "Панель с&остояния"
-
-#: pysollib/tile/menubar.py:507 pysollib/tk/menubar.py:502
-msgid "Show &statusbar"
-msgstr "Показывать панель состояния"
-
-#: pysollib/tile/menubar.py:508 pysollib/tk/menubar.py:503
-msgid "Show &number of cards"
-msgstr "Показывать количество карт"
-
-#: pysollib/tile/menubar.py:509 pysollib/tk/menubar.py:504
-msgid "Show &help bar"
-msgstr "Показывать панель помощи"
-
-#: pysollib/tile/menubar.py:510 pysollib/tk/menubar.py:505
-msgid "Save games &geometry"
-msgstr "Сохранение &геометрии игры"
-
-#: pysollib/tile/menubar.py:511 pysollib/tk/menubar.py:506
-msgid "&Demo logo"
-msgstr "Д&емо лого"
-
-#: pysollib/tile/menubar.py:512 pysollib/tk/menubar.py:507
-msgid "Startup splash sc&reen"
-msgstr "О&кно запуска"
-
-#: pysollib/tile/menubar.py:518 pysollib/tk/menubar.py:513
-msgid "&Help"
-msgstr "&Помощь"
-
-#: pysollib/tile/menubar.py:519 pysollib/tk/menubar.py:514
-msgid "&Contents"
-msgstr "&Содержание"
-
-#: pysollib/tile/menubar.py:520 pysollib/tk/menubar.py:515
-msgid "&How to play"
-msgstr "Как &играть"
-
-#: pysollib/tile/menubar.py:521 pysollib/tk/menubar.py:516
-msgid "&Rules for this game"
-msgstr "&Правила текущей игры"
-
-#: pysollib/tile/menubar.py:522 pysollib/tk/menubar.py:517
-msgid "&License terms"
-msgstr "&Лицензия"
-
-#: pysollib/tile/menubar.py:525 pysollib/tk/menubar.py:520
+#: pysollib/tile/menubar.py:358 pysollib/tile/menubar.py:524
+#: pysollib/tk/menubar.py:355 pysollib/tk/menubar.py:520
 msgid "&About "
 msgstr "&О программе "
 
-#: pysollib/tile/menubar.py:637 pysollib/tk/menubar.py:632
+#: pysollib/tile/menubar.py:360 pysollib/tk/menubar.py:357
+msgid "&File"
+msgstr "&Файл"
+
+#: pysollib/tile/menubar.py:362 pysollib/tk/menubar.py:359
+msgid "R&ecent games"
+msgstr "Выбрать н&едавнюю игру"
+
+#: pysollib/tile/menubar.py:364 pysollib/tk/menubar.py:361
+msgid "Select &random game"
+msgstr "С&лучайная игра"
+
+#: pysollib/tile/menubar.py:365 pysollib/tk/menubar.py:362
+msgid "&All games"
+msgstr "&Все игры"
+
+#: pysollib/tile/menubar.py:366 pysollib/tk/menubar.py:363
+msgid "Games played and &won"
+msgstr "&Выигранные игры"
+
+#: pysollib/tile/menubar.py:367 pysollib/tk/menubar.py:364
+msgid "Games played and &not won"
+msgstr "&Невыигранные игры"
+
+#: pysollib/tile/menubar.py:368 pysollib/tk/menubar.py:365
+msgid "Games not &played"
+msgstr "Не&сыгранные игры"
+
+#: pysollib/tile/menubar.py:369 pysollib/tk/menubar.py:366
+msgid "Select game by nu&mber..."
+msgstr "Выбрать игру по &номеру..."
+
+#: pysollib/tile/menubar.py:371 pysollib/tk/menubar.py:368
+msgid "Fa&vorite games"
+msgstr "&Избранные игры"
+
+#: pysollib/tile/menubar.py:372 pysollib/tk/menubar.py:369
+msgid "A&dd to favorites"
+msgstr "&Добавить в избранное"
+
+#: pysollib/tile/menubar.py:373 pysollib/tk/menubar.py:370
+msgid "R&emove from favorites"
+msgstr "&Удалить из избранных"
+
+#: pysollib/tile/menubar.py:375 pysollib/tk/menubar.py:372
+msgid "&Open..."
+msgstr "&Открыть..."
+
+#: pysollib/tile/menubar.py:376 pysollib/tk/menubar.py:373
+msgid "&Save"
+msgstr "&Сохранить"
+
+#: pysollib/tile/menubar.py:377 pysollib/tk/menubar.py:374
+msgid "Save &as..."
+msgstr "Сохранить &как..."
+
+#: pysollib/tile/menubar.py:379 pysollib/tk/menubar.py:376
+msgid "&Hold and quit"
+msgstr "Со&храниться и выйти"
+
+#: pysollib/tile/menubar.py:385 pysollib/tile/selectgame.py:398
+#: pysollib/tk/menubar.py:382 pysollib/tk/selectgame.py:407
+msgid "&Select"
+msgstr "&Выбрать"
+
+#: pysollib/tile/menubar.py:390 pysollib/tk/menubar.py:387
+msgid "&Edit"
+msgstr "Р&едактировать"
+
+#: pysollib/tile/menubar.py:391 pysollib/tk/menubar.py:388
+msgid "&Undo"
+msgstr "&Отмена"
+
+#: pysollib/tile/menubar.py:392 pysollib/tk/menubar.py:389
+msgid "&Redo"
+msgstr "&Повтор"
+
+#: pysollib/tile/menubar.py:393 pysollib/tk/menubar.py:390
+msgid "Redo &all"
+msgstr "Вернуть все"
+
+#: pysollib/tile/menubar.py:396 pysollib/tk/menubar.py:393
+msgid "&Set bookmark"
+msgstr "Установить &закладку"
+
+#: pysollib/tile/menubar.py:398 pysollib/tile/menubar.py:402
+#: pysollib/tk/menubar.py:395 pysollib/tk/menubar.py:399
+msgid "Bookmark %d"
+msgstr "Закладка %d"
+
+#: pysollib/tile/menubar.py:400 pysollib/tk/menubar.py:397
+msgid "Go&to bookmark"
+msgstr "&Перейти к закладке"
+
+#: pysollib/tile/menubar.py:405 pysollib/tk/menubar.py:402
+msgid "&Clear bookmarks"
+msgstr "О&чистить закладки"
+
+#: pysollib/tile/menubar.py:408 pysollib/tile/toolbar.py:190
+#: pysollib/tk/menubar.py:405 pysollib/tk/toolbar.py:193
+msgid "Restart"
+msgstr "Начало"
+
+#: pysollib/tile/menubar.py:410 pysollib/tk/menubar.py:407
+msgid "&Game"
+msgstr "&Игра"
+
+#: pysollib/tile/menubar.py:411 pysollib/tk/menubar.py:408
+msgid "&Deal cards"
+msgstr "&Сдать карты"
+
+#: pysollib/tile/menubar.py:412 pysollib/tk/menubar.py:409
+msgid "&Auto drop"
+msgstr "С&бросить карты"
+
+#: pysollib/tile/menubar.py:413 pysollib/tk/menubar.py:410
+msgid "&Pause"
+msgstr "&Пауза"
+
+#: pysollib/tile/menubar.py:416 pysollib/tk/menubar.py:413
+msgid "S&tatus..."
+msgstr "С&татус"
+
+#: pysollib/tile/menubar.py:417 pysollib/tk/menubar.py:414
+msgid "&Comments..."
+msgstr "&Комментарии..."
+
+#: pysollib/tile/menubar.py:419 pysollib/tk/menubar.py:416
+msgid "&Statistics"
+msgstr "Ст&атистика"
+
+#: pysollib/tile/menubar.py:420 pysollib/tile/menubar.py:428
+#: pysollib/tk/menubar.py:417 pysollib/tk/menubar.py:425
+msgid "Current game..."
+msgstr "Текущая игра..."
+
+#: pysollib/tile/menubar.py:421 pysollib/tile/menubar.py:429
+#: pysollib/tk/menubar.py:418 pysollib/tk/menubar.py:426
+msgid "All games..."
+msgstr "Все игры..."
+
+#: pysollib/tile/menubar.py:423 pysollib/tk/menubar.py:420
+msgid "Session log..."
+msgstr "Лог сессии..."
+
+#: pysollib/tile/menubar.py:424 pysollib/tk/menubar.py:421
+msgid "Full log..."
+msgstr "Полный лог..."
+
+#: pysollib/tile/menubar.py:427 pysollib/tk/menubar.py:424
+msgid "D&emo statistics"
+msgstr "Статистика демо"
+
+#: pysollib/tile/menubar.py:431 pysollib/tk/menubar.py:428
+msgid "&Assist"
+msgstr "&Подсказка"
+
+#: pysollib/tile/menubar.py:432 pysollib/tk/menubar.py:429
+msgid "&Hint"
+msgstr "Подсказать &ход"
+
+#: pysollib/tile/menubar.py:433 pysollib/tk/menubar.py:430
+msgid "Highlight p&iles"
+msgstr "П&оказать группы"
+
+#: pysollib/tile/menubar.py:436 pysollib/tk/menubar.py:433
+msgid "&Demo"
+msgstr "&Демо"
+
+#: pysollib/tile/menubar.py:437 pysollib/tk/menubar.py:434
+msgid "Demo (&all games)"
+msgstr "Демо (&все игры)"
+
+#: pysollib/tile/menubar.py:439 pysollib/tk/menubar.py:436
+msgid "Piles description"
+msgstr "Описания ячеек"
+
+#: pysollib/tile/menubar.py:443 pysollib/tk/menubar.py:440
+msgid "&Options"
+msgstr "&Настройка"
+
+#: pysollib/tile/menubar.py:444 pysollib/tk/menubar.py:441
+msgid "&Player options..."
+msgstr "Настройки &игрока..."
+
+#: pysollib/tile/menubar.py:445 pysollib/tk/menubar.py:442
+msgid "&Automatic play"
+msgstr "Настройки &автоматической игры"
+
+#: pysollib/tile/menubar.py:446 pysollib/tk/menubar.py:443
+msgid "Auto &face up"
+msgstr "Автоматически &переворачивать"
+
+#: pysollib/tile/menubar.py:447 pysollib/tk/menubar.py:444
+msgid "A&uto drop"
+msgstr "А&втоматически сбрасывать карты"
+
+#: pysollib/tile/menubar.py:448 pysollib/tk/menubar.py:445
+msgid "Auto &deal"
+msgstr "Автоматически &сдавать карты"
+
+#: pysollib/tile/menubar.py:450 pysollib/tk/menubar.py:447
+msgid "&Quick play"
+msgstr "&Быстрая игра"
+
+#: pysollib/tile/menubar.py:451 pysollib/tk/menubar.py:448
+msgid "Assist &level"
+msgstr "&Уровень подсказки"
+
+#: pysollib/tile/menubar.py:452 pysollib/tk/menubar.py:449
+msgid "Enable &undo"
+msgstr "Разрешить &возврат хода"
+
+#: pysollib/tile/menubar.py:453 pysollib/tk/menubar.py:450
+msgid "Enable &bookmarks"
+msgstr "Разрешить &закладки"
+
+#: pysollib/tile/menubar.py:454 pysollib/tk/menubar.py:451
+msgid "Enable &hint"
+msgstr "Разрешить &подсказки"
+
+#: pysollib/tile/menubar.py:455 pysollib/tk/menubar.py:452
+msgid "Enable highlight p&iles"
+msgstr "Разрешить показывать к&учи"
+
+#: pysollib/tile/menubar.py:456 pysollib/tk/menubar.py:453
+msgid "Enable highlight &cards"
+msgstr "Разрешить показывать &карты"
+
+#: pysollib/tile/menubar.py:457 pysollib/tk/menubar.py:454
+msgid "Enable highlight same &rank"
+msgstr "Разрешить показывать карты &одного достоинства"
+
+#: pysollib/tile/menubar.py:458 pysollib/tk/menubar.py:455
+msgid "Highlight &no matching"
+msgstr "Подсветка отсутствия &совпадения"
+
+#: pysollib/tile/menubar.py:460 pysollib/tk/menubar.py:457
+msgid "&Show removed tiles (in Mahjongg games)"
+msgstr "Показывать удалённые (в Маджонг)"
+
+#: pysollib/tile/menubar.py:461 pysollib/tk/menubar.py:458
+msgid "Show hint &arrow (in Shisen-Sho games)"
+msgstr "Показывать стрелку (в Шисен-Сё)"
+
+#: pysollib/tile/menubar.py:463 pysollib/tk/menubar.py:460
+msgid "&Sound..."
+msgstr "&Звук..."
+
+#: pysollib/tile/menubar.py:471 pysollib/tk/menubar.py:468
+msgid "Cards&et..."
+msgstr "Коло&да..."
+
+#: pysollib/tile/menubar.py:472 pysollib/tk/menubar.py:469
+msgid "Table t&ile..."
+msgstr "Игровой &стол..."
+
+#: pysollib/tile/menubar.py:474 pysollib/tk/menubar.py:471
+msgid "Card &background"
+msgstr "&Рубашка карты"
+
+#: pysollib/tile/menubar.py:475 pysollib/tk/menubar.py:472
+msgid "Card &view"
+msgstr "&Вид карты"
+
+#: pysollib/tile/menubar.py:476 pysollib/tk/menubar.py:473
+msgid "Card shado&w"
+msgstr "Тень карты"
+
+#: pysollib/tile/menubar.py:477 pysollib/tk/menubar.py:474
+msgid "Shade &legal moves"
+msgstr "Подсвечивать &разрешённые ходы"
+
+#: pysollib/tile/menubar.py:478 pysollib/tk/menubar.py:475
+msgid "&Negative cards bottom"
+msgstr "&Негативные контуры карты"
+
+#: pysollib/tile/menubar.py:479 pysollib/tk/menubar.py:476
+msgid "Shrink face-down cards"
+msgstr "Сжимать закрытые карты"
+
+#: pysollib/tile/menubar.py:480 pysollib/tk/menubar.py:477
+msgid "Shade &filled stacks"
+msgstr "Затемнять заполненные ячейки"
+
+#: pysollib/tile/menubar.py:481 pysollib/tk/menubar.py:478
+msgid "A&nimations"
+msgstr "Анимаци&я"
+
+#: pysollib/tile/menubar.py:482 pysollib/tk/menubar.py:479
+msgid "&None"
+msgstr "&Нет"
+
+#: pysollib/tile/menubar.py:483 pysollib/tk/menubar.py:480
+msgid "&Timer based"
+msgstr "Базирующаяся на &таймере"
+
+#: pysollib/tile/menubar.py:484 pysollib/tk/menubar.py:481
+msgid "&Fast"
+msgstr "&Быстрая"
+
+#: pysollib/tile/menubar.py:485 pysollib/tk/menubar.py:482
+msgid "&Slow"
+msgstr "&Медленная"
+
+#: pysollib/tile/menubar.py:486 pysollib/tk/menubar.py:483
+msgid "&Very slow"
+msgstr "&Очень медленная"
+
+#: pysollib/tile/menubar.py:488 pysollib/tk/menubar.py:485
+msgid "&Redeal animation"
+msgstr "Анимация пере&сдачи"
+
+#: pysollib/tile/menubar.py:489 pysollib/tk/menubar.py:486
+msgid "&Winning animation"
+msgstr "Анимация &победы"
+
+#: pysollib/tile/menubar.py:490 pysollib/tk/menubar.py:487
+msgid "&Mouse"
+msgstr "&Мышь"
+
+#: pysollib/tile/menubar.py:491 pysollib/tk/menubar.py:488
+msgid "&Drag-and-Drop"
+msgstr ""
+
+#: pysollib/tile/menubar.py:492 pysollib/tk/menubar.py:489
+msgid "&Point-and-Click"
+msgstr ""
+
+#: pysollib/tile/menubar.py:493 pysollib/tk/menubar.py:490
+msgid "&Sticky mouse"
+msgstr "&Липкая мышь"
+
+#: pysollib/tile/menubar.py:495 pysollib/tk/menubar.py:492
+msgid "Use mouse for undo/redo"
+msgstr "Использовать мышь для вперёд/назад"
+
+#: pysollib/tile/menubar.py:497 pysollib/tk/menubar.py:494
+msgid "&Fonts..."
+msgstr "&Шрифты..."
+
+#: pysollib/tile/menubar.py:498 pysollib/tk/menubar.py:495
+msgid "&Colors..."
+msgstr "&Цвета..."
+
+#: pysollib/tile/menubar.py:499 pysollib/tk/menubar.py:496
+msgid "Time&outs..."
+msgstr "Тайма&уты..."
+
+#: pysollib/tile/menubar.py:502 pysollib/tk/menubar.py:498
+msgid "&Toolbar"
+msgstr "Панель и&нструментов"
+
+#: pysollib/tile/menubar.py:504 pysollib/tk/menubar.py:500
+msgid "Stat&usbar"
+msgstr "Панель с&остояния"
+
+#: pysollib/tile/menubar.py:505 pysollib/tk/menubar.py:501
+msgid "Show &statusbar"
+msgstr "Показывать панель состояния"
+
+#: pysollib/tile/menubar.py:506 pysollib/tk/menubar.py:502
+msgid "Show &number of cards"
+msgstr "Показывать количество карт"
+
+#: pysollib/tile/menubar.py:507 pysollib/tk/menubar.py:503
+msgid "Show &help bar"
+msgstr "Показывать панель помощи"
+
+#: pysollib/tile/menubar.py:508 pysollib/tk/menubar.py:504
+msgid "Save games &geometry"
+msgstr "Сохранение &геометрии игры"
+
+#: pysollib/tile/menubar.py:509 pysollib/tk/menubar.py:505
+msgid "&Demo logo"
+msgstr "Д&емо лого"
+
+#: pysollib/tile/menubar.py:510 pysollib/tk/menubar.py:506
+msgid "Startup splash sc&reen"
+msgstr "О&кно запуска"
+
+#: pysollib/tile/menubar.py:516 pysollib/tk/menubar.py:512
+msgid "&Help"
+msgstr "&Помощь"
+
+#: pysollib/tile/menubar.py:517 pysollib/tk/menubar.py:513
+msgid "&Contents"
+msgstr "&Содержание"
+
+#: pysollib/tile/menubar.py:518 pysollib/tk/menubar.py:514
+msgid "&How to play"
+msgstr "Как &играть"
+
+#: pysollib/tile/menubar.py:519 pysollib/tk/menubar.py:515
+msgid "&Rules for this game"
+msgstr "&Правила текущей игры"
+
+#: pysollib/tile/menubar.py:520 pysollib/tk/menubar.py:516
+msgid "&License terms"
+msgstr "&Лицензия"
+
+#: pysollib/tile/menubar.py:637 pysollib/tk/menubar.py:633
 msgid "All &games..."
 msgstr "&Все игры..."
 
-#: pysollib/tile/menubar.py:639 pysollib/tk/menubar.py:634
+#: pysollib/tile/menubar.py:639 pysollib/tk/menubar.py:635
 msgid "Playable pre&view..."
 msgstr "Играемый &предпросмотр..."
 
-#: pysollib/tile/menubar.py:688 pysollib/tk/menubar.py:683
+#: pysollib/tile/menubar.py:690 pysollib/tk/menubar.py:686
 msgid "&Mahjongg games"
 msgstr "Игры маджонг"
 
-#: pysollib/tile/menubar.py:726 pysollib/tk/menubar.py:721
+#: pysollib/tile/menubar.py:728 pysollib/tk/menubar.py:724
 msgid "&Popular games"
 msgstr "&Популярные игры"
 
-#: pysollib/tile/menubar.py:734 pysollib/tk/menubar.py:729
+#: pysollib/tile/menubar.py:736 pysollib/tk/menubar.py:732
 msgid "&French games"
 msgstr "&Классические игры"
 
-#: pysollib/tile/menubar.py:741 pysollib/tk/menubar.py:736
+#: pysollib/tile/menubar.py:743 pysollib/tk/menubar.py:739
 msgid "&Oriental games"
 msgstr "&Восточные игры"
 
-#: pysollib/tile/menubar.py:749 pysollib/tk/menubar.py:744
+#: pysollib/tile/menubar.py:751 pysollib/tk/menubar.py:747
 msgid "&Special games"
 msgstr "&Особые игры"
 
-#: pysollib/tile/menubar.py:755 pysollib/tk/menubar.py:750
+#: pysollib/tile/menubar.py:757 pysollib/tk/menubar.py:753
 msgid "&All games by name"
 msgstr "&Все игры по имени"
 
-#: pysollib/tile/menubar.py:1028 pysollib/tk/menubar.py:1023
+#: pysollib/tile/menubar.py:1030 pysollib/tk/menubar.py:1026
 #: data/glade-translations:72
 msgid "Sound settings"
 msgstr "Настройка звука"
 
-#: pysollib/tile/menubar.py:1128 pysollib/tk/menubar.py:1127
+#: pysollib/tile/menubar.py:1138 pysollib/tk/menubar.py:1138
 msgid "Select "
 msgstr "Выбрать "
 
-#: pysollib/tile/menubar.py:1175 pysollib/tk/menubar.py:1179
+#: pysollib/tile/menubar.py:1185 pysollib/tk/menubar.py:1190
 msgid "Select table background"
 msgstr "Выбрать фоновое изображение"
 
-#: pysollib/tile/menubar.py:1330
+#: pysollib/tile/menubar.py:1329
 msgid "Change theme"
 msgstr "Изменение темы"
 
-#: pysollib/tile/menubar.py:1331
+#: pysollib/tile/menubar.py:1330
 msgid ""
 "This settings will take effect\n"
 "the next time you restart "
@@ -2648,6 +2658,36 @@ msgstr ""
 "Эта установка вступит в силу\n"
 "при следующем запуске "
 
+#: pysollib/tile/menubar.py:1338
+msgid "Set t&heme"
+msgstr "Установить &тему"
+
+#: pysollib/tile/menubar.py:1344
+#, fuzzy
+msgid "Default"
+msgstr "Сдача"
+
+#: pysollib/tile/menubar.py:1345
+#, fuzzy
+msgid "Classic"
+msgstr "Классический вид"
+
+#: pysollib/tile/menubar.py:1346
+msgid "Revitalized"
+msgstr ""
+
+#: pysollib/tile/menubar.py:1347
+msgid "Windows native"
+msgstr ""
+
+#: pysollib/tile/menubar.py:1348
+msgid "XP Native"
+msgstr ""
+
+#: pysollib/tile/menubar.py:1349
+msgid "Aqua"
+msgstr ""
+
 #: pysollib/tile/playeroptionsdialog.py:72
 #: pysollib/tk/playeroptionsdialog.py:112
 msgid ""
@@ -2723,12 +2763,12 @@ msgstr "Большие колоды"
 msgid "XLarge cardsets"
 msgstr "Очень большие колоды"
 
-#: pysollib/tile/selectcardset.py:236 pysollib/tk/menubar.py:1124
+#: pysollib/tile/selectcardset.py:236 pysollib/tk/menubar.py:1135
 msgid "&Info..."
 msgstr "&Информация..."
 
-#: pysollib/tile/selectcardset.py:237 pysollib/tk/menubar.py:1122
-#: pysollib/tk/menubar.py:1124 pysollib/tk/selectcardset.py:241
+#: pysollib/tile/selectcardset.py:237 pysollib/tk/menubar.py:1133
+#: pysollib/tk/menubar.py:1135 pysollib/tk/selectcardset.py:241
 msgid "&Load"
 msgstr "&Загрузить"
 
@@ -2736,7 +2776,7 @@ msgstr "&Загрузить"
 msgid "About cardset"
 msgstr "О наборе карт"
 
-#: pysollib/tile/selectcardset.py:327 pysollib/tile/selectgame.py:354
+#: pysollib/tile/selectcardset.py:327 pysollib/tile/selectgame.py:355
 #: pysollib/tk/selectcardset.py:336 pysollib/tk/selectgame.py:365
 msgid "Type:"
 msgstr "Тип:"
@@ -2753,10 +2793,6 @@ msgstr "Национальность:"
 msgid "Year:"
 msgstr "Год:"
 
-#: pysollib/tile/selectcardset.py:332 pysollib/tk/selectcardset.py:341
-msgid "Size:"
-msgstr "Размер:"
-
 #: pysollib/tile/selectgame.py:101 pysollib/tk/selectgame.py:100
 msgid "(no games)"
 msgstr "(нет игр)"
@@ -2786,7 +2822,7 @@ msgid "by Compatibility"
 msgstr "По совместимости с другими программами"
 
 #: pysollib/tile/selectgame.py:153 pysollib/tk/selectgame.py:152
-msgid "New games in v."
+msgid "New games in v. "
 msgstr "Новые игры в версии "
 
 #: pysollib/tile/selectgame.py:156 pysollib/tk/selectgame.py:155
@@ -2809,27 +2845,27 @@ msgstr "Популярные игры"
 msgid "by Skill Level"
 msgstr "По уровню мастерства"
 
-#: pysollib/tile/selectgame.py:171 pysollib/tile/selectgame.py:523
+#: pysollib/tile/selectgame.py:171 pysollib/tile/selectgame.py:524
 #: pysollib/tk/selectgame.py:170 pysollib/tk/selectgame.py:533
 msgid "Luck only"
 msgstr "Только на везение"
 
-#: pysollib/tile/selectgame.py:172 pysollib/tile/selectgame.py:524
+#: pysollib/tile/selectgame.py:172 pysollib/tile/selectgame.py:525
 #: pysollib/tk/selectgame.py:171 pysollib/tk/selectgame.py:534
 msgid "Mostly luck"
 msgstr "В основном на везение"
 
-#: pysollib/tile/selectgame.py:173 pysollib/tile/selectgame.py:525
+#: pysollib/tile/selectgame.py:173 pysollib/tile/selectgame.py:526
 #: pysollib/tk/selectgame.py:172 pysollib/tk/selectgame.py:535
 msgid "Balanced"
 msgstr "Сбалансированные"
 
-#: pysollib/tile/selectgame.py:174 pysollib/tile/selectgame.py:526
+#: pysollib/tile/selectgame.py:174 pysollib/tile/selectgame.py:527
 #: pysollib/tk/selectgame.py:173 pysollib/tk/selectgame.py:536
 msgid "Mostly skill"
 msgstr "В основном на мастерство"
 
-#: pysollib/tile/selectgame.py:175 pysollib/tile/selectgame.py:527
+#: pysollib/tile/selectgame.py:175 pysollib/tile/selectgame.py:528
 #: pysollib/tk/selectgame.py:174 pysollib/tk/selectgame.py:537
 msgid "Skill only"
 msgstr "Только на мастерство"
@@ -2946,81 +2982,81 @@ msgstr "Открытые игры (все карты видны)"
 msgid "Relaxed Variants"
 msgstr "Облегчённые варианты"
 
-#: pysollib/tile/selectgame.py:341 pysollib/tk/selectgame.py:349
+#: pysollib/tile/selectgame.py:342 pysollib/tk/selectgame.py:349
 msgid "About game"
 msgstr "Об игре "
 
-#: pysollib/tile/selectgame.py:351 pysollib/tk/selectgame.py:362
+#: pysollib/tile/selectgame.py:352 pysollib/tk/selectgame.py:362
 msgid "Name:"
 msgstr "Имя:"
 
-#: pysollib/tile/selectgame.py:352 pysollib/tk/selectgame.py:363
+#: pysollib/tile/selectgame.py:353 pysollib/tk/selectgame.py:363
 msgid "Alternate names:"
 msgstr "Другие имена:"
 
-#: pysollib/tile/selectgame.py:353 pysollib/tk/selectgame.py:364
+#: pysollib/tile/selectgame.py:354 pysollib/tk/selectgame.py:364
 msgid "Category:"
 msgstr "Категория:"
 
-#: pysollib/tile/selectgame.py:355 pysollib/tk/selectgame.py:366
+#: pysollib/tile/selectgame.py:356 pysollib/tk/selectgame.py:366
 msgid "Skill level:"
 msgstr "Уровень мастерства:"
 
-#: pysollib/tile/selectgame.py:356 pysollib/tk/selectgame.py:367
+#: pysollib/tile/selectgame.py:357 pysollib/tk/selectgame.py:367
 msgid "Decks:"
 msgstr "Колод:"
 
-#: pysollib/tile/selectgame.py:357 pysollib/tk/selectgame.py:368
+#: pysollib/tile/selectgame.py:358 pysollib/tk/selectgame.py:368
 msgid "Redeals:"
 msgstr "Пересдач:"
 
-#: pysollib/tile/selectgame.py:359 pysollib/tk/selectgame.py:370
+#: pysollib/tile/selectgame.py:360 pysollib/tk/selectgame.py:370
 msgid "Played:"
 msgstr "Играл:"
 
-#: pysollib/tile/selectgame.py:360 pysollib/tile/tkstats.py:107
+#: pysollib/tile/selectgame.py:361 pysollib/tile/tkstats.py:107
 #: pysollib/tile/tkstats.py:159 pysollib/tk/selectgame.py:371
 #: pysollib/tk/tkstats.py:111 pysollib/tk/tkstats.py:163
 #: data/glade-translations:9 data/glade-translations:13
 msgid "Won:"
 msgstr "Выиграл:"
 
-#: pysollib/tile/selectgame.py:361 pysollib/tile/tkstats.py:108
+#: pysollib/tile/selectgame.py:362 pysollib/tile/tkstats.py:108
 #: pysollib/tile/tkstats.py:160 pysollib/tk/selectgame.py:372
 #: pysollib/tk/tkstats.py:112 pysollib/tk/tkstats.py:164
 #: data/glade-translations:11 data/glade-translations:14
 msgid "Lost:"
 msgstr "Проиграл:"
 
-#: pysollib/tile/selectgame.py:362 pysollib/tile/tkstats.py:615
-#: pysollib/tk/selectgame.py:373 pysollib/tk/tkstats.py:736
+#: pysollib/tile/selectgame.py:363 pysollib/tile/tkstats.py:622
+#: pysollib/tk/selectgame.py:373 pysollib/tk/tkstats.py:738
 #: data/glade-translations:18
 msgid "Playing time:"
 msgstr "Игровое время:"
 
-#: pysollib/tile/selectgame.py:363 pysollib/tile/tkstats.py:622
-#: pysollib/tk/selectgame.py:374 pysollib/tk/tkstats.py:743
+#: pysollib/tile/selectgame.py:364 pysollib/tile/tkstats.py:629
+#: pysollib/tk/selectgame.py:374 pysollib/tk/tkstats.py:745
 #: data/glade-translations:19
 msgid "Moves:"
 msgstr "Ходов:"
 
-#: pysollib/tile/selectgame.py:364 pysollib/tk/selectgame.py:375
+#: pysollib/tile/selectgame.py:365 pysollib/tk/selectgame.py:375
 msgid "% won:"
 msgstr "% побед:"
 
-#: pysollib/tile/selectgame.py:396 pysollib/tk/selectgame.py:407
+#: pysollib/tile/selectgame.py:397 pysollib/tk/selectgame.py:407
 msgid "&Rules"
 msgstr "&Правила"
 
-#: pysollib/tile/selectgame.py:476 pysollib/tk/selectgame.py:486
+#: pysollib/tile/selectgame.py:477 pysollib/tk/selectgame.py:486
 msgid "Playable Preview - "
 msgstr "Играемый предпросмотр - "
 
-#: pysollib/tile/selectgame.py:530 pysollib/tk/selectgame.py:540
+#: pysollib/tile/selectgame.py:531 pysollib/tk/selectgame.py:540
 msgid "variable"
 msgstr "переменное кол-во"
 
-#: pysollib/tile/selectgame.py:531 pysollib/tk/selectgame.py:541
+#: pysollib/tile/selectgame.py:532 pysollib/tk/selectgame.py:541
 msgid "unlimited"
 msgstr "неограниченное кол-во"
 
@@ -3104,13 +3140,13 @@ msgstr "Перемещение"
 msgid "No move"
 msgstr "Отмена перемещения"
 
-#: pysollib/tile/soundoptionsdialog.py:94 pysollib/tile/toolbar.py:242
-#: pysollib/tk/soundoptionsdialog.py:92 pysollib/tk/toolbar.py:203
+#: pysollib/tile/soundoptionsdialog.py:94 pysollib/tile/toolbar.py:195
+#: pysollib/tk/soundoptionsdialog.py:92 pysollib/tk/toolbar.py:198
 msgid "Undo"
 msgstr "Отмена"
 
-#: pysollib/tile/soundoptionsdialog.py:95 pysollib/tile/toolbar.py:243
-#: pysollib/tk/soundoptionsdialog.py:93 pysollib/tk/toolbar.py:204
+#: pysollib/tile/soundoptionsdialog.py:95 pysollib/tile/toolbar.py:196
+#: pysollib/tk/soundoptionsdialog.py:93 pysollib/tk/toolbar.py:199
 msgid "Redo"
 msgstr "Повтор"
 
@@ -3153,7 +3189,6 @@ msgid "Music volume:"
 msgstr "Уровень музыки:"
 
 #: pysollib/tile/soundoptionsdialog.py:145
-#: pysollib/tk/soundoptionsdialog.py:144 data/glade-translations:76
 msgid "Enable samples"
 msgstr "Включить звуки"
 
@@ -3176,11 +3211,11 @@ msgstr ""
 "Изменения установок DirectX вступят в силу\n"
 "при следующем запуске "
 
-#: pysollib/tile/statusbar.py:158 pysollib/tk/statusbar.py:157
+#: pysollib/tile/statusbar.py:148 pysollib/tk/statusbar.py:159
 msgid "Moves/Total moves"
 msgstr "Ходов/Всего ходов"
 
-#: pysollib/tile/statusbar.py:160 pysollib/tk/statusbar.py:159
+#: pysollib/tile/statusbar.py:150 pysollib/tk/statusbar.py:161
 msgid "Games played: won/lost"
 msgstr "Игр: выиграно/проиграно"
 
@@ -3209,19 +3244,19 @@ msgstr "Подсветка карты:"
 msgid "Highlight same rank:"
 msgstr "Подсветка одинаковых карт:"
 
-#: pysollib/tile/tkconst.py:105 pysollib/tk/tkconst.py:103
+#: pysollib/tile/tkconst.py:109 pysollib/tk/tkconst.py:107
 msgid "Icons only"
 msgstr "Только пиктограммы"
 
-#: pysollib/tile/tkconst.py:106 pysollib/tk/tkconst.py:104
+#: pysollib/tile/tkconst.py:110 pysollib/tk/tkconst.py:108
 msgid "Text below icons"
 msgstr "Текст под пиктограммами"
 
-#: pysollib/tile/tkconst.py:107 pysollib/tk/tkconst.py:105
+#: pysollib/tile/tkconst.py:111 pysollib/tk/tkconst.py:109
 msgid "Text beside icons"
 msgstr "Текст рядом с пиктограммами"
 
-#: pysollib/tile/tkconst.py:108 pysollib/tk/tkconst.py:106
+#: pysollib/tile/tkconst.py:112 pysollib/tk/tkconst.py:110
 msgid "Text only"
 msgstr "Только текст"
 
@@ -3282,53 +3317,53 @@ msgstr "Текущая сессия"
 msgid "Total:"
 msgstr "Всего:"
 
-#: pysollib/tile/tkstats.py:201 pysollib/tk/tkstats.py:278
+#: pysollib/tile/tkstats.py:204 pysollib/tk/tkstats.py:278
 msgid "No games"
 msgstr "Нет игр"
 
-#: pysollib/tile/tkstats.py:212 pysollib/tk/tkstats.py:289
+#: pysollib/tile/tkstats.py:215 pysollib/tk/tkstats.py:289
 msgid "&All games..."
 msgstr "&Все игры..."
 
-#: pysollib/tile/tkstats.py:214 pysollib/tk/tkstats.py:291
+#: pysollib/tile/tkstats.py:217 pysollib/tk/tkstats.py:291
 msgid "&Reset..."
 msgstr "О&чистить..."
 
-#: pysollib/tile/tkstats.py:380
+#: pysollib/tile/tkstats.py:383
 msgid "&Play this game"
 msgstr "&Выбрать игру"
 
-#: pysollib/tile/tkstats.py:382 pysollib/tile/tkstats.py:451
-#: pysollib/tile/tkstats.py:474 pysollib/tk/tkstats.py:513
-#: pysollib/tk/tkstats.py:579 pysollib/tk/tkstats.py:594
+#: pysollib/tile/tkstats.py:385 pysollib/tile/tkstats.py:458
+#: pysollib/tile/tkstats.py:481 pysollib/tk/tkstats.py:515
+#: pysollib/tk/tkstats.py:581 pysollib/tk/tkstats.py:596
 msgid "&Save to file"
 msgstr "&Сохранить в файл"
 
-#: pysollib/tile/tkstats.py:383 pysollib/tk/tkstats.py:514
+#: pysollib/tile/tkstats.py:386 pysollib/tk/tkstats.py:516
 msgid "&Reset all..."
 msgstr "О&чистить все..."
 
-#: pysollib/tile/tkstats.py:450 pysollib/tk/tkstats.py:579
+#: pysollib/tile/tkstats.py:457 pysollib/tk/tkstats.py:581
 msgid "Session &log..."
 msgstr "&Лог сессии..."
 
-#: pysollib/tile/tkstats.py:473 pysollib/tk/tkstats.py:594
+#: pysollib/tile/tkstats.py:480 pysollib/tk/tkstats.py:596
 msgid "&Full log..."
 msgstr "&Полный лог..."
 
-#: pysollib/tile/tkstats.py:489 pysollib/tk/tkstats.py:609
+#: pysollib/tile/tkstats.py:496 pysollib/tk/tkstats.py:611
 msgid "Highlight piles: "
 msgstr "Подсветка групп: "
 
-#: pysollib/tile/tkstats.py:490 pysollib/tk/tkstats.py:610
+#: pysollib/tile/tkstats.py:497 pysollib/tk/tkstats.py:612
 msgid "Highlight cards: "
 msgstr "Подсветка карт: "
 
-#: pysollib/tile/tkstats.py:491 pysollib/tk/tkstats.py:611
+#: pysollib/tile/tkstats.py:498 pysollib/tk/tkstats.py:613
 msgid "Highlight same rank: "
 msgstr "Подсветка карт одного достоинства: "
 
-#: pysollib/tile/tkstats.py:494 pysollib/tk/tkstats.py:614
+#: pysollib/tile/tkstats.py:501 pysollib/tk/tkstats.py:616
 msgid ""
 "\n"
 "Redeals: "
@@ -3336,7 +3371,7 @@ msgstr ""
 "\n"
 "Раздач: "
 
-#: pysollib/tile/tkstats.py:495 pysollib/tk/tkstats.py:615
+#: pysollib/tile/tkstats.py:502 pysollib/tk/tkstats.py:617
 msgid ""
 "\n"
 "Cards in Talon: "
@@ -3344,7 +3379,7 @@ msgstr ""
 "\n"
 "Карт в колоде: "
 
-#: pysollib/tile/tkstats.py:497 pysollib/tk/tkstats.py:617
+#: pysollib/tile/tkstats.py:504 pysollib/tk/tkstats.py:619
 msgid ""
 "\n"
 "Cards in Waste: "
@@ -3352,7 +3387,7 @@ msgstr ""
 "\n"
 "Карт в сбросе: "
 
-#: pysollib/tile/tkstats.py:499 pysollib/tk/tkstats.py:619
+#: pysollib/tile/tkstats.py:506 pysollib/tk/tkstats.py:621
 msgid ""
 "\n"
 "Cards in Foundations: "
@@ -3360,87 +3395,87 @@ msgstr ""
 "\n"
 "Карт в игре: "
 
-#: pysollib/tile/tkstats.py:502 pysollib/tk/tkstats.py:622
+#: pysollib/tile/tkstats.py:509 pysollib/tk/tkstats.py:624
 msgid "Game status"
 msgstr "Статус игры"
 
-#: pysollib/tile/tkstats.py:505 pysollib/tk/tkstats.py:625
+#: pysollib/tile/tkstats.py:512 pysollib/tk/tkstats.py:627
 msgid "Playing time: "
 msgstr "Игровое время: "
 
-#: pysollib/tile/tkstats.py:506 pysollib/tk/tkstats.py:626
+#: pysollib/tile/tkstats.py:513 pysollib/tk/tkstats.py:628
 msgid "Started at: "
 msgstr "Игра начата: "
 
-#: pysollib/tile/tkstats.py:507 pysollib/tk/tkstats.py:627
+#: pysollib/tile/tkstats.py:514 pysollib/tk/tkstats.py:629
 msgid "Moves: "
 msgstr "Ходов: "
 
-#: pysollib/tile/tkstats.py:508 pysollib/tk/tkstats.py:628
+#: pysollib/tile/tkstats.py:515 pysollib/tk/tkstats.py:630
 msgid "Undo moves: "
 msgstr "Отменено ходов: "
 
-#: pysollib/tile/tkstats.py:509 pysollib/tk/tkstats.py:629
+#: pysollib/tile/tkstats.py:516 pysollib/tk/tkstats.py:631
 msgid "Bookmark moves: "
 msgstr "Ходов по закладкам: "
 
-#: pysollib/tile/tkstats.py:510 pysollib/tk/tkstats.py:630
+#: pysollib/tile/tkstats.py:517 pysollib/tk/tkstats.py:632
 msgid "Demo moves: "
 msgstr "Демо ходов: "
 
-#: pysollib/tile/tkstats.py:511 pysollib/tk/tkstats.py:631
+#: pysollib/tile/tkstats.py:518 pysollib/tk/tkstats.py:633
 msgid "Total player moves: "
 msgstr "Всего ходов игрока:"
 
-#: pysollib/tile/tkstats.py:512 pysollib/tk/tkstats.py:632
+#: pysollib/tile/tkstats.py:519 pysollib/tk/tkstats.py:634
 msgid "Total moves in this game: "
 msgstr "Всего ходов в этой игре: "
 
-#: pysollib/tile/tkstats.py:513 pysollib/tk/tkstats.py:633
+#: pysollib/tile/tkstats.py:520 pysollib/tk/tkstats.py:635
 msgid "Hints: "
 msgstr "Подсказок: "
 
-#: pysollib/tile/tkstats.py:517 pysollib/tk/tkstats.py:637
+#: pysollib/tile/tkstats.py:524 pysollib/tk/tkstats.py:639
 msgid "&Statistics..."
 msgstr "&Статистика..."
 
-#: pysollib/tile/tkstats.py:542 pysollib/tk/tkstats.py:663
+#: pysollib/tile/tkstats.py:549 pysollib/tk/tkstats.py:665
 msgid "N"
 msgstr "N"
 
-#: pysollib/tile/tkstats.py:551 pysollib/tk/tkstats.py:672
+#: pysollib/tile/tkstats.py:558 pysollib/tk/tkstats.py:674
 msgid "Result"
 msgstr "Результат"
 
-#: pysollib/tile/tkstats.py:607 pysollib/tk/tkstats.py:728
+#: pysollib/tile/tkstats.py:614 pysollib/tk/tkstats.py:730
 #: data/glade-translations:21
 msgid "Minimum"
 msgstr "Минимум"
 
-#: pysollib/tile/tkstats.py:608 pysollib/tk/tkstats.py:729
+#: pysollib/tile/tkstats.py:615 pysollib/tk/tkstats.py:731
 #: data/glade-translations:22
 msgid "Maximum"
 msgstr "Максимум"
 
-#: pysollib/tile/tkstats.py:609 pysollib/tk/tkstats.py:730
+#: pysollib/tile/tkstats.py:616 pysollib/tk/tkstats.py:732
 #: data/glade-translations:23
 msgid "Average"
 msgstr "Среднее"
 
-#: pysollib/tile/tkstats.py:629 pysollib/tk/tkstats.py:750
+#: pysollib/tile/tkstats.py:636 pysollib/tk/tkstats.py:752
 #: data/glade-translations:20
 msgid "Total moves:"
 msgstr "Всего ходов:"
 
-#: pysollib/tile/tkstats.py:660 pysollib/tk/tkstats.py:781
+#: pysollib/tile/tkstats.py:667 pysollib/tk/tkstats.py:783
 msgid "No TOP for this game"
 msgstr "TOP для текущей игры отсутствует"
 
-#: pysollib/tile/toolbar.py:236 pysollib/tk/toolbar.py:197
+#: pysollib/tile/toolbar.py:189 pysollib/tk/toolbar.py:192
 msgid "New"
 msgstr "Новая"
 
-#: pysollib/tile/toolbar.py:237 pysollib/tk/toolbar.py:198
+#: pysollib/tile/toolbar.py:190 pysollib/tk/toolbar.py:193
 msgid ""
 "Restart the\n"
 "current game"
@@ -3448,11 +3483,11 @@ msgstr ""
 "Начать текущую игру\n"
 "с начала"
 
-#: pysollib/tile/toolbar.py:239 pysollib/tk/toolbar.py:200
+#: pysollib/tile/toolbar.py:192 pysollib/tk/toolbar.py:195
 msgid "Open"
 msgstr "Открыть"
 
-#: pysollib/tile/toolbar.py:239 pysollib/tk/toolbar.py:200
+#: pysollib/tile/toolbar.py:192 pysollib/tk/toolbar.py:195
 msgid ""
 "Open a\n"
 "saved game"
@@ -3460,78 +3495,66 @@ msgstr ""
 "Открыть\n"
 "сохранённую игру"
 
-#: pysollib/tile/toolbar.py:240 pysollib/tk/toolbar.py:201
+#: pysollib/tile/toolbar.py:193 pysollib/tk/toolbar.py:196
 msgid "Save"
 msgstr "Сохранить"
 
-#: pysollib/tile/toolbar.py:240 pysollib/tk/toolbar.py:201
+#: pysollib/tile/toolbar.py:193 pysollib/tk/toolbar.py:196
 msgid "Save game"
 msgstr "Сохранить игру"
 
-#: pysollib/tile/toolbar.py:242 pysollib/tk/toolbar.py:203
+#: pysollib/tile/toolbar.py:195 pysollib/tk/toolbar.py:198
 msgid "Undo last move"
 msgstr "Отменить последний ход"
 
-#: pysollib/tile/toolbar.py:243 pysollib/tk/toolbar.py:204
+#: pysollib/tile/toolbar.py:196 pysollib/tk/toolbar.py:199
 msgid "Redo last move"
 msgstr "Вернуть ход"
 
-#: pysollib/tile/toolbar.py:244 pysollib/tk/toolbar.py:205
+#: pysollib/tile/toolbar.py:197 pysollib/tk/toolbar.py:200
 msgid "Auto drop cards"
 msgstr "Автоматически сбросить карты"
 
-#: pysollib/tile/toolbar.py:244 pysollib/tk/toolbar.py:205
+#: pysollib/tile/toolbar.py:197 pysollib/tk/toolbar.py:200
 msgid "Autodrop"
 msgstr "Сбросить"
 
-#: pysollib/tile/toolbar.py:245 pysollib/tk/toolbar.py:206
+#: pysollib/tile/toolbar.py:198 pysollib/tk/toolbar.py:201
 msgid "Pause"
 msgstr "Пауза"
 
-#: pysollib/tile/toolbar.py:245 pysollib/tk/toolbar.py:206
+#: pysollib/tile/toolbar.py:198 pysollib/tk/toolbar.py:201
 msgid "Pause game"
 msgstr "Приостановить игру"
 
-#: pysollib/tile/toolbar.py:247 pysollib/tk/toolbar.py:208
+#: pysollib/tile/toolbar.py:200 pysollib/tk/toolbar.py:203
 msgid "View statistics"
 msgstr "Посмотреть статистику"
 
-#: pysollib/tile/toolbar.py:248 pysollib/tk/toolbar.py:209
+#: pysollib/tile/toolbar.py:201 pysollib/tk/toolbar.py:204
 msgid "Rules"
 msgstr "Правила"
 
-#: pysollib/tile/toolbar.py:248 pysollib/tk/toolbar.py:209
+#: pysollib/tile/toolbar.py:201 pysollib/tk/toolbar.py:204
 msgid "Rules for this game"
 msgstr "Правила текущей игры"
 
-#: pysollib/tile/toolbar.py:250 pysollib/tk/toolbar.py:211
+#: pysollib/tile/toolbar.py:203 pysollib/tk/toolbar.py:206
 msgid "Quit"
 msgstr "Выйти"
 
-#: pysollib/tile/toolbar.py:265 pysollib/tk/toolbar.py:225
+#: pysollib/tile/toolbar.py:217 pysollib/tk/toolbar.py:220
 msgid "Player"
 msgstr "Игрок"
 
-#: pysollib/tile/toolbar.py:266 pysollib/tk/toolbar.py:226
+#: pysollib/tile/toolbar.py:218 pysollib/tk/toolbar.py:221
 msgid "Player options"
 msgstr "Установки игрока"
 
-#: pysollib/tile/toolbar.py:485 pysollib/tk/toolbar.py:466
+#: pysollib/tile/toolbar.py:390 pysollib/tk/toolbar.py:431
 msgid "Toolbar"
 msgstr "Панель инструментов"
 
-#: pysollib/tk/menubar.py:84
-msgid "Relief"
-msgstr "Рельеф"
-
-#: pysollib/tk/menubar.py:85
-msgid "Flat"
-msgstr "Плоский"
-
-#: pysollib/tk/menubar.py:89
-msgid "Raised"
-msgstr "Выпуклый"
-
 #: pysollib/tk/playeroptionsdialog.py:120
 msgid "Choose..."
 msgstr "Выбрать..."
@@ -3540,31 +3563,35 @@ msgstr "Выбрать..."
 msgid "Select name"
 msgstr "Выбрать имя"
 
-#: pysollib/util.py:75
+#: pysollib/tk/soundoptionsdialog.py:144 data/glade-translations:76
+msgid "Enable samles"
+msgstr "Включить звуки"
+
+#: pysollib/util.py:81
 msgid "Club"
 msgstr "Треф"
 
-#: pysollib/util.py:75
+#: pysollib/util.py:81
 msgid "Diamond"
 msgstr "Буби"
 
-#: pysollib/util.py:75
+#: pysollib/util.py:81
 msgid "Heart"
 msgstr "Черви"
 
-#: pysollib/util.py:75
+#: pysollib/util.py:81
 msgid "Spade"
 msgstr "Пики"
 
-#: pysollib/util.py:76
+#: pysollib/util.py:82
 msgid "black"
 msgstr "чёрный"
 
-#: pysollib/util.py:76
+#: pysollib/util.py:82
 msgid "red"
 msgstr "красный"
 
-#: pysollib/util.py:101
+#: pysollib/util.py:107
 msgid "cardset"
 msgstr "набор карт"
 
@@ -3596,6 +3623,15 @@ msgstr "Все игры"
 msgid "Set font"
 msgstr "Настроить шрифт"
 
+#~ msgid "Relief"
+#~ msgstr "Рельеф"
+
+#~ msgid "Flat"
+#~ msgstr "Плоский"
+
+#~ msgid "Raised"
+#~ msgstr "Выпуклый"
+
 #~ msgid ""
 #~ "\n"
 #~ "and #%d in the %s of total moves"
diff --git a/pysollib/actions.py b/pysollib/actions.py
index f15d59e9..44ca65f6 100644
--- a/pysollib/actions.py
+++ b/pysollib/actions.py
@@ -126,7 +126,7 @@ class PysolMenubarActions:
 
     def changed(self, *args, **kw):
         assert self.game is not None
-        return apply(self.game.changed, args, kw)
+        return self.game.changed(*args, **kw)
 
 
     #
diff --git a/pysollib/app.py b/pysollib/app.py
index 2b3e7757..985f38fc 100644
--- a/pysollib/app.py
+++ b/pysollib/app.py
@@ -43,6 +43,7 @@ from mfxutil import destruct, Struct
 from mfxutil import pickle, unpickle, UnpicklingError
 from mfxutil import getusername, gethomedir, getprefdir, EnvError
 from mfxutil import latin1_to_ascii
+from mfxutil import Image
 from util import Timer
 from util import CARDSET, IMAGE_EXTENSIONS
 from settings import PACKAGE, VERSION, VERSION_TUPLE, WIN_SYSTEM
@@ -250,7 +251,6 @@ class Options:
 
     # not changeable options
     def setConstants(self):
-        self.win_animation = True
         self.dragcursor = True
         self.randomize_place = False
 
diff --git a/pysollib/game.py b/pysollib/game.py
index 8e6a4a92..395e7621 100644
--- a/pysollib/game.py
+++ b/pysollib/game.py
@@ -1168,12 +1168,12 @@ class Game:
         return False
 
     def winAnimation(self, perfect=0):
-###        if not self.app.opt.win_animation:
-###            return
         if self.preview:
             return
         if not self.app.opt.animations:
             return
+        if not self.app.opt.win_animation:
+            return
         if TOOLKIT == 'gtk':
             return
         if not Image:
diff --git a/pysollib/games/bakersdozen.py b/pysollib/games/bakersdozen.py
index 9feb0269..d3958641 100644
--- a/pysollib/games/bakersdozen.py
+++ b/pysollib/games/bakersdozen.py
@@ -62,7 +62,7 @@ class CastlesInSpain(Game):
         # create layout
         l, s = Layout(self), self.s
         kwdefault(layout, rows=13, playcards=9)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
         # create stacks
         s.talon = self.Talon_Class(l.s.talon.x, l.s.talon.y, self)
diff --git a/pysollib/games/bakersgame.py b/pysollib/games/bakersgame.py
index 9b031a92..ed44831e 100644
--- a/pysollib/games/bakersgame.py
+++ b/pysollib/games/bakersgame.py
@@ -88,7 +88,7 @@ class BakersGame(Game):
         # create layout
         l, s = Layout(self), self.s
         kwdefault(layout, rows=8, reserves=4, texts=0)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
         # create stacks
         s.talon = InitialDealTalonStack(l.s.talon.x, l.s.talon.y, self)
diff --git a/pysollib/games/beleagueredcastle.py b/pysollib/games/beleagueredcastle.py
index 9b06f4cd..f05cabca 100644
--- a/pysollib/games/beleagueredcastle.py
+++ b/pysollib/games/beleagueredcastle.py
@@ -200,7 +200,7 @@ class Fortress(Game):
         # create layout
         l, s = Layout(self), self.s
         kwdefault(layout, rows=10, waste=0, texts=0, playcards=16)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
         # create stacks
         s.talon = self.Talon_Class(l.s.talon.x, l.s.talon.y, self)
@@ -251,7 +251,7 @@ class Bastion(Game):
         # create layout
         l, s = Layout(self), self.s
         kwdefault(layout, rows=10, reserves=2, texts=0, playcards=16)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
         # create stacks
         s.talon = self.Talon_Class(l.s.talon.x, l.s.talon.y, self)
@@ -379,7 +379,7 @@ class CastlesEnd(Bastion):
 class Chessboard_Foundation(SS_FoundationStack):
     def __init__(self, x, y, game, suit, **cap):
         kwdefault(cap, mod=13, min_cards=1, max_move=0)
-        apply(SS_FoundationStack.__init__, (self, x, y, game, suit), cap)
+        SS_FoundationStack.__init__(self, x, y, game, suit, **cap)
 
     def acceptsCards(self, from_stack, cards):
         if not self.cards:
diff --git a/pysollib/games/braid.py b/pysollib/games/braid.py
index b4923bd0..7c43a73a 100644
--- a/pysollib/games/braid.py
+++ b/pysollib/games/braid.py
@@ -59,7 +59,7 @@ class Braid_Hint(DefaultHint):
 class Braid_Foundation(AbstractFoundationStack):
     def __init__(self, x, y, game, suit, **cap):
         kwdefault(cap, mod=13, dir=0, base_rank=NO_RANK, max_move=0)
-        apply(AbstractFoundationStack.__init__, (self, x, y, game, suit), cap)
+        AbstractFoundationStack.__init__(self, x, y, game, suit, **cap)
 
     def acceptsCards(self, from_stack, cards):
         if not AbstractFoundationStack.acceptsCards(self, from_stack, cards):
@@ -294,7 +294,7 @@ class Fort(Braid):
 
 class Backbone_BraidStack(OpenStack):
     def __init__(self, x, y, game, **cap):
-        apply(OpenStack.__init__, (self, x, y, game), cap)
+        OpenStack.__init__(self, x, y, game, **cap)
         self.CARD_YOFFSET = self.game.app.images.CARD_YOFFSET
 
     def basicIsBlocked(self):
diff --git a/pysollib/games/freecell.py b/pysollib/games/freecell.py
index b2ca6a8c..5386ec17 100644
--- a/pysollib/games/freecell.py
+++ b/pysollib/games/freecell.py
@@ -92,7 +92,7 @@ class FreeCell(Game):
         # create layout
         l, s = Layout(self), self.s
         kwdefault(layout, rows=8, reserves=4, texts=0)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
         # create stacks
         s.talon = self.Talon_Class(l.s.talon.x, l.s.talon.y, self)
@@ -340,7 +340,7 @@ class Spidercells(FreeCell):
         # create layout
         l, s = Layout(self), self.s
         kwdefault(layout, rows=8, reserves=4, texts=0)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
         # create stacks
         s.talon = self.Talon_Class(l.s.talon.x, l.s.talon.y, self)
diff --git a/pysollib/games/golf.py b/pysollib/games/golf.py
index 1e77d66f..f8fdafc2 100644
--- a/pysollib/games/golf.py
+++ b/pysollib/games/golf.py
@@ -93,7 +93,7 @@ class Golf_Talon(WasteTalonStack):
 class Golf_Waste(WasteStack):
     def __init__(self, x, y, game, **cap):
         kwdefault(cap, max_move=0, max_accept=1)
-        apply(WasteStack.__init__, (self, x, y, game), cap)
+        WasteStack.__init__(self, x, y, game, **cap)
 
     def acceptsCards(self, from_stack, cards):
         if not WasteStack.acceptsCards(self, from_stack, cards):
diff --git a/pysollib/games/gypsy.py b/pysollib/games/gypsy.py
index 8246c490..7693cec1 100644
--- a/pysollib/games/gypsy.py
+++ b/pysollib/games/gypsy.py
@@ -63,7 +63,7 @@ class Gypsy(Game):
         # create layout
         l, s = Layout(self), self.s
         kwdefault(layout, rows=8, waste=0, texts=1)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
         # create stacks
         s.talon = self.Talon_Class(l.s.talon.x, l.s.talon.y, self)
diff --git a/pysollib/games/harp.py b/pysollib/games/harp.py
index fd94adfd..3b1ea86c 100644
--- a/pysollib/games/harp.py
+++ b/pysollib/games/harp.py
@@ -63,7 +63,7 @@ class DoubleKlondike(Game):
         # create layout
         l, s = Layout(self), self.s
         kwdefault(layout, rows=9, waste=1, texts=1, playcards=19)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
         # create stacks
         s.talon = WasteTalonStack(l.s.talon.x, l.s.talon.y, self,
diff --git a/pysollib/games/klondike.py b/pysollib/games/klondike.py
index 6d600118..5c5d47a6 100644
--- a/pysollib/games/klondike.py
+++ b/pysollib/games/klondike.py
@@ -63,7 +63,7 @@ class Klondike(Game):
         # create layout
         l, s = Layout(self), self.s
         kwdefault(layout, rows=7, waste=1, texts=1, playcards=16)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
         # create stacks
         s.talon = self.Talon_Class(l.s.talon.x, l.s.talon.y, self,
@@ -440,7 +440,7 @@ class Batsford_ReserveStack(ReserveStack):
 class Batsford(Klondike):
     def createGame(self, **layout):
         kwdefault(layout, rows=10, max_rounds=1, playcards=22)
-        l = apply(Klondike.createGame, (self,), layout)
+        l = Klondike.createGame(self, **layout)
         s = self.s
         x, y = l.XM, self.height - l.YS
         s.reserves.append(Batsford_ReserveStack(x, y, self, max_cards=3))
diff --git a/pysollib/games/larasgame.py b/pysollib/games/larasgame.py
index be32a224..ebb5e0b0 100644
--- a/pysollib/games/larasgame.py
+++ b/pysollib/games/larasgame.py
@@ -169,7 +169,7 @@ class LarasGame_Talon(WasteTalonStack):
 
 class LarasGame_RowStack(OpenStack):
     def __init__(self, x, y, game, yoffset = 1, **cap):
-        apply(OpenStack.__init__, (self, x, y, game), cap)
+        OpenStack.__init__(self, x, y, game, **cap)
         self.CARD_YOFFSET = yoffset
 
 
diff --git a/pysollib/games/mahjongg/mahjongg.py b/pysollib/games/mahjongg/mahjongg.py
index bcf9f31e..aa05496d 100644
--- a/pysollib/games/mahjongg/mahjongg.py
+++ b/pysollib/games/mahjongg/mahjongg.py
@@ -85,8 +85,7 @@ class Mahjongg_Foundation(OpenStack):
 
     def __init__(self, x, y, game, suit=ANY_SUIT, **cap):
         kwdefault(cap, max_move=0, max_accept=0, max_cards=game.NCARDS)
-        #apply(AbstractFoundationStack.__init__, (self, x, y, game, suit), cap)
-        apply(OpenStack.__init__, (self, x, y, game), cap)
+        OpenStack.__init__(self, x, y, game, **cap)
 
     def acceptsCards(self, from_stack, cards):
         # We do not accept any cards - pairs will get
@@ -125,7 +124,7 @@ class Mahjongg_RowStack(OpenStack):
     def __init__(self, x, y, game, **cap):
         kwdefault(cap, max_move=1, max_accept=1, max_cards=2,
                   base_rank=NO_RANK)
-        apply(OpenStack.__init__, (self, x, y, game), cap)
+        OpenStack.__init__(self, x, y, game, **cap)
 
     def basicIsBlocked(self):
         # any of above blocks
diff --git a/pysollib/games/mahjongg/shisensho.py b/pysollib/games/mahjongg/shisensho.py
index bd0e9faa..de0f1e2e 100644
--- a/pysollib/games/mahjongg/shisensho.py
+++ b/pysollib/games/mahjongg/shisensho.py
@@ -71,7 +71,7 @@ class Shisen_Hint(AbstractHint):
 class Shisen_Foundation(AbstractFoundationStack):
     def __init__(self, x, y, game, suit=ANY_SUIT, **cap):
         kwdefault(cap, max_move=0, max_accept=0, max_cards=game.NCARDS)
-        apply(AbstractFoundationStack.__init__, (self, x, y, game, suit), cap)
+        AbstractFoundationStack.__init__(self, x, y, game, suit, **cap)
 
     def acceptsCards(self, from_stack, cards):
         # We do not accept any cards - pairs will get
diff --git a/pysollib/games/napoleon.py b/pysollib/games/napoleon.py
index 71d25807..82f3e6d4 100644
--- a/pysollib/games/napoleon.py
+++ b/pysollib/games/napoleon.py
@@ -60,7 +60,7 @@ class Napoleon_RowStack(UD_SS_RowStack):
 class Napoleon_ReserveStack(BasicRowStack):
     def __init__(self, x, y, game, **cap):
         kwdefault(cap, max_move=1, max_accept=0)
-        apply(BasicRowStack.__init__, (self, x, y, game), cap)
+        BasicRowStack.__init__(self, x, y, game, **cap)
 
 
 class Napoleon_SingleFreeCell(ReserveStack):
diff --git a/pysollib/games/numerica.py b/pysollib/games/numerica.py
index fde489bd..f3320592 100644
--- a/pysollib/games/numerica.py
+++ b/pysollib/games/numerica.py
@@ -250,7 +250,7 @@ class PussInTheCorner_Talon(OpenTalonStack):
 class PussInTheCorner_Foundation(SS_FoundationStack):
     def __init__(self, x, y, game, **cap):
         kwdefault(cap, base_suit=ANY_SUIT)
-        apply(SS_FoundationStack.__init__, (self, x, y, game, ANY_SUIT), cap)
+        SS_FoundationStack.__init__(self, x, y, game, ANY_SUIT, **cap)
     def acceptsCards(self, from_stack, cards):
         if not SS_FoundationStack.acceptsCards(self, from_stack, cards):
             return False
diff --git a/pysollib/games/special/tarock.py b/pysollib/games/special/tarock.py
index 7f84e125..3ec65eef 100644
--- a/pysollib/games/special/tarock.py
+++ b/pysollib/games/special/tarock.py
@@ -84,7 +84,7 @@ class Ponytail_Foundation(Braid_Foundation):
 class Tarock_OpenStack(OpenStack):
     def __init__(self, x, y, game, yoffset=-1, **cap):
         kwdefault(cap, max_move=UNLIMITED_MOVES, max_accept=UNLIMITED_ACCEPTS)
-        apply(OpenStack.__init__, (self, x, y, game), cap)
+        OpenStack.__init__(self, x, y, game, **cap)
         if yoffset < 0:
             yoffset = game.app.images.CARD_YOFFSET
         self.CARD_YOFFSET = yoffset
@@ -845,7 +845,7 @@ class Cavalier(AbstractTarockGame):
         # Create layout
         l, s = Layout(self), self.s
         kwdefault(layout, rows=18, playcards=19)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create foundations
diff --git a/pysollib/games/spider.py b/pysollib/games/spider.py
index b21c3ac0..f404c8c0 100644
--- a/pysollib/games/spider.py
+++ b/pysollib/games/spider.py
@@ -85,7 +85,7 @@ class Spider_SS_Foundation(AbstractFoundationStack):
     def __init__(self, x, y, game, suit=ANY_SUIT, **cap):
         kwdefault(cap, dir=-1, base_rank=KING,
                   min_accept=13, max_accept=13, max_move=0)
-        apply(AbstractFoundationStack.__init__, (self, x, y, game, suit), cap)
+        AbstractFoundationStack.__init__(self, x, y, game, suit, **cap)
 
     def acceptsCards(self, from_stack, cards):
         if not AbstractFoundationStack.acceptsCards(self, from_stack, cards):
@@ -128,7 +128,7 @@ class RelaxedSpider(Game):
         # create layout
         l, s = Layout(self), self.s
         kwdefault(layout, rows=10, waste=0, texts=1, playcards=23)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
         # create stacks
         s.talon = self.Talon_Class(l.s.talon.x, l.s.talon.y, self)
@@ -466,7 +466,7 @@ class RougeEtNoir(Game):
         # create layout
         l, s = Layout(self), self.s
         kwdefault(layout, rows=10, waste=0, texts=1, playcards=23)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
         # create stacks
         s.talon = self.Talon_Class(l.s.talon.x, l.s.talon.y, self)
@@ -724,7 +724,7 @@ class ScorpionHead(Scorpion):
         # create layout
         l, s = Layout(self), self.s
         kwdefault(layout, rows=7, reserves=4)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # create stacks
diff --git a/pysollib/games/terrace.py b/pysollib/games/terrace.py
index 27f28756..37b820e6 100644
--- a/pysollib/games/terrace.py
+++ b/pysollib/games/terrace.py
@@ -57,7 +57,7 @@ class Terrace_Talon(WasteTalonStack):
 class Terrace_AC_Foundation(AC_FoundationStack):
     def __init__(self, x, y, game, suit, **cap):
         kwdefault(cap, mod=13, min_cards=1, max_move=0)
-        apply(AC_FoundationStack.__init__, (self, x, y, game, suit), cap)
+        AC_FoundationStack.__init__(self, x, y, game, suit, **cap)
 
     def acceptsCards(self, from_stack, cards):
         if self.game.getState() == 0:
@@ -72,7 +72,7 @@ class Terrace_AC_Foundation(AC_FoundationStack):
 class Terrace_SS_Foundation(SS_FoundationStack):
     def __init__(self, x, y, game, suit, **cap):
         kwdefault(cap, mod=13, min_cards=1, max_move=0)
-        apply(SS_FoundationStack.__init__, (self, x, y, game, suit), cap)
+        SS_FoundationStack.__init__(self, x, y, game, suit, **cap)
 
     def acceptsCards(self, from_stack, cards):
         if self.game.getState() == 0:
@@ -87,7 +87,7 @@ class Terrace_SS_Foundation(SS_FoundationStack):
 class Terrace_RowStack(AC_RowStack):
     def __init__(self, x, y, game, **cap):
         kwdefault(cap, mod=13, max_move=1)
-        apply(AC_RowStack.__init__, (self, x, y, game), cap)
+        AC_RowStack.__init__(self, x, y, game, **cap)
 
     def acceptsCards(self, from_stack, cards):
         if self.game.getState() == 0:
diff --git a/pysollib/games/threepeaks.py b/pysollib/games/threepeaks.py
index 5e562a93..6d3e75c3 100644
--- a/pysollib/games/threepeaks.py
+++ b/pysollib/games/threepeaks.py
@@ -78,7 +78,7 @@ class ThreePeaks_RowStack(OpenStack):
     def __init__(self, x, y, game, **cap):
         kwdefault(cap, max_move=1, max_accept=0, max_cards=1,
                   base_rank=ANY_RANK)
-        apply(OpenStack.__init__, (self, x, y, game), cap)
+        OpenStack.__init__(self, x, y, game, **cap)
 
     def basicIsBlocked(self):
         r, step = self.game.s.rows, (3, 4, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9)
diff --git a/pysollib/games/ultra/dashavatara.py b/pysollib/games/ultra/dashavatara.py
index 3d435652..e169eef8 100644
--- a/pysollib/games/ultra/dashavatara.py
+++ b/pysollib/games/ultra/dashavatara.py
@@ -49,7 +49,7 @@ class Dashavatara_FoundationStack(AbstractFoundationStack):
 
     def __init__(self, x, y, game, suit, **cap):
         kwdefault(cap, max_move=0, max_cards=12)
-        apply(SS_FoundationStack.__init__, (self, x, y, game, suit), cap)
+        SS_FoundationStack.__init__(self, x, y, game, suit, **cap)
 
     def updateText(self):
         AbstractFoundationStack.updateText(self)
@@ -60,7 +60,7 @@ class Journey_Foundation(AbstractFoundationStack):
 
     def __init__(self, x, y, game, suit, **cap):
         kwdefault(cap, mod=12, dir=0, base_rank=NO_RANK, max_move=0)
-        apply(AbstractFoundationStack.__init__, (self, x, y, game, suit), cap)
+        AbstractFoundationStack.__init__(self, x, y, game, suit, **cap)
 
     def acceptsCards(self, from_stack, cards):
         if not AbstractFoundationStack.acceptsCards(self, from_stack, cards):
@@ -80,7 +80,7 @@ class AppachansWaterfall_Foundation(AbstractFoundationStack):
 
     def __init__(self, x, y, game, suit, **cap):
         kwdefault(cap, base_suit=0, mod=12, max_cards=120, max_move=0)
-        apply(AbstractFoundationStack.__init__, (self, x, y, game, suit), cap)
+        AbstractFoundationStack.__init__(self, x, y, game, suit, **cap)
 
     def acceptsCards(self, from_stack, cards):
         if not (from_stack in self.game.s.rows and
@@ -106,7 +106,7 @@ class Dashavatara_OpenStack(OpenStack):
     def __init__(self, x, y, game, yoffset, **cap):
         kwdefault(cap, max_move=UNLIMITED_MOVES, max_cards=UNLIMITED_CARDS,
                   max_accept=UNLIMITED_ACCEPTS, base_rank=0, dir=-1)
-        apply(OpenStack.__init__, (self, x, y, game), cap)
+        OpenStack.__init__(self, x, y, game, **cap)
         self.CARD_YOFFSET = yoffset
 
     def currentForce(self, card):
@@ -296,7 +296,7 @@ class Dashavatara_TableauStack(Dashavatara_OpenStack):
 
     def __init__(self, x, y, game, base_rank, yoffset, **cap):
         kwdefault(cap, dir=3, max_move=99, max_cards=4, max_accept=1, base_rank=base_rank)
-        apply(OpenStack.__init__, (self, x, y, game), cap)
+        OpenStack.__init__(self, x, y, game, **cap)
         self.CARD_YOFFSET = yoffset
 
     def acceptsCards(self, from_stack, cards):
@@ -318,7 +318,7 @@ class Dashavatara_ReserveStack(ReserveStack):
 
     def __init__(self, x, y, game, **cap):
         kwdefault(cap, max_cards=1, max_accept=1, base_rank=ANY_RANK)
-        apply(OpenStack.__init__, (self, x, y, game), cap)
+        OpenStack.__init__(self, x, y, game, **cap)
 
     def acceptsCards(self, from_stack, cards):
         return (ReserveStack.acceptsCards(self, from_stack, cards)
@@ -524,7 +524,7 @@ class Balarama(AbstractDashavataraGame):
     def createGame(self, **layout):
         l, s = Layout(self), self.s
         kwdefault(layout, rows=16, reserves=4, texts=0)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create foundations
@@ -670,7 +670,7 @@ class Matsya(AbstractDashavataraGame):
     def createGame(self, max_rounds=1, num_deal=1, **layout):
         l, s = Layout(self), self.s
         kwdefault(layout, rows=10, waste=1)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create talon
diff --git a/pysollib/games/ultra/hanafuda.py b/pysollib/games/ultra/hanafuda.py
index 01a0b98b..066ef94b 100644
--- a/pysollib/games/ultra/hanafuda.py
+++ b/pysollib/games/ultra/hanafuda.py
@@ -223,7 +223,7 @@ class Oonsoo(AbstractFlowerGame):
         l, s = Layout(self), self.s
         kwdefault(layout, rows=self.Rows, reserves=self.Reserves,
                   texts=1, playcards=20)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create stacks
@@ -636,7 +636,7 @@ class Sumo(AbstractFlowerGame):
     def createGame(self, **layout):
         l, s = Layout(self), self.s
         kwdefault(layout, rows=8, reserves=2, texts=0, playcards=16)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create stacks
@@ -681,7 +681,7 @@ class BigSumo(AbstractFlowerGame):
     def createGame(self, **layout):
         l, s = Layout(self), self.s
         kwdefault(layout, rows=10, reserves=4, texts=0, playcards=20)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create stacks
@@ -727,7 +727,7 @@ class Samuri(AbstractFlowerGame):
     def createGame(self, max_rounds=1, num_deal=1, **layout):
         l, s = Layout(self), self.s
         kwdefault(layout, rows=self.Rows, waste=1, texts=1, playcards=21)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create stacks
@@ -808,7 +808,7 @@ class LittleEasy(AbstractFlowerGame):
     def createGame(self, max_rounds=-1, num_deal=3, **layout):
         l, s = Layout(self), self.s
         kwdefault(layout, rows=self.Rows, waste=1, texts=1, playcards=self.PlayCards)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create stacks
@@ -899,7 +899,7 @@ class JustForFun(AbstractFlowerGame):
     def createGame(self, **layout):
         l, s = Layout(self), self.s
         kwdefault(layout, rows=self.Rows, reserves=self.Reserves, texts=0, playcards=22)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create stacks
@@ -976,7 +976,7 @@ class Paulownia(AbstractFlowerGame):
     def createGame(self, max_rounds=-1, num_deal=1, **layout):
         l, s = Layout(self), self.s
         kwdefault(layout, rows=8, waste=1)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create talon
diff --git a/pysollib/games/ultra/hanafuda1.py b/pysollib/games/ultra/hanafuda1.py
index 60abacba..088aa641 100644
--- a/pysollib/games/ultra/hanafuda1.py
+++ b/pysollib/games/ultra/hanafuda1.py
@@ -61,7 +61,7 @@ class Paulownia(AbstractFlowerGame):
     def createGame(self, **layout):
         l, s = Layout(self), self.s
         kwdefault(layout, rows=8, waste=1)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create talon
@@ -585,7 +585,7 @@ class FlowerArrangement_Hint(AbstractHint):
 class FlowerArrangement_TableauStack(Flower_OpenStack):
     def __init__(self, x, y, game, yoffset, **cap):
         kwdefault(cap, dir=-1, max_move=1, max_cards=4, max_accept=1, base_rank=3)
-        apply(OpenStack.__init__, (self, x, y, game), cap)
+        OpenStack.__init__(self, x, y, game, **cap)
         self.CARD_YOFFSET = yoffset
 
     def acceptsCards(self, from_stack, cards):
diff --git a/pysollib/games/ultra/hanafuda_common.py b/pysollib/games/ultra/hanafuda_common.py
index 933dc4cb..c6433c04 100644
--- a/pysollib/games/ultra/hanafuda_common.py
+++ b/pysollib/games/ultra/hanafuda_common.py
@@ -85,7 +85,7 @@ class Flower_FoundationStack(AbstractFoundationStack):
 
     def __init__(self, x, y, game, suit, **cap):
         kwdefault(cap, max_cards=12, max_move=0, base_rank=ANY_RANK, base_suit=ANY_SUIT)
-        apply(AbstractFoundationStack.__init__, (self, x, y, game, suit), cap)
+        AbstractFoundationStack.__init__(self, x, y, game, suit, **cap)
 
     def updateText(self):
         AbstractFoundationStack.updateText(self)
@@ -143,7 +143,7 @@ class Gaji_Foundation(Flower_FoundationStack):
 
     def __init__(self, x, y, game, suit, **cap):
         kwdefault(cap, max_move=1, min_cards=1, max_accept=1, base_suit=ANY_SUIT)
-        apply(Flower_FoundationStack.__init__, (self, x, y, game, suit), cap)
+        Flower_FoundationStack.__init__(self, x, y, game, suit, **cap)
         self.CARD_YOFFSET = self.game.app.images.CARD_YOFFSET
 
     def acceptsCards(self, from_stack, cards):
@@ -181,7 +181,7 @@ class MatsuKiri_Foundation(Flower_FoundationStack):
 
     def __init__(self, x, y, game, suit, **cap):
         kwdefault(cap, max_move=0, max_cards=48, max_accept=4, min_accept=4)
-        apply(AbstractFoundationStack.__init__, (self, x, y, game, suit), cap)
+        AbstractFoundationStack.__init__(self, x, y, game, suit, **cap)
         self.CARD_YOFFSET = self.game.app.images.CARDH / 10
 
     def acceptsCards(self, from_stack, cards):
@@ -202,7 +202,7 @@ class GreatWall_FoundationStack(Flower_FoundationStack):
 
     def __init__(self, x, y, game, suit, **cap):
         kwdefault(cap, max_cards=48, max_move=1, min_accept=1, max_accept=1)
-        apply(Flower_FoundationStack.__init__, (self, x, y, game, suit), cap)
+        Flower_FoundationStack.__init__(self, x, y, game, suit, **cap)
         self.CARD_YOFFSET = self.game.app.images.CARDH / 20
 
     def acceptsCards(self, from_stack, cards):
@@ -239,7 +239,7 @@ class FourWinds_Foundation(Flower_FoundationStack):
 class Queue_Foundation(AbstractFoundationStack):
     def __init__(self, x, y, game, suit, **cap):
         kwdefault(cap, mod=12, dir=0, base_suit=ANY_SUIT, max_move=0)
-        apply(AbstractFoundationStack.__init__, (self, x, y, game, suit), cap)
+        AbstractFoundationStack.__init__(self, x, y, game, suit, **cap)
 
     def acceptsCards(self, from_stack, cards):
         if not AbstractFoundationStack.acceptsCards(self, from_stack, cards):
@@ -267,7 +267,7 @@ class Flower_OpenStack(OpenStack):
 
     def __init__(self, x, y, game, yoffset, **cap):
         kwdefault(cap, max_move=99, max_cards=99, max_accept=99, base_rank=0, dir=1)
-        apply(OpenStack.__init__, (self, x, y, game), cap)
+        OpenStack.__init__(self, x, y, game, **cap)
         self.CARD_YOFFSET = yoffset
 
     def isHanafudaSequence(self, cards, strictness=1):
diff --git a/pysollib/games/ultra/hexadeck.py b/pysollib/games/ultra/hexadeck.py
index cf54dd19..5a961494 100644
--- a/pysollib/games/ultra/hexadeck.py
+++ b/pysollib/games/ultra/hexadeck.py
@@ -48,7 +48,7 @@ from pysollib.pysoltk import MfxCanvasText
 class HexADeck_FoundationStack(SS_FoundationStack):
     def __init__(self, x, y, game, suit, **cap):
         kwdefault(cap, max_move=0, max_cards=12)
-        apply(SS_FoundationStack.__init__, (self, x, y, game, suit), cap)
+        SS_FoundationStack.__init__(self, x, y, game, suit, **cap)
 
 
 class HexATrump_Foundation(HexADeck_FoundationStack):
@@ -64,7 +64,7 @@ class HexATrump_Foundation(HexADeck_FoundationStack):
 class Merlins_Foundation(AbstractFoundationStack):
     def __init__(self, x, y, game, suit, **cap):
         kwdefault(cap, mod=16, dir=0, base_rank=NO_RANK, max_move=0)
-        apply(AbstractFoundationStack.__init__, (self, x, y, game, suit), cap)
+        AbstractFoundationStack.__init__(self, x, y, game, suit, **cap)
 
     def acceptsCards(self, from_stack, cards):
         if not AbstractFoundationStack.acceptsCards(self, from_stack, cards):
@@ -87,7 +87,7 @@ class HexADeck_OpenStack(OpenStack):
 
     def __init__(self, x, y, game, yoffset, **cap):
         kwdefault(cap, max_move=UNLIMITED_MOVES, max_accept=UNLIMITED_ACCEPTS, dir=-1)
-        apply(OpenStack.__init__, (self, x, y, game), cap)
+        OpenStack.__init__(self, x, y, game, **cap)
         self.CARD_YOFFSET = yoffset
 
     def isRankSequence(self, cards, dir=None):
@@ -405,7 +405,7 @@ class HexAKlon(Game):
     def createGame(self, max_rounds=-1, num_deal=1, **layout):
         l, s = Layout(self), self.s
         kwdefault(layout, rows=8, waste=1, playcards=20)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create talon
@@ -464,7 +464,7 @@ class HexAKlonByThrees(Game):
     def createGame(self, max_rounds=-1, num_deal=3, **layout):
         l, s = Layout(self), self.s
         kwdefault(layout, rows=8, waste=1, playcards=20)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create talon
@@ -523,7 +523,7 @@ class KingOnlyHexAKlon(Game):
     def createGame(self, max_rounds=-1, num_deal=1, **layout):
         l, s = Layout(self), self.s
         kwdefault(layout, rows=8, waste=1, playcards=20)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create talon
@@ -593,7 +593,7 @@ class KlondikePlus16(Game):
     def createGame(self, max_rounds=2, num_deal=1, **layout):
         l, s = Layout(self), self.s
         kwdefault(layout, rows=8, waste=1, playcards=20)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create talon
@@ -649,7 +649,7 @@ class TheFamiliar(Game):
     def createGame(self, max_rounds=2, num_deal=1, **layout):
         l, s = Layout(self), self.s
         kwdefault(layout, rows=8, waste=1, playcards=20)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create talon
@@ -711,7 +711,7 @@ class TwoFamiliars(Game):
     def createGame(self, max_rounds=2, num_deal=1, **layout):
         l, s = Layout(self), self.s
         kwdefault(layout, rows=12, waste=1, playcards=20)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create talon
@@ -773,7 +773,7 @@ class TenByEight(Game):
     def createGame(self, max_rounds=-1, num_deal=1, **layout):
         l, s = Layout(self), self.s
         kwdefault(layout, rows=10, waste=1, playcards=30)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create talon
@@ -831,7 +831,7 @@ class Drawbridge(Game):
     def createGame(self, max_rounds=2, num_deal=1, **layout):
         l, s = Layout(self), self.s
         kwdefault(layout, rows=7, waste=1, playcards=20)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create talon
@@ -887,7 +887,7 @@ class DoubleDrawbridge(Game):
     def createGame(self, max_rounds=2, num_deal=1, **layout):
         l, s = Layout(self), self.s
         kwdefault(layout, rows=10, waste=1, playcards=20)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create talon
@@ -943,7 +943,7 @@ class HiddenPassages(Game):
     def createGame(self, max_rounds=2, num_deal=1, **layout):
         l, s = Layout(self), self.s
         kwdefault(layout, rows=7, waste=1, playcards=20)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create talon
@@ -1012,7 +1012,7 @@ class CluitjarsLair(Game):
     def createGame(self, max_rounds=1, num_deal=1, **layout):
         l, s = Layout(self), self.s
         kwdefault(layout, rows=7, waste=1, playcards=20)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create talon
@@ -1219,7 +1219,7 @@ class MagesGame(Game):
     def createGame(self, max_rounds=1, num_deal=1, **layout):
         l, s = Layout(self), self.s
         kwdefault(layout, rows=12, texts=0, playcards=20)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create talon
diff --git a/pysollib/games/ultra/matrix.py b/pysollib/games/ultra/matrix.py
index 0a81dca2..1a8554d2 100644
--- a/pysollib/games/ultra/matrix.py
+++ b/pysollib/games/ultra/matrix.py
@@ -50,7 +50,7 @@ class Matrix_RowStack(OpenStack):
     def __init__(self, x, y, game, **cap):
         kwdefault(cap, max_move=1, max_accept=1, max_cards=1,
                     base_rank=ANY_RANK)
-        apply(OpenStack.__init__, (self, x, y, game), cap)
+        OpenStack.__init__(self, x, y, game, **cap)
 
     def canFlipCard(self):
         return 0
diff --git a/pysollib/games/ultra/mughal.py b/pysollib/games/ultra/mughal.py
index 8d840239..f100657e 100644
--- a/pysollib/games/ultra/mughal.py
+++ b/pysollib/games/ultra/mughal.py
@@ -48,7 +48,7 @@ class Mughal_FoundationStack(AbstractFoundationStack):
 
     def __init__(self, x, y, game, suit, **cap):
         kwdefault(cap, max_move=0)
-        apply(SS_FoundationStack.__init__, (self, x, y, game, suit), cap)
+        SS_FoundationStack.__init__(self, x, y, game, suit, **cap)
 
     def updateText(self):
         AbstractFoundationStack.updateText(self)
@@ -59,7 +59,7 @@ class Triumph_Foundation(AbstractFoundationStack):
 
     def __init__(self, x, y, game, suit, **cap):
         kwdefault(cap, mod=12, dir=0, base_rank=NO_RANK, max_move=0)
-        apply(AbstractFoundationStack.__init__, (self, x, y, game, suit), cap)
+        AbstractFoundationStack.__init__(self, x, y, game, suit, **cap)
 
     def acceptsCards(self, from_stack, cards):
 
@@ -85,7 +85,7 @@ class Mughal_OpenStack(OpenStack):
     def __init__(self, x, y, game, yoffset, **cap):
         kwdefault(cap, max_move=UNLIMITED_MOVES, max_cards=UNLIMITED_CARDS,
                   max_accept=UNLIMITED_ACCEPTS, base_rank=0, dir=-1)
-        apply(OpenStack.__init__, (self, x, y, game), cap)
+        OpenStack.__init__(self, x, y, game, **cap)
         self.CARD_YOFFSET = yoffset
 
     def isRankSequence(self, cards, dir=None):
@@ -436,7 +436,7 @@ class Shamsher(AbstractMughalGame):
     def createGame(self, **layout):
         l, s = Layout(self), self.s
         kwdefault(layout, rows=14, reserves=4, texts=0)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create foundations
@@ -537,7 +537,7 @@ class Tipati(AbstractMughalGame):
     def createGame(self, max_rounds=1, num_deal=1, **layout):
         l, s = Layout(self), self.s
         kwdefault(layout, rows=8, waste=1)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
 
         # Create talon
@@ -953,7 +953,7 @@ class Dikapala_TableauStack(Mughal_OpenStack):
 
     def __init__(self, x, y, game, base_rank, yoffset, **cap):
         kwdefault(cap, dir=3, max_move=99, max_cards=4, max_accept=1, base_rank=base_rank)
-        apply(OpenStack.__init__, (self, x, y, game), cap)
+        OpenStack.__init__(self, x, y, game, **cap)
         self.CARD_YOFFSET = yoffset
 
     def acceptsCards(self, from_stack, cards):
@@ -975,7 +975,7 @@ class Dikapala_ReserveStack(ReserveStack):
 
     def __init__(self, x, y, game, **cap):
         kwdefault(cap, max_cards=1, max_accept=1, base_rank=ANY_RANK)
-        apply(OpenStack.__init__, (self, x, y, game), cap)
+        OpenStack.__init__(self, x, y, game, **cap)
 
     def acceptsCards(self, from_stack, cards):
         return (ReserveStack.acceptsCards(self, from_stack, cards)
diff --git a/pysollib/games/ultra/tarock.py b/pysollib/games/ultra/tarock.py
index 17d65c12..e60aa8b0 100644
--- a/pysollib/games/ultra/tarock.py
+++ b/pysollib/games/ultra/tarock.py
@@ -50,7 +50,7 @@ class Tarock_OpenStack(OpenStack):
 
     def __init__(self, x, y, game, yoffset=-1, **cap):
         kwdefault(cap, max_move=UNLIMITED_MOVES, max_accept=UNLIMITED_ACCEPTS, dir=-1)
-        apply(OpenStack.__init__, (self, x, y, game), cap)
+        OpenStack.__init__(self, x, y, game, **cap)
         if yoffset < 0:
             yoffset = game.app.images.CARD_YOFFSET
         self.CARD_YOFFSET = yoffset
diff --git a/pysollib/games/unionsquare.py b/pysollib/games/unionsquare.py
index eb8cefdf..af9eaea5 100644
--- a/pysollib/games/unionsquare.py
+++ b/pysollib/games/unionsquare.py
@@ -62,7 +62,7 @@ class UnionSquare_RowStack(OpenStack):
     def __init__(self, x, y, game, **cap):
         kwdefault(cap, mod=8192, dir=0, base_rank=ANY_RANK,
                   max_accept=1, max_move=1)
-        apply(OpenStack.__init__, (self, x, y, game), cap)
+        OpenStack.__init__(self, x, y, game, **cap)
         #self.CARD_YOFFSET = 1
 
     def acceptsCards(self, from_stack, cards):
diff --git a/pysollib/games/yukon.py b/pysollib/games/yukon.py
index 3aea10b8..b70c453a 100644
--- a/pysollib/games/yukon.py
+++ b/pysollib/games/yukon.py
@@ -91,7 +91,7 @@ class Yukon(Game):
         # create layout
         l, s = Layout(self), self.s
         kwdefault(layout, rows=7, texts=0, playcards=25)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
         # create stacks
         s.talon = self.Talon_Class(l.s.talon.x, l.s.talon.y, self)
@@ -299,7 +299,7 @@ class RussianPoint(Rushdike):
 class Abacus_Foundation(SS_FoundationStack):
     def __init__(self, x, y, game, suit, **cap):
         kwdefault(cap, base_rank=suit, mod=13, dir=suit+1, max_move=0)
-        apply(SS_FoundationStack.__init__, (self, x, y, game, suit), cap)
+        SS_FoundationStack.__init__(self, x, y, game, suit, **cap)
 
 
 class Abacus_RowStack(Yukon_SS_RowStack):
@@ -407,7 +407,7 @@ class TenAcross(Yukon):
         # create layout
         l, s = Layout(self), self.s
         kwdefault(layout, rows=10, reserves=2, texts=0)
-        apply(self.Layout_Method, (l,), layout)
+        self.Layout_Method(l, **layout)
         self.setSize(l.size[0], l.size[1])
         # create stacks
         s.talon = InitialDealTalonStack(l.s.talon.x, l.s.talon.y, self)
diff --git a/pysollib/images.py b/pysollib/images.py
index 1851df31..704d4838 100644
--- a/pysollib/images.py
+++ b/pysollib/images.py
@@ -38,6 +38,8 @@
 import os
 
 # PySol imports
+from settings import TOOLKIT
+from mfxutil import Image, ImageTk
 
 # Toolkit imports
 from pysoltk import tkversion, loadImage, copyImage, createImage, shadowImage
@@ -87,7 +89,9 @@ class Images:
         self._shadow = []
         self._xshadow = []
         self._shade = []
-        self._shadow_cards = {}          # key: (suit, rank)
+        self._shadow_cards = {}         # key: (suit, rank)
+        self._pil_shadow = {}           # key: (width, height)
+        self._pil_shadow_image = None
 
     def destruct(self):
         pass
@@ -202,28 +206,32 @@ class Images:
                 pass
             if progress: progress.update(step=pstep)
         # shadow
-        for i in range(self.cs.nshadows):
-            if fast:
-                self._shadow.append(None)
-            else:
-                name = "shadow%02d.%s" % (i, ext)
-                try:
-                    im = self.__loadCard(name, check_w=0, check_h=0)
-                except:
-                    im = None
-                self._shadow.append(im)
+        if TOOLKIT == 'tk' and Image:
+            fn = self.d.findImage('shadow', 'images')
+            self._pil_shadow_image = Image.open(fn).convert('RGBA')
+        else:
+            for i in range(self.cs.nshadows):
+                if fast:
+                    self._shadow.append(None)
+                else:
+                    name = "shadow%02d.%s" % (i, ext)
+                    try:
+                        im = self.__loadCard(name, check_w=0, check_h=0)
+                    except:
+                        im = None
+                    self._shadow.append(im)
 
-            if fast:
-                self._xshadow.append(None)
-            elif i > 0: # skip 0
-                name = "xshadow%02d.%s" % (i, ext)
-                try:
-                    im = self.__loadCard(name, check_w=0, check_h=0)
-                except:
-                    im = None
-                self._xshadow.append(im)
+                if fast:
+                    self._xshadow.append(None)
+                elif i > 0: # skip 0
+                    name = "xshadow%02d.%s" % (i, ext)
+                    try:
+                        im = self.__loadCard(name, check_w=0, check_h=0)
+                    except:
+                        im = None
+                    self._xshadow.append(im)
 
-            if progress: progress.update(step=pstep)
+                if progress: progress.update(step=pstep)
         # shade
         if fast:
             self._shade.append(None)
@@ -235,6 +243,8 @@ class Images:
         #
         self._bottom = self._bottom_positive
         self._letter = self._letter_positive
+        #
+
         return 1
 
     def getFace(self, deck, suit, rank):
@@ -285,6 +295,46 @@ class Images:
                 return None
             return self._xshadow[ncards]
 
+    def getShadowPIL(self, stack, cards):
+        x0, y0 = stack.getPositionFor(cards[0])
+        x1, y1 = stack.getPositionFor(cards[-1])
+        x0, x1 = min(x1, x0), max(x1, x0)
+        y0, y1 = min(y1, y0), max(y1, y0)
+        x1 = x1 + self.CARDW
+        y1 = y1 + self.CARDH
+        #xx0, yy0 = x0, y0
+        w, h = x1-x0, y1-y0
+        if (w,h) in self._pil_shadow:
+            return self._pil_shadow[(w,h)]
+        # create mask
+        mask = Image.new('RGBA', (w, h))
+        for c in cards:
+            x, y = stack.getPositionFor(c)
+            x, y = x-x0, y-y0
+            im = c._active_image._pil_image
+            mask.paste(im, (x, y), im)
+        # create shadow
+        sh = self._pil_shadow_image
+        shw, shh = sh.size
+        shadow = Image.new('RGBA', (w, h))
+        x = 0
+        while x < w:
+            y = 0
+            while y < h:
+                shadow.paste(sh, (x,y))
+                y += shh
+            x += shw
+        shadow = Image.composite(shadow, mask, mask)
+        # crop image (for speed)
+        sx, sy = self.SHADOW_XOFFSET, self.SHADOW_YOFFSET
+        mask = mask.crop((sx,sy,w,h))
+        tmp = Image.new('RGBA', (w-sx,h-sy))
+        shadow.paste(tmp, (0,0), mask)
+        #
+        shadow = ImageTk.PhotoImage(shadow)
+        self._pil_shadow[(w,h)] = shadow
+        return shadow
+
     def getShade(self):
         return self._shade[self._shade_index]
 
diff --git a/pysollib/layout.py b/pysollib/layout.py
index fb3ba24f..4c3daf2d 100644
--- a/pysollib/layout.py
+++ b/pysollib/layout.py
@@ -263,7 +263,7 @@ class Layout:
         if layout_stack is None or not layout_stack.text_args:
             return None
         layout_stack.text_args["font"] = self.game.app.getFont("canvas_default")
-        t = apply(MfxCanvasText, (self.game.canvas,), layout_stack.text_args)
+        t = MfxCanvasText(self.game.canvas, **layout_stack.text_args)
         t.text_format = layout_stack.text_format
         return t
 
diff --git a/pysollib/mfxutil.py b/pysollib/mfxutil.py
index 5c81e812..8a79eb56 100644
--- a/pysollib/mfxutil.py
+++ b/pysollib/mfxutil.py
@@ -322,7 +322,7 @@ def openURL(url):
         import webbrowser
         webbrowser.open(url)
         return 1
-    except:
+    except ImportError:                 # FIXME
         return 0
 
 
diff --git a/pysollib/pysolgtk/tkwidget.py b/pysollib/pysolgtk/tkwidget.py
index 1eece443..06bed877 100644
--- a/pysollib/pysolgtk/tkwidget.py
+++ b/pysollib/pysolgtk/tkwidget.py
@@ -231,7 +231,7 @@ class MfxExceptionDialog(MfxDialog):
         else:
             t = str(ex)
         kw.text = text + t
-        apply(MfxDialog.__init__, (self, parent, title), kw.__dict__)
+        MfxDialog.__init__(self, parent, title, **kw.__dict__)
 
 
 # /***********************************************************************
diff --git a/pysollib/pysolgtk/tkwrap.py b/pysollib/pysolgtk/tkwrap.py
index e0f1bacc..f7724ab1 100644
--- a/pysollib/pysolgtk/tkwrap.py
+++ b/pysollib/pysolgtk/tkwrap.py
@@ -226,7 +226,7 @@ class _MfxToplevel(gtk.Window):
 
 class MfxRoot(_MfxToplevel):
     def __init__(self, **kw):
-        apply(_MfxToplevel.__init__, (self,), kw)
+        _MfxToplevel.__init__(self, **kw)
         self.app = None
         self.connect("delete_event", self.wmDeleteWindow)
 
diff --git a/pysollib/resource.py b/pysollib/resource.py
index bdc7ed30..335bb7b2 100644
--- a/pysollib/resource.py
+++ b/pysollib/resource.py
@@ -58,7 +58,7 @@ class Resource(Struct):
             index = -1,
             error = 0,          # error while loading this resource
         )
-        apply(Struct.__init__, (self,), kw.getKw())
+        Struct.__init__(self, **kw.getKw())
 
     def getSortKey(self):
         return self.name.lower()
@@ -327,7 +327,7 @@ class Cardset(Resource):
     def __init__(self, **kw):
         # start with all fields from CardsetConfig
         config = CardsetConfig()
-        kw = apply(KwStruct, (config.__dict__,), kw)
+        kw = KwStruct(config.__dict__, **kw)
         # si is the SelectionInfo struct that will be queried by
         # the "select cardset" dialogs. It can be freely modified.
         si = Struct(type=0, size=0, styles=[], nationalities=[], dates=[])
@@ -345,7 +345,7 @@ class Cardset(Resource):
             backname = None,
             dir = "",
         )
-        apply(Resource.__init__, (self,), kw.getKw())
+        Resource.__init__(self, **kw.getKw())
 
     def getFaceCardNames(self):
         names = []
@@ -496,12 +496,10 @@ class CardsetManager(ResourceManager):
 
 class Tile(Resource):
     def __init__(self, **kw):
-        kw = KwStruct(kw,
-                      color = None,
-                      text_color = "#000000",
-                      stretch = 0,
-                      )
-        apply(Resource.__init__, (self,), kw.getKw())
+        kw['color'] = None
+        kw['text_color'] = "#000000"
+        kw['stretch'] = 0
+        Resource.__init__(self, **kw)
 
 
 class TileManager(ResourceManager):
@@ -514,10 +512,8 @@ class TileManager(ResourceManager):
 
 class Sample(Resource):
     def __init__(self, **kw):
-        kw = KwStruct(kw,
-            volume = -1,
-        )
-        apply(Resource.__init__, (self,), kw.getKw())
+        kw['volume'] = -1
+        Resource.__init__(self, **kw)
 
 
 class SampleManager(ResourceManager):
diff --git a/pysollib/stack.py b/pysollib/stack.py
index f98078ba..33c9743c 100644
--- a/pysollib/stack.py
+++ b/pysollib/stack.py
@@ -1154,6 +1154,17 @@ class Stack:
         images = self.game.app.images
         cx, cy = cards[0].x, cards[0].y
         ddx, ddy = cx-cards[-1].x, cy-cards[-1].y
+        if TOOLKIT == 'tk' and Image:   # use PIL
+            c0 = cards[-1]
+            if self.CARD_XOFFSET[0] < 0: c0 = cards[0]
+            if self.CARD_YOFFSET[0] < 0: c0 = cards[0]
+            img = images.getShadowPIL(self, cards)
+            cx, cy = c0.x + images.CARDW + dx, c0.y + images.CARDH + dy
+            s = MfxCanvasImage(self.game.canvas, cx, cy,
+                               image=img, anchor=ANCHOR_SE)
+            s.lower(c0.item)
+            return (s,)
+
         if ddx == 0: # vertical
             for c in cards[1:]:
                 if c.x != cx or abs(c.y - cy) != images.CARD_YOFFSET:
@@ -1285,6 +1296,8 @@ class Stack:
         #
         x0, y0 = self.getPositionFor(cards[0])
         x1, y1 = self.getPositionFor(cards[-1])
+        x0, x1 = min(x1, x0), max(x1, x0)
+        y0, y1 = min(y1, y0), max(y1, y0)
         x1 = x1 + self.game.app.images.CARDW
         y1 = y1 + self.game.app.images.CARDH
         xx0, yy0 = x0, y0
@@ -1926,7 +1939,7 @@ class AbstractFoundationStack(OpenStack):
     def __init__(self, x, y, game, suit, **cap):
         kwdefault(cap, suit=suit, base_suit=suit, base_rank=ACE,
                   dir=1, max_accept=1, max_cards=13)
-        apply(OpenStack.__init__, (self, x, y, game), cap)
+        OpenStack.__init__(self, x, y, game, **cap)
 
     def canDropCards(self, stacks):
         return (None, 0)
@@ -1976,7 +1989,7 @@ class SS_FoundationStack(AbstractFoundationStack):
 # A Rank_FoundationStack builds up in rank and ignores color and suit.
 class RK_FoundationStack(SS_FoundationStack):
     def __init__(self, x, y, game, suit=ANY_SUIT, **cap):
-        apply(SS_FoundationStack.__init__, (self, x, y, game, ANY_SUIT), cap)
+        SS_FoundationStack.__init__(self, x, y, game, ANY_SUIT, **cap)
 
     def assertStack(self):
         SS_FoundationStack.assertStack(self)
@@ -1994,7 +2007,7 @@ class RK_FoundationStack(SS_FoundationStack):
 class AC_FoundationStack(SS_FoundationStack):
     def __init__(self, x, y, game, suit, **cap):
         kwdefault(cap, base_suit=suit)
-        apply(SS_FoundationStack.__init__, (self, x, y, game, ANY_SUIT), cap)
+        SS_FoundationStack.__init__(self, x, y, game, ANY_SUIT, **cap)
 
     def acceptsCards(self, from_stack, cards):
         if not SS_FoundationStack.acceptsCards(self, from_stack, cards):
@@ -2046,7 +2059,7 @@ class SequenceStack_StackMethods:
 class BasicRowStack(OpenStack):
     def __init__(self, x, y, game, **cap):
         kwdefault(cap, dir=-1, base_rank=ANY_RANK)
-        apply(OpenStack.__init__, (self, x, y, game), cap)
+        OpenStack.__init__(self, x, y, game, **cap)
         self.CARD_YOFFSET = game.app.images.CARD_YOFFSET
 
     def getHelp(self):
@@ -2062,7 +2075,7 @@ class BasicRowStack(OpenStack):
 class SequenceRowStack(SequenceStack_StackMethods, BasicRowStack):
     def __init__(self, x, y, game, **cap):
         kwdefault(cap, max_move=999999, max_accept=999999)
-        apply(BasicRowStack.__init__, (self, x, y, game), cap)
+        BasicRowStack.__init__(self, x, y, game, **cap)
     def getBaseCard(self):
         return self._getBaseCard()
 
@@ -2161,7 +2174,7 @@ class Spider_SS_RowStack(SS_RowStack):
 class Yukon_AC_RowStack(BasicRowStack):
     def __init__(self, x, y, game, **cap):
         kwdefault(cap, max_move=999999, max_accept=999999)
-        apply(BasicRowStack.__init__, (self, x, y, game), cap)
+        BasicRowStack.__init__(self, x, y, game, **cap)
 
     def _isSequence(self, c1, c2):
         return (c1.rank + self.cap.dir) % self.cap.mod == c2.rank and c1.color != c2.color
@@ -2200,24 +2213,24 @@ class Yukon_SS_RowStack(Yukon_AC_RowStack):
 class KingAC_RowStack(AC_RowStack):
     def __init__(self, x, y, game, **cap):
         kwdefault(cap, base_rank=KING)
-        apply(AC_RowStack.__init__, (self, x, y, game), cap)
+        AC_RowStack.__init__(self, x, y, game, **cap)
 
 class KingSS_RowStack(SS_RowStack):
     def __init__(self, x, y, game, **cap):
         kwdefault(cap, base_rank=KING)
-        apply(SS_RowStack.__init__, (self, x, y, game), cap)
+        SS_RowStack.__init__(self, x, y, game, **cap)
 
 class KingRK_RowStack(RK_RowStack):
     def __init__(self, x, y, game, **cap):
         kwdefault(cap, base_rank=KING)
-        apply(RK_RowStack.__init__, (self, x, y, game), cap)
+        RK_RowStack.__init__(self, x, y, game, **cap)
 
 
 # up or down by color
 class UD_SC_RowStack(SequenceRowStack):
     def __init__(self, x, y, game, **cap):
         kwdefault(cap, max_move=1, max_accept=1)
-        apply(SequenceRowStack.__init__, (self, x, y, game), cap)
+        SequenceRowStack.__init__(self, x, y, game, **cap)
     def _isSequence(self, cards):
         return (isSameColorSequence(cards, self.cap.mod, 1) or
                 isSameColorSequence(cards, self.cap.mod, -1))
@@ -2228,7 +2241,7 @@ class UD_SC_RowStack(SequenceRowStack):
 class UD_AC_RowStack(SequenceRowStack):
     def __init__(self, x, y, game, **cap):
         kwdefault(cap, max_move=1, max_accept=1)
-        apply(SequenceRowStack.__init__, (self, x, y, game), cap)
+        SequenceRowStack.__init__(self, x, y, game, **cap)
     def _isSequence(self, cards):
         return (isAlternateColorSequence(cards, self.cap.mod, 1) or
                 isAlternateColorSequence(cards, self.cap.mod, -1))
@@ -2239,7 +2252,7 @@ class UD_AC_RowStack(SequenceRowStack):
 class UD_SS_RowStack(SequenceRowStack):
     def __init__(self, x, y, game, **cap):
         kwdefault(cap, max_move=1, max_accept=1)
-        apply(SequenceRowStack.__init__, (self, x, y, game), cap)
+        SequenceRowStack.__init__(self, x, y, game, **cap)
     def _isSequence(self, cards):
         return (isSameSuitSequence(cards, self.cap.mod, 1) or
                 isSameSuitSequence(cards, self.cap.mod, -1))
@@ -2250,7 +2263,7 @@ class UD_SS_RowStack(SequenceRowStack):
 class UD_RK_RowStack(SequenceRowStack):
     def __init__(self, x, y, game, **cap):
         kwdefault(cap, max_move=1, max_accept=1)
-        apply(SequenceRowStack.__init__, (self, x, y, game), cap)
+        SequenceRowStack.__init__(self, x, y, game, **cap)
     def _isSequence(self, cards):
         return (isRankSequence(cards, self.cap.mod, 1) or
                 isRankSequence(cards, self.cap.mod, -1))
@@ -2274,7 +2287,7 @@ class WasteTalonStack(TalonStack):
     # moves it face up; if we're out of cards, it moves the waste
     # back to the talon and increases the number of rounds (redeals).
     def __init__(self, x, y, game, max_rounds, num_deal=1, waste=None, **cap):
-        apply(TalonStack.__init__, (self, x, y, game, max_rounds, num_deal), cap)
+        TalonStack.__init__(self, x, y, game, max_rounds, num_deal, **cap)
         self.waste = waste
 
     def prepareStack(self):
@@ -2331,7 +2344,7 @@ class OpenTalonStack(TalonStack, OpenStack):
 
     def __init__(self, x, y, game, **cap):
         kwdefault(cap, max_move=1)
-        apply(TalonStack.__init__, (self, x, y, game), cap)
+        TalonStack.__init__(self, x, y, game, **cap)
 
     def canDealCards(self):
         return 0
@@ -2358,7 +2371,7 @@ class OpenTalonStack(TalonStack, OpenStack):
 class ReserveStack(OpenStack):
     def __init__(self, x, y, game, **cap):
         kwdefault(cap, max_accept=1, max_cards=1)
-        apply(OpenStack.__init__, (self, x, y, game), cap)
+        OpenStack.__init__(self, x, y, game, **cap)
 
     def getBottomImage(self):
         return self.game.app.images.getReserveBottom()
@@ -2405,7 +2418,7 @@ class ArbitraryStack(OpenStack):
 
     def __init__(self, x, y, game, **cap):
         kwdefault(cap, max_accept=0)
-        apply(OpenStack.__init__, (self, x, y, game), cap)
+        OpenStack.__init__(self, x, y, game, **cap)
         self.CARD_YOFFSET = game.app.images.CARD_YOFFSET
 
     def canMoveCards(self, cards):
@@ -2515,21 +2528,21 @@ class StackWrapper:
     def __call__(self, x, y, game, **cap):
         # must preserve self.cap, so create a shallow copy
         c = self.cap.copy()
-        apply(kwdefault, (c,), cap)
-        return apply(self.stack_class, (x, y, game), c)
+        kwdefault(c, **cap)
+        return self.stack_class(x, y, game, **c)
 
 
 # call-time cap override self.cap
 class WeakStackWrapper(StackWrapper):
     def __call__(self, x, y, game, **cap):
-        apply(kwdefault, (cap,), self.cap)
-        return apply(self.stack_class, (x, y, game), cap)
+        kwdefault(cap, **self.cap)
+        return self.stack_class(x, y, game, **cap)
 
 
 # self.cap only, call-time cap is completely ignored
 class FullStackWrapper(StackWrapper):
     def __call__(self, x, y, game, **cap):
-        return apply(self.stack_class, (x, y, game), self.cap)
+        return self.stack_class(x, y, game, **self.cap)
 
 
 
diff --git a/pysollib/tile/menubar.py b/pysollib/tile/menubar.py
index 68f51020..29887ade 100644
--- a/pysollib/tile/menubar.py
+++ b/pysollib/tile/menubar.py
@@ -43,6 +43,7 @@ import tkFileDialog
 
 # PySol imports
 from pysollib.mfxutil import destruct, Struct, kwdefault
+from pysollib.mfxutil import Image
 from pysollib.util import CARDSET
 from pysollib.settings import PACKAGE, WIN_SYSTEM
 from pysollib.settings import TOP_TITLE
@@ -132,7 +133,7 @@ class MfxMenubar(Tkinter.Menu):
         self.name = kw["name"]
         tearoff = 0
         self.n = kw["tearoff"] = int(kw.get("tearoff", tearoff))
-        apply(Tkinter.Menu.__init__, (self, master, ), kw)
+        Tkinter.Menu.__init__(self, master, **kw)
 
     def labeltoname(self, label):
         #print label, type(label)
@@ -174,7 +175,7 @@ class MfxMenu(MfxMenubar):
         else:
             name, label, label_underline = self.labeltoname(label)
         kwdefault(kw, name=name)
-        apply(MfxMenubar.__init__, (self, master,), kw)
+        MfxMenubar.__init__(self, master, **kw)
         if underline is None:
             underline = label_underline
         if master:
@@ -236,6 +237,8 @@ class PysolMenubar(PysolMenubarActions):
             cardback = MfxRadioMenuItem(self),
             tabletile = MfxRadioMenuItem(self),
             animations = MfxRadioMenuItem(self),
+            redeal_animation = MfxCheckMenuItem(self),
+            win_animation = MfxCheckMenuItem(self),
             shadow = MfxCheckMenuItem(self),
             shade = MfxCheckMenuItem(self),
             shade_filled_stacks = MfxCheckMenuItem(self),
@@ -283,6 +286,8 @@ class PysolMenubar(PysolMenubarActions):
         tkopt.cardback.set(self.app.cardset.backindex)
         tkopt.tabletile.set(self.app.tabletile_index)
         tkopt.animations.set(opt.animations)
+        tkopt.redeal_animation.set(opt.redeal_animation)
+        tkopt.win_animation.set(opt.win_animation)
         tkopt.shadow.set(opt.shadow)
         tkopt.shade.set(opt.shade)
         tkopt.toolbar.set(opt.toolbar)
@@ -341,7 +346,7 @@ class PysolMenubar(PysolMenubarActions):
     def _createMenubar(self):
         MfxMenubar.addPath = self._addPath
         kw = { "name": "menubar" }
-        self.__menubar = apply(MfxMenubar, (self.top,), kw)
+        self.__menubar = MfxMenubar(self.top, **kw)
 
         # init keybindings
         bind(self.top, "<KeyPress>", self._keyPressHandler)
@@ -480,6 +485,10 @@ class PysolMenubar(PysolMenubarActions):
         submenu.add_radiobutton(label=n_("&Fast"), variable=self.tkopt.animations, value=1, command=self.mOptAnimations)
         submenu.add_radiobutton(label=n_("&Slow"), variable=self.tkopt.animations, value=3, command=self.mOptAnimations)
         submenu.add_radiobutton(label=n_("&Very slow"), variable=self.tkopt.animations, value=4, command=self.mOptAnimations)
+        submenu.add_separator()
+        submenu.add_checkbutton(label=n_("&Redeal animation"), variable=self.tkopt.redeal_animation, command=self.mRedealAnimation)
+        if Image:
+            submenu.add_checkbutton(label=n_("&Winning animation"), variable=self.tkopt.win_animation, command=self.mWinAnimation)
         submenu = MfxMenu(menu, label=n_("&Mouse"))
         submenu.add_radiobutton(label=n_("&Drag-and-Drop"), variable=self.tkopt.mouse_type, value='drag-n-drop', command=self.mOptMouseType)
         submenu.add_radiobutton(label=n_("&Point-and-Click"), variable=self.tkopt.mouse_type, value='point-n-click', command=self.mOptMouseType)
@@ -1084,6 +1093,14 @@ class PysolMenubar(PysolMenubarActions):
         if self._cancelDrag(break_pause=False): return
         self.app.opt.animations = self.tkopt.animations.get()
 
+    def mRedealAnimation(self, *args):
+        if self._cancelDrag(break_pause=False): return
+        self.app.opt.redeal_animation = self.tkopt.redeal_animation.get()
+
+    def mWinAnimation(self, *args):
+        if self._cancelDrag(break_pause=False): return
+        self.app.opt.win_animation = self.tkopt.win_animation.get()
+
     def mOptShadow(self, *args):
         if self._cancelDrag(break_pause=False): return
         self.app.opt.shadow = self.tkopt.shadow.get()
diff --git a/pysollib/tile/statusbar.py b/pysollib/tile/statusbar.py
index 1e9f1e1b..8a75378d 100644
--- a/pysollib/tile/statusbar.py
+++ b/pysollib/tile/statusbar.py
@@ -110,7 +110,7 @@ class MfxStatusbar:
             kw['foreground'] = kw['fg']
             del kw['fg']
         label = getattr(self, name + "_label")
-        apply(label.config, (), kw)
+        label.config(**kw)
 
     def show(self, show=True, resize=False):
         if self._show == show:
diff --git a/pysollib/tile/tkcanvas.py b/pysollib/tile/tkcanvas.py
index f0d8d4d7..e67a8e70 100644
--- a/pysollib/tile/tkcanvas.py
+++ b/pysollib/tile/tkcanvas.py
@@ -126,7 +126,7 @@ class MfxCanvasText(Canvas.CanvasText):
 
 class MfxCanvas(Tkinter.Canvas):
     def __init__(self, *args, **kw):
-        apply(Tkinter.Canvas.__init__, (self,) + args, kw)
+        Tkinter.Canvas.__init__(self, *args, **kw)
         self.preview = 0
         # this is also used by lib-tk/Canvas.py
         self.items = {}
diff --git a/pysollib/tile/tkhtml.py b/pysollib/tile/tkhtml.py
index 9c644393..c45bc107 100644
--- a/pysollib/tile/tkhtml.py
+++ b/pysollib/tile/tkhtml.py
@@ -317,7 +317,7 @@ class HTMLViewer:
         self.parent = None
 
     def _yview(self, *args):
-        apply(self.text.yview, args, {})
+        self.text.yview(*args)
         return 'break'
 
     def page_up(self, *event):
diff --git a/pysollib/tile/tkstats.py b/pysollib/tile/tkstats.py
index eb1b271a..8ba2341d 100644
--- a/pysollib/tile/tkstats.py
+++ b/pysollib/tile/tkstats.py
@@ -542,37 +542,37 @@ class _TopDialog(MfxDialog):
         cnf = {'master': top_frame,
                'padding': (4, 1),
                }
-        frame = apply(Tkinter.Frame, (), cnf)
+        frame = Tkinter.Frame(**cnf)
         frame.pack(expand=Tkinter.YES, fill=Tkinter.BOTH, padx=10, pady=10)
         frame.columnconfigure(0, weight=1)
         cnf['master'] = frame
         cnf['text'] = _('N')
-        l = apply(Tkinter.Label, (), cnf)
+        l = Tkinter.Label(**cnf)
         l.grid(row=0, column=0, sticky='ew')
         cnf['text'] = _('Game number')
-        l = apply(Tkinter.Label, (), cnf)
+        l = Tkinter.Label(**cnf)
         l.grid(row=0, column=1, sticky='ew')
         cnf['text'] = _('Started at')
-        l = apply(Tkinter.Label, (), cnf)
+        l = Tkinter.Label(**cnf)
         l.grid(row=0, column=2, sticky='ew')
         cnf['text'] = _('Result')
-        l = apply(Tkinter.Label, (), cnf)
+        l = Tkinter.Label(**cnf)
         l.grid(row=0, column=3, sticky='ew')
 
         row = 1
         for i in top:
             # N
             cnf['text'] = str(row)
-            l = apply(Tkinter.Label, (), cnf)
+            l = Tkinter.Label(**cnf)
             l.grid(row=row, column=0, sticky='ew')
             # Game number
             cnf['text'] = '#'+str(i.game_number)
-            l = apply(Tkinter.Label, (), cnf)
+            l = Tkinter.Label(**cnf)
             l.grid(row=row, column=1, sticky='ew')
             # Start time
             t = time.strftime('%Y-%m-%d %H:%M', time.localtime(i.game_start_time))
             cnf['text'] = t
-            l = apply(Tkinter.Label, (), cnf)
+            l = Tkinter.Label(**cnf)
             l.grid(row=row, column=2, sticky='ew')
             # Result
             if isinstance(i.value, float):
@@ -582,7 +582,7 @@ class _TopDialog(MfxDialog):
                 # moves
                 s = str(i.value)
             cnf['text'] = s
-            l = apply(Tkinter.Label, (), cnf)
+            l = Tkinter.Label(**cnf)
             l.grid(row=row, column=3, sticky='ew')
             row += 1
 
diff --git a/pysollib/tile/tktree.py b/pysollib/tile/tktree.py
index 811e700c..316d3277 100644
--- a/pysollib/tile/tktree.py
+++ b/pysollib/tile/tktree.py
@@ -242,7 +242,7 @@ class MfxTreeInCanvas(MfxScrolledCanvas):
     def __init__(self, parent, rootnodes, **kw):
         kw['bd'] = 0
         kw['bg'] = 'white'
-        apply(MfxScrolledCanvas.__init__, (self, parent,), kw)
+        MfxScrolledCanvas.__init__(self, parent, **kw)
         #
         self.rootnodes = rootnodes
         self.updateNodesWithTree(self.rootnodes, self)
diff --git a/pysollib/tile/tkutil.py b/pysollib/tile/tkutil.py
index 0754bed4..bbd33e27 100644
--- a/pysollib/tile/tkutil.py
+++ b/pysollib/tile/tkutil.py
@@ -241,12 +241,12 @@ def unbind_destroy(widget):
 # ************************************************************************/
 
 def after(widget, ms, func, *args):
-    timer = apply(widget.after, (ms, func) + args)
+    timer = widget.after(ms, func, *args)
     command = widget._tclCommands[-1]
     return (timer, command, widget)
 
 def after_idle(widget, func, *args):
-    return apply(after, (widget, "idle", func) + args)
+    return after(widget, "idle", func, *args)
 
 def after_cancel(t):
     if t is not None:
@@ -293,7 +293,7 @@ def makeImage(file=None, data=None, dither=None, alpha=None):
         # fromstring(mode, size, data, decoder_name='raw', *args)
         else:
             return Tkinter.PhotoImage(data=data)
-    return apply(Tkinter.PhotoImage, (), kw)
+    return Tkinter.PhotoImage(**kw)
 
 loadImage = makeImage
 
diff --git a/pysollib/tile/tkwidget.py b/pysollib/tile/tkwidget.py
index 370dac8e..2c2b49cf 100644
--- a/pysollib/tile/tkwidget.py
+++ b/pysollib/tile/tkwidget.py
@@ -297,7 +297,7 @@ class MfxExceptionDialog(MfxMessageDialog):
         else:
             t = str(ex)
         kw.text = text + unicode(t, errors='replace')
-        apply(MfxMessageDialog.__init__, (self, parent, title), kw.getKw())
+        MfxMessageDialog.__init__(self, parent, title, **kw.getKw())
 
 
 # /***********************************************************************
@@ -474,10 +474,10 @@ class MfxScrolledCanvas:
         self.frame.destroy()
 
     def pack(self, **kw):
-        apply(self.frame.pack, (), kw)
+        self.frame.pack(**kw)
 
     def grid(self, **kw):
-        apply(self.frame.grid, (), kw)
+        self.frame.grid(**kw)
 
     #
     #
@@ -536,8 +536,7 @@ class MfxScrolledCanvas:
         self.frame = Tkinter.Frame(self.parent, width=width, height=height, bg=None)
 
     def createCanvas(self, kw):
-        #self.canvas = apply(Tkinter.Canvas, (self.frame,), kw)
-        self.canvas = apply(MfxCanvas, (self.frame,), kw)
+        self.canvas = MfxCanvas(self.frame, **kw)
         self.canvas.grid(row=0, column=0, sticky="news")
     def createHbar(self):
         self.hbar = Tkinter.Scrollbar(self.frame, name="hbar",
@@ -584,15 +583,13 @@ class MfxScrolledCanvas:
         top.wm_geometry(g)
 
     def _setHbar(self, *args):
-        ##apply(self.hbar.set, args)
         self.canvas.update()
-        apply(self.hbar.set, self.canvas.xview())
+        self.hbar.set(*self.canvas.xview())
         self.showHbar()
         ##self.hbar.update_idletasks()
     def _setVbar(self, *args):
-        ##apply(self.vbar.set, args)
         self.canvas.update()
-        apply(self.vbar.set, self.canvas.yview())
+        self.vbar.set(*self.canvas.yview())
         self.showVbar()
         ##self.vbar.update_idletasks()
 
@@ -637,10 +634,10 @@ class MfxScrolledCanvas:
         return 1
 
     def _xview(self, *args):
-        if self.hbar_show: apply(self.canvas.xview, args, {})
+        if self.hbar_show: self.canvas.xview(*args)
         return 'break'
     def _yview(self, *args):
-        if self.vbar_show: apply(self.canvas.yview, args, {})
+        if self.vbar_show: self.canvas.yview(*args)
         return 'break'
 
     def page_up(self, *event):
@@ -754,14 +751,17 @@ class MyPysolScale:
         kw['command'] = self._scale_command
         if 'label' in kw:
             self.label_text = kw['label']
+            width = len(self.label_text)+4
             del kw['label']
         else:
             self.label_text = None
+            width = 3
 
         # create widgets
         side = 'left' # 'top'
         self.frame = Tkinter.Frame(parent)
-        self.label = Tkinter.Label(self.frame, anchor='w', padding=(5,0))
+        self.label = Tkinter.Label(self.frame, anchor='w',
+                                   width=width, padding=(5,0))
         self.label.pack(side=side, expand=False, fill='x')
         self.scale = Tkinter.Scale(self.frame, **kw)
         self.scale.pack(side=side, expand=True, fill='both', pady=4)
diff --git a/pysollib/tile/tkwrap.py b/pysollib/tile/tkwrap.py
index 1700c2e9..eff80d00 100644
--- a/pysollib/tile/tkwrap.py
+++ b/pysollib/tile/tkwrap.py
@@ -85,7 +85,7 @@ StringVar = Tkinter.StringVar
 
 class MfxRoot(Tkinter.Tk):
     def __init__(self, **kw):
-        apply(Tkinter.Tk.__init__, (self,), kw)
+        Tkinter.Tk.__init__(self, **kw)
         self.app = None
         self.wm_protocol('WM_DELETE_WINDOW', self.wmDeleteWindow)
         # for interruptible sleep
diff --git a/pysollib/tk/menubar.py b/pysollib/tk/menubar.py
index 7310bf29..777ff840 100644
--- a/pysollib/tk/menubar.py
+++ b/pysollib/tk/menubar.py
@@ -42,6 +42,7 @@ import Tkinter, tkFileDialog
 
 # PySol imports
 from pysollib.mfxutil import destruct, Struct, kwdefault
+from pysollib.mfxutil import Image
 from pysollib.util import CARDSET
 from pysollib.settings import PACKAGE, WIN_SYSTEM
 from pysollib.settings import TOP_TITLE
@@ -131,7 +132,7 @@ class MfxMenubar(Tkinter.Menu):
         self.name = kw["name"]
         tearoff = 0
         self.n = kw["tearoff"] = int(kw.get("tearoff", tearoff))
-        apply(Tkinter.Menu.__init__, (self, master, ), kw)
+        Tkinter.Menu.__init__(self, master, **kw)
 
     def labeltoname(self, label):
         #print label, type(label)
@@ -173,7 +174,7 @@ class MfxMenu(MfxMenubar):
         else:
             name, label, label_underline = self.labeltoname(label)
         kwdefault(kw, name=name)
-        apply(MfxMenubar.__init__, (self, master,), kw)
+        MfxMenubar.__init__(self, master, **kw)
         if underline is None:
             underline = label_underline
         if master:
@@ -235,6 +236,8 @@ class PysolMenubar(PysolMenubarActions):
             cardback = MfxRadioMenuItem(self),
             tabletile = MfxRadioMenuItem(self),
             animations = MfxRadioMenuItem(self),
+            redeal_animation = MfxCheckMenuItem(self),
+            win_animation = MfxCheckMenuItem(self),
             shadow = MfxCheckMenuItem(self),
             shade = MfxCheckMenuItem(self),
             shade_filled_stacks = MfxCheckMenuItem(self),
@@ -281,6 +284,8 @@ class PysolMenubar(PysolMenubarActions):
         tkopt.cardback.set(self.app.cardset.backindex)
         tkopt.tabletile.set(self.app.tabletile_index)
         tkopt.animations.set(opt.animations)
+        tkopt.redeal_animation.set(opt.redeal_animation)
+        tkopt.win_animation.set(opt.win_animation)
         tkopt.shadow.set(opt.shadow)
         tkopt.shade.set(opt.shade)
         tkopt.toolbar.set(opt.toolbar)
@@ -338,7 +343,7 @@ class PysolMenubar(PysolMenubarActions):
     def _createMenubar(self):
         MfxMenubar.addPath = self._addPath
         kw = { "name": "menubar" }
-        self.__menubar = apply(MfxMenubar, (self.top,), kw)
+        self.__menubar = MfxMenubar(self.top, **kw)
 
         # init keybindings
         bind(self.top, "<KeyPress>", self._keyPressHandler)
@@ -477,6 +482,10 @@ class PysolMenubar(PysolMenubarActions):
         submenu.add_radiobutton(label=n_("&Fast"), variable=self.tkopt.animations, value=1, command=self.mOptAnimations)
         submenu.add_radiobutton(label=n_("&Slow"), variable=self.tkopt.animations, value=3, command=self.mOptAnimations)
         submenu.add_radiobutton(label=n_("&Very slow"), variable=self.tkopt.animations, value=4, command=self.mOptAnimations)
+        submenu.add_separator()
+        submenu.add_checkbutton(label=n_("&Redeal animation"), variable=self.tkopt.redeal_animation, command=self.mRedealAnimation)
+        if Image:
+            submenu.add_checkbutton(label=n_("&Winning animation"), variable=self.tkopt.win_animation, command=self.mWinAnimation)
         submenu = MfxMenu(menu, label=n_("&Mouse"))
         submenu.add_radiobutton(label=n_("&Drag-and-Drop"), variable=self.tkopt.mouse_type, value='drag-n-drop', command=self.mOptMouseType)
         submenu.add_radiobutton(label=n_("&Point-and-Click"), variable=self.tkopt.mouse_type, value='point-n-click', command=self.mOptMouseType)
@@ -1080,6 +1089,14 @@ class PysolMenubar(PysolMenubarActions):
         if self._cancelDrag(break_pause=False): return
         self.app.opt.animations = self.tkopt.animations.get()
 
+    def mRedealAnimation(self, *args):
+        if self._cancelDrag(break_pause=False): return
+        self.app.opt.redeal_animation = self.tkopt.redeal_animation.get()
+
+    def mWinAnimation(self, *args):
+        if self._cancelDrag(break_pause=False): return
+        self.app.opt.win_animation = self.tkopt.win_animation.get()
+
     def mOptShadow(self, *args):
         if self._cancelDrag(break_pause=False): return
         self.app.opt.shadow = self.tkopt.shadow.get()
diff --git a/pysollib/tk/progressbar.py b/pysollib/tk/progressbar.py
index 59373880..171b81ca 100644
--- a/pysollib/tk/progressbar.py
+++ b/pysollib/tk/progressbar.py
@@ -96,7 +96,7 @@ class PysolProgressBar:
 
     def pack(self, **kw):
         self.canvas.pack(fill=Tkinter.X, expand=0)
-        apply(self.frame.pack, (), kw)
+        self.frame.pack(**kw)
 
     def reset(self, percent=0):
         self.percent = percent
diff --git a/pysollib/tk/statusbar.py b/pysollib/tk/statusbar.py
index e502b15e..89dfdc87 100644
--- a/pysollib/tk/statusbar.py
+++ b/pysollib/tk/statusbar.py
@@ -121,7 +121,7 @@ class MfxStatusbar:
 
     def configLabel(self, name, **kw):
         label = getattr(self, name + "_label")
-        apply(label.config, (), kw)
+        label.config(**kw)
 
     def show(self, show=True, resize=False):
         if self._show == show:
diff --git a/pysollib/tk/tkcanvas.py b/pysollib/tk/tkcanvas.py
index 8509ab11..2c9e7856 100644
--- a/pysollib/tk/tkcanvas.py
+++ b/pysollib/tk/tkcanvas.py
@@ -125,7 +125,7 @@ class MfxCanvasText(Canvas.CanvasText):
 
 class MfxCanvas(Tkinter.Canvas):
     def __init__(self, *args, **kw):
-        apply(Tkinter.Canvas.__init__, (self,) + args, kw)
+        Tkinter.Canvas.__init__(self, *args, **kw)
         self.preview = 0
         # this is also used by lib-tk/Canvas.py
         self.items = {}
diff --git a/pysollib/tk/tkhtml.py b/pysollib/tk/tkhtml.py
index 966de908..8989db7d 100644
--- a/pysollib/tk/tkhtml.py
+++ b/pysollib/tk/tkhtml.py
@@ -316,7 +316,7 @@ class HTMLViewer:
         self.parent = None
 
     def _yview(self, *args):
-        apply(self.text.yview, args, {})
+        self.text.yview(*args)
         return 'break'
 
     def page_up(self, *event):
diff --git a/pysollib/tk/tkstats.py b/pysollib/tk/tkstats.py
index a2a9c5fc..cb1d14d3 100644
--- a/pysollib/tk/tkstats.py
+++ b/pysollib/tk/tkstats.py
@@ -658,37 +658,37 @@ class _TopDialog(MfxDialog):
                'highlightthickness': 1,
                'highlightbackground': 'black',
                }
-        frame = apply(Tkinter.Frame, (), cnf)
+        frame = Tkinter.Frame(**cnf)
         frame.pack(expand=Tkinter.YES, fill=Tkinter.BOTH, padx=10, pady=10)
         frame.columnconfigure(0, weight=1)
         cnf['master'] = frame
         cnf['text'] = _('N')
-        l = apply(Tkinter.Label, (), cnf)
+        l = Tkinter.Label(**cnf)
         l.grid(row=0, column=0, sticky='ew')
         cnf['text'] = _('Game number')
-        l = apply(Tkinter.Label, (), cnf)
+        l = Tkinter.Label(**cnf)
         l.grid(row=0, column=1, sticky='ew')
         cnf['text'] = _('Started at')
-        l = apply(Tkinter.Label, (), cnf)
+        l = Tkinter.Label(**cnf)
         l.grid(row=0, column=2, sticky='ew')
         cnf['text'] = _('Result')
-        l = apply(Tkinter.Label, (), cnf)
+        l = Tkinter.Label(**cnf)
         l.grid(row=0, column=3, sticky='ew')
 
         row = 1
         for i in top:
             # N
             cnf['text'] = str(row)
-            l = apply(Tkinter.Label, (), cnf)
+            l = Tkinter.Label(**cnf)
             l.grid(row=row, column=0, sticky='ew')
             # Game number
             cnf['text'] = '#'+str(i.game_number)
-            l = apply(Tkinter.Label, (), cnf)
+            l = Tkinter.Label(**cnf)
             l.grid(row=row, column=1, sticky='ew')
             # Start time
             t = time.strftime('%Y-%m-%d %H:%M', time.localtime(i.game_start_time))
             cnf['text'] = t
-            l = apply(Tkinter.Label, (), cnf)
+            l = Tkinter.Label(**cnf)
             l.grid(row=row, column=2, sticky='ew')
             # Result
             if isinstance(i.value, float):
@@ -698,7 +698,7 @@ class _TopDialog(MfxDialog):
                 # moves
                 s = str(i.value)
             cnf['text'] = s
-            l = apply(Tkinter.Label, (), cnf)
+            l = Tkinter.Label(**cnf)
             l.grid(row=row, column=3, sticky='ew')
             row += 1
 
diff --git a/pysollib/tk/tktree.py b/pysollib/tk/tktree.py
index 6f8ef7c0..c7eeff8e 100644
--- a/pysollib/tk/tktree.py
+++ b/pysollib/tk/tktree.py
@@ -242,7 +242,7 @@ class MfxTreeInCanvas(MfxScrolledCanvas):
     def __init__(self, parent, rootnodes, **kw):
         bg = kw["bg"] = kw.get("bg") or parent.cget("bg")
         kw['bd'] = 0
-        apply(MfxScrolledCanvas.__init__, (self, parent,), kw)
+        MfxScrolledCanvas.__init__(self, parent, **kw)
         #
         self.rootnodes = rootnodes
         self.updateNodesWithTree(self.rootnodes, self)
diff --git a/pysollib/tk/tkutil.py b/pysollib/tk/tkutil.py
index 3df99a68..fe80caed 100644
--- a/pysollib/tk/tkutil.py
+++ b/pysollib/tk/tkutil.py
@@ -241,12 +241,12 @@ def unbind_destroy(widget):
 # ************************************************************************/
 
 def after(widget, ms, func, *args):
-    timer = apply(widget.after, (ms, func) + args)
+    timer = widget.after(ms, func, *args)
     command = widget._tclCommands[-1]
     return (timer, command, widget)
 
 def after_idle(widget, func, *args):
-    return apply(after, (widget, "idle", func) + args)
+    return after(widget, "idle", func, *args)
 
 def after_cancel(t):
     if t is not None:
@@ -293,7 +293,7 @@ def makeImage(file=None, data=None, dither=None, alpha=None):
         # fromstring(mode, size, data, decoder_name='raw', *args)
         else:
             return Tkinter.PhotoImage(data=data)
-    return apply(Tkinter.PhotoImage, (), kw)
+    return Tkinter.PhotoImage(**kw)
 
 loadImage = makeImage
 
diff --git a/pysollib/tk/tkwidget.py b/pysollib/tk/tkwidget.py
index 9b7df502..289d40d7 100644
--- a/pysollib/tk/tkwidget.py
+++ b/pysollib/tk/tkwidget.py
@@ -292,7 +292,7 @@ class MfxExceptionDialog(MfxMessageDialog):
         else:
             t = str(ex)
         kw.text = text + unicode(t, errors='replace')
-        apply(MfxMessageDialog.__init__, (self, parent, title), kw.getKw())
+        MfxMessageDialog.__init__(self, parent, title, **kw.getKw())
 
 
 # /***********************************************************************
@@ -474,10 +474,10 @@ class MfxScrolledCanvas:
         self.frame.destroy()
 
     def pack(self, **kw):
-        apply(self.frame.pack, (), kw)
+        self.frame.pack(**kw)
 
     def grid(self, **kw):
-        apply(self.frame.grid, (), kw)
+        self.frame.grid(**kw)
 
     #
     #
@@ -533,11 +533,10 @@ class MfxScrolledCanvas:
     def createFrame(self, kw):
         width = kw.get("width")
         height = kw.get("height")
-        self.frame = Tkinter.Frame(self.parent, width=width, height=height, bg=None)
+        self.frame = Tkinter.Frame(self.parent, width=width, height=height)
 
     def createCanvas(self, kw):
-        #self.canvas = apply(Tkinter.Canvas, (self.frame,), kw)
-        self.canvas = apply(MfxCanvas, (self.frame,), kw)
+        self.canvas = MfxCanvas(self.frame, **kw)
         self.canvas.grid(row=0, column=0, sticky="news")
     def createHbar(self):
         self.hbar = Tkinter.Scrollbar(self.frame, name="hbar",
@@ -585,15 +584,13 @@ class MfxScrolledCanvas:
         top.wm_geometry(g)
 
     def _setHbar(self, *args):
-        ##apply(self.hbar.set, args)
         self.canvas.update()
-        apply(self.hbar.set, self.canvas.xview())
+        self.hbar.set(*self.canvas.xview())
         self.showHbar()
         ##self.hbar.update_idletasks()
     def _setVbar(self, *args):
-        ##apply(self.vbar.set, args)
         self.canvas.update()
-        apply(self.vbar.set, self.canvas.yview())
+        self.vbar.set(*self.canvas.yview())
         self.showVbar()
         ##self.vbar.update_idletasks()
 
@@ -638,10 +635,10 @@ class MfxScrolledCanvas:
         return 1
 
     def _xview(self, *args):
-        if self.hbar_show: apply(self.canvas.xview, args, {})
+        if self.hbar_show: self.canvas.xview(*args)
         return 'break'
     def _yview(self, *args):
-        if self.vbar_show: apply(self.canvas.yview, args, {})
+        if self.vbar_show: self.canvas.yview(*args)
         return 'break'
 
     def page_up(self, *event):
diff --git a/pysollib/tk/tkwrap.py b/pysollib/tk/tkwrap.py
index a1bb8cac..2224cf87 100644
--- a/pysollib/tk/tkwrap.py
+++ b/pysollib/tk/tkwrap.py
@@ -86,7 +86,7 @@ StringVar = Tkinter.StringVar
 
 class MfxRoot(Tkinter.Tk):
     def __init__(self, **kw):
-        apply(Tkinter.Tk.__init__, (self,), kw)
+        Tkinter.Tk.__init__(self, **kw)
         self.app = None
         self.wm_protocol('WM_DELETE_WINDOW', self.wmDeleteWindow)
         # for interruptible sleep