diff -ur glchess.orig/Makefile.am glchess//Makefile.am
--- glchess.orig/Makefile.am	2010-03-02 10:49:26.000000000 +0300
+++ glchess//Makefile.am	2010-03-13 20:37:34.000000000 +0300
@@ -4,7 +4,7 @@
 SUBDIRS += gnuchess
 endif
 
-SUBDIRS += data help src textures
+SUBDIRS += data help src textures pieces
 
 desktopdir = $(datadir)/applications
 desktop_in_files = glchess.desktop.in.in
diff -ur glchess.orig/data/preferences.ui glchess//data/preferences.ui
--- glchess.orig/data/preferences.ui	2010-03-02 10:49:26.000000000 +0300
+++ glchess//data/preferences.ui	2010-03-13 20:37:32.000000000 +0300
@@ -194,6 +194,47 @@
                   </packing>
                 </child>
                 <child>
+                  <object class="GtkTable" id="theme_table">
+                    <property name="visible">True</property>
+                    <property name="border_width">5</property>
+                    <property name="n_rows">1</property>
+                    <property name="n_columns">2</property>
+                    <property name="column_spacing">5</property>
+                    <property name="row_spacing">5</property>
+                    <property name="homogeneous">True</property>
+                    <child>
+                      <object class="GtkLabel" id="pieces_label">
+                        <property name="visible">True</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes" comments="Preferences Dialog: Label before pieces style combo box">Pieces Style:</property>
+                      </object>
+                      <packing>
+                        <property name="x_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkComboBox" id="pieces_style_combo">
+                        <property name="visible">True</property>
+                        <signal name="changed" handler="_on_pieces_style_combo_changed"/>
+                        <child>
+                          <object class="GtkCellRendererText" id="cellrenderertext4"/>
+                          <attributes>
+                            <attribute name="text">0</attribute>
+                          </attributes>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="x_options">GTK_FILL</property>
+                        <property name="left_attach">1</property>
+                        <property name="right_attach">2</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+                <child>
                   <object class="GtkCheckButton" id="show_toolbar">
                     <property name="label" translatable="yes" comments="Preferences Dialog: Check box for selecting if toolbar is visible">Show _Toolbar</property>
                     <property name="visible">True</property>
@@ -207,7 +248,7 @@
                   <packing>
                     <property name="expand">False</property>
                     <property name="fill">False</property>
-                    <property name="position">2</property>
+                    <property name="position">3</property>
                   </packing>
                 </child>
                 <child>
@@ -224,7 +265,7 @@
                   <packing>
                     <property name="expand">False</property>
                     <property name="fill">False</property>
-                    <property name="position">3</property>
+                    <property name="position">4</property>
                   </packing>
                 </child>
                 <child>
@@ -241,7 +282,7 @@
                   <packing>
                     <property name="expand">False</property>
                     <property name="fill">False</property>
-                    <property name="position">4</property>
+                    <property name="position">5</property>
                   </packing>
                 </child>
                 <child>
@@ -258,7 +299,7 @@
                   <packing>
                     <property name="expand">False</property>
                     <property name="fill">False</property>
-                    <property name="position">5</property>
+                    <property name="position">6</property>
                   </packing>
                 </child>
               </object>
diff -ur glchess.orig/src/lib/config.py glchess//src/lib/config.py
--- glchess.orig/src/lib/config.py	2010-03-02 10:49:26.000000000 +0300
+++ glchess//src/lib/config.py	2010-03-13 20:37:32.000000000 +0300
@@ -74,6 +74,7 @@
              'show_history':                     True,
              'maximised':                        False,
              'fullscreen':                       False,
+             'pieces_style':                     'simple',
              'show_3d':                          False,
              'show_3d_smooth':                   False,             
              'show_move_hints':                  True,
