diff -ru src.orig/net/sf/gogui/tools/twogtp/Main.java src/net/sf/gogui/tools/twogtp/Main.java
--- src.orig/net/sf/gogui/tools/twogtp/Main.java	2009-07-16 09:58:10.000000000 +0200
+++ src/net/sf/gogui/tools/twogtp/Main.java	2009-10-13 13:47:05.000000000 +0200
@@ -29,6 +29,7 @@
                 "force",
                 "games:",
                 "help",
+                "handicap:",
                 "komi:",
                 "maxmoves:",
                 "observer:",
@@ -58,6 +59,7 @@
                     "-games          number of games (0=unlimited)\n" +
                     "-help           display this help and exit\n" +
                     "-komi           komi\n" +
+                    "-handicap       handicap\n" +
                     "-maxmoves       move limit\n" +
                     "-observer       command for observer program\n" +
                     "-openings       directory with opening sgf files\n" +
@@ -102,6 +104,7 @@
             Komi komi = new Komi(6.5);
             if (opt.contains("komi"))
                 komi = Komi.parseKomi(opt.get("komi"));
+            int handicap = opt.getInteger("handicap", 0, 0, 9);
             int maxMoves = opt.getInteger("maxmoves", 1000, -1);
             TimeSettings timeSettings = null;
             if (opt.contains("time"))
@@ -116,7 +119,7 @@
                 openings = new Openings(new File(opt.get("openings")));
             boolean useXml = opt.contains("xml");
             TwoGtp twoGtp
-                = new TwoGtp(black, white, referee, observer, size, komi,
+                = new TwoGtp(black, white, referee, observer, size, komi, handicap,
                              games, alternate, sgfFile, force, verbose,
                              openings, timeSettings, useXml);
             twoGtp.setMaxMoves(maxMoves);
diff -ru src.orig/net/sf/gogui/tools/twogtp/TwoGtp.java src/net/sf/gogui/tools/twogtp/TwoGtp.java
--- src.orig/net/sf/gogui/tools/twogtp/TwoGtp.java	2009-07-16 09:58:10.000000000 +0200
+++ src/net/sf/gogui/tools/twogtp/TwoGtp.java	2009-10-13 13:41:03.000000000 +0200
@@ -16,6 +16,7 @@
 import net.sf.gogui.game.NodeUtil;
 import net.sf.gogui.game.TimeSettings;
 import net.sf.gogui.go.BlackWhiteSet;
+import net.sf.gogui.go.Board;
 import net.sf.gogui.go.ConstBoard;
 import net.sf.gogui.go.GoColor;
 import static net.sf.gogui.go.GoColor.BLACK;
@@ -48,7 +49,7 @@
         @param komi The fixed komi. See TwoGtp documentation for option -komi
     */
     public TwoGtp(String black, String white, String referee, String observer,
-                  int size, Komi komi, int numberGames, boolean alternate,
+                  int size, Komi komi, int handicap, int numberGames, boolean alternate,
                   String filePrefix, boolean force, boolean verbose,
                   Openings openings, TimeSettings timeSettings,
                   boolean useXml)
@@ -92,6 +93,7 @@
             program.setLabel(m_allPrograms);
         m_size = size;
         m_komi = komi;
+        m_handicap = handicap;
         m_alternate = alternate;
         m_numberGames = numberGames;
         m_openings = openings;
@@ -183,6 +185,8 @@
             cmdGenmove(cmd);
         else if (command.equals("komi"))
             komi(cmd);
+        else if (command.equals("handicap"))
+            handicap(cmd);
         else if (command.equals("scoring_system"))
             sendIfSupported(command, cmd.getLine());
         else if (command.equals("name"))
@@ -201,6 +205,8 @@
                             "gogui-interrupt\n" +
                             "gogui-title\n" +
                             "komi\n" +
+                            "fixed_handicap\n" +
+                            "fixed\n" +
                             "list_commands\n" +
                             "name\n" +
                             "play\n" +
@@ -284,6 +290,8 @@
     /** Fixed komi. */
     private final Komi m_komi;
 
+    private final int m_handicap;
+
     private Game m_game;
 
     private GoColor m_resignColor;
@@ -445,6 +453,7 @@
             m_referee.setTableProperties(m_table);
         m_table.setProperty("Size", Integer.toString(m_size));
         m_table.setProperty("Komi", m_komi.toString());
+        m_table.setProperty("Handicap", Integer.toString(m_handicap));
         if (m_openings != null)
             m_table.setProperty("Openings",
                                 m_openings.getDirectory() + " ("
@@ -593,7 +602,7 @@
 
     private void initGame(int size) throws GtpError
     {
-        m_game = new Game(size, m_komi, null, null, null);
+        m_game = new Game(size, m_komi, Board.getHandicapStones(size, m_handicap), null, null);
         m_realTime.set(BLACK, 0.);
         m_realTime.set(WHITE, 0.);
         // Clock is not needed
@@ -669,6 +678,14 @@
         }
     }
 
+    private void handicap(GtpCommand cmd) throws GtpError
+    {
+        String arg = cmd.getArg();
+	int handicap = cmd.getIntArg(0);
+        if (handicap != m_handicap)
+            throw new GtpError("handicap is fixed at " + m_handicap);
+    }
+
     private void newGame(int size) throws GtpError
     {
         m_black.getAndClearCpuTime();
