diff --git a/.travis.yml b/.travis.yml
--- a/.travis.yml
+++ b/.travis.yml
@@ -2,8 +2,9 @@
 
 install:
   - cabal install gtk2hs-buildtools
-  - cabal install --only-dependencies
+  - cabal install -f-vty -f-curses --only-dependencies
+  - cabal install -fvty -f-curses --only-dependencies
+  - cabal install -f-vty -fcurses --only-dependencies
 
 script:
-  - cabal install
-  - make test-travis || (cat ~/.LambdaHack/config.rules.dump ; tail -n 200 /tmp/stdtest.log ; exit 77)
+  - cabal install -f-vty -f-curses && (make test-travis || (cat ~/.LambdaHack/config.rules.dump ; tail -n 200 /tmp/stdtest.log ; exit 77)) && cabal install -fvty -f-curses && (make test-travis || (cat ~/.LambdaHack/config.rules.dump ; tail -n 200 /tmp/stdtest.log ; exit 77)) && cabal install -f-vty -fcurses && (make test-travis || (cat ~/.LambdaHack/config.rules.dump ; tail -n 200 /tmp/stdtest.log ; exit 77))
diff --git a/Game/LambdaHack/Frontend/Chosen.hs b/Game/LambdaHack/Frontend/Chosen.hs
--- a/Game/LambdaHack/Frontend/Chosen.hs
+++ b/Game/LambdaHack/Frontend/Chosen.hs
@@ -9,9 +9,7 @@
 import Game.LambdaHack.Common.Animation (DebugModeCli (..), SingleFrame (..))
 import qualified Game.LambdaHack.Common.Key as K
 
-#ifdef GTK
-import qualified Game.LambdaHack.Frontend.Gtk as Chosen
-#elif VTY
+#ifdef VTY
 import qualified Game.LambdaHack.Frontend.Vty as Chosen
 #elif CURSES
 import qualified Game.LambdaHack.Frontend.Curses as Chosen
diff --git a/Game/LambdaHack/Frontend/Curses.hs b/Game/LambdaHack/Frontend/Curses.hs
--- a/Game/LambdaHack/Frontend/Curses.hs
+++ b/Game/LambdaHack/Frontend/Curses.hs
@@ -16,10 +16,11 @@
 import qualified UI.HSCurses.Curses as C
 import qualified UI.HSCurses.CursesHelper as C
 
+import Control.Exception.Assert.Sugar
 import Game.LambdaHack.Common.Animation (DebugModeCli (..), SingleFrame (..))
 import qualified Game.LambdaHack.Common.Color as Color
 import qualified Game.LambdaHack.Common.Key as K
-import Control.Exception.Assert.Sugar
+import Game.LambdaHack.Common.Msg
 
 -- | Session data maintained by the frontend.
 data FrontendSession = FrontendSession
@@ -126,7 +127,7 @@
         -- as movement:
       | c `elem` ['1'..'9'] -> (K.KP c,              K.NoModifier)
       | otherwise           -> (K.Char c,            K.NoModifier)
-    _                       -> (K.Unknown (show e),  K.NoModifier)
+    _                       -> (K.Unknown (showT e),  K.NoModifier)
 
 toFColor :: Color.Color -> C.ForegroundColor
 toFColor Color.Black     = C.BlackF
diff --git a/Game/LambdaHack/Frontend/Vty.hs b/Game/LambdaHack/Frontend/Vty.hs
--- a/Game/LambdaHack/Frontend/Vty.hs
+++ b/Game/LambdaHack/Frontend/Vty.hs
@@ -16,6 +16,7 @@
 import Game.LambdaHack.Common.Animation (DebugModeCli (..), SingleFrame (..))
 import qualified Game.LambdaHack.Common.Color as Color
 import qualified Game.LambdaHack.Common.Key as K
+import Game.LambdaHack.Common.Msg
 
 -- | Session data maintained by the frontend.
 data FrontendSession = FrontendSession
@@ -90,7 +91,7 @@
     KPageDown     -> K.PgDn
     KBegin        -> K.Begin
     (KASCII c)    -> K.Char c
-    _             -> K.Unknown (show n)
+    _             -> K.Unknown (showT n)
 
 -- | Translates modifiers to our own encoding.
 modifierTranslate :: [Modifier] -> K.Modifier