diff -ur glchess.orig/src/lib/display.py glchess//src/lib/display.py
--- glchess.orig/src/lib/display.py	2010-03-02 10:49:26.000000000 +0300
+++ glchess//src/lib/display.py	2010-03-13 20:37:32.000000000 +0300
@@ -90,7 +90,8 @@
                          chess.board.BISHOP: 'bishop', chess.board.QUEEN: 'queen', chess.board.KING: 'king'}[piece.getType()]
             chessSet = {chess.board.WHITE: 'white', chess.board.BLACK: 'black'}[piece.getColour()]
             p = CairoPiece(self, piece)
-            p.model = self.controller.addChessPiece(chessSet, pieceName, location, p)
+            style = piecesStyle = config.get('pieces_style')
+            p.model = self.controller.addChessPiece(chessSet, pieceName, location, p, style=style)
             self.pieces[piece] = p
 
         # Move the model
@@ -336,6 +337,7 @@
         # This should be cleaned up
         self.scene = SceneCairo(self)
         config.watch('board_view', self.__onBoardViewChanged)
+        config.watch('pieces_style', self.__onPiecesStyleChanged)
 
         # Look for game events to update the scene
         movePlayer = MovePlayer(self)
@@ -355,6 +357,9 @@
     def __onBoardViewChanged(self, key, value):
         self.updateRotation()
 
+    def __onPiecesStyleChanged(self, key, value):
+        self.updatePiecesStyle()
+
     def _updateHighlight(self, coord):
         if self.moveNumber == -1:
             player = self.game.getCurrentPlayer()
@@ -419,6 +424,11 @@
 
         self.scene.controller.setBoardRotation(rotation, boardView == 'facetoface', animate)
 
+    def updatePiecesStyle(self):
+        piecesStyle = config.get('pieces_style')
+        
+        self.scene.controller.setPiecesStyle(piecesStyle)
+    
     def _pieceMoved(self, piece):
         """
         """
diff -ur glchess.orig/src/lib/gtkui/dialogs.py glchess//src/lib/gtkui/dialogs.py
--- glchess.orig/src/lib/gtkui/dialogs.py	2010-03-02 10:49:26.000000000 +0300
+++ glchess//src/lib/gtkui/dialogs.py	2010-03-13 20:37:31.000000000 +0300
@@ -20,7 +20,7 @@
         self.__gui = gui
         
         self.__servers = []
-        view = gui.get_object('server_list')
+        view = gui.get_object('server_list') 
         if view is not None:
             store = gtk.ListStore(str, gobject.TYPE_PYOBJECT)
             view.set_model(store)
@@ -634,9 +634,21 @@
             iter = promotionModel.append()
             promotionModel.set(iter, 0, label, 1, key)
             
+        # Make model for piece styles
+        piecesModel = gtk.ListStore(str, str)
+        widget = self.__gui.get_object('pieces_style_combo')
+        widget.set_model(piecesModel)
+                     # Translators: a simple piece set will be used in 2d mode
+        view_list = [('simple', _('Simple')),
+                     # Translators: a fancy  piece set will be used in 2d mode
+                     ('fancy',  _('Fancy'))]
+        for (key, label) in view_list:
+            iter = piecesModel.append()
+            piecesModel.set(iter, 0, label, 1, key)
+
         # Watch for config changes