diff --git a/Game/LambdaHack/Server/EffectSem.hs b/Game/LambdaHack/Server/EffectSem.hs
--- a/Game/LambdaHack/Server/EffectSem.hs
+++ b/Game/LambdaHack/Server/EffectSem.hs
@@ -18,6 +18,7 @@
 import Data.Text (Text)
 import qualified NLP.Miniutter.English as MU
 
+import Control.Exception.Assert.Sugar
 import Game.LambdaHack.Common.Action
 import Game.LambdaHack.Common.Actor
 import Game.LambdaHack.Common.ActorState
@@ -39,7 +40,6 @@
 import Game.LambdaHack.Server.Action
 import Game.LambdaHack.Server.Config
 import Game.LambdaHack.Server.State
-import Control.Exception.Assert.Sugar
 import Game.LambdaHack.Utils.Frequency
 
 -- + Semantics of effects
@@ -190,7 +190,8 @@
     onLevel <- getsState $ actorNotProjAssocs (== fid) lid
     let mleaderNew = listToMaybe $ filter (/= aidDead)
                      $ map fst $ onLevel ++ party
-    execCmdAtomic $ LeadFactionA fid mleader mleaderNew
+    unless (mleader == mleaderNew) $
+      execCmdAtomic $ LeadFactionA fid mleader mleaderNew
 
 deduceKilled :: (MonadAtomic m, MonadServer m) => Actor -> m ()
 deduceKilled body = do
diff --git a/LambdaHack.cabal b/LambdaHack.cabal
--- a/LambdaHack.cabal
+++ b/LambdaHack.cabal
@@ -1,5 +1,5 @@
 name:          LambdaHack
-version:       0.2.10.5
+version:       0.2.10.6
 synopsis:      A roguelike game engine in early and active development
 description:   This is an alpha release of LambdaHack,
                a game engine library for roguelike games
@@ -16,7 +16,8 @@
                in the strict and type-safe separation of code and content
                and of clients (human and AI-controlled) and server.
                .
-               This is a minor release, primarily intended to fix
+               This is a minor release, primarily intended to fix broken
+               vty an curses frontends and an unrelated game crash, as well as
                broken builds on hackage and travis. Changes since 0.2.10
                are mostly unrelated to gameplay: overhauled dungeon generation
                code and the use of the external library assert-failure
@@ -62,10 +63,6 @@
   type:               git
   location:           git://github.com/kosmikus/LambdaHack.git
 
-flag gtk
-  description:        enable the gtk frontend
-  default:            False
-
 flag vty
   description:        enable the vty frontend
   default:            False
@@ -203,22 +200,18 @@
   ghc-options:        -fno-ignore-asserts -funbox-strict-fields
   ghc-prof-options:   -fprof-auto-calls
 
-  if flag(gtk) {
-    other-modules:    Game.LambdaHack.Frontend.Gtk
-    build-depends:    gtk >= 0.12.1 && < 0.13
-    cpp-options:      -DGTK
+  if flag(curses) {
+    other-modules:    Game.LambdaHack.Frontend.Curses
+    build-depends:    hscurses >= 1.4.1 && < 2
+    cpp-options:      -DCURSES
   } else { if flag(vty) {
     other-modules:    Game.LambdaHack.Frontend.Vty
     build-depends:    vty >= 4.7.0.6
     cpp-options:      -DVTY
-  } else { if flag(curses) {
-    other-modules:    Game.LambdaHack.Frontend.Curses
-    build-depends:    hscurses >= 1.4.1 && < 2
-    cpp-options:      -DCURSES
   } else {
     other-modules:    Game.LambdaHack.Frontend.Gtk
     build-depends:    gtk >= 0.12.1 && < 0.13
-  } } }
+  } }
 
 executable LambdaHack
   hs-source-dirs:     LambdaHack
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -88,8 +88,8 @@
     cabal clean
     cabal install --enable-library-coverage
     make test
-    hpc report --hpcdir=dist/hpc/mix/LambdaHack-0.2.10.5/ LambdaHack
-    hpc markup --hpcdir=dist/hpc/mix/LambdaHack-0.2.10.5/ LambdaHack
+    hpc report --hpcdir=dist/hpc/mix/LambdaHack-0.2.10.6/ LambdaHack
+    hpc markup --hpcdir=dist/hpc/mix/LambdaHack-0.2.10.6/ LambdaHack
 
 The debug option `--stopAfter` is required for any screensaver mode
 game invocations that gather HPC info, because HPC needs a clean exit