-        for key in ['show_3d', 'show_3d_smooth', 'show_toolbar', 'show_history', 
-                    'show_move_hints', 'show_numbering',
+        for key in ['show_3d', 'show_3d_smooth', 'pieces_style', 'show_toolbar',
+                    'show_history', 'show_move_hints', 'show_numbering',
                     'move_format', 'board_view', 'promotion_type']:
             glchess.config.watch(key, self.__applyConfig)
             try:
@@ -652,10 +664,17 @@
         if name == 'show_3d':
             self.__gui.get_object('show_3d').set_active(value)
             self.__gui.get_object('show_3d_smooth').set_sensitive(value)            
+            self.__gui.get_object('pieces_style_combo').set_sensitive(not value)            
 
         elif name == 'show_3d_smooth':
             self.__gui.get_object('show_3d_smooth').set_active(value)
             
+        elif name == 'pieces_style':
+            widget = self.__gui.get_object('pieces_style_combo')
+            for row in widget.get_model():
+                if row[1] == value:
+                    widget.set_active_iter(row.iter)
+                
         elif name == 'show_toolbar':
             self.__gui.get_object('show_toolbar').set_active(value)
                 
@@ -705,6 +724,16 @@
         self.setVisible(False)
         return True
 
+    def _on_pieces_style_combo_changed(self, widget):
+        """Gtk+ callback"""
+        model = widget.get_model()
+        iter = widget.get_active_iter()
+        if iter is None:
+            return
+        data = model.get(iter, 1)
+        if data[0] is not None:
+            glchess.config.set('pieces_style', data[0])
+
     def _on_move_format_combo_changed(self, widget):
         """Gtk+ callback"""
         model = widget.get_model()
diff -ur glchess.orig/src/lib/gtkui/gtkui.py glchess//src/lib/gtkui/gtkui.py
--- glchess.orig/src/lib/gtkui/gtkui.py	2010-03-02 10:49:26.000000000 +0300
+++ glchess//src/lib/gtkui/gtkui.py	2010-03-13 20:37:31.000000000 +0300
@@ -224,9 +224,8 @@
         
         # Watch for config changes
         for key in ['show_toolbar', 'show_history', 'fullscreen',
-                    'show_3d', 'show_3d_smooth', 'show_comments', 'show_numbering',
-                    'show_move_hints',
-                    'width', 'height',
+                    'show_3d', 'show_3d_smooth', 'pieces_style', 'show_comments',
+                    'show_numbering', 'show_move_hints', 'width', 'height',
                     'move_format', 'promotion_type', 'board_view',
                     'enable_networking']:
             glchess.config.watch(key, self.__applyConfig)
@@ -368,7 +367,7 @@
         """        
         # Load configuration
         for name in ['show_toolbar', 'show_history', 'show_3d', 'show_3d_smooth',
-                     'show_comments', 'show_numbering', 'show_move_hints',
+                     'pieces_style', 'show_comments', 'show_numbering', 'show_move_hints',
                      'move_format', 'promotion_type', 'board_view', 'maximised',
                      'enable_networking']:
             try:
@@ -555,6 +554,9 @@
                 value = False
             self.view.feedback.showSmooth(value)
                 
+        elif name == 'pieces_style':
+            pass
+
         elif name == 'show_comments':
             self.view.setShowComments(value)
 
diff -ur glchess.orig/src/lib/scene/cairo/Makefile.am glchess//src/lib/scene/cairo/Makefile.am
--- glchess.orig/src/lib/scene/cairo/Makefile.am	2010-03-02 10:49:26.000000000 +0300
+++ glchess//src/lib/scene/cairo/Makefile.am	2010-03-13 20:37:32.000000000 +0300
@@ -1,6 +1,5 @@
 glchessdir = $(pythondir)/glchess/scene/cairo
 glchess_PYTHON = \
-	__init__.py	\
-	pieces.py	
+	__init__.py
 
 -include $(top_srcdir)/git.mk
diff -ur glchess.orig/src/lib/scene/cairo/__init__.py glchess//src/lib/scene/cairo/__init__.py
--- glchess.orig/src/lib/scene/cairo/__init__.py	2010-03-02 10:49:26.000000000 +0300
+++ glchess//src/lib/scene/cairo/__init__.py	2010-03-13 20:37:32.000000000 +0300
@@ -1,11 +1,12 @@
 # -*- coding: utf-8 -*-
+import os.path
+
 import math
 import cairo
+import rsvg
 
 import glchess.scene
 
-import pieces
-
 from gettext import gettext as _
 
 BACKGROUND_COLOUR    = (0.53, 0.63, 0.75)
@@ -27,7 +28,7 @@
     """
     """
 
-    def __init__(self, scene, name, coord, feedback):
+    def __init__(self, scene, name, coord, feedback, style='simple'):
         """
         """
         self.scene = scene
@@ -38,6 +39,8 @@
         self.targetPos   = None
         self.moving = False
         self.delete = False # Delete once moved to location
+
+        self.setStyle(style)
         
     def __coordToLocation(self, coord):
         """
@@ -47,6 +50,14 @@
         
         return (float(rank), float(file))
 
+    def setStyle(self, style):
+        self.style = style
+        self.path  = os.path.join(glchess.defaults.BASE_DIR, 'pieces', style, self.name + '.svg')
+        try:
+            self.svg = rsvg.Handle(file = self.path)
+        except Exception as e:
+            raise Exception('Error reading %s: %s' % (path, e))
+    
     def move(self, coord, delete, animate = True):
         """Extends glchess.scene.ChessPiece"""
         if not coord:
@@ -127,28 +138,31 @@
     def render(self, context):
         """
         """
-        offset = 0
+        offset = self.scene.PIECE_BORDER
         matrix = context.get_matrix()
         x = (self.pos[0] - 4) * self.scene.squareSize
         y = (3 - self.pos[1]) * self.scene.squareSize
+
         context.translate(x, y)
         context.translate(self.scene.squareSize / 2, self.scene.squareSize / 2)
         context.rotate(-self.scene.angle)
-        context.translate(-self.scene.squareSize / 2, -self.scene.squareSize / 2)
 
         # If Face to Face mode is enabled, we rotate the black player's pieces by 180 degrees
         if self.scene.faceToFace and self.name.find('black') != -1:
             context.rotate(math.pi)
-            offset -= self.scene.pieceSize
-        pieces.piece(self.name, context, self.scene.pieceSize, offset, offset)
-        context.fill()
+            offset = - offset - self.scene.pieceSize + self.scene.squareSize
+        
+        context.translate(-self.scene.squareSize / 2 + offset, -self.scene.squareSize / 2 + offset)
+        context.scale(self.scene.pieceSize/self.svg.props.width, self.scene.pieceSize/self.svg.props.height)
+
+        self.svg.render_cairo(context)
         context.set_matrix(matrix)
 
 class Scene(glchess.scene.Scene):
     """
     """    
     BORDER = 6.0
-    PIECE_BORDER = 2.0
+    PIECE_BORDER = 0.0
 
     def __init__(self, feedback):
         """Constructor for a Cairo scene"""
@@ -163,7 +177,7 @@
         self.showNumbering   = False
         self.faceToFace      = False
     
-    def addChessPiece(self, chessSet, name, coord, feedback):
+    def addChessPiece(self, chessSet, name, coord, feedback, style = 'simple'):
         """Add a chess piece model into the scene.
         
         'chessSet' is the name of the chess set (string).
@@ -173,7 +187,7 @@
         Returns a reference to this chess piece or raises an exception.
         """
         name = chessSet + name[0].upper() + name[1:]
-        piece = ChessPiece(self, name, coord, feedback)
+        piece = ChessPiece(self, name, coord, feedback, style=style)
         self.pieces.append(piece)
         
         # Redraw the scene
@@ -246,6 +260,12 @@
             self.redrawStatic = True
             self.feedback.onRedraw()
 
+    def setPiecesStyle(self, piecesStyle):
+        for piece in self.pieces:
+            piece.setStyle(piecesStyle)
+        self.redrawStatic = True
+        self.feedback.onRedraw()
+    
     def animate(self, timeStep):
         """Extends glchess.scene.Scene"""
         if self.angle == self.targetAngle and len(self._animationQueue) == 0:
--- configure.in.orig	2010-03-13 20:14:19.000000000 +0300
+++ configure.in	2010-03-13 20:11:54.000000000 +0300
@@ -1108,6 +1108,9 @@
 glchess/src/lib/scene/opengl/Makefile
 glchess/src/lib/ui/Makefile
 glchess/textures/Makefile
+glchess/pieces/Makefile
+glchess/pieces/fancy/Makefile
+glchess/pieces/simple/Makefile
 gnome-sudoku/Makefile
 gnome-sudoku/src/gnome-sudoku.in
 gnome-sudoku/src/Makefile
