[longomatch] Add a new drawing tool



commit b91bc0a97e131594b7deecc5c88637f4c0a12ebb
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date:   Fri Jun 27 18:39:27 2014 +0200

    Add a new drawing tool

 LongoMatch.Core/Common/Area.cs                     |   28 +
 LongoMatch.Core/Common/Color.cs                    |    9 +
 LongoMatch.Core/Common/Constants.cs                |    6 +
 LongoMatch.Core/Common/Enums.cs                    |   27 +-
 LongoMatch.Core/Common/EventsBroker.cs             |   12 +-
 LongoMatch.Core/Handlers/Handlers.cs               |   21 +-
 LongoMatch.Core/Handlers/Multimedia.cs             |    2 +-
 .../Drawing/{ICanvasObject.cs => ICanvas.cs}       |   16 +-
 LongoMatch.Core/Interfaces/Drawing/IDrawable.cs    |    8 +-
 .../Interfaces/Drawing/IDrawingToolkit.cs          |   17 +-
 LongoMatch.Core/Interfaces/Drawing/IWidget.cs      |    3 +-
 LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs      |    2 +-
 LongoMatch.Core/LongoMatch.Core.mdp                |    9 +-
 LongoMatch.Core/Store/Drawables/Angle.cs           |    2 +-
 LongoMatch.Core/Store/Drawables/Circle.cs          |   74 --
 .../Drawables/Counter.cs}                          |   29 +-
 LongoMatch.Core/Store/Drawables/Cross.cs           |   85 ++-
 LongoMatch.Core/Store/Drawables/Drawable.cs        |   56 +-
 LongoMatch.Core/Store/Drawables/Ellipse.cs         |   36 +-
 LongoMatch.Core/Store/Drawables/Line.cs            |   13 +-
 LongoMatch.Core/Store/Drawables/MultiPoints.cs     |    2 +-
 LongoMatch.Core/Store/Drawables/Quadrilateral.cs   |   20 +-
 LongoMatch.Core/Store/Drawables/Rectangle.cs       |   30 +-
 LongoMatch.Core/Store/Drawables/Selection.cs       |    4 +-
 .../Store/{Drawing.cs => FrameDrawing.cs}          |   16 +-
 LongoMatch.Core/Store/Play.cs                      |    6 +-
 LongoMatch.Core/Store/PlayListPlay.cs              |    2 +-
 LongoMatch.Drawing.Cairo/CairoBackend.cs           |  142 +++-
 .../LongoMatch.Drawing.Cairo.mdp                   |   10 +
 .../Surface.cs                                     |   49 +-
 LongoMatch.Drawing.Cairo/WidgetWrapper.cs          |   56 +-
 LongoMatch.Drawing/Canvas.cs                       |   67 +-
 LongoMatch.Drawing/CanvasObject/CanvasObject.cs    |  127 +++
 LongoMatch.Drawing/CanvasObject/CategoryLabel.cs   |    2 +-
 .../{BaseCanvasObject.cs => CategoryObject.cs}     |   59 +-
 .../{BaseCanvasObject.cs => CounterObject.cs}      |   62 +-
 .../{CircleObject.cs => CrossObject.cs}            |   25 +-
 .../{CircleObject.cs => EllipseObject.cs}          |   19 +-
 LongoMatch.Drawing/CanvasObject/LineObject.cs      |   35 +-
 LongoMatch.Drawing/CanvasObject/PlayerObject.cs    |    2 +-
 LongoMatch.Drawing/CanvasObject/PositionObject.cs  |    2 +-
 .../{CircleObject.cs => QuadrilateralObject.cs}    |   19 +-
 .../{CircleObject.cs => RectangleObject.cs}        |   22 +-
 .../{CircleObject.cs => TextObject.cs}             |   26 +-
 LongoMatch.Drawing/CanvasObject/TimeNodeObject.cs  |    2 +-
 LongoMatch.Drawing/CanvasObject/TimelineObject.cs  |   16 +-
 LongoMatch.Drawing/Common.cs                       |    2 +
 LongoMatch.Drawing/LongoMatch.Drawing.mdp          |   10 +-
 LongoMatch.Drawing/Widgets/Blackboard.cs           |  304 ++++++
 LongoMatch.Drawing/Widgets/PlaysTimeline.cs        |    3 +
 LongoMatch.Drawing/Widgets/TeamTagger.cs           |   13 +-
 LongoMatch.Drawing/Widgets/TimersTimeline.cs       |    9 +-
 LongoMatch.Drawing/Widgets/Timerule.cs             |    2 +-
 LongoMatch.GUI.Helpers/Misc.cs                     |    4 +-
 LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs         |    2 +-
 LongoMatch.GUI.Multimedia/gtk-gui/objects.xml      |    9 +-
 LongoMatch.GUI/Gui/Dialog/DrawingTool.cs           |  345 ++++++-
 LongoMatch.GUI/Gui/GUIToolkit.cs                   |   12 +-
 LongoMatch.GUI/LongoMatch.GUI.mdp                  |   26 +-
 .../LongoMatch.Gui.Component.DrawingToolBox.cs     |  303 ------
 .../LongoMatch.Gui.Component.DrawingWidget.cs      |   42 -
 .../gtk-gui/LongoMatch.Gui.Dialog.DrawingTool.cs   |  630 ++++++++++--
 LongoMatch.GUI/gtk-gui/gui.stetic                  | 1070 ++++++++++++--------
 LongoMatch.GUI/gtk-gui/objects.xml                 |   43 +-
 LongoMatch.Multimedia/Player/GstPlayer.cs          |   18 +-
 LongoMatch.Services/Services/EventsManager.cs      |   33 +-
 .../Services/RenderingJobsManager.cs               |    8 +-
 Tests/Core/Drawables/TestAngle.cs                  |    2 +-
 Tests/Core/Drawables/TestCircle.cs                 |   81 --
 Tests/Core/Drawables/TestLine.cs                   |    4 +-
 Tests/Core/Drawables/TestMultipoints.cs            |    4 +-
 Tests/Core/Drawables/TestQuadrilateral.cs          |   16 +-
 Tests/Core/Drawables/TestRectangle.cs              |   28 +-
 Tests/Tests.mdp                                    |    1 -
 images/cursors/angle                               |   38 +
 images/cursors/arrow                               |   38 +
 images/cursors/ellipse                             |   38 +
 images/cursors/freehand                            |   38 +
 images/cursors/number                              |   38 +
 images/cursors/rect                                |   38 +
 images/cursors/text                                |   38 +
 images/stock_draw-freeform-line.png                |  Bin 276 -> 0 bytes
 images/stock_draw-line-ends-with-arrow.png         |  Bin 155 -> 0 bytes
 images/tools/dash-line.svg                         |   65 ++
 images/tools/draw-arrow.png                        |  Bin 0 -> 210 bytes
 .../draw-circle-unfilled.png}                      |  Bin 418 -> 418 bytes
 .../draw-cross.png}                                |  Bin 113 -> 113 bytes
 images/tools/draw-ellipse.png                      |  Bin 0 -> 945 bytes
 images/tools/draw-eraser.png                       |  Bin 0 -> 751 bytes
 images/tools/draw-freehand.png                     |  Bin 0 -> 682 bytes
 images/tools/draw-number.png                       |  Bin 0 -> 449 bytes
 images/tools/draw-pointer.png                      |  Bin 0 -> 685 bytes
 .../draw-rectangle-unfilled.png}                   |  Bin 123 -> 123 bytes
 images/tools/draw-rectangle.png                    |  Bin 0 -> 394 bytes
 images/tools/draw-text.png                         |  Bin 0 -> 662 bytes
 images/tools/line-arrow.svg                        |  131 +++
 images/tools/line-dot.svg                          |  157 +++
 images/tools/line-double-arrow.svg                 |  144 +++
 images/tools/line-double-dot.svg                   |  157 +++
 images/tools/line.svg                              |   65 ++
 100 files changed, 3841 insertions(+), 1445 deletions(-)
---
diff --git a/LongoMatch.Core/Common/Area.cs b/LongoMatch.Core/Common/Area.cs
index 0e7fee1..b4745a6 100644
--- a/LongoMatch.Core/Common/Area.cs
+++ b/LongoMatch.Core/Common/Area.cs
@@ -43,6 +43,34 @@ namespace LongoMatch.Common
                        get;
                        set;
                }
+               
+               public Point Center {
+                       get {
+                               return new Point (Start.X + Width / 2, Start.Y + Height / 2);
+                       }
+               }
+               
+               public Point[] Vertices {
+                       get {
+                               return new Point[] {
+                                       new Point (Start.X, Start.Y),
+                                       new Point (Start.X + Width, Start.Y),
+                                       new Point (Start.X + Width, Start.Y + Height),
+                                       new Point (Start.X, Start.Y + Height)};
+                       }
+               }
+
+               public Point[] VerticesCenter {
+                       get {
+                               Point [] points = Vertices;
+
+                               points[0].X += Width / 2;
+                               points[1].Y += Height / 2;
+                               points[2].X = points[0].X;
+                               points[3].Y = points[1].Y;
+                               return points;
+                       }
+               }
        }
 }
 
diff --git a/LongoMatch.Core/Common/Color.cs b/LongoMatch.Core/Common/Color.cs
index 03c77d5..915b079 100644
--- a/LongoMatch.Core/Common/Color.cs
+++ b/LongoMatch.Core/Common/Color.cs
@@ -21,6 +21,7 @@ using Newtonsoft.Json;
 namespace LongoMatch.Common
 {
        [JsonConverter (typeof (LongoMatchConverter))]
+       [Serializable]
        public class Color
        {
                public Color (byte r, byte g, byte b, byte a=byte.MaxValue)
@@ -51,6 +52,10 @@ namespace LongoMatch.Common
                        set;
                }
                
+               public Color Copy () {
+                       return new Color (R, G, B, A);
+               }
+               
                public override bool Equals (object obj)
                {
                        Color c = obj as Color;
@@ -68,6 +73,10 @@ namespace LongoMatch.Common
                static public byte UShortToByte (ushort val) {
                        return (byte) (((float)val) / ushort.MaxValue * byte.MaxValue);
                }
+
+               static public ushort ByteToUShort (byte val) {
+                       return (ushort) ((float)val / byte.MaxValue * ushort.MaxValue);
+               }
                
                static public Color ColorFromUShort (ushort r, ushort g, ushort b, ushort a = 
ushort.MaxValue) {
                        return new Color (UShortToByte (r), UShortToByte (g),
diff --git a/LongoMatch.Core/Common/Constants.cs b/LongoMatch.Core/Common/Constants.cs
index f51aa74..af0b2cc 100644
--- a/LongoMatch.Core/Common/Constants.cs
+++ b/LongoMatch.Core/Common/Constants.cs
@@ -100,6 +100,12 @@ Xavier Queralt Mateu (ca)";
                public const string FIELD_BACKGROUND = "field_background.svg";
                public const string HALF_FIELD_BACKGROUND = "half_field_background.svg";
                public const string GOAL_BACKGROUND = "goal_background.svg";
+               public const string LINE_NORMAL = "line.svg";
+               public const string LINE_DASHED = "dash-line.svg";
+               public const string LINE_ARROW = "line-arrow.svg";
+               public const string LINE_DOUBLE_ARROW = "line-double-arrow.svg";
+               public const string LINE_DOT = "line-dot.svg";
+               public const string LINE_DOUBLE_DOT = "line-double-dot.svg";
                
                public const int DB_MAYOR_VERSION = 3;
                public const int DB_MINOR_VERSION = 1;
diff --git a/LongoMatch.Core/Common/Enums.cs b/LongoMatch.Core/Common/Enums.cs
index 4274ad7..04ac254 100644
--- a/LongoMatch.Core/Common/Enums.cs
+++ b/LongoMatch.Core/Common/Enums.cs
@@ -100,16 +100,19 @@ namespace LongoMatch.Common
        }
        
        public enum DrawTool {
-               PEN,
-               LINE,
-               DASHED_LINE,
-               CIRCLE,
-               DASHED_CIRCLE,
-               RECTANGLE,
-               DASHED_RECTANGLE,
-               CROSS,
-               DASHED_CROSS,
-               ERASER
+               Pen,
+               Line,
+               Ellipse,
+               Rectangle,
+               Angle,
+               Cross,
+               Eraser,
+               Selection,
+               RectangleArea,
+               CircleArea,
+               Player,
+               Text,
+               Counter,
        }
        
        public enum CaptureSourceType {
@@ -161,7 +164,6 @@ namespace LongoMatch.Common
                AngleCenter,
                CircleBorder,
                All,
-               None,
        }
        
        public enum LineStyle {
@@ -174,7 +176,8 @@ namespace LongoMatch.Common
                Simple,
                Arrow,
                DoubleArrow,
-               Rounded
+               Dot,
+               DoubleDot
        }
        
        public enum FontSlant {
diff --git a/LongoMatch.Core/Common/EventsBroker.cs b/LongoMatch.Core/Common/EventsBroker.cs
index dd2abc2..002995a 100644
--- a/LongoMatch.Core/Common/EventsBroker.cs
+++ b/LongoMatch.Core/Common/EventsBroker.cs
@@ -39,7 +39,7 @@ namespace LongoMatch.Common
                public event TimeNodeChangedHandler TimeNodeChanged;
                public event SnapshotSeriesHandler SnapshotSeries;
                public event TagPlayHandler TagPlay;
-               public event DuplicatePlayHandler DuplicatePlay;
+               public event DuplicatePlaysHandler DuplicatePlays;
                public event TeamsTagsChangedHandler TeamTagsChanged;
                
                /* Playlist */
@@ -168,10 +168,10 @@ namespace LongoMatch.Common
                                TagPlay (play);
                }
 
-               public void EmitDuplicatePlay (Play play)
+               public void EmitDuplicatePlay (List<Play> plays)
                {
-                       if (DuplicatePlay != null)
-                               DuplicatePlay (play);
+                       if (DuplicatePlays != null)
+                               DuplicatePlays (plays);
                }
                
                public void EmitNewPlaylist() {
@@ -370,10 +370,10 @@ namespace LongoMatch.Common
                        }
                }
 
-               public void EmitDrawFrame (Time currentTime)
+               public void EmitDrawFrame (Play play, int drawingIndex)
                {
                        if (DrawFrame != null) {
-                               DrawFrame (currentTime);
+                               DrawFrame (play, drawingIndex);
                        }
                }
 
diff --git a/LongoMatch.Core/Handlers/Handlers.cs b/LongoMatch.Core/Handlers/Handlers.cs
index 48184cd..b8be20a 100644
--- a/LongoMatch.Core/Handlers/Handlers.cs
+++ b/LongoMatch.Core/Handlers/Handlers.cs
@@ -24,6 +24,8 @@ using LongoMatch.Interfaces;
 using LongoMatch.Interfaces.GUI;
 using LongoMatch.Store;
 using LongoMatch.Common;
+using LongoMatch.Store.Drawables;
+using LongoMatch.Interfaces.Drawing;
 
 namespace LongoMatch.Handlers
 {
@@ -50,7 +52,7 @@ namespace LongoMatch.Handlers
        /* Change the Play's category */
        public delegate void PlayCategoryChangedHandler(Play play, Category cat);
        /* DUplicate play */
-       public delegate void DuplicatePlayHandler (Play play);
+       public delegate void DuplicatePlaysHandler (List<Play> plays);
        
        public delegate void TeamsTagsChangedHandler ();
        
@@ -89,20 +91,6 @@ namespace LongoMatch.Handlers
        /* Save a playlist */
        public delegate void SavePlaylistHandler();
 
-       /* Drawing events */
-       /* Draw tool changed */
-       public delegate void DrawToolChangedHandler(DrawTool drawTool);
-       /* Paint color changed */
-       public delegate void ColorChangedHandler(Color color);
-       /* Paint line width changed */
-       public delegate void LineWidthChangedHandler(int width);
-       /* Toggle widget visibility */
-       public delegate void VisibilityChangedHandler(bool visible);
-       /* Clear drawings */
-       public delegate void ClearDrawingHandler();
-       /* Transparency value changed */
-       public delegate void TransparencyChangedHandler(double transparency);
-       
        /* The position of the stream has changed */
        public delegate void PositionChangedHandler(Time pos);
        
@@ -155,6 +143,9 @@ namespace LongoMatch.Handlers
        
        public delegate void ShowTimelineMenuHandler (List<Play> plays, Category cat, Time time);
        public delegate void ShowTaggerMenuHandler (List<Play> plays);
+       public delegate void ShowDrawToolMenuHandler (IBlackboardObject drawable);
+       public delegate void ConfigureDrawingObjectHandler (IBlackboardObject drawable);
+       public delegate void DrawableChangedHandler (IBlackboardObject drawable);
 
        public delegate void BackEventHandle ();
 }
diff --git a/LongoMatch.Core/Handlers/Multimedia.cs b/LongoMatch.Core/Handlers/Multimedia.cs
index 3c35994..06732b5 100644
--- a/LongoMatch.Core/Handlers/Multimedia.cs
+++ b/LongoMatch.Core/Handlers/Multimedia.cs
@@ -32,7 +32,7 @@ namespace LongoMatch.Handlers
        public delegate void PrevButtonClickedHandler();
        public delegate void ProgressHandler(float progress);
        public delegate void FramesProgressHandler(int actual, int total, Image frame);
-       public delegate void DrawFrameHandler(Time time);
+       public delegate void DrawFrameHandler (Play play, int drawingIndex);
        public delegate void EllpasedTimeHandler(Time ellapsedTime);
        public delegate void PlaybackRateChangedHandler (float rate);
        
diff --git a/LongoMatch.Core/Interfaces/Drawing/ICanvasObject.cs 
b/LongoMatch.Core/Interfaces/Drawing/ICanvas.cs
similarity index 79%
copy from LongoMatch.Core/Interfaces/Drawing/ICanvasObject.cs
copy to LongoMatch.Core/Interfaces/Drawing/ICanvas.cs
index e13b55a..3ac0bd6 100644
--- a/LongoMatch.Core/Interfaces/Drawing/ICanvasObject.cs
+++ b/LongoMatch.Core/Interfaces/Drawing/ICanvas.cs
@@ -23,6 +23,12 @@ using LongoMatch.Interfaces.Drawing;
 
 namespace LongoMatch.Interfaces.Drawing
 {
+
+       public interface ICanvas
+       {
+                void Draw (object context, Area area);
+       }
+       
        public interface ICanvasObject
        {
                void Draw (IDrawingToolkit tk, Area area);
@@ -30,8 +36,16 @@ namespace LongoMatch.Interfaces.Drawing
                string Description {set; get;}
        }
        
-       public interface ICanvasSelectableObject: ICanvasObject, IDrawable
+       public interface ICanvasSelectableObject: ICanvasObject, IMovableObject
+       {
+       }
+       
+       public interface ICanvasDrawableObject: ICanvasSelectableObject
        {
+               IBlackboardObject IDrawableObject {
+                       get;
+                       set;
+               }
        }
 }
 
diff --git a/LongoMatch.Core/Interfaces/Drawing/IDrawable.cs b/LongoMatch.Core/Interfaces/Drawing/IDrawable.cs
index 88a6b6e..0c9b8cb 100644
--- a/LongoMatch.Core/Interfaces/Drawing/IDrawable.cs
+++ b/LongoMatch.Core/Interfaces/Drawing/IDrawable.cs
@@ -21,11 +21,17 @@ using LongoMatch.Common;
 
 namespace LongoMatch.Interfaces.Drawing
 {
-       public interface IDrawable
+       public interface IMovableObject
        {
                bool Selected {get;set;}
                Selection GetSelection (Point point, double precision);
                void Move (Selection s, Point dst, Point start);
        }
+       
+       public interface IBlackboardObject: IMovableObject
+       {
+               Area Area {get;}
+               void Reorder ();
+       }
 }
 
diff --git a/LongoMatch.Core/Interfaces/Drawing/IDrawingToolkit.cs 
b/LongoMatch.Core/Interfaces/Drawing/IDrawingToolkit.cs
index f5c876d..8f363b7 100644
--- a/LongoMatch.Core/Interfaces/Drawing/IDrawingToolkit.cs
+++ b/LongoMatch.Core/Interfaces/Drawing/IDrawingToolkit.cs
@@ -18,20 +18,32 @@
 using System;
 using LongoMatch.Common;
 using System.Collections.Generic;
+using LongoMatch.Interfaces.Drawing;
 
 namespace LongoMatch.Interfaces
 {
+
+       public interface ISurface:IDisposable  {
+               Image Copy ();
+               object Value {get;}
+               object Context {get;}
+       }
+       
        public interface IDrawingToolkit
        {
                object Context {set;}
                int LineWidth {set;}
+               bool Clear {set;}
                Color StrokeColor {set;}
                Color FillColor {set;}
                string FontFamily {set;}
                FontSlant FontSlant {set;}
                FontWeight FontWeight {set;}
                int FontSize {set;}
+               LineStyle LineStyle {set;}
                
+               ISurface CreateSurface (int width, int height, Image image=null);
+               void DrawSurface (ISurface surface);
                void Begin();
                void End();
                void TranslateAndScale (Point translation, Point scale);
@@ -40,13 +52,16 @@ namespace LongoMatch.Interfaces
                                   SelectionPosition orientation);
                void DrawRectangle (Point start, double width, double height);
                void DrawRoundedRectangle (Point start, double width, double height, double radius);
-               void DrawArea (List<Point> vertices);
+               void DrawArea (params Point[] vertices);
                void DrawPoint (Point point);
                void DrawCircle (Point center, double radius);
                void DrawEllipse (Point center, double axisX, double axisY);
                void DrawText (Point point, double width, double height, string text);
                void DrawImage (Image image); 
                void DrawImage (Point start, double width, double height, Image image, bool scale); 
+               void DrawArrow(Point start, Point stop, int lenght, double degrees, bool closed);
+               void Save (ICanvas canvas, double width, double height, string filename);
+               Image Copy (ICanvas canvas, double width, double height);
        }
 }
 
diff --git a/LongoMatch.Core/Interfaces/Drawing/IWidget.cs b/LongoMatch.Core/Interfaces/Drawing/IWidget.cs
index 374edb3..9160154 100644
--- a/LongoMatch.Core/Interfaces/Drawing/IWidget.cs
+++ b/LongoMatch.Core/Interfaces/Drawing/IWidget.cs
@@ -33,8 +33,9 @@ namespace LongoMatch.Interfaces.Drawing
                double Width {get;set;}
                double Height {get;set;}
                void ReDraw (Area area = null);
-               void ReDraw (IDrawable drawable);
+               void ReDraw (IMovableObject drawable);
                void SetCursor (CursorType type);
+               void SetCursorForTool (DrawTool tool);
                void ShowTooltip (string text);
        }
 }
diff --git a/LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs b/LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs
index a3d3824..62869ca 100644
--- a/LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs
+++ b/LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs
@@ -78,7 +78,7 @@ namespace LongoMatch.Interfaces.GUI
                void ManageJobs ();
                
                void TagPlay (Play play, Project project);
-               void DrawingTool(Image pixbuf, Play play, Time stopTime);
+               void DrawingTool(Image pixbuf, Play play, int drawingIndex);
                
                string RemuxFile (string filePath, string outputFile, VideoMuxerType muxer);
                
diff --git a/LongoMatch.Core/LongoMatch.Core.mdp b/LongoMatch.Core/LongoMatch.Core.mdp
index c5b047f..2454bef 100644
--- a/LongoMatch.Core/LongoMatch.Core.mdp
+++ b/LongoMatch.Core/LongoMatch.Core.mdp
@@ -20,7 +20,6 @@
     <File subtype="Code" buildaction="Compile" name="Common/Enums.cs" />
     <File subtype="Code" buildaction="Compile" name="Common/Log.cs" />
     <File subtype="Code" buildaction="Compile" name="Store/Category.cs" />
-    <File subtype="Code" buildaction="Compile" name="Store/Drawing.cs" />
     <File subtype="Code" buildaction="Compile" name="Store/HotKey.cs" />
     <File subtype="Code" buildaction="Compile" name="Store/PixbufTimeNode.cs" />
     <File subtype="Code" buildaction="Compile" name="Store/Play.cs" />
@@ -110,7 +109,6 @@
     <File subtype="Code" buildaction="Compile" name="Store/Drawables/Quadrilateral.cs" />
     <File subtype="Code" buildaction="Compile" name="Store/Drawables/Ellipse.cs" />
     <File subtype="Code" buildaction="Compile" name="Store/Drawables/Line.cs" />
-    <File subtype="Code" buildaction="Compile" name="Store/Drawables/Text.cs" />
     <File subtype="Code" buildaction="Compile" name="Store/Drawables/MultiPoints.cs" />
     <File subtype="Code" buildaction="Compile" name="Store/Drawables/Drawable.cs" />
     <File subtype="Code" buildaction="Compile" name="Store/Drawables/Cross.cs" />
@@ -119,14 +117,13 @@
     <File subtype="Code" buildaction="Compile" name="Store/Drawables/Angle.cs" />
     <File subtype="Code" buildaction="Compile" name="Store/Coordinates.cs" />
     <File subtype="Code" buildaction="Compile" name="Store/Point.cs" />
-    <File subtype="Code" buildaction="Compile" name="Store/Drawables/Circle.cs" />
     <File subtype="Code" buildaction="Compile" name="Common/Area.cs" />
     <File subtype="Directory" buildaction="Compile" name="Interfaces/Drawing" />
     <File subtype="Code" buildaction="Compile" name="Interfaces/Drawing/IDrawingToolkit.cs" />
     <File subtype="Code" buildaction="Compile" name="Interfaces/Drawing/IWidget.cs" />
     <File subtype="Code" buildaction="Compile" name="Handlers/Drawing.cs" />
     <File subtype="Code" buildaction="Compile" name="Interfaces/Drawing/IDrawable.cs" />
-    <File subtype="Code" buildaction="Compile" name="Interfaces/Drawing/ICanvasObject.cs" />
+    <File subtype="Code" buildaction="Compile" name="Interfaces/Drawing/ICanvas.cs" />
     <File subtype="Code" buildaction="Compile" name="Common/ExtensionMethods.cs" />
     <File subtype="Code" buildaction="Compile" name="Store/Timer.cs" />
     <File subtype="Code" buildaction="Compile" name="Store/Period.cs" />
@@ -136,6 +133,10 @@
     <File subtype="Directory" buildaction="Compile" name="Store" />
     <File subtype="Code" buildaction="Compile" name="Common/Serializer.cs" />
     <File subtype="Code" buildaction="Compile" name="Interfaces/IIDObject.cs" />
+    <File subtype="Code" buildaction="Compile" name="Store/FrameDrawing.cs" />
+    <File subtype="Directory" buildaction="Compile" name="Store/Drawables" />
+    <File subtype="Code" buildaction="Compile" name="Store/Drawables/Text.cs" />
+    <File subtype="Code" buildaction="Compile" name="Store/Drawables/Counter.cs" />
   </Contents>
   <References>
     <ProjectReference type="Package" localcopy="True" refto="System, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b77a5c561934e089" />
diff --git a/LongoMatch.Core/Store/Drawables/Angle.cs b/LongoMatch.Core/Store/Drawables/Angle.cs
index 4fd3b5f..fa04b22 100644
--- a/LongoMatch.Core/Store/Drawables/Angle.cs
+++ b/LongoMatch.Core/Store/Drawables/Angle.cs
@@ -68,7 +68,7 @@ namespace LongoMatch.Store.Drawables
                        } else if (p.Distance (Center) < pr) {
                                return new Selection (this, SelectionPosition.AngleCenter, p.Distance 
(Center));
                        } else {
-                               return new Selection (this, SelectionPosition.None);
+                               return null;
                        }
                }
                
diff --git a/LongoMatch.Core/Interfaces/Drawing/ICanvasObject.cs b/LongoMatch.Core/Store/Drawables/Counter.cs
similarity index 70%
rename from LongoMatch.Core/Interfaces/Drawing/ICanvasObject.cs
rename to LongoMatch.Core/Store/Drawables/Counter.cs
index e13b55a..be355df 100644
--- a/LongoMatch.Core/Interfaces/Drawing/ICanvasObject.cs
+++ b/LongoMatch.Core/Store/Drawables/Counter.cs
@@ -16,22 +16,27 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 //
 using System;
-using LongoMatch.Interfaces;
 using LongoMatch.Common;
-using LongoMatch.Store.Drawables;
-using LongoMatch.Interfaces.Drawing;
 
-namespace LongoMatch.Interfaces.Drawing
+namespace LongoMatch.Store.Drawables
 {
-       public interface ICanvasObject
-       {
-               void Draw (IDrawingToolkit tk, Area area);
-               bool Visible {set; get;}
-               string Description {set; get;}
-       }
-       
-       public interface ICanvasSelectableObject: ICanvasObject, IDrawable
+       public class Counter: Ellipse
        {
+               public Counter (Point center, double axisX, double axisY, int count):
+                       base (center, axisX, axisY)
+               {
+                       Count = count;
+               }
+               
+               public int Count {
+                       get;
+                       set;
+               }
+               
+               public Color TextColor {
+                       get;
+                       set;
+               }
        }
 }
 
diff --git a/LongoMatch.Core/Store/Drawables/Cross.cs b/LongoMatch.Core/Store/Drawables/Cross.cs
index 2ed7282..1b417ed 100644
--- a/LongoMatch.Core/Store/Drawables/Cross.cs
+++ b/LongoMatch.Core/Store/Drawables/Cross.cs
@@ -16,20 +16,43 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 //
 using System;
+using System.Linq;
 using Newtonsoft.Json;
 using LongoMatch.Common;
 
 namespace LongoMatch.Store.Drawables
 {
-       public class Cross: Line
+       public class Cross: Drawable
        {
                public Cross ()
                {
                }
                
-               public Cross (Point start, Point stop, LineType type, LineStyle style):
-                       base (start, stop, type, style)
+               public Cross (Point start, Point stop, LineStyle style)
                {
+                       Start = start;
+                       Stop = stop;
+                       Style = style;
+               }
+               
+               public Point Start {
+                       set;
+                       get;
+               }
+               
+               public Point Stop {
+                       set;
+                       get;
+               }
+               
+               [JsonIgnore]
+               public override Area Area {
+                       get {
+                               Point tl = new Point (Math.Min (Start.X, Stop.X),
+                                                     Math.Min (Start.Y, Stop.Y));
+                               return new Area (tl, Math.Abs (Start.X - Stop.X),
+                                                Math.Abs (Start.Y - Stop.Y));
+                       }
                }
                
                [JsonIgnore]
@@ -46,37 +69,73 @@ namespace LongoMatch.Store.Drawables
                        }
                }
                
+               public override void Reorder ()
+               {
+                       Point [] array = new Point[] {Start, Stop, StartI, StopI};
+                       
+                       array = array.OrderBy (p=> p.X).ThenBy (p=> p.Y).ToArray();
+                       Start = array[0];
+                       Stop = array[3];
+               }
+               
                public override Selection GetSelection (Point p, double pr=0.05) {
                        double d;
+                       Selection sel;
+                       
+                       if (Selected) {
+                               return base.GetSelection (p, pr);
+                       }
                        
                        if (MatchPoint (Start, p, pr, out d)) {
                                return new Selection (this, SelectionPosition.TopLeft, d);
+                       } else if (MatchPoint (StopI, p, pr, out d)) {
+                               return new Selection (this, SelectionPosition.BottomRight, d);
                        } else if (MatchPoint (StartI, p, pr, out d)) {
                                return new Selection (this, SelectionPosition.TopRight, d);
-                       } else if (MatchPoint (Stop, p, pr, out d)) {
-                               return new Selection (this, SelectionPosition.BottomRight, d);
                        } else if (MatchPoint (StopI, p, pr, out d)) {
                                return new Selection (this, SelectionPosition.BottomLeft, d);
                        } else {
-                               double slope = (Start.Y - Stop.Y) / (Start.X - Stop.Y);
-                               double yi = Start.Y / (slope * Start.X);
-                               d = Math.Abs (p.Y / (slope * p.X) - yi);
-                               if (d < pr) {
-                                       return new Selection (this, SelectionPosition.All, d);
-                               } else {
-                                       return new Selection (this, SelectionPosition.None, d);
+                               Line aline = new Line {Start = Start, Stop = Stop};
+                               sel = aline.GetSelection (p, pr);
+                               if (sel == null) {
+                                       Line bline = new Line {Start = StartI, Stop = StopI};
+                                       sel = bline.GetSelection (p, pr);
+                               }
+                               if (sel != null) {
+                                       sel.Drawable = this;
                                }
+                               return sel;
                        }
                }
                
                public override void Move (Selection sel, Point p, Point moveStart) {
-                       switch (sel.Position) {
+                                               switch (sel.Position) {
                        case SelectionPosition.TopLeft:
                                Start = p;
                                break;
                        case SelectionPosition.BottomRight:
                                Stop = p;
                                break;
+                       case SelectionPosition.TopRight:
+                               Start.Y = p.Y;
+                               Stop.X = p.X;
+                               break;
+                       case SelectionPosition.BottomLeft:
+                               Start.X = p.X;
+                               Stop.Y = p.Y;
+                               break;
+                       case SelectionPosition.Top:
+                               Start.Y = p.Y;
+                               break;
+                       case SelectionPosition.Bottom:
+                               Stop.Y = p.Y;
+                               break;
+                       case SelectionPosition.Left:
+                               Start.X = p.X;
+                               break;
+                       case SelectionPosition.Right:
+                               Stop.X = p.X;
+                               break;
                        case SelectionPosition.All:
                                Start.X += p.X - moveStart.X;
                                Start.Y += p.Y - moveStart.Y;
diff --git a/LongoMatch.Core/Store/Drawables/Drawable.cs b/LongoMatch.Core/Store/Drawables/Drawable.cs
index 8477a55..18fb732 100644
--- a/LongoMatch.Core/Store/Drawables/Drawable.cs
+++ b/LongoMatch.Core/Store/Drawables/Drawable.cs
@@ -22,7 +22,7 @@ using LongoMatch.Interfaces.Drawing;
 
 namespace LongoMatch.Store.Drawables
 {
-       public abstract class Drawable: IDrawable
+       public abstract class Drawable: IBlackboardObject
        {
                public Drawable ()
                {
@@ -48,7 +48,59 @@ namespace LongoMatch.Store.Drawables
                        set;
                }
                
-               public abstract Selection GetSelection (Point point, double precision);
+               public LineStyle Style{
+                       get;
+                       set;
+               }
+               
+               public virtual Area Area {
+                       get;
+                       protected set;
+               }
+               
+               public virtual void Reorder () {
+               }
+               
+               public virtual Selection GetSelection (Point point, double pr) {
+                       Point[] vertices;
+                       double d;
+                       
+                       if (Area == null) {
+                               return null;
+                       }
+
+                       if ((point.X < Area.Start.X - pr) ||
+                           (point.X > Area.Start.X + Area.Width + pr) ||
+                           (point.Y < Area.Start.Y - pr) ||
+                           (point.Y > Area.Start.Y + Area.Height + pr)) {
+                               return null;
+                       } 
+                       
+                       /* Check vertices */
+                       vertices = Area.Vertices;
+                       if (MatchPoint (vertices[0], point, pr, out d)) {
+                               return new Selection (this, SelectionPosition.TopLeft, d);
+                       } else if (MatchPoint (vertices[1], point, pr, out d)) {
+                               return new Selection (this, SelectionPosition.TopRight, d);
+                       } else if (MatchPoint (vertices[2], point, pr, out d)) {
+                               return new Selection (this, SelectionPosition.BottomRight, d);
+                       } else if (MatchPoint (vertices[3], point, pr, out d)) {
+                               return new Selection (this, SelectionPosition.BottomLeft, d);
+                       }
+                       
+                       vertices = Area.VerticesCenter;
+                       if (MatchPoint (vertices[0], point, pr, out d)) {
+                               return new Selection (this, SelectionPosition.Top, d);
+                       } else if (MatchPoint (vertices[1], point, pr, out d)) {
+                               return new Selection (this, SelectionPosition.Right, d);
+                       } else if (MatchPoint (vertices[2], point, pr, out d)) {
+                               return new Selection (this, SelectionPosition.Bottom, d);
+                       } else if (MatchPoint (vertices[3], point, pr, out d)) {
+                               return new Selection (this, SelectionPosition.Left, d);
+                       }
+                       
+                       return new Selection (this, SelectionPosition.All, point.Distance (Area.Center));
+               }
 
                public abstract void Move (Selection s, Point dst, Point start);
                
diff --git a/LongoMatch.Core/Store/Drawables/Ellipse.cs b/LongoMatch.Core/Store/Drawables/Ellipse.cs
index f8a0b32..b2a3ff5 100644
--- a/LongoMatch.Core/Store/Drawables/Ellipse.cs
+++ b/LongoMatch.Core/Store/Drawables/Ellipse.cs
@@ -27,11 +27,12 @@ namespace LongoMatch.Store.Drawables
                {
                }
 
-               public Ellipse (Point center, double axisX, double axisY)
+               public Ellipse (Point center, double axisX, double axisY, string text = null)
                {
                        Center = center;
                        AxisX = axisX;
                        AxisY = axisY;
+                       Text = text;
                }
                
                public Point Center {
@@ -49,6 +50,16 @@ namespace LongoMatch.Store.Drawables
                        set;
                }
                
+               public string Text  {
+                       get;
+                       set;
+               }
+
+               public Color TextColor {
+                       get;
+                       set;
+               }
+               
                [JsonIgnore]
                public Point Top {
                        get {
@@ -70,15 +81,28 @@ namespace LongoMatch.Store.Drawables
                        }
                }
                
+               [JsonIgnore]
                public Point Right {
                        get {
                                return new Point (Center.X + AxisX, Center.Y);
                        }
                }
+               
+               [JsonIgnore]
+               public override Area Area {
+                       get {
+                               return new Area (new Point (Center.X - AxisX, Center.Y - AxisY),
+                                                AxisX * 2, AxisY * 2);
+                       }
+               }
 
                public override Selection GetSelection (Point p, double pr=0.05) {
                        double d;
                        
+                       if (Selected) {
+                               return base.GetSelection (p, pr);
+                       }
+
                        if (MatchPoint (Top, p, pr, out d)) {
                                return new Selection (this, SelectionPosition.Top, d);
                        } else if (MatchPoint (Bottom, p, pr, out d)) {
@@ -94,7 +118,7 @@ namespace LongoMatch.Store.Drawables
                                if ((a + b) <= 1) {
                                        return new Selection (this, SelectionPosition.All, p.Distance 
(Center));
                                } else {
-                                       return new Selection (this, SelectionPosition.None);
+                                       return null;
                                }
                        }
                }
@@ -111,6 +135,14 @@ namespace LongoMatch.Store.Drawables
                                AxisX = Math.Abs (p.X - Center.X);
                                break;
                        }
+                       case SelectionPosition.TopLeft:
+                       case SelectionPosition.TopRight:
+                       case SelectionPosition.BottomLeft:
+                       case SelectionPosition.BottomRight: {
+                               AxisX = Math.Abs (p.X - Center.X);
+                               AxisY = Math.Abs (p.Y - Center.Y);
+                               break;
+                       }
                        case SelectionPosition.All: {
                                Center.X += p.X - moveStart.X;
                                Center.Y += p.Y - moveStart.Y;
diff --git a/LongoMatch.Core/Store/Drawables/Line.cs b/LongoMatch.Core/Store/Drawables/Line.cs
index 4c14714..0bea251 100644
--- a/LongoMatch.Core/Store/Drawables/Line.cs
+++ b/LongoMatch.Core/Store/Drawables/Line.cs
@@ -50,11 +50,6 @@ namespace LongoMatch.Store.Drawables
                        set;
                }
                
-               public LineStyle Style{
-                       get;
-                       set;
-               }
-               
                [JsonIgnore]
                public Point Center {
                        get {
@@ -65,7 +60,7 @@ namespace LongoMatch.Store.Drawables
                
                public override Selection GetSelection (Point p, double pr=0.05) {
                        double d;
-                       
+               
                        if (MatchPoint (Start, p, pr, out d)) {
                                return new Selection (this, SelectionPosition.LineStart, d);
                        } else if (MatchPoint (Stop, p, pr, out d)) {
@@ -78,7 +73,7 @@ namespace LongoMatch.Store.Drawables
                                miny = Math.Min (Start.Y, Stop.Y) - pr;
                                maxy = Math.Max (Start.Y, Stop.Y) + pr;
                                if (p.X < minx || p.X > maxx || p.Y < miny || p.Y > maxy) {
-                                       return new Selection (this, SelectionPosition.None);
+                                       return null;
                                }
                                if (Start.X == Stop.X) {
                                        d = p.Distance (new Point (Start.X, p.Y));
@@ -95,13 +90,13 @@ namespace LongoMatch.Store.Drawables
                                if (d  < pr) {
                                        return new Selection (this, SelectionPosition.All, d);
                                } else {
-                                       return new Selection (this, SelectionPosition.None, 0);
+                                       return null;
                                }
                        }
                }
                
                public override void Move (Selection sel, Point p, Point moveStart) {
-                       switch (sel.Position) {
+                                               switch (sel.Position) {
                        case SelectionPosition.LineStart:
                                Start = p;
                                break;
diff --git a/LongoMatch.Core/Store/Drawables/MultiPoints.cs b/LongoMatch.Core/Store/Drawables/MultiPoints.cs
index 0dd9eeb..5f10c1c 100644
--- a/LongoMatch.Core/Store/Drawables/MultiPoints.cs
+++ b/LongoMatch.Core/Store/Drawables/MultiPoints.cs
@@ -48,7 +48,7 @@ namespace LongoMatch.Store.Drawables
                public override Selection GetSelection (Point p, double pr)
                {
                        Selection s = base.GetSelection (p, pr);
-                       if (s.Position != SelectionPosition.None) {
+                       if (s != null) {
                                s.Position = SelectionPosition.All;
                        }
                        return s;
diff --git a/LongoMatch.Core/Store/Drawables/Quadrilateral.cs 
b/LongoMatch.Core/Store/Drawables/Quadrilateral.cs
index 385a152..0cb4f01 100644
--- a/LongoMatch.Core/Store/Drawables/Quadrilateral.cs
+++ b/LongoMatch.Core/Store/Drawables/Quadrilateral.cs
@@ -54,6 +54,18 @@ namespace LongoMatch.Store.Drawables
                        set;
                }
                
+               public override Area Area {
+                       get {
+                               double xmin, xmax, ymin, ymax;
+                       
+                               /* Create a rectangle that wraps the quadrilateral */
+                               xmin = Math.Min (BottomLeft.X, TopLeft.X);
+                               xmax = Math.Max (BottomRight.X, TopRight.X);
+                               ymin = Math.Min (TopLeft.Y, TopRight.Y);
+                               ymax = Math.Max (BottomLeft.Y, BottomRight.Y);
+                               return new Area (new Point (xmin, ymin), xmax - xmin, ymax - ymin);
+                       }
+               }
                public override Selection GetSelection (Point p, double pr) {
                        double xmin, xmax, ymin, ymax;
                        double d;
@@ -61,11 +73,11 @@ namespace LongoMatch.Store.Drawables
                        /* Create a rectangle that wraps the quadrilateral */
                        xmin = Math.Min (BottomLeft.X, TopLeft.X) - pr;
                        xmax = Math.Max (BottomRight.X, TopRight.X) + pr;
-                       ymin = Math.Min (BottomLeft.Y, BottomRight.Y) - pr;
-                       ymax = Math.Max (TopLeft.Y, TopRight.Y) + pr;
+                       ymin = Math.Min (TopLeft.Y, TopRight.Y) - pr;
+                       ymax = Math.Max (BottomLeft.Y, BottomRight.Y) + pr;
                        
-                       if (p.X > xmax || p.X < xmin || p.Y < ymin || p.Y > ymax) {
-                               return new Selection (this, SelectionPosition.None, 0);
+                       if ((p.X > xmax || p.X < xmin || p.Y < ymin || p.Y > ymax)) {
+                               return null;
                        } else if (MatchPoint (TopLeft, p, pr, out d)) {
                                return new Selection (this, SelectionPosition.TopLeft, d);
                        } else if (MatchPoint (TopRight, p, pr, out d)) {
diff --git a/LongoMatch.Core/Store/Drawables/Rectangle.cs b/LongoMatch.Core/Store/Drawables/Rectangle.cs
index d18caca..a66e42f 100644
--- a/LongoMatch.Core/Store/Drawables/Rectangle.cs
+++ b/LongoMatch.Core/Store/Drawables/Rectangle.cs
@@ -16,6 +16,7 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 //
 using System;
+using System.Linq;
 using LongoMatch.Common;
 using Newtonsoft.Json;
 
@@ -29,10 +30,10 @@ namespace LongoMatch.Store.Drawables
                
                public Rectangle (Point origin, double width, double height)
                {
-                       BottomLeft = origin;
-                       BottomRight = new Point (origin.X + width, origin.Y);
-                       TopLeft = new Point (origin.X, origin.Y + height);
-                       TopRight = new Point (origin.X + width, origin.Y + height);
+                       TopLeft = origin;
+                       TopRight = new Point (origin.X + width, origin.Y);
+                       BottomLeft = new Point (origin.X, origin.Y + height);
+                       BottomRight = new Point (origin.X + width, origin.Y + height);
                }
                
                [JsonIgnore]
@@ -45,22 +46,36 @@ namespace LongoMatch.Store.Drawables
                [JsonIgnore]
                public double Height {
                        get {
-                               return TopLeft.Y - BottomLeft.Y;
+                               return BottomLeft.Y - TopLeft.Y;
                        }
                }
                
                [JsonIgnore]
                public Point Center {
                        get {
-                               return new Point (BottomLeft.X + Width / 2, BottomLeft.Y + Height / 2);
+                               return new Point (TopLeft.X + Width / 2, TopLeft.Y + Height / 2);
                        }
                }
                
+               
+               
+               public override void Reorder () {
+                       Point [] array = new Point[] {TopLeft, TopRight, BottomLeft, BottomRight};
+                       
+                       array = array.OrderBy (p=> p.X).ThenBy (p=> p.Y).ToArray();
+                       TopLeft = array[0];
+                       BottomLeft = array[1];
+                       TopRight = array[2];
+                       BottomRight = array[3];
+               }
+               
                public override Selection GetSelection (Point p, double pr=0.05) {
                        Selection selection;
                        double d;
                        
                        selection = base.GetSelection (p, pr);
+                       if (selection == null)
+                               return selection;
                        
                        if (selection.Position == SelectionPosition.All) {
                                if (MatchAxis (p.X, TopLeft.X, pr, out d)) {
@@ -111,8 +126,7 @@ namespace LongoMatch.Store.Drawables
                                TopRight.X = p.X;
                                break;
                        case SelectionPosition.All:
-                               Center.X += p.X - moveStart.X;
-                               Center.Y += p.Y - moveStart.Y;
+                               base.Move (sel, p, moveStart);
                                break;
                        }
                }
diff --git a/LongoMatch.Core/Store/Drawables/Selection.cs b/LongoMatch.Core/Store/Drawables/Selection.cs
index 25913d2..3f0a665 100644
--- a/LongoMatch.Core/Store/Drawables/Selection.cs
+++ b/LongoMatch.Core/Store/Drawables/Selection.cs
@@ -23,14 +23,14 @@ namespace LongoMatch.Store.Drawables
 {
        public class Selection
        {
-               public Selection (IDrawable drawable, SelectionPosition selpos, double accuracy=0)
+               public Selection (IMovableObject drawable, SelectionPosition selpos, double accuracy=0)
                {
                        Drawable = drawable;
                        Position = selpos;
                        Accuracy = accuracy;
                }
                
-               public IDrawable Drawable {
+               public IMovableObject Drawable {
                        get;
                        set;
                }
diff --git a/LongoMatch.Core/Store/Drawing.cs b/LongoMatch.Core/Store/FrameDrawing.cs
similarity index 84%
rename from LongoMatch.Core/Store/Drawing.cs
rename to LongoMatch.Core/Store/FrameDrawing.cs
index e30c9ff..90d17f8 100644
--- a/LongoMatch.Core/Store/Drawing.cs
+++ b/LongoMatch.Core/Store/FrameDrawing.cs
@@ -20,12 +20,14 @@ using System;
 using Newtonsoft.Json;
 
 using LongoMatch.Common;
+using System.Collections.Generic;
+using LongoMatch.Store.Drawables;
 
 namespace LongoMatch.Store
 {
 
        [Serializable]
-       public class Drawing
+       public class FrameDrawing
        {
                private const int DEFAULT_PAUSE_TIME = 5000;
 
@@ -35,14 +37,20 @@ namespace LongoMatch.Store
                /// are used by { MediaTimeNodes} to store the key frame drawing
                /// which stop time is stored in a int value
                /// </summary>
-               public Drawing() {
+               public FrameDrawing() {
                        Pause = new Time (DEFAULT_PAUSE_TIME);
+                       Drawables = new List<Drawable> ();
+               }
+               
+               public Image Freehand {
+                       get;
+                       set;
                }
 
                /// <summary>
-               /// Pixbuf with the drawing
+               /// List of Drawable objects in the canvas
                /// </summary>
-               public Image Pixbuf {
+               public List<Drawable> Drawables {
                        get;
                        set;
                }
diff --git a/LongoMatch.Core/Store/Play.cs b/LongoMatch.Core/Store/Play.cs
index b54d420..b3b7266 100644
--- a/LongoMatch.Core/Store/Play.cs
+++ b/LongoMatch.Core/Store/Play.cs
@@ -39,7 +39,7 @@ namespace LongoMatch.Store
 
                #region Constructors
                public Play() {
-                       Drawings = new List<Drawing>();
+                       Drawings = new List<FrameDrawing>();
                        Players = new List<Player> ();
                        Tags = new List<Tag>();
                        Fps = 25;
@@ -105,14 +105,14 @@ namespace LongoMatch.Store
                /// <summary>
                /// List of drawings for this play
                /// </summary>
-               public List<Drawing> Drawings {
+               public List<FrameDrawing> Drawings {
                        get;
                        set;
                }
 
                /* FIXME: Keep this until we support multiple drawings */
                [JsonIgnore]
-               public Drawing KeyFrameDrawing {
+               public FrameDrawing KeyFrameDrawing {
                        get {
                                if(Drawings.Count > 0)
                                        return Drawings.First();
diff --git a/LongoMatch.Core/Store/PlayListPlay.cs b/LongoMatch.Core/Store/PlayListPlay.cs
index eca7f57..3f297fa 100644
--- a/LongoMatch.Core/Store/PlayListPlay.cs
+++ b/LongoMatch.Core/Store/PlayListPlay.cs
@@ -69,7 +69,7 @@ namespace LongoMatch.Store
                /// <summary>
                /// List of drawings to be displayed
                /// </summary>
-               public List<Drawing> Drawings {
+               public List<FrameDrawing> Drawings {
                        get;
                        set;
                }
diff --git a/LongoMatch.Drawing.Cairo/CairoBackend.cs b/LongoMatch.Drawing.Cairo/CairoBackend.cs
index 6adc8bf..be06e90 100644
--- a/LongoMatch.Drawing.Cairo/CairoBackend.cs
+++ b/LongoMatch.Drawing.Cairo/CairoBackend.cs
@@ -27,7 +27,9 @@ using LFontWeight = LongoMatch.Common.FontWeight;
 using FontSlant = Cairo.FontSlant;
 using FontWeight = Cairo.FontWeight;
 using Image = LongoMatch.Common.Image;
+using LineStyle = LongoMatch.Common.LineStyle;
 using Gdk;
+using LongoMatch.Interfaces.Drawing;
 
 namespace LongoMatch.Drawing.Cairo
 {
@@ -38,7 +40,10 @@ namespace LongoMatch.Drawing.Cairo
                FontSlant fSlant, savedFSlant;
                FontWeight fWeight, savedFWeight;
                int savedLineWidth, savedFontSize;
+               bool savedClear;
+               LineStyle savedLineStyle;
                string savedFontFamily;
+               bool disableScalling;
                
                public CairoBackend ()
                {
@@ -49,6 +54,8 @@ namespace LongoMatch.Drawing.Cairo
                        FontFamily = "Verdana";
                        FontWeight = LFontWeight.Normal;
                        FontSlant = LFontSlant.Normal;
+                       LineStyle = LineStyle.Normal;
+                       Clear = false;
                }
                
                public object Context {
@@ -112,6 +119,20 @@ namespace LongoMatch.Drawing.Cairo
                        }
                }
                
+               public LineStyle LineStyle {
+                       get;
+                       set;
+               }
+               
+               public bool Clear {
+                       get;
+                       set;
+               }
+               
+               public ISurface CreateSurface (int width, int height, Image image=null) {
+                       return new Surface (width, height, image);
+               }
+               
                public void Begin() {
                        savedStrokeColor = StrokeColor;
                        savedFillColor = FillColor;
@@ -120,16 +141,21 @@ namespace LongoMatch.Drawing.Cairo
                        savedLineWidth = LineWidth;
                        savedFontSize = FontSize;
                        savedFontFamily = FontFamily;
+                       savedLineStyle = LineStyle;
+                       savedClear = Clear;
                        context.Save ();
                }
                
                public void TranslateAndScale (Point translation, Point scale) {
-                       context.Translate (translation.X, translation.Y);
-                       context.Scale (scale.X, scale.Y);
+                       if (!disableScalling) {
+                               context.Translate (translation.X, translation.Y);
+                               context.Scale (scale.X, scale.Y);
+                       }
                }
                
                public void End() {
                        context.Restore ();
+                       Clear = savedClear;
                        StrokeColor = savedStrokeColor;
                        FillColor = savedFillColor;
                        fSlant = savedFSlant;
@@ -137,14 +163,14 @@ namespace LongoMatch.Drawing.Cairo
                        LineWidth = savedLineWidth;
                        FontSize = savedFontSize;
                        FontFamily = savedFontFamily;
+                       LineStyle = savedLineStyle;
                }
                
                public void DrawLine (Point start, Point stop) {
-                       SetColor (StrokeColor);
                        context.LineWidth = LineWidth;
                        context.MoveTo (start.X, start.Y);
                        context.LineTo (stop.X, stop.Y);
-                       context.Stroke();
+                       StrokeAndFill ();
                }
                
                public void DrawTriangle (Point corner, double width, double height,
@@ -175,13 +201,11 @@ namespace LongoMatch.Drawing.Cairo
                        context.LineTo (x2, y2);
                        context.LineTo (x3, y3);
                        context.ClosePath();
-                       context.StrokePreserve ();
-                       SetColor (FillColor);
-                       context.Fill();
+                       StrokeAndFill ();
                }
                
-               public void DrawArea (List<Point> vertices) {
-                       for (int i=0; i < vertices.Count - 1; i++) {
+               public void DrawArea (params Point[] vertices) {
+                       for (int i=0; i < vertices.Length - 1; i++) {
                                double x1, y1, x2, y2;
                                
                                x1 = vertices[i].X;
@@ -197,8 +221,7 @@ namespace LongoMatch.Drawing.Cairo
                }
                
                public void DrawRectangle (Point start, double width, double height) {
-                       context.Rectangle (new PointD (start.X + LineWidth / 2, start.Y + LineWidth / 2),
-                                          width - LineWidth, height - LineWidth);
+                       context.Rectangle (start.X, start.Y, width, height);
                        StrokeAndFill ();
                }
                
@@ -226,7 +249,6 @@ namespace LongoMatch.Drawing.Cairo
                }
 
                public void DrawCircle (Point center, double radius) {
-                       context.MoveTo (center.X, center.Y);
                        context.Arc (center.X, center.Y, radius, 0, 2 * Math.PI);
                        StrokeAndFill ();
                }
@@ -240,6 +262,9 @@ namespace LongoMatch.Drawing.Cairo
                        FontExtents fextents;
                        double x, y;
                        
+                       if (text == null) {
+                               return;
+                       }
                        SetColor (StrokeColor);
                        context.SelectFontFace (FontFamily, fSlant, fWeight);
                        context.SetFontSize (FontSize);
@@ -249,6 +274,7 @@ namespace LongoMatch.Drawing.Cairo
                        y = point.Y + height / 2 - (extents.Height / 2 + extents.YBearing);
                        context.MoveTo (x, y);
                        context.ShowText (text);
+                       StrokeAndFill ();
                }
                
                public void DrawImage (Image image) {
@@ -276,9 +302,89 @@ namespace LongoMatch.Drawing.Cairo
                }
 
                public void DrawEllipse (Point center, double axisX, double axisY) {
+                       double max = Math.Max (axisX, axisY);
+                       context.Save ();
+                       context.Translate (center.X, center.Y);
+                       context.Scale (axisX / max, axisY / max);
+                       context.Arc (0, 0, max, 0, 2 * Math.PI);
+                       StrokeAndFill ();
+                       context.Restore ();
+               }
+               
+               public void DrawArrow(Point start, Point stop, int lenght, double radians, bool closed) {
+                       double vx1,vy1,vx2,vy2;
+                       double angle = Math.Atan2(stop.Y - start.Y, stop.X - start.X) + Math.PI;
+
+                       vx1 = stop.X + (lenght + LineWidth) * Math.Cos(angle - radians);
+                       vy1 = stop.Y + (lenght + LineWidth) * Math.Sin(angle - radians);
+                       vx2 = stop.X + (lenght + LineWidth) * Math.Cos(angle + radians);
+                       vy2 = stop.Y + (lenght + LineWidth) * Math.Sin(angle + radians);
+
+                       context.MoveTo(stop.X, stop.Y);
+                       context.LineTo(vx1, vy1);
+                       if (!closed) {
+                               context.MoveTo(stop.X, stop.Y);
+                               context.LineTo(vx2,vy2);
+                       } else {
+                               context.LineTo(vx2,vy2);
+                               context.ClosePath ();
+                       }
+                       StrokeAndFill();
+               }
+
+               public void DrawSurface (ISurface surface) {
+                       context.SetSourceSurface (surface.Value as ImageSurface, 0, 0);
+                       context.Paint ();
                }
                
+               public Image Copy (ICanvas canvas, double width, double height) {
+                       Image img;
+                       Pixmap pm;
+                       
+                       pm = new Pixmap (null, (int) width, (int) height, 24);
+                       disableScalling = true;
+                       using(Context c = CairoHelper.Create (pm)) {
+                               context = c;
+                               canvas.Draw (context, new Area (new Point (0, 0), width, height));
+                       }
+                       img = new Image (Gdk.Pixbuf.FromDrawable (pm, Colormap.System, 0, 0, 0, 0,
+                                                                 (int) width, (int)height));
+                       disableScalling = false;
+                       context = null;
+                       return img;
+               }
+
+               public void Save (ICanvas canvas, double width, double height, string filename) {
+                       ImageSurface pngSurface = new ImageSurface(Format.ARGB32, (int) width, (int) height);
+                       disableScalling = true;
+                       using(Context c = new Context(pngSurface)) {
+                               context = c;
+                               canvas.Draw (context, new Area (new Point (0, 0), width, height));
+                       }
+                       pngSurface.WriteToPng(filename);
+                       disableScalling = false;
+                       context = null;
+                       pngSurface.Dispose ();
+               }
+
+               void SetDash() {
+                       switch (LineStyle) {
+                       case LineStyle.Normal:
+                               context.SetDash(new double[] {}, 0);
+                               break;  
+                       default:
+                               context.SetDash(new double[] {10, 10}, 10);
+                               break;
+                       }
+               }
+
                void StrokeAndFill () {
+                       SetDash ();
+                       if (Clear) {
+                               context.Operator = Operator.Clear;
+                       } else {
+                               context.Operator = Operator.Over;
+                       }
                        context.LineCap = LineCap.Round;
                        context.LineJoin = LineJoin.Round;
                        context.LineWidth = LineWidth;
@@ -289,10 +395,14 @@ namespace LongoMatch.Drawing.Cairo
                }
                
                void SetColor (Color color) {
-                       context.SetSourceRGBA ((double) color.R / byte.MaxValue,
-                                              (double) color.G / byte.MaxValue,
-                                              (double) color.B / byte.MaxValue,
-                                              (double) color.A / byte.MaxValue);
+                       if (color != null) {
+                               context.SetSourceRGBA ((double) color.R / byte.MaxValue,
+                                                      (double) color.G / byte.MaxValue,
+                                                      (double) color.B / byte.MaxValue,
+                                                      (double) color.A / byte.MaxValue);
+                       } else {
+                               context.SetSourceRGBA (0, 0, 0, 0);
+                       }
                }
                
        }
diff --git a/LongoMatch.Drawing.Cairo/LongoMatch.Drawing.Cairo.mdp 
b/LongoMatch.Drawing.Cairo/LongoMatch.Drawing.Cairo.mdp
index 590517e..a001b93 100644
--- a/LongoMatch.Drawing.Cairo/LongoMatch.Drawing.Cairo.mdp
+++ b/LongoMatch.Drawing.Cairo/LongoMatch.Drawing.Cairo.mdp
@@ -16,6 +16,16 @@
   <Contents>
     <File subtype="Code" buildaction="Compile" name="CairoBackend.cs" />
     <File subtype="Code" buildaction="Compile" name="WidgetWrapper.cs" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/cursors/text" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/cursors/rect" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/cursors/number" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/cursors/freehand" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/cursors/ellipse" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/cursors/arrow" />
+    <File subtype="Code" buildaction="Nothing" name="../images/cursors/angle" />
+    <File subtype="Code" buildaction="Compile" name="Surface.cs" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/tools/draw-eraser.png" 
resource_id="eraser" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/tools/draw-cross.png" 
resource_id="cross" />
   </Contents>
   <References>
     <ProjectReference type="Package" localcopy="True" refto="System, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b77a5c561934e089" />
diff --git a/LongoMatch.Drawing/CanvasObject/CircleObject.cs b/LongoMatch.Drawing.Cairo/Surface.cs
similarity index 52%
copy from LongoMatch.Drawing/CanvasObject/CircleObject.cs
copy to LongoMatch.Drawing.Cairo/Surface.cs
index f697cf3..e5b5d1e 100644
--- a/LongoMatch.Drawing/CanvasObject/CircleObject.cs
+++ b/LongoMatch.Drawing.Cairo/Surface.cs
@@ -16,29 +16,48 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 //
 using System;
-using LongoMatch.Interfaces.Drawing;
-using LongoMatch.Store.Drawables;
-using LongoMatch.Common;
+using Cairo;
 using LongoMatch.Interfaces;
+using LongoMatch.Common;
 
-namespace LongoMatch.Drawing.CanvasObject
+namespace LongoMatch.Drawing.Cairo
 {
-       public class PointObject: BaseCanvasDrawableObject<Circle>, ICanvasSelectableObject
+       public class Surface: ISurface
        {
+               ImageSurface surface;
 
-               public PointObject (Point center, double radius, Color color)
+               public Surface (int width, int height, Image image)
                {
-                       Drawable = new Circle (center, radius);
-                       Drawable.FillColor = color;
-                       Drawable.StrokeColor = color;
-                       Drawable.LineWidth = 1;
+                       surface = new ImageSurface(Format.ARGB32, width, height);
+                       if (image != null) {
+                               using (Context context = new Context(surface)) {
+                                       Gdk.CairoHelper.SetSourcePixbuf (context, image.Value, 0, 0);
+                                       context.Paint();
+                               }
+                       }
+               }
+               
+               public object Value {
+                       get {
+                               return surface;
+                       }
+               }
+               
+               public object Context {
+                       get {
+                               return new Context (surface);
+                       }
+               }
+               
+               public Image Copy () {
+                       string tempFile = System.IO.Path.GetTempFileName();
+                       surface.WriteToPng (tempFile);
+                       Gdk.Pixbuf pixbuf = new Gdk.Pixbuf (tempFile);
+                       return new Image (pixbuf);
                }
                
-               public override void Draw (IDrawingToolkit tk, Area area) {
-                       tk.FillColor = Drawable.FillColor;
-                       tk.StrokeColor = Drawable.StrokeColor;
-                       tk.LineWidth = Drawable.LineWidth;
-                       tk.DrawCircle (Drawable.Center, Drawable.Radius);
+               public void Dispose () {
+                       surface.Dispose ();
                }
        }
 }
diff --git a/LongoMatch.Drawing.Cairo/WidgetWrapper.cs b/LongoMatch.Drawing.Cairo/WidgetWrapper.cs
index 5156e6d..025a701 100644
--- a/LongoMatch.Drawing.Cairo/WidgetWrapper.cs
+++ b/LongoMatch.Drawing.Cairo/WidgetWrapper.cs
@@ -48,9 +48,9 @@ namespace LongoMatch.Drawing.Cairo
                public WidgetWrapper (DrawingArea widget)
                {
                        this.widget = widget;
-                       widget.Events |= EventMask.PointerMotionMask;
-                       widget.Events |= EventMask.ButtonPressMask;
-                       widget.Events |= EventMask.ButtonReleaseMask ;
+                       widget.AddEvents ((int)EventMask.PointerMotionMask);
+                       widget.AddEvents ((int)EventMask.ButtonPressMask);
+                       widget.AddEvents ((int)EventMask.ButtonReleaseMask);
                        widget.ExposeEvent += HandleExposeEvent;
                        widget.ButtonPressEvent += HandleButtonPressEvent;
                        widget.ButtonReleaseEvent += HandleButtonReleaseEvent;
@@ -91,7 +91,7 @@ namespace LongoMatch.Drawing.Cairo
                        widget.GdkWindow.ProcessUpdates(true);
                }
                
-               public void ReDraw (IDrawable drawable) {
+               public void ReDraw (IMovableObject drawable) {
                        /* FIXME: get region from drawable */
                        ReDraw ();
                }
@@ -103,7 +103,6 @@ namespace LongoMatch.Drawing.Cairo
 
                public void SetCursor (CursorType type) {
                        GCursorType gtype;
-                       
                        switch (type) {
                        case CursorType.Arrow:
                                gtype = GCursorType.Arrow;
@@ -123,6 +122,53 @@ namespace LongoMatch.Drawing.Cairo
                        }
                        widget.GdkWindow.Cursor = new Cursor (gtype);
                }
+
+               public void SetCursorForTool (DrawTool tool) {
+                       string cursor;
+                       
+                       switch (tool) {
+                       case DrawTool.Line:
+                               cursor = "arrow";
+                               break;
+                       case DrawTool.Cross:
+                               cursor = "cross";
+                               break;
+                       case DrawTool.Text:
+                               cursor = "text";
+                               break;
+                       case DrawTool.Counter:
+                               cursor = "number";
+                               break;
+                       case DrawTool.Ellipse:
+                       case DrawTool.CircleArea:
+                               cursor = "ellipse";
+                               break;
+                       case DrawTool.Rectangle:
+                       case DrawTool.RectangleArea:
+                               cursor = "rect";
+                               break;
+                       case DrawTool.Angle:
+                               cursor = "angle";
+                               break;
+                       case DrawTool.Pen:
+                               cursor = "freehand";
+                               break;
+                       case DrawTool.Eraser:
+                               cursor = "eraser";
+                               break;
+                       case DrawTool.Selection:
+                       default:
+                               cursor = null;
+                               break;
+                       }
+                       if (cursor == null) {
+                               widget.GdkWindow.Cursor = null;
+                       } else {
+                               Cursor c = new Cursor (widget.Display,
+                                                      Gdk.Pixbuf.LoadFromResource (cursor), 0, 0);
+                               widget.GdkWindow.Cursor = c;
+                       }
+               }
                
                void Draw (Area area) {
                        if (DrawEvent != null) {
diff --git a/LongoMatch.Drawing/Canvas.cs b/LongoMatch.Drawing/Canvas.cs
index 349f984..b48662a 100644
--- a/LongoMatch.Drawing/Canvas.cs
+++ b/LongoMatch.Drawing/Canvas.cs
@@ -26,7 +26,7 @@ using LongoMatch.Drawing.CanvasObject;
 
 namespace LongoMatch.Drawing
 {
-       public class Canvas
+       public class Canvas: ICanvas
        {
                protected IDrawingToolkit tk;
                protected IWidget widget;
@@ -38,7 +38,7 @@ namespace LongoMatch.Drawing
                        this.widget = widget;
                        tk = Config.DrawingToolkit;
                        Objects = new List<ICanvasObject>();
-                       widget.DrawEvent += HandleDraw;
+                       widget.DrawEvent += Draw;
                        scaleX = 1;
                        scaleY = 1;
                        translation = new Point (0, 0);
@@ -55,7 +55,7 @@ namespace LongoMatch.Drawing
                
                }
                
-               protected virtual void HandleDraw (object context, Area area) {
+               public virtual void Draw (object context, Area area) {
                        tk.Context = context;
                        tk.TranslateAndScale (translation, new Point (scaleX, scaleY));
                        tk.Begin ();
@@ -80,6 +80,7 @@ namespace LongoMatch.Drawing
                        Selections = new List<Selection>();
                        SelectionMode = MultiSelectionMode.Single;
                        Accuracy = 1;
+                       MoveWithoutSelection = false;
                        
                        widget.ButtonPressEvent += HandleButtonPressEvent;
                        widget.ButtonReleasedEvent += HandleButtonReleasedEvent;
@@ -97,6 +98,11 @@ namespace LongoMatch.Drawing
                        set;
                }
                
+               protected bool MoveWithoutSelection {
+                       get;
+                       set;
+               }
+               
                protected List<Selection> Selections {
                        get;
                        set;
@@ -105,6 +111,9 @@ namespace LongoMatch.Drawing
                protected virtual void StartMove (Selection sel) {
                }
                
+               protected virtual void CursorMoved (Point coords) {
+               }
+
                protected virtual void SelectionMoved (Selection sel) {
                }
                
@@ -131,8 +140,19 @@ namespace LongoMatch.Drawing
                }
                
                protected void UpdateSelection (Selection sel, bool notify=true) {
-                       ICanvasSelectableObject so = sel.Drawable as ICanvasSelectableObject;
-                       Selection seldup = Selections.FirstOrDefault (s => s.Drawable == sel.Drawable);
+                       ICanvasSelectableObject so;
+                       Selection seldup;
+
+                       if (sel == null) {
+                               ClearSelection ();
+                               if (notify) {
+                                       SelectionChanged (Selections);
+                               }
+                               return;
+                       }
+                       
+                       so = sel.Drawable as ICanvasSelectableObject;
+                       seldup = Selections.FirstOrDefault (s => s.Drawable == sel.Drawable);
                        
                        if (seldup != null) {
                                so.Selected = false;
@@ -170,13 +190,13 @@ namespace LongoMatch.Drawing
                        Selection sel = GetSelection (ToUserCoords (coords)); 
                        if (sel != null) {
                                ICanvasObject co = sel.Drawable as ICanvasObject;
-                               if (co.Description != null) {
+                               if (co != null && co.Description != null) {
                                        widget.ShowTooltip (co.Description);
                                }
                        }
                }
                
-               void HandleLeftButton (Point coords, ButtonModifier modif) {
+               protected virtual void HandleLeftButton (Point coords, ButtonModifier modif) {
                        Selection sel;
                        
                        sel = GetSelection (coords);
@@ -192,33 +212,32 @@ namespace LongoMatch.Drawing
                                }
                        } else {
                                ClearSelection ();
-                               if (sel == null) {
-                                       return;
-                               }
-                               moving = true;
                                start = coords;
                                UpdateSelection (sel);
                                StartMove (sel);
+                               moving = Selections.Count > 0;
                        }
                }
                
-               void HandleRightButton (Point coords, ButtonModifier modif) {
+               protected virtual void HandleRightButton (Point coords, ButtonModifier modif) {
                        ShowMenu (coords);
                }
                
-               void HandleMotionEvent (Point coords)
+               protected virtual void HandleMotionEvent (Point coords)
                {
                        Selection sel;
 
-                       if (!moving)
-                               return;
-                       
-                       coords = ToUserCoords (coords); 
-                       sel = Selections[0];
-                       sel.Drawable.Move (sel, coords, start);  
-                       widget.ReDraw (sel.Drawable);
-                       SelectionMoved (sel);
-                       start = coords;
+                       coords = ToUserCoords (coords);
+                       if (Selections.Count == 0) {
+                               CursorMoved (coords);
+                               start = coords;
+                       } else if (moving) {
+                               sel = Selections[0];
+                               sel.Drawable.Move (sel, coords, start);  
+                               widget.ReDraw (sel.Drawable);
+                               SelectionMoved (sel);
+                               start = coords;
+                       }
                }
 
                void HandleButtonReleasedEvent (Point coords, ButtonType type, ButtonModifier modifier)
@@ -269,7 +288,7 @@ namespace LongoMatch.Drawing
                        }
                }
                
-               protected override void HandleDraw (object context, Area area)
+               public override void Draw (object context, Area area)
                {
                        if (Background != null) {
                                tk.Context = context;
@@ -278,7 +297,7 @@ namespace LongoMatch.Drawing
                                tk.DrawImage (Background);
                                tk.End ();
                        }
-                       base.HandleDraw (context, area);
+                       base.Draw (context, area);
                }
        }
 }
diff --git a/LongoMatch.Drawing/CanvasObject/CanvasObject.cs b/LongoMatch.Drawing/CanvasObject/CanvasObject.cs
new file mode 100644
index 0000000..ecd90c1
--- /dev/null
+++ b/LongoMatch.Drawing/CanvasObject/CanvasObject.cs
@@ -0,0 +1,127 @@
+//
+//  Copyright (C) 2014 Andoni Morales Alastruey
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU General Public License as published by
+//  the Free Software Foundation; either version 2 of the License, or
+//  (at your option) any later version.
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU General Public License
+//  along with this program; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+using System;
+using LongoMatch.Interfaces.Drawing;
+using LongoMatch.Interfaces;
+using LongoMatch.Common;
+using LongoMatch.Store.Drawables;
+
+namespace LongoMatch.Drawing.CanvasObject
+{
+       public abstract class CanvasObject: ICanvasObject
+       {
+               public CanvasObject ()
+               {
+                       Visible = true;
+               }
+               
+               public virtual string Description {
+                       get;
+                       set;
+               }
+               
+               public bool Visible {
+                       get;
+                       set;
+               }
+               
+               public virtual bool Selected {
+                       set;
+                       get;
+               }
+               
+               public abstract void Draw (IDrawingToolkit tk, Area area);
+       }
+       
+       public abstract class CanvasDrawableObject<T>: CanvasObject, ICanvasDrawableObject where T: 
IBlackboardObject
+       {
+               
+               public IBlackboardObject IDrawableObject {
+                       get {
+                               return Drawable;
+                       }
+                       set {
+                               Drawable = (T) value;
+                       }
+               }
+               
+               public T Drawable {
+                       get;
+                       set;
+               }
+               
+               public override bool Selected {
+                       get {
+                               return Drawable.Selected;
+                       }
+                       set {
+                               Drawable.Selected = value;
+                       }
+               }
+               
+               public Selection GetSelection (Point point, double precision) {
+                       Selection sel = Drawable.GetSelection (point, precision);
+                       if (sel != null) {
+                               sel.Drawable = this;
+                       }
+                       return sel;
+               }
+               
+               public void Move (Selection s, Point p, Point start) {
+                       s.Drawable = Drawable;
+                       Drawable.Move (s, p, start);
+                       s.Drawable = this;
+               }
+
+               protected void DrawCornerSelection (IDrawingToolkit tk, Point p)
+               {
+                       tk.StrokeColor = tk.FillColor = Common.SELECTION_INDICATOR_COLOR;
+                       tk.LineStyle = LineStyle.Normal;
+                       tk.DrawRectangle (new Point (p.X - 3, p.Y - 3), 6, 6);
+               }
+
+               protected void DrawCenterSelection (IDrawingToolkit tk, Point p)
+               {
+                       tk.StrokeColor = tk.FillColor = Common.SELECTION_INDICATOR_COLOR;
+                       tk.LineStyle = LineStyle.Normal;
+                       tk.DrawCircle (p, 3);
+               }
+               
+               protected void DrawSelectionArea (IDrawingToolkit tk) {
+                       Area area;
+                       
+                       area = Drawable.Area;
+                       if (!Selected || area == null) {
+                               return;
+                       }
+                       tk.StrokeColor = Common.SELECTION_INDICATOR_COLOR;
+                       tk.StrokeColor = Common.SELECTION_AREA_COLOR;
+                       tk.FillColor = null;
+                       tk.LineStyle = LineStyle.Dashed;
+                       tk.LineWidth = 1;
+                       tk.DrawRectangle (area.Start, area.Width, area.Height);
+                       foreach (Point p in area.Vertices) {
+                               DrawCornerSelection (tk, p);
+                       }
+                       foreach (Point p in area.VerticesCenter) {
+                               DrawCenterSelection (tk, p);
+                       }
+               }
+
+       }
+}
\ No newline at end of file
diff --git a/LongoMatch.Drawing/CanvasObject/CategoryLabel.cs 
b/LongoMatch.Drawing/CanvasObject/CategoryLabel.cs
index 3981009..87d63c4 100644
--- a/LongoMatch.Drawing/CanvasObject/CategoryLabel.cs
+++ b/LongoMatch.Drawing/CanvasObject/CategoryLabel.cs
@@ -23,7 +23,7 @@ using LongoMatch.Common;
 
 namespace LongoMatch.Drawing.CanvasObject
 {
-       public class CategoryLabel: BaseCanvasObject, ICanvasObject
+       public class CategoryLabel: CanvasObject, ICanvasObject
        {
                Category category;
                double width, height;
diff --git a/LongoMatch.Drawing/CanvasObject/BaseCanvasObject.cs 
b/LongoMatch.Drawing/CanvasObject/CategoryObject.cs
similarity index 57%
copy from LongoMatch.Drawing/CanvasObject/BaseCanvasObject.cs
copy to LongoMatch.Drawing/CanvasObject/CategoryObject.cs
index 16890fb..eca4f2d 100644
--- a/LongoMatch.Drawing/CanvasObject/BaseCanvasObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/CategoryObject.cs
@@ -17,55 +17,74 @@
 //
 using System;
 using LongoMatch.Interfaces.Drawing;
+using LongoMatch.Store;
 using LongoMatch.Interfaces;
 using LongoMatch.Common;
 using LongoMatch.Store.Drawables;
 
 namespace LongoMatch.Drawing.CanvasObject
 {
-       public abstract class BaseCanvasObject: ICanvasObject
+       public class CategoryObject: BaseCanvasObject, ICanvasSelectableObject
        {
-               public BaseCanvasObject ()
+               public CategoryObject (Category category)
                {
-                       Visible = true;
+                       Category = category;
                }
                
-               public virtual string Description {
+               public Category Category {
                        get;
                        set;
                }
                
-               public bool Visible {
+               public Point Position {
                        get;
                        set;
                }
                
-               public bool Selected {
-                       set;
+               public double Width {
                        get;
+                       set;
                }
                
-               public abstract void Draw (IDrawingToolkit tk, Area area);
-       }
-       
-       public abstract class BaseCanvasDrawableObject<T>: BaseCanvasObject where T:Drawable
-       {
-               public T Drawable {
+               public double Height {
                        get;
                        set;
                }
                
-               public Canvas Parent {
-                       get;
-                       set;
+               public int NRows {
+                       get {
+                               /* Header + recoder */
+                               int rows = 2;
+                               foreach (SubCategory subcat in Category.SubCategories) {
+                                       rows += subcat.Options.Count / Common.CATEGORY_SUBCATEGORIES_COLUMNS 
+ 1;
+                               } 
+                               return rows;
+                       }
                }
                
-               public Selection GetSelection (Point point, double precision) {
-                       return Drawable.GetSelection (point, precision);
+               public override void Draw (IDrawingToolkit tk, Area area) {
+                       double heightPerRow;
+                       double ptr = 0;
+                       
+                       tk.Begin();
+                       heightPerRow = NRows / Height;
+
+                       /* Draw header */
+                       tk.DrawRectangle (Position, Width,  heightPerRow);
+                       tk.DrawText (Position, Width, heightPerRow, Category.Name);
+                       ptr += heightPerRow;
+                       /* Draw Tagger */
+                       
+                       tk.End();
                }
                
+               public Selection GetSelection (Point point, double precision) {
+                       return null;
+               }
+
                public void Move (Selection s, Point p, Point start) {
-                       Drawable.Move (s, p, start);
                }
+
        }
-}
\ No newline at end of file
+}
+
diff --git a/LongoMatch.Drawing/CanvasObject/BaseCanvasObject.cs 
b/LongoMatch.Drawing/CanvasObject/CounterObject.cs
similarity index 58%
rename from LongoMatch.Drawing/CanvasObject/BaseCanvasObject.cs
rename to LongoMatch.Drawing/CanvasObject/CounterObject.cs
index 16890fb..6ba4315 100644
--- a/LongoMatch.Drawing/CanvasObject/BaseCanvasObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/CounterObject.cs
@@ -16,56 +16,40 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 //
 using System;
+using LongoMatch.Store.Drawables;
 using LongoMatch.Interfaces.Drawing;
 using LongoMatch.Interfaces;
 using LongoMatch.Common;
-using LongoMatch.Store.Drawables;
 
 namespace LongoMatch.Drawing.CanvasObject
 {
-       public abstract class BaseCanvasObject: ICanvasObject
+       public class CounterObject: CanvasDrawableObject<Counter>, ICanvasSelectableObject
        {
-               public BaseCanvasObject ()
+
+               public CounterObject ()
                {
-                       Visible = true;
-               }
-               
-               public virtual string Description {
-                       get;
-                       set;
-               }
-               
-               public bool Visible {
-                       get;
-                       set;
-               }
-               
-               public bool Selected {
-                       set;
-                       get;
                }
                
-               public abstract void Draw (IDrawingToolkit tk, Area area);
-       }
-       
-       public abstract class BaseCanvasDrawableObject<T>: BaseCanvasObject where T:Drawable
-       {
-               public T Drawable {
-                       get;
-                       set;
-               }
-               
-               public Canvas Parent {
-                       get;
-                       set;
-               }
-               
-               public Selection GetSelection (Point point, double precision) {
-                       return Drawable.GetSelection (point, precision);
+               public CounterObject (Counter counter)
+               {
+                       Drawable = counter;
                }
                
-               public void Move (Selection s, Point p, Point start) {
-                       Drawable.Move (s, p, start);
+               public override void Draw (IDrawingToolkit tk, Area area) {
+                       Area darea;
+                       
+                       darea = Drawable.Area;
+                       tk.Begin ();
+                       tk.FillColor = Drawable.FillColor;
+                       tk.StrokeColor = Drawable.StrokeColor;
+                       tk.LineWidth = Drawable.LineWidth;
+                       tk.DrawEllipse (Drawable.Center, Drawable.AxisX, Drawable.AxisY);
+                       tk.StrokeColor = Drawable.TextColor;
+                       tk.DrawText (darea.Start, darea.Width, darea.Height,
+                                    Drawable.Count.ToString());
+                       DrawSelectionArea (tk);
+                       tk.End ();
                }
        }
-}
\ No newline at end of file
+}
+
diff --git a/LongoMatch.Drawing/CanvasObject/CircleObject.cs b/LongoMatch.Drawing/CanvasObject/CrossObject.cs
similarity index 76%
copy from LongoMatch.Drawing/CanvasObject/CircleObject.cs
copy to LongoMatch.Drawing/CanvasObject/CrossObject.cs
index f697cf3..57c3a2d 100644
--- a/LongoMatch.Drawing/CanvasObject/CircleObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/CrossObject.cs
@@ -16,29 +16,34 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 //
 using System;
-using LongoMatch.Interfaces.Drawing;
 using LongoMatch.Store.Drawables;
-using LongoMatch.Common;
+using LongoMatch.Interfaces.Drawing;
 using LongoMatch.Interfaces;
+using LongoMatch.Common;
 
 namespace LongoMatch.Drawing.CanvasObject
 {
-       public class PointObject: BaseCanvasDrawableObject<Circle>, ICanvasSelectableObject
+       public class CrossObject: CanvasDrawableObject<Cross>, ICanvasSelectableObject
        {
-
-               public PointObject (Point center, double radius, Color color)
+               public CrossObject ()
+               {
+               }
+               
+               public CrossObject (Cross cross)
                {
-                       Drawable = new Circle (center, radius);
-                       Drawable.FillColor = color;
-                       Drawable.StrokeColor = color;
-                       Drawable.LineWidth = 1;
+                       Drawable = cross;
                }
                
                public override void Draw (IDrawingToolkit tk, Area area) {
+                       tk.Begin ();
                        tk.FillColor = Drawable.FillColor;
                        tk.StrokeColor = Drawable.StrokeColor;
                        tk.LineWidth = Drawable.LineWidth;
-                       tk.DrawCircle (Drawable.Center, Drawable.Radius);
+                       tk.LineStyle = Drawable.Style;
+                       tk.DrawLine (Drawable.Start, Drawable.Stop);
+                       tk.DrawLine (Drawable.StartI, Drawable.StopI);
+                       DrawSelectionArea (tk);
+                       tk.End ();
                }
        }
 }
diff --git a/LongoMatch.Drawing/CanvasObject/CircleObject.cs 
b/LongoMatch.Drawing/CanvasObject/EllipseObject.cs
similarity index 77%
copy from LongoMatch.Drawing/CanvasObject/CircleObject.cs
copy to LongoMatch.Drawing/CanvasObject/EllipseObject.cs
index f697cf3..365f74f 100644
--- a/LongoMatch.Drawing/CanvasObject/CircleObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/EllipseObject.cs
@@ -23,22 +23,27 @@ using LongoMatch.Interfaces;
 
 namespace LongoMatch.Drawing.CanvasObject
 {
-       public class PointObject: BaseCanvasDrawableObject<Circle>, ICanvasSelectableObject
+       public class EllipseObject: CanvasDrawableObject<Ellipse>, ICanvasSelectableObject
        {
 
-               public PointObject (Point center, double radius, Color color)
+               public EllipseObject ()
                {
-                       Drawable = new Circle (center, radius);
-                       Drawable.FillColor = color;
-                       Drawable.StrokeColor = color;
-                       Drawable.LineWidth = 1;
+               }
+               
+               public EllipseObject (Ellipse ellipse)
+               {
+                       Drawable = ellipse;
                }
                
                public override void Draw (IDrawingToolkit tk, Area area) {
+                       tk.Begin ();
                        tk.FillColor = Drawable.FillColor;
                        tk.StrokeColor = Drawable.StrokeColor;
                        tk.LineWidth = Drawable.LineWidth;
-                       tk.DrawCircle (Drawable.Center, Drawable.Radius);
+                       tk.LineStyle = Drawable.Style;
+                       tk.DrawEllipse (Drawable.Center, Drawable.AxisX, Drawable.AxisY);
+                       DrawSelectionArea (tk);
+                       tk.End ();
                }
        }
 }
diff --git a/LongoMatch.Drawing/CanvasObject/LineObject.cs b/LongoMatch.Drawing/CanvasObject/LineObject.cs
index ac19d69..fb3a63a 100644
--- a/LongoMatch.Drawing/CanvasObject/LineObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/LineObject.cs
@@ -23,15 +23,15 @@ using LongoMatch.Interfaces;
 
 namespace LongoMatch.Drawing.CanvasObject
 {
-       public class LineObject: BaseCanvasDrawableObject<Line>, ICanvasSelectableObject
+       public class LineObject: CanvasDrawableObject<Line>, ICanvasSelectableObject
        {
-               public LineObject (Point start, Point stop, LineType type, LineStyle stile,
-                                  Color color, int width)
+               public LineObject ()
                {
-                       Drawable = new Line (start, stop, type, stile);
-                       Drawable.FillColor = color;
-                       Drawable.StrokeColor = color;
-                       Drawable.LineWidth = width;
+               }
+               
+               public LineObject (Line line)
+               {
+                       Drawable = line;
                }
                
                public override void Draw (IDrawingToolkit tk, Area area) {
@@ -39,7 +39,28 @@ namespace LongoMatch.Drawing.CanvasObject
                        tk.FillColor = Drawable.FillColor;
                        tk.StrokeColor = Drawable.StrokeColor;
                        tk.LineWidth = Drawable.LineWidth;
+                       tk.LineStyle = Drawable.Style;
                        tk.DrawLine (Drawable.Start, Drawable.Stop);
+                       tk.LineStyle = LineStyle.Normal;
+                       if (Drawable.Type == LineType.Arrow ||
+                           Drawable.Type == LineType.DoubleArrow) {
+                               tk.DrawArrow (Drawable.Start, Drawable.Stop, 10, 0.3, true);
+                       }
+                       if (Drawable.Type == LineType.DoubleArrow) {
+                               tk.DrawArrow (Drawable.Stop, Drawable.Start, 10, 0.3, true);
+                       }
+                       if (Drawable.Type == LineType.Dot ||
+                           Drawable.Type == LineType.DoubleDot) {
+                           tk.DrawPoint (Drawable.Stop);
+                       }
+                       if (Drawable.Type == LineType.DoubleDot) {
+                           tk.DrawPoint (Drawable.Start);
+                       }
+                       
+                       if (Selected) {
+                               DrawCornerSelection (tk, Drawable.Start);
+                               DrawCornerSelection (tk, Drawable.Stop);
+                       }
                        tk.End ();
                }
 
diff --git a/LongoMatch.Drawing/CanvasObject/PlayerObject.cs b/LongoMatch.Drawing/CanvasObject/PlayerObject.cs
index 3373194..804ecb7 100644
--- a/LongoMatch.Drawing/CanvasObject/PlayerObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/PlayerObject.cs
@@ -25,7 +25,7 @@ using LongoMatch.Drawing.Widgets;
 
 namespace LongoMatch.Drawing.CanvasObject
 {
-       public class PlayerObject: BaseCanvasObject, ICanvasSelectableObject
+       public class PlayerObject: CanvasObject, ICanvasSelectableObject
        {
                public PlayerObject (Player player, Point position)
                {
diff --git a/LongoMatch.Drawing/CanvasObject/PositionObject.cs 
b/LongoMatch.Drawing/CanvasObject/PositionObject.cs
index b16feae..f49bf8b 100644
--- a/LongoMatch.Drawing/CanvasObject/PositionObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/PositionObject.cs
@@ -26,7 +26,7 @@ using System.Collections.Generic;
 namespace LongoMatch.Drawing.CanvasObject
 {
 
-       public class PositionObject:  BaseCanvasObject, ICanvasSelectableObject
+       public class PositionObject:  CanvasObject, ICanvasSelectableObject
        {
 
                public PositionObject (List<Point> points, int width, int height)
diff --git a/LongoMatch.Drawing/CanvasObject/CircleObject.cs 
b/LongoMatch.Drawing/CanvasObject/QuadrilateralObject.cs
similarity index 75%
copy from LongoMatch.Drawing/CanvasObject/CircleObject.cs
copy to LongoMatch.Drawing/CanvasObject/QuadrilateralObject.cs
index f697cf3..b165df2 100644
--- a/LongoMatch.Drawing/CanvasObject/CircleObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/QuadrilateralObject.cs
@@ -23,22 +23,25 @@ using LongoMatch.Interfaces;
 
 namespace LongoMatch.Drawing.CanvasObject
 {
-       public class PointObject: BaseCanvasDrawableObject<Circle>, ICanvasSelectableObject
+       public class QuadrilateralObject: CanvasDrawableObject<Quadrilateral>, ICanvasSelectableObject
        {
-
-               public PointObject (Point center, double radius, Color color)
+               public QuadrilateralObject ()
+               {
+               }
+               
+               public QuadrilateralObject (Quadrilateral quadrilateral)
                {
-                       Drawable = new Circle (center, radius);
-                       Drawable.FillColor = color;
-                       Drawable.StrokeColor = color;
-                       Drawable.LineWidth = 1;
+                       Drawable = quadrilateral;
                }
                
                public override void Draw (IDrawingToolkit tk, Area area) {
+                       tk.Begin ();
                        tk.FillColor = Drawable.FillColor;
                        tk.StrokeColor = Drawable.StrokeColor;
                        tk.LineWidth = Drawable.LineWidth;
-                       tk.DrawCircle (Drawable.Center, Drawable.Radius);
+                       tk.DrawArea (Drawable.TopLeft, Drawable.TopRight,
+                                    Drawable.BottomRight, Drawable.BottomLeft);
+                       tk.End ();
                }
        }
 }
diff --git a/LongoMatch.Drawing/CanvasObject/CircleObject.cs 
b/LongoMatch.Drawing/CanvasObject/RectangleObject.cs
similarity index 76%
copy from LongoMatch.Drawing/CanvasObject/CircleObject.cs
copy to LongoMatch.Drawing/CanvasObject/RectangleObject.cs
index f697cf3..e779acb 100644
--- a/LongoMatch.Drawing/CanvasObject/CircleObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/RectangleObject.cs
@@ -16,29 +16,33 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 //
 using System;
-using LongoMatch.Interfaces.Drawing;
 using LongoMatch.Store.Drawables;
-using LongoMatch.Common;
+using LongoMatch.Interfaces.Drawing;
 using LongoMatch.Interfaces;
+using LongoMatch.Common;
 
 namespace LongoMatch.Drawing.CanvasObject
 {
-       public class PointObject: BaseCanvasDrawableObject<Circle>, ICanvasSelectableObject
+       public class RectangleObject: CanvasDrawableObject<Rectangle>, ICanvasSelectableObject
        {
+               public RectangleObject ()
+               {
+               }
 
-               public PointObject (Point center, double radius, Color color)
+               public RectangleObject (Rectangle rectangle)
                {
-                       Drawable = new Circle (center, radius);
-                       Drawable.FillColor = color;
-                       Drawable.StrokeColor = color;
-                       Drawable.LineWidth = 1;
+                       Drawable = rectangle;
                }
                
                public override void Draw (IDrawingToolkit tk, Area area) {
+                       tk.Begin ();
                        tk.FillColor = Drawable.FillColor;
                        tk.StrokeColor = Drawable.StrokeColor;
                        tk.LineWidth = Drawable.LineWidth;
-                       tk.DrawCircle (Drawable.Center, Drawable.Radius);
+                       tk.LineStyle = Drawable.Style;
+                       tk.DrawRectangle (Drawable.TopLeft, Drawable.Width, Drawable.Height);
+                       DrawSelectionArea (tk);
+                       tk.End ();
                }
        }
 }
diff --git a/LongoMatch.Drawing/CanvasObject/CircleObject.cs b/LongoMatch.Drawing/CanvasObject/TextObject.cs
similarity index 68%
rename from LongoMatch.Drawing/CanvasObject/CircleObject.cs
rename to LongoMatch.Drawing/CanvasObject/TextObject.cs
index f697cf3..e822311 100644
--- a/LongoMatch.Drawing/CanvasObject/CircleObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/TextObject.cs
@@ -16,29 +16,37 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 //
 using System;
-using LongoMatch.Interfaces.Drawing;
 using LongoMatch.Store.Drawables;
-using LongoMatch.Common;
+using LongoMatch.Interfaces.Drawing;
 using LongoMatch.Interfaces;
+using LongoMatch.Common;
 
 namespace LongoMatch.Drawing.CanvasObject
 {
-       public class PointObject: BaseCanvasDrawableObject<Circle>, ICanvasSelectableObject
+       public class TextObject: CanvasDrawableObject<Text>, ICanvasSelectableObject
        {
+               public TextObject ()
+               {
+               }
 
-               public PointObject (Point center, double radius, Color color)
+               public TextObject (Text text)
                {
-                       Drawable = new Circle (center, radius);
-                       Drawable.FillColor = color;
-                       Drawable.StrokeColor = color;
-                       Drawable.LineWidth = 1;
+                       Drawable = text;
                }
                
                public override void Draw (IDrawingToolkit tk, Area area) {
+                       tk.Begin ();
                        tk.FillColor = Drawable.FillColor;
                        tk.StrokeColor = Drawable.StrokeColor;
                        tk.LineWidth = Drawable.LineWidth;
-                       tk.DrawCircle (Drawable.Center, Drawable.Radius);
+                       tk.DrawRectangle (Drawable.TopLeft, Drawable.Width, Drawable.Height);
+                       tk.DrawArea (Drawable.TopLeft, Drawable.TopRight,
+                                    Drawable.BottomRight, Drawable.BottomLeft);
+                       tk.StrokeColor = Drawable.TextColor;
+                       tk.DrawText (Drawable.TopLeft, Drawable.Width, Drawable.Height,
+                                    Drawable.Value);
+                       DrawSelectionArea (tk);
+                       tk.End ();
                }
        }
 }
diff --git a/LongoMatch.Drawing/CanvasObject/TimeNodeObject.cs 
b/LongoMatch.Drawing/CanvasObject/TimeNodeObject.cs
index 3462094..42d3c33 100644
--- a/LongoMatch.Drawing/CanvasObject/TimeNodeObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/TimeNodeObject.cs
@@ -24,7 +24,7 @@ using LongoMatch.Store.Drawables;
 
 namespace LongoMatch.Drawing.CanvasObject
 {
-       public class TimeNodeObject: BaseCanvasObject, ICanvasSelectableObject
+       public class TimeNodeObject: CanvasObject, ICanvasSelectableObject
        {
                const int MAX_TIME_SPAN=1000;
                
diff --git a/LongoMatch.Drawing/CanvasObject/TimelineObject.cs 
b/LongoMatch.Drawing/CanvasObject/TimelineObject.cs
index c70c225..7d06f2e 100644
--- a/LongoMatch.Drawing/CanvasObject/TimelineObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/TimelineObject.cs
@@ -25,7 +25,7 @@ using LongoMatch.Store.Drawables;
 
 namespace LongoMatch.Drawing.CanvasObject
 {
-       public abstract class TimelineObject: BaseCanvasObject, ICanvasSelectableObject
+       public abstract class TimelineObject: CanvasObject, ICanvasSelectableObject
        {
                Color background;
                List<TimeNodeObject> nodes;
@@ -121,14 +121,12 @@ namespace LongoMatch.Drawing.CanvasObject
                                        if (tmp == null) {
                                                continue;
                                        }
-                                       if (tmp.Position != SelectionPosition.None) {
-                                               if (tmp.Accuracy == 0) {
-                                                       selection = tmp;
-                                                       break;
-                                               }
-                                               if (selection == null || tmp.Accuracy < selection.Accuracy) {
-                                                       selection = tmp;
-                                               }
+                                       if (tmp.Accuracy == 0) {
+                                               selection = tmp;
+                                               break;
+                                       }
+                                       if (selection == null || tmp.Accuracy < selection.Accuracy) {
+                                               selection = tmp;
                                        }
                                }
                        }
diff --git a/LongoMatch.Drawing/Common.cs b/LongoMatch.Drawing/Common.cs
index bf38e7e..369e832 100644
--- a/LongoMatch.Drawing/Common.cs
+++ b/LongoMatch.Drawing/Common.cs
@@ -46,6 +46,8 @@ namespace LongoMatch.Drawing
                public static Color PLAYER_NOT_PLAYING_COLOR = Color.Red;
                public static Color TIMER_UNSELECTED_COLOR = Color.Blue1;
                public static Color TIMER_SELECTED_COLOR = Color.Red1;
+               public static Color SELECTION_INDICATOR_COLOR = Color.Blue1;
+               public static Color SELECTION_AREA_COLOR = Color.Grey1;
 
                public const int TIMELINE_LINE_WIDTH = 1;
                
diff --git a/LongoMatch.Drawing/LongoMatch.Drawing.mdp b/LongoMatch.Drawing/LongoMatch.Drawing.mdp
index 9e7fa2c..493b9b3 100644
--- a/LongoMatch.Drawing/LongoMatch.Drawing.mdp
+++ b/LongoMatch.Drawing/LongoMatch.Drawing.mdp
@@ -26,16 +26,22 @@
     <File subtype="Code" buildaction="Compile" name="Common.cs" />
     <File subtype="Code" buildaction="Compile" name="Widgets/PlaysTimeline.cs" />
     <File subtype="Code" buildaction="Compile" name="CanvasObject/TimelineObject.cs" />
-    <File subtype="Code" buildaction="Compile" name="CanvasObject/BaseCanvasObject.cs" />
+    <File subtype="Code" buildaction="Compile" name="CanvasObject/CanvasObject.cs" />
     <File subtype="Code" buildaction="Compile" name="CanvasObject/PlayerObject.cs" />
     <File subtype="Code" buildaction="Compile" name="Widgets/TeamTagger.cs" />
     <File subtype="Code" buildaction="Compile" name="CanvasObject/TimeNodeObject.cs" />
     <File subtype="Code" buildaction="Compile" name="Widgets/TimersTimeline.cs" />
     <File subtype="Code" buildaction="Compile" name="Widgets/PositionTagger.cs" />
     <File subtype="Code" buildaction="Compile" name="CanvasObject/PositionObject.cs" />
-    <File subtype="Code" buildaction="Compile" name="CanvasObject/CircleObject.cs" />
     <File subtype="Code" buildaction="Compile" name="CanvasObject/LineObject.cs" />
     <File subtype="Directory" buildaction="Compile" name="CanvasObject" />
+    <File subtype="Code" buildaction="Compile" name="CanvasObject/CrossObject.cs" />
+    <File subtype="Code" buildaction="Compile" name="CanvasObject/RectangleObject.cs" />
+    <File subtype="Code" buildaction="Compile" name="CanvasObject/QuadrilateralObject.cs" />
+    <File subtype="Code" buildaction="Compile" name="Widgets/Blackboard.cs" />
+    <File subtype="Code" buildaction="Compile" name="CanvasObject/EllipseObject.cs" />
+    <File subtype="Code" buildaction="Compile" name="CanvasObject/TextObject.cs" />
+    <File subtype="Code" buildaction="Compile" name="CanvasObject/CounterObject.cs" />
   </Contents>
   <References>
     <ProjectReference type="Package" localcopy="True" refto="System, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b77a5c561934e089" />
diff --git a/LongoMatch.Drawing/Widgets/Blackboard.cs b/LongoMatch.Drawing/Widgets/Blackboard.cs
new file mode 100644
index 0000000..db511ea
--- /dev/null
+++ b/LongoMatch.Drawing/Widgets/Blackboard.cs
@@ -0,0 +1,304 @@
+//
+//  Copyright (C) 2014 Andoni Morales Alastruey
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU General Public License as published by
+//  the Free Software Foundation; either version 2 of the License, or
+//  (at your option) any later version.
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU General Public License
+//  along with this program; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+using System;
+using System.Linq;
+using System.Runtime.Remoting;
+using LongoMatch.Common;
+using LongoMatch.Interfaces.Drawing;
+using LongoMatch.Store;
+using LongoMatch.Drawing.CanvasObject;
+using LongoMatch.Store.Drawables;
+using LongoMatch.Handlers;
+using LongoMatch.Interfaces;
+
+namespace LongoMatch.Drawing.Widgets
+{
+       public class Blackboard: BackgroundCanvas
+       {
+       
+               public event ShowDrawToolMenuHandler ShowMenuEvent;
+               public event ConfigureDrawingObjectHandler ConfigureObjectEvent;
+               public event DrawableChangedHandler DrawableChangedEvent;
+               DrawTool tool;
+               FrameDrawing drawing;
+               ISurface backbuffer;
+               bool handdrawing;
+
+               public Blackboard (IWidget widget): base(widget)
+               {
+                       Accuracy = 5;
+                       SelectionMode = MultiSelectionMode.Single;
+                       LineWidth = 2;
+                       Color = Color.Red1;
+                       LineStyle = LineStyle.Normal;
+                       LineType = LineType.Arrow;
+                       tool = DrawTool.Selection;
+                       
+               }
+               
+               public FrameDrawing Drawing {
+                       set {
+                               drawing = value;
+                               foreach (IBlackboardObject d in value.Drawables) {
+                                       Add (d);
+                               }
+                               if (backbuffer !=  null) {
+                                       backbuffer.Dispose ();
+                               }
+                               backbuffer = tk.CreateSurface (Background.Width, Background.Height,
+                                                              drawing.Freehand);
+                       }
+               }
+
+               public Color Color {
+                       get;
+                       set;
+               }
+               
+               public Color TextColor {
+                       get;
+                       set;
+               }
+               
+               public Color TextBackgroundColor {
+                       get;
+                       set;
+               }
+
+               public LineStyle LineStyle {
+                       get;
+                       set;
+               }
+               
+               public LineType LineType {
+                       get;
+                       set;
+               }
+
+               public int LineWidth {
+                       get;
+                       set;
+               }
+               
+               public DrawTool Tool {
+                       get {
+                               return tool;
+                       }
+                       set {
+                               tool = value;
+                               widget.SetCursorForTool (tool);
+                       }
+               }
+               
+               public void DeleteSelection () {
+                       foreach (ICanvasDrawableObject o in Selections.Select (s => s.Drawable)) {
+                               Objects.Remove (o);
+                               drawing.Drawables.Remove ((Drawable)o.IDrawableObject);
+                       }
+                       ClearSelection ();
+                       UpdateCounters ();
+                       widget.ReDraw ();
+               }
+               
+               public void Clear () {
+                       ClearSelection ();
+                       drawing.Drawables.Clear ();
+                       Objects.Clear ();
+                       backbuffer.Dispose ();
+                       backbuffer = tk.CreateSurface (Background.Width, Background.Height);
+                       widget.ReDraw ();
+               }
+               
+               public Image Save () {
+                       ClearSelection ();
+                       drawing.Freehand = backbuffer.Copy();
+                       return tk.Copy (this, Background.Width, Background.Height);
+               }
+
+               public void Save (string filename) {
+                       ClearSelection ();
+                       tk.Save (this, Background.Width, Background.Height, filename);
+               }
+               
+               ICanvasSelectableObject Add (IBlackboardObject drawable) {
+                       string objecttype = String.Format ("LongoMatch.Drawing.CanvasObject.{0}Object",
+                                                          drawable.GetType().ToString().Split('.').Last());
+                       ObjectHandle handle = Activator.CreateInstance(null, objecttype);
+                       ICanvasDrawableObject d = (ICanvasDrawableObject) handle.Unwrap();
+                       d.IDrawableObject = drawable;
+                       Objects.Add (d);
+                       return d;
+               }
+               
+               protected override void StartMove (Selection sel)
+               {
+                       Drawable drawable = null;
+                       SelectionPosition pos = SelectionPosition.BottomRight;
+                       bool resize = true, copycolor = true;
+
+                       if (sel != null || Tool == DrawTool.Selection)
+                               return;
+                               
+                       switch (Tool) {
+                       case DrawTool.Line:
+                               drawable = new Line (start, new Point (start.X + 1, start.Y + 1),
+                                                  LineType, LineStyle);
+                               drawable.FillColor = Color;
+                               pos = SelectionPosition.LineStop;
+                               break;
+                       case DrawTool.Cross:
+                               drawable = new Cross (start, new Point (start.X + 1, start.Y + 1),
+                                                     LineStyle);
+                               break;
+                       case DrawTool.Ellipse:
+                               drawable = new Ellipse (start, 2, 2);
+                               break;
+                       case DrawTool.Rectangle:
+                               drawable = new Rectangle (start, 2, 2);
+                               break;
+                       case DrawTool.CircleArea:
+                               drawable = new Ellipse (start, 2, 2);
+                               drawable.FillColor = Color.Copy();
+                               drawable.FillColor.A = byte.MaxValue / 2;
+                               break;
+                       case DrawTool.RectangleArea:
+                               drawable = new Rectangle (start, 2, 2);
+                               drawable.FillColor = Color.Copy();
+                               drawable.FillColor.A = byte.MaxValue / 2;
+                               break;
+                       case DrawTool.Counter:
+                               drawable = new Counter (start, 10, 10, 0);
+                               drawable.FillColor = Color.Copy();
+                               drawable.FillColor.A = byte.MaxValue / 2;
+                               (drawable as Counter).TextColor = Color.Grey2;
+                               resize = false;
+                               break;
+                       case DrawTool.Text: {
+                               Text text = new Text (start, 1, 20, "");
+                               if (ConfigureObjectEvent != null) {
+                                       ConfigureObjectEvent (text);
+                               }
+                               if (text.Value == null) {
+                                       return;
+                               }
+                               text.TopRight.X += text.Value.Length * 12;
+                               text.BottomRight.X += text.Value.Length * 12;
+                               text.TextColor = TextColor.Copy();
+                               text.FillColor = text.StrokeColor = TextBackgroundColor.Copy();
+                               resize = copycolor = false;
+                               drawable = text;
+                               break;
+                       }
+                       case DrawTool.Pen: 
+                       case DrawTool.Eraser: 
+                               handdrawing = true;
+                               break;
+                       }
+                       
+                       if (drawable != null) {
+                               if (copycolor) {
+                                       drawable.StrokeColor = Color.Copy ();
+                               }
+                               drawable.LineWidth = LineWidth;
+                               drawable.Style = LineStyle;
+                               var selo = Add (drawable);
+                               drawing.Drawables.Add (drawable);
+                               if (Tool == DrawTool.Counter) {
+                                       UpdateCounters ();
+                               }
+                               if (resize) {
+                                       UpdateSelection (new Selection (selo, pos, 5));
+                               } else {
+                                       UpdateSelection (new Selection (selo, SelectionPosition.All, 5));
+                               }
+                               widget.ReDraw ();
+                       }
+               }
+               
+               protected override void StopMove ()
+               {
+                       Selection sel = Selections.FirstOrDefault();
+                       if (sel != null) {
+                               (sel.Drawable as ICanvasDrawableObject).IDrawableObject.Reorder();
+                       }
+                       handdrawing = false;
+               }
+               
+               protected override void ShowMenu (Point coords)
+               {
+                       Selection sel = Selections.FirstOrDefault ();
+                       if (sel != null && ShowMenuEvent != null) {
+                               ShowMenuEvent ((sel.Drawable as ICanvasDrawableObject).IDrawableObject);
+                       }
+                       
+               }
+               
+               protected override void SelectionChanged (System.Collections.Generic.List<Selection> sel)
+               {
+                       if (sel != null && sel.Count > 0 && DrawableChangedEvent != null) {
+                               DrawableChangedEvent ((sel[0].Drawable as 
ICanvasDrawableObject).IDrawableObject);
+                       } else {
+                               DrawableChangedEvent (null);
+                       }
+               }
+
+               void UpdateCounters () {
+                       int index = 1;
+                       
+                       foreach (IBlackboardObject bo in
+                                Objects.Select  (o => (o as ICanvasDrawableObject).IDrawableObject)) {
+                               if (bo is Counter) {
+                                       (bo as Counter).Count = index;
+                                       index ++;
+                               }
+                       }
+               }
+               
+               protected override void CursorMoved (Point coords)
+               {
+                       if (handdrawing) {
+                               tk.Context = backbuffer.Context;
+                               tk.Begin ();
+                               tk.LineStyle = LineStyle.Normal;
+                               tk.LineWidth = LineWidth;
+                               if (tool == DrawTool.Eraser) {
+                                       tk.StrokeColor = tk.FillColor = new Color (0, 0, 0, 255);
+                                       tk.LineWidth = LineWidth * 4;
+                                       tk.Clear = true;
+                               } else {
+                                       tk.StrokeColor = tk.FillColor = Color;
+                               }
+                               tk.DrawLine (start, coords);
+                               tk.End ();
+                               widget.ReDraw();
+                       }
+               }
+               
+               public override void Draw (object context, Area area)
+               {
+                       base.Draw (context, area);
+                       if (backbuffer != null) {
+                               tk.Context = context;
+                               tk.Begin ();
+                               tk.DrawSurface (backbuffer);
+                               tk.End ();
+                       }
+               }
+       }
+}
+
diff --git a/LongoMatch.Drawing/Widgets/PlaysTimeline.cs b/LongoMatch.Drawing/Widgets/PlaysTimeline.cs
index 4fba821..23fbfc6 100644
--- a/LongoMatch.Drawing/Widgets/PlaysTimeline.cs
+++ b/LongoMatch.Drawing/Widgets/PlaysTimeline.cs
@@ -153,6 +153,9 @@ namespace LongoMatch.Drawing.Widgets
                }
                
                protected override void StartMove (Selection sel) {
+                       if (sel == null)
+                               return;
+
                        if (sel.Position != SelectionPosition.All) {
                                widget.SetCursor (CursorType.DoubleArrow);
                        }
diff --git a/LongoMatch.Drawing/Widgets/TeamTagger.cs b/LongoMatch.Drawing/Widgets/TeamTagger.cs
index a746017..3f60584 100644
--- a/LongoMatch.Drawing/Widgets/TeamTagger.cs
+++ b/LongoMatch.Drawing/Widgets/TeamTagger.cs
@@ -257,12 +257,6 @@ namespace LongoMatch.Drawing.Widgets
                        }
                }
                
-               protected override void StartMove (Selection sel) {
-               }
-               
-               protected override void StopMove () {
-               }
-
                protected override void ShowMenu (Point coords) {
                        if (ShowMenuEvent != null && Selections.Count > 0){
                                ShowMenuEvent (
@@ -270,10 +264,7 @@ namespace LongoMatch.Drawing.Widgets
                        }
                }
                
-               protected override void SelectionMoved (Selection sel) {
-               }
-
-               protected override void HandleDraw (object context, Area area)
+               public override void Draw (object context, Area area)
                {
                        if (currentWidth != widget.Width || currentHeight != widget.Height) {
                                Resize ();
@@ -289,7 +280,7 @@ namespace LongoMatch.Drawing.Widgets
                        }
                        
                        tk.End ();
-                       base.HandleDraw (context, area);
+                       base.Draw (context, area);
                }
        }
 }
diff --git a/LongoMatch.Drawing/Widgets/TimersTimeline.cs b/LongoMatch.Drawing/Widgets/TimersTimeline.cs
index cf6172d..2f9224a 100644
--- a/LongoMatch.Drawing/Widgets/TimersTimeline.cs
+++ b/LongoMatch.Drawing/Widgets/TimersTimeline.cs
@@ -83,10 +83,10 @@ namespace LongoMatch.Drawing.Widgets
                        Update ();
                }
                
-               protected override void SelectionChanged (List<Selection> selections) {
-               }
-               
                protected override void StartMove (Selection sel) {
+                       if (sel == null)
+                               return;
+
                        if (sel.Position != SelectionPosition.All) {
                                widget.SetCursor (CursorType.DoubleArrow);
                        }
@@ -96,9 +96,6 @@ namespace LongoMatch.Drawing.Widgets
                        widget.SetCursor (CursorType.Arrow);
                }
 
-               protected override void ShowMenu (Point coords) {
-               }
-               
                protected override void SelectionMoved (Selection sel) {
                        if (TimeNodeChanged != null) {
                                Time moveTime;
diff --git a/LongoMatch.Drawing/Widgets/Timerule.cs b/LongoMatch.Drawing/Widgets/Timerule.cs
index b5ed3d3..202b8db 100644
--- a/LongoMatch.Drawing/Widgets/Timerule.cs
+++ b/LongoMatch.Drawing/Widgets/Timerule.cs
@@ -55,7 +55,7 @@ namespace LongoMatch.Drawing.Widgets
                        get;
                }
                
-               protected override void HandleDraw (object context, Area area)
+               public override void Draw (object context, Area area)
                {
                        double height = widget.Height;
                        double width = widget.Width;
diff --git a/LongoMatch.GUI.Helpers/Misc.cs b/LongoMatch.GUI.Helpers/Misc.cs
index c999cbf..c6a82c7 100644
--- a/LongoMatch.GUI.Helpers/Misc.cs
+++ b/LongoMatch.GUI.Helpers/Misc.cs
@@ -111,8 +111,8 @@ namespace LongoMatch.Gui.Helpers
                        return new Color (color.R, color.G, color.B);
                }
                
-               public static LColor ToLgmColor(Color color) {
-                       return LColor.ColorFromUShort (color.Red, color.Green, color.Blue);
+               public static LColor ToLgmColor(Color color, ushort alpha = ushort.MaxValue) {
+                       return LColor.ColorFromUShort (color.Red, color.Green, color.Blue, alpha);
                }
                
                public static ListStore FillImageFormat (ComboBox formatBox, VideoStandard def) {
diff --git a/LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs b/LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs
index 60dc943..4140f68 100644
--- a/LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs
+++ b/LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs
@@ -619,7 +619,7 @@ namespace LongoMatch.Gui
 
                void OnDrawButtonClicked(object sender, System.EventArgs e)
                {
-                       Config.EventsBroker.EmitDrawFrame (CurrentTime);
+                       Config.EventsBroker.EmitDrawFrame (null, -1);
                }
                
                void HandleRealized (object sender, EventArgs e)
diff --git a/LongoMatch.GUI.Multimedia/gtk-gui/objects.xml b/LongoMatch.GUI.Multimedia/gtk-gui/objects.xml
index d7dd50b..6457e6c 100644
--- a/LongoMatch.GUI.Multimedia/gtk-gui/objects.xml
+++ b/LongoMatch.GUI.Multimedia/gtk-gui/objects.xml
@@ -5,8 +5,7 @@
         <property name="Capturing" />
       </itemgroup>
     </itemgroups>
-    <signals>
-    </signals>
+    <signals />
   </object>
   <object type="LongoMatch.Gui.PlayerBin" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
     <itemgroups>
@@ -15,10 +14,10 @@
       </itemgroup>
     </itemgroups>
     <signals>
-      <itemgroup label="IPlayerBin Signals">
+      <itemgroup label="PlayerBin Signals">
+        <signal name="Tick" />
         <signal name="PlayStateChanged" />
         <signal name="SeekEvent" />
-        <signal name="Tick" />
       </itemgroup>
     </signals>
   </object>
@@ -29,7 +28,7 @@
       </itemgroup>
     </itemgroups>
     <signals>
-      <itemgroup label="ICapturerBin Signals">
+      <itemgroup label="IPlayerBin Signals">
         <signal name="PlayStateChanged" />
         <signal name="SeekEvent" />
       </itemgroup>
diff --git a/LongoMatch.GUI/Gui/Dialog/DrawingTool.cs b/LongoMatch.GUI/Gui/Dialog/DrawingTool.cs
index c70aef7..9688b12 100644
--- a/LongoMatch.GUI/Gui/Dialog/DrawingTool.cs
+++ b/LongoMatch.GUI/Gui/Dialog/DrawingTool.cs
@@ -17,106 +17,361 @@
 //
 
 using System;
-using Gdk;
 using Gtk;
 using Mono.Unix;
 
-using Image = LongoMatch.Common.Image;
 using LongoMatch.Common;
 using LongoMatch.Gui.Component;
 using LongoMatch.Store;
 using LongoMatch.Gui.Helpers;
+using LongoMatch.Drawing.Widgets;
+using LongoMatch.Drawing.Cairo;
+using LongoMatch.Store.Drawables;
+using LongoMatch.Interfaces.Drawing;
+using Misc = LongoMatch.Gui.Helpers.Misc;
+using Color = LongoMatch.Common.Color;
+using Drawable = LongoMatch.Store.Drawables.Drawable;
+using Image = LongoMatch.Common.Image;
 
 namespace LongoMatch.Gui.Dialog
 {
 
-
        public partial class DrawingTool : Gtk.Dialog
        {
                Play play;
-               Time stopTime;
+               Blackboard blackboard;
+               FrameDrawing drawing;
+               Drawable selectedDrawable;
+               int drawingIndex;
 
                public DrawingTool()
                {
                        this.Build();
-                       drawingtoolbox1.DrawToolChanged += OnDrawingtoolbox1DrawToolChanged;
-                       drawingtoolbox1.TransparencyChanged += OnDrawingtoolbox1TransparencyChanged;
-                       drawingtoolbox1.ToolsVisible = true;
-                       drawingtoolbox1.InfoVisible = false;
+                       blackboard = new Blackboard(new WidgetWrapper (drawingarea));
+                       blackboard.ConfigureObjectEvent += HandleConfigureObjectEvent;
+                       blackboard.ShowMenuEvent += HandleShowMenuEvent;
+                       blackboard.DrawableChangedEvent += HandleDrawableChangedEvent;
+                       
+                       selectbutton.Active = true;
+
+                       selectbutton.Toggled += HandleToolClicked;
+                       eraserbutton.Toggled += HandleToolClicked;
+                       penbutton.Toggled += HandleToolClicked;
+                       textbutton.Toggled += HandleToolClicked;
+                       linebutton.Toggled += HandleToolClicked;
+                       crossbutton.Toggled += HandleToolClicked;
+                       rectanglebutton.Toggled += HandleToolClicked;
+                       ellipsebutton.Toggled += HandleToolClicked;
+                       rectanglefilledbutton.Toggled += HandleToolClicked;
+                       ellipsefilledbutton.Toggled += HandleToolClicked;
+                       playerbutton.Toggled += HandleToolClicked;
+                       anglebutton.Toggled += HandleToolClicked;
+                       numberbutton.Toggled += HandleToolClicked;
+                       
+                       colorbutton.Color = Misc.ToGdkColor (Color.Red1);
+                       colorbutton.ColorSet += HandleColorSet;
+                       textcolorbutton.Color = Misc.ToGdkColor (Color.White); 
+                       textcolorbutton.ColorSet += HandleTextColorSet;
+                       backgroundcolorbutton.Color = Misc.ToGdkColor (Color.Grey2); 
+                       backgroundcolorbutton.ColorSet += HandleBackgroundColorSet;
+                       backgroundcolorbutton.UseAlpha = true;
+                       blackboard.Color = Color.Red1;
+                       blackboard.TextColor = Color.White;
+                       blackboard.TextBackgroundColor = Color.Grey2;
+
+                       widthcombobox.Changed += HandleLineWidthChanged;
+                       widthcombobox.Active = 1;
+                       
+                       clearbutton.Clicked += HandleClearClicked;
+                       FillLineStyle ();
+                       FillLineType ();
+               }
+               
+               void FillLineStyle () {
+                       ListStore formatStore;
+                       CellRendererPixbuf renderer = new CellRendererPixbuf();
+                       
+                       formatStore = new ListStore(typeof(Gdk.Pixbuf), typeof (LineStyle));
+                       formatStore.AppendValues (Gdk.Pixbuf.LoadFromResource (Constants.LINE_NORMAL),
+                                                 LineStyle.Normal);
+                       formatStore.AppendValues (Gdk.Pixbuf.LoadFromResource (Constants.LINE_DASHED),
+                                                 LineStyle.Dashed);
+                       stylecombobox.Clear ();
+                       stylecombobox.PackStart (renderer, true);
+                       stylecombobox.AddAttribute (renderer, "pixbuf", 0);
+                       stylecombobox.Model = formatStore;
+                       stylecombobox.Active = 0;
+                       stylecombobox.Changed += HandleLineStyleChanged;
+               }
+               
+               void FillLineType () {
+                       ListStore formatStore;
+                       CellRendererPixbuf renderer = new CellRendererPixbuf();
+                       
+                       formatStore = new ListStore(typeof(Gdk.Pixbuf), typeof (LineStyle));
+                       formatStore.AppendValues (Gdk.Pixbuf.LoadFromResource (Constants.LINE_NORMAL),
+                                                 LineType.Simple);
+                       formatStore.AppendValues (Gdk.Pixbuf.LoadFromResource (Constants.LINE_ARROW),
+                                                 LineType.Arrow);
+                       formatStore.AppendValues (Gdk.Pixbuf.LoadFromResource (Constants.LINE_DOUBLE_ARROW),
+                                                 LineType.DoubleArrow);
+                       formatStore.AppendValues (Gdk.Pixbuf.LoadFromResource (Constants.LINE_DOT),
+                                                 LineType.Dot);
+                       formatStore.AppendValues (Gdk.Pixbuf.LoadFromResource (Constants.LINE_DOUBLE_DOT),
+                                                 LineType.DoubleDot);
+                       typecombobox.Clear ();
+                       typecombobox.PackStart (renderer, true);
+                       typecombobox.AddAttribute (renderer, "pixbuf", 0);
+                       typecombobox.Model = formatStore;
+                       typecombobox.Active = 0;
+                       typecombobox.Changed += HandleLineTypeChanged;
                }
 
-               ~ DrawingTool() {
-                       drawingwidget1.Destroy();
+               void HandleLineStyleChanged (object sender, EventArgs e)
+               {
+                       TreeIter iter;
+                       LineStyle style;
+                               
+                       stylecombobox.GetActiveIter(out iter);
+                       style = (LineStyle) stylecombobox.Model.GetValue(iter, 1);
+                       if (selectedDrawable != null) {
+                               selectedDrawable.Style = style;
+                               QueueDraw ();
+                       } else {
+                               blackboard.LineStyle = style;
+                       }
                }
 
-               public Pixbuf Image {
-                       set {
-                               Screen screen = Display.Default.DefaultScreen;
-                               int width = Math.Min(screen.Width, value.Width + vbox2.Allocation.Width + 10);
-                               int height = Math.Min(screen.Height, value.Height + 20);
-                               this.Resize(width, height);
-                               drawingwidget1.SourceImage = value;
+               void HandleLineTypeChanged (object sender, EventArgs e)
+               {
+                       TreeIter iter;
+                       LineType type;
+                               
+                       typecombobox.GetActiveIter(out iter);
+                       type = (LineType) typecombobox.Model.GetValue(iter, 1);
+                       if (selectedDrawable != null && selectedDrawable is Line) {
+                               (selectedDrawable as Line).Type = type;
+                               QueueDraw ();
+                       } else {
+                               blackboard.LineType = type;
                        }
                }
 
-               public void SetPlay(Play play, Time stopTime) {
-                       this.play = play;
-                       this.stopTime = stopTime;
-                       savetoprojectbutton.Visible = true;
+               void HandleClearClicked (object sender, EventArgs e)
+               {
+                       string msg = Catalog.GetString ("Do you want to clear the drawing?");
+                       if (MessagesHelpers.QuestionMessage (this, msg)) {
+                               blackboard.Clear();
+                       }
                }
 
-               protected virtual void OnDrawingtoolbox1LineWidthChanged(int width)
+               void HandleBackgroundColorSet (object sender, EventArgs e)
                {
-                       drawingwidget1.LineWidth = width;
+                       if (selectedDrawable is Text) {
+                               Text t = (selectedDrawable as Text);
+                               t.FillColor = t.StrokeColor = Misc.ToLgmColor (backgroundcolorbutton.Color);
+                               QueueDraw (); 
+                       } else {
+                               blackboard.TextBackgroundColor = Misc.ToLgmColor 
(backgroundcolorbutton.Color);
+                       }
                }
 
-               protected virtual void OnDrawingtoolbox1ColorChanged (LongoMatch.Common.Color color)
+               void HandleTextColorSet (object sender, EventArgs e)
                {
-                       drawingwidget1.LineColor = Helpers.Misc.ToGdkColor(color);
+                       if (selectedDrawable is Text) {
+                               (selectedDrawable as Text).TextColor = Misc.ToLgmColor 
(textcolorbutton.Color); 
+                               QueueDraw ();
+                       } else {
+                               blackboard.TextColor = Misc.ToLgmColor (textcolorbutton.Color);
+                       }                       
                }
 
-               protected virtual void OnDrawingtoolbox1VisibilityChanged(bool visible)
+               void HandleColorSet (object sender, EventArgs e)
                {
-                       drawingwidget1.DrawingsVisible = visible;
+                       if (selectedDrawable != null) {
+                               selectedDrawable.StrokeColor = Misc.ToLgmColor (colorbutton.Color);
+                               if (selectedDrawable.FillColor != null) {
+                                       Color c =  Misc.ToLgmColor (colorbutton.Color);
+                                       c.A = selectedDrawable.FillColor.A;
+                                       selectedDrawable.FillColor = c;
+                               }
+                               QueueDraw ();
+                       } else {
+                               blackboard.Color = Misc.ToLgmColor (colorbutton.Color);
+                       }
                }
 
-               protected virtual void OnDrawingtoolbox1ClearDrawing()
+               void HandleLineWidthChanged (object sender, EventArgs e)
                {
-                       drawingwidget1.ClearDrawing();
+                       TreeIter iter;
+                       string swidth;
+                       int width;
+                       
+                       widthcombobox.GetActiveIter (out iter);
+                       swidth = (string) widthcombobox.Model.GetValue (iter, 0);
+                       width = int.Parse (swidth.Split (' ')[0]);
+                       if (selectedDrawable != null) {
+                               selectedDrawable.LineWidth = width;
+                               QueueDraw ();
+                       } else {
+                               blackboard.LineWidth = width;
+                       }
                }
 
-               protected virtual void OnDrawingtoolbox1DrawToolChanged(DrawTool tool)
+               public void LoadFrame (Image frame) {
+                       drawing = new FrameDrawing ();
+                       blackboard.Background = frame;
+                       blackboard.Drawing = drawing;
+                       savetoprojectbutton.Visible = false;
+               }
+               
+               protected override bool OnKeyPressEvent (Gdk.EventKey evnt)
                {
-                       drawingwidget1.DrawTool = tool;
+                       if (evnt.Key == Gdk.Key.Delete) {
+                               blackboard.DeleteSelection();
+                       }
+                       return base.OnKeyPressEvent (evnt);
                }
 
-               protected virtual void OnDrawingtoolbox1TransparencyChanged(double transparency)
+               void HandleToolClicked (object sender, EventArgs e)
                {
-                       drawingwidget1.Transparency = transparency;
+                       if (!(sender as RadioButton).Active) {
+                               return;
+                       }
+                       
+                       if (sender == selectbutton) {
+                               blackboard.Tool = DrawTool.Selection;
+                       } else if (sender == eraserbutton) {
+                               blackboard.Tool = DrawTool.Eraser;
+                       } else if (sender == penbutton) {
+                               blackboard.Tool = DrawTool.Pen;
+                       } else if (sender == textbutton) {
+                               blackboard.Tool = DrawTool.Text;
+                       } else if (sender == linebutton) {
+                               blackboard.Tool = DrawTool.Line;
+                       } else if (sender == crossbutton) {
+                               blackboard.Tool = DrawTool.Cross;
+                       } else if (sender == rectanglebutton) {
+                               blackboard.Tool = DrawTool.Rectangle;
+                       } else if (sender == ellipsebutton) {
+                               blackboard.Tool = DrawTool.Ellipse;
+                       } else if (sender == rectanglefilledbutton) {
+                               blackboard.Tool = DrawTool.RectangleArea;
+                       } else if (sender == ellipsefilledbutton) {
+                               blackboard.Tool = DrawTool.CircleArea;
+                       } else if (sender == numberbutton) {
+                               blackboard.Tool = DrawTool.Counter;
+                       } else if (sender == anglebutton) {
+                               blackboard.Tool = DrawTool.Angle;
+                       } else if (sender == playerbutton) {
+                               blackboard.Tool = DrawTool.Player;
+                       }
+               }
+               
+               public void LoadPlay (Play play, Image frame, int drawingIndex) {
+                       this.play = play;
+                       this.drawingIndex = drawingIndex;
+                       blackboard.Background = frame;
+                       savetoprojectbutton.Visible = true;
+                       drawing = play.Drawings [drawingIndex].Clone ();
+                       blackboard.Drawing = drawing;
+               }
+               
+               void EditText (Text text) {
+                       text.Value = MessagesHelpers.QueryMessage (this, Catalog.GetString ("Text"),
+                                                                  null, text.Value);
+                       QueueDraw ();
                }
 
-               protected virtual void OnSavebuttonClicked(object sender, System.EventArgs e)
+               void OnSavebuttonClicked(object sender, System.EventArgs e)
                {
                        string filename;
                        
                        filename = FileChooserHelper.SaveFile (this, Catalog.GetString("Save File as..."),
                                                               null, Config.SnapshotsDir, "PNG Images", new 
string[] {"*.png"});
                        if (filename != null) {
-                               if(System.IO.Path.GetExtension(filename) != "png")
-                                       filename += ".png";
-                               drawingwidget1.SaveAll(filename);
+                               System.IO.Path.ChangeExtension (filename, ".png");
+                               blackboard.Save (filename);
+                               drawing = null;
+                               Respond (ResponseType.Accept);
+                       }
+               }
+
+               void OnSavetoprojectbuttonClicked(object sender, System.EventArgs e)
+               {
+                       play.Drawings[drawingIndex] = drawing;
+                       play.Miniature = blackboard.Save ();
+                       play.Miniature.Scale (Constants.MAX_THUMBNAIL_SIZE,
+                                             Constants.MAX_THUMBNAIL_SIZE);
+                       drawing = null;
+                       Respond (ResponseType.Accept);
+               }
+               
+               void HandleConfigureObjectEvent (IBlackboardObject drawable)
+               {
+                       if (drawable is Text) {
+                               EditText (drawable as Text);
+                       }
+               }
+
+               void HandleDrawableChangedEvent (IBlackboardObject drawable)
+               {
+                       selectedDrawable = drawable as Drawable;
+                       
+                       colorbutton.Sensitive = !(drawable is Text);
+
+                       if (selectedDrawable == null) {
+                               colorbutton.Color = Misc.ToGdkColor (blackboard.Color);
+                               textcolorbutton.Color = Misc.ToGdkColor (blackboard.TextColor);
+                               backgroundcolorbutton.Color = Misc.ToGdkColor 
(blackboard.TextBackgroundColor);
+                               widthcombobox.Active = blackboard.LineWidth / 2 - 1;
+                               if (blackboard.LineStyle == LineStyle.Normal) {
+                                       stylecombobox.Active = 0;
+                               } else {
+                                       stylecombobox.Active = 1;
+                               }
+                               typecombobox.Active = (int) blackboard.LineType;
+                       } else {
+                               if (drawable is Text) {
+                                       textcolorbutton.Color = Misc.ToGdkColor ((selectedDrawable as 
Text).TextColor);
+                                       backgroundcolorbutton.Color = Misc.ToGdkColor 
(selectedDrawable.FillColor);
+                               } else {
+                                       colorbutton.Color =  Misc.ToGdkColor (selectedDrawable.StrokeColor);
+                               }
+                               if (drawable is Line) {
+                                       typecombobox.Active = (int) (drawable as Line).Type; 
+                               }
+                               widthcombobox.Active = selectedDrawable.LineWidth / 2 - 1;
+                               if (selectedDrawable.Style == LineStyle.Normal) {
+                                       stylecombobox.Active = 0;
+                               } else {
+                                       stylecombobox.Active = 1;
+                               }
                        }
                }
 
-               protected virtual void OnSavetoprojectbuttonClicked(object sender, System.EventArgs e)
+               void HandleShowMenuEvent (IBlackboardObject drawable)
+               {
+                       Menu m = new Menu ();
+                       MenuItem item = new MenuItem (Catalog.GetString ("Delete"));
+                       item.Activated += (sender, e) => {blackboard.DeleteSelection ();};
+                       m.Add (item);
+                       if (drawable is Text) {
+                               MenuItem edit = new MenuItem (Catalog.GetString ("Edit"));
+                               edit.Activated += (sender, e) => {EditText (drawable as Text);};
+                               m.Add (edit);
+                       }
+                       m.ShowAll ();
+                       m.Popup();
+               }
+               void HandleDeleteEvent (object o, DeleteEventArgs args)
                {
-                       string tempFile = System.IO.Path.GetTempFileName();
-                       drawingwidget1.SaveDrawings(tempFile);
-                       Pixbuf frame = new Pixbuf(tempFile);
-                       play.KeyFrameDrawing = new LongoMatch.Store.Drawing { Pixbuf= new Image(frame), 
Render = stopTime};
-                       drawingwidget1.SaveAll(tempFile);
-                       frame.Dispose();
-                       play.Miniature = new Image(new Pixbuf(tempFile));
+                       string msg = Catalog.GetString ("Do you want to close the current drawing?");
+                       if (MessagesHelpers.QuestionMessage (this, msg)) {
+                               args.RetVal = false;
+                       } else {
+                               args.RetVal = true;
+                       }
                }
        }
 }
diff --git a/LongoMatch.GUI/Gui/GUIToolkit.cs b/LongoMatch.GUI/Gui/GUIToolkit.cs
index b204cca..9eeb260 100644
--- a/LongoMatch.GUI/Gui/GUIToolkit.cs
+++ b/LongoMatch.GUI/Gui/GUIToolkit.cs
@@ -215,15 +215,17 @@ namespace LongoMatch.Gui
                        d.Destroy();
                }
 
-               public void DrawingTool (Image image, Play play, Time stopTime) {
+               public void DrawingTool (Image image, Play play, int drawingIndex) {
                        DrawingTool dialog = new DrawingTool();
+                       dialog.Show ();
 
                        Log.Information ("Drawing tool");
-                       dialog.Image = image.Value;
-                       if (play != null)
-                               dialog.SetPlay (play, stopTime);
+                       if (play == null) {
+                               dialog.LoadFrame (image);
+                       } else {
+                               dialog.LoadPlay (play, image, drawingIndex);
+                       }
                        dialog.TransientFor = mainWindow as Gtk.Window;
-                       image.Dispose();
                        dialog.Run();
                        dialog.Destroy();       
                }
diff --git a/LongoMatch.GUI/LongoMatch.GUI.mdp b/LongoMatch.GUI/LongoMatch.GUI.mdp
index ebb36b5..dbd07d5 100644
--- a/LongoMatch.GUI/LongoMatch.GUI.mdp
+++ b/LongoMatch.GUI/LongoMatch.GUI.mdp
@@ -22,7 +22,6 @@
     <File subtype="Code" buildaction="Compile" name="Gui/Dialog/EntryDialog.cs" />
     <File subtype="Directory" buildaction="Compile" name="Gui/Component" />
     <File subtype="Code" buildaction="Compile" name="Gui/Component/ButtonsWidget.cs" />
-    <File subtype="Code" buildaction="Compile" name="Gui/Component/DrawingToolBox.cs" />
     <File subtype="Code" buildaction="Compile" name="Gui/Component/NotesWidget.cs" />
     <File subtype="Code" buildaction="Compile" name="Gui/Dialog/FramesCaptureProgressDialog.cs" />
     <File subtype="Code" buildaction="Compile" name="Gui/Dialog/HotKeySelectorDialog.cs" />
@@ -41,7 +40,6 @@
     <File subtype="Code" buildaction="Compile" name="Gui/Dialog/VideoEditionProperties.cs" />
     <File subtype="Code" buildaction="Compile" name="Gui/Component/CategoryProperties.cs" />
     <File subtype="Code" buildaction="Compile" name="Gui/Component/PlaysListTreeWidget.cs" />
-    <File subtype="Code" buildaction="Compile" name="Gui/Component/DrawingWidget.cs" />
     <File subtype="Code" buildaction="Compile" name="Gui/Dialog/DrawingTool.cs" />
     <File subtype="Code" buildaction="Compile" name="Gui/Dialog/EndCaptureDialog.cs" />
     <File subtype="Code" buildaction="Compile" name="Gui/Dialog/BusyDialog.cs" />
@@ -62,9 +60,7 @@
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Dialog.HotKeySelectorDialog.cs" 
/>
     <File subtype="Code" buildaction="Compile" 
name="gtk-gui/LongoMatch.Gui.Component.PlayersListTreeWidget.cs" />
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Popup.TransparentDrawingArea.cs" 
/>
-    <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Component.DrawingToolBox.cs" />
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Dialog.EditCategoryDialog.cs" />
-    <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Component.DrawingWidget.cs" />
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Dialog.DrawingTool.cs" />
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Dialog.EndCaptureDialog.cs" />
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Dialog.BusyDialog.cs" />
@@ -79,11 +75,6 @@
     <File subtype="Directory" buildaction="Compile" name="." />
     <File subtype="Code" buildaction="Compile" name="Gui/Dialog/About.cs" />
     <File subtype="Code" buildaction="EmbedAsResource" name="../images/logo.svg" />
-    <File subtype="Code" buildaction="EmbedAsResource" name="../images/stock_draw-circle-unfilled.png" />
-    <File subtype="Code" buildaction="EmbedAsResource" name="../images/stock_draw-freeform-line.png" />
-    <File subtype="Code" buildaction="EmbedAsResource" name="../images/stock_draw-line-45.png" />
-    <File subtype="Code" buildaction="EmbedAsResource" name="../images/stock_draw-line-ends-with-arrow.png" 
/>
-    <File subtype="Code" buildaction="EmbedAsResource" name="../images/stock_draw-rectangle-unfilled.png" />
     <File subtype="Code" buildaction="EmbedAsResource" name="../images/video.png" />
     <File subtype="Code" buildaction="EmbedAsResource" name="../images/camera-video.png" />
     <File subtype="Directory" buildaction="Compile" name="Gui/Component" />
@@ -177,6 +168,23 @@
     <File subtype="Directory" buildaction="Compile" name="Gui/Menu" />
     <File subtype="Code" buildaction="Compile" name="Gui/Menu/PlaysMenu.cs" />
     <File subtype="Code" buildaction="Compile" name="Gui/GtkGlue.cs" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/tools/draw-arrow.png" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/tools/draw-circle-unfilled.png" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/tools/draw-cross.png" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/tools/draw-ellipse.png" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/tools/draw-eraser.png" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/tools/draw-freehand.png" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/tools/draw-number.png" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/tools/draw-pointer.png" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/tools/draw-rectangle.png" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/tools/draw-rectangle-unfilled.png" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/tools/draw-text.png" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/tools/dash-line.svg" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/tools/line.svg" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/tools/line-double-dot.svg" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/tools/line-dot.svg" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/tools/line-double-arrow.svg" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="../images/tools/line-arrow.svg" />
   </Contents>
   <References>
     <ProjectReference type="Package" localcopy="True" refto="atk-sharp, Version=2.12.0.0, Culture=neutral, 
PublicKeyToken=35e10195dab3c99f" />
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Dialog.DrawingTool.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Dialog.DrawingTool.cs
index 95510bc..9ed50e2 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Dialog.DrawingTool.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Dialog.DrawingTool.cs
@@ -6,11 +6,52 @@ namespace LongoMatch.Gui.Dialog
        {
                private global::Gtk.HBox hbox1;
                private global::Gtk.VBox vbox2;
-               private global::LongoMatch.Gui.Component.DrawingToolBox drawingtoolbox1;
+               private global::Gtk.VBox vbox3;
+               private global::Gtk.Label toolslabel;
+               private global::Gtk.Table toolstable;
+               private global::Gtk.RadioButton anglebutton;
+               private global::Gtk.Image image90;
+               private global::Gtk.RadioButton crossbutton;
+               private global::Gtk.Image image83;
+               private global::Gtk.RadioButton ellipsebutton;
+               private global::Gtk.Image image79;
+               private global::Gtk.RadioButton ellipsefilledbutton;
+               private global::Gtk.Image image86;
+               private global::Gtk.RadioButton eraserbutton;
+               private global::Gtk.Image image81;
+               private global::Gtk.RadioButton linebutton;
+               private global::Gtk.Image image82;
+               private global::Gtk.RadioButton numberbutton;
+               private global::Gtk.Image image88;
+               private global::Gtk.RadioButton penbutton;
+               private global::Gtk.Image image91;
+               private global::Gtk.RadioButton playerbutton;
+               private global::Gtk.Image image89;
+               private global::Gtk.RadioButton rectanglebutton;
+               private global::Gtk.Image image84;
+               private global::Gtk.RadioButton rectanglefilledbutton;
+               private global::Gtk.Image image85;
+               private global::Gtk.RadioButton selectbutton;
+               private global::Gtk.Image image80;
+               private global::Gtk.RadioButton textbutton;
+               private global::Gtk.Image image87;
+               private global::Gtk.Label colorslabel;
+               private global::Gtk.ColorButton colorbutton;
+               private global::Gtk.Label label3;
+               private global::Gtk.ComboBox widthcombobox;
+               private global::Gtk.Label label4;
+               private global::Gtk.ComboBox stylecombobox;
+               private global::Gtk.Label label5;
+               private global::Gtk.ComboBox typecombobox;
+               private global::Gtk.Label textcolorslabel;
+               private global::Gtk.ColorButton textcolorbutton;
+               private global::Gtk.Label backgroundcolorslabel;
+               private global::Gtk.ColorButton backgroundcolorbutton;
+               private global::Gtk.Button clearbutton;
                private global::Gtk.Button savetoprojectbutton;
                private global::Gtk.Button savebutton;
-               private global::LongoMatch.Gui.Component.DrawingWidget drawingwidget1;
-               private global::Gtk.Button button271;
+               private global::Gtk.DrawingArea drawingarea;
+               private global::Gtk.Button closebutton;
 
                protected virtual void Build ()
                {
@@ -37,111 +78,550 @@ namespace LongoMatch.Gui.Dialog
                        this.vbox2.Name = "vbox2";
                        this.vbox2.Spacing = 6;
                        // Container child vbox2.Gtk.Box+BoxChild
-                       this.drawingtoolbox1 = new global::LongoMatch.Gui.Component.DrawingToolBox ();
-                       this.drawingtoolbox1.Events = ((global::Gdk.EventMask)(256));
-                       this.drawingtoolbox1.Name = "drawingtoolbox1";
-                       this.vbox2.Add (this.drawingtoolbox1);
-                       global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.vbox2 
[this.drawingtoolbox1]));
+                       this.vbox3 = new global::Gtk.VBox ();
+                       this.vbox3.Name = "vbox3";
+                       this.vbox3.Spacing = 6;
+                       // Container child vbox3.Gtk.Box+BoxChild
+                       this.toolslabel = new global::Gtk.Label ();
+                       this.toolslabel.Name = "toolslabel";
+                       this.toolslabel.Xalign = 0F;
+                       this.toolslabel.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Tools</b>");
+                       this.toolslabel.UseMarkup = true;
+                       this.vbox3.Add (this.toolslabel);
+                       global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.vbox3 
[this.toolslabel]));
                        w2.Position = 0;
                        w2.Expand = false;
                        w2.Fill = false;
+                       // Container child vbox3.Gtk.Box+BoxChild
+                       this.toolstable = new global::Gtk.Table (((uint)(7)), ((uint)(2)), true);
+                       this.toolstable.Name = "toolstable";
+                       this.toolstable.RowSpacing = ((uint)(6));
+                       this.toolstable.ColumnSpacing = ((uint)(6));
+                       // Container child toolstable.Gtk.Table+TableChild
+                       this.anglebutton = new global::Gtk.RadioButton ("");
+                       this.anglebutton.TooltipMarkup = "Angle tool";
+                       this.anglebutton.CanFocus = true;
+                       this.anglebutton.Name = "anglebutton";
+                       this.anglebutton.DrawIndicator = false;
+                       this.anglebutton.UseUnderline = true;
+                       this.anglebutton.Group = new global::GLib.SList (global::System.IntPtr.Zero);
+                       this.anglebutton.Remove (this.anglebutton.Child);
+                       // Container child anglebutton.Gtk.Container+ContainerChild
+                       this.image90 = new global::Gtk.Image ();
+                       this.image90.Name = "image90";
+                       this.image90.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-go-down", 
global::Gtk.IconSize.Menu);
+                       this.anglebutton.Add (this.image90);
+                       this.toolstable.Add (this.anglebutton);
+                       global::Gtk.Table.TableChild w4 = ((global::Gtk.Table.TableChild)(this.toolstable 
[this.anglebutton]));
+                       w4.TopAttach = ((uint)(6));
+                       w4.BottomAttach = ((uint)(7));
+                       w4.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child toolstable.Gtk.Table+TableChild
+                       this.crossbutton = new global::Gtk.RadioButton ("");
+                       this.crossbutton.TooltipMarkup = "Cross tool";
+                       this.crossbutton.CanFocus = true;
+                       this.crossbutton.Name = "crossbutton";
+                       this.crossbutton.DrawIndicator = false;
+                       this.crossbutton.UseUnderline = true;
+                       this.crossbutton.Group = this.anglebutton.Group;
+                       this.crossbutton.Remove (this.crossbutton.Child);
+                       // Container child crossbutton.Gtk.Container+ContainerChild
+                       this.image83 = new global::Gtk.Image ();
+                       this.image83.Name = "image83";
+                       this.image83.Pixbuf = global::Gdk.Pixbuf.LoadFromResource ("draw-cross.png");
+                       this.crossbutton.Add (this.image83);
+                       this.toolstable.Add (this.crossbutton);
+                       global::Gtk.Table.TableChild w6 = ((global::Gtk.Table.TableChild)(this.toolstable 
[this.crossbutton]));
+                       w6.TopAttach = ((uint)(2));
+                       w6.BottomAttach = ((uint)(3));
+                       w6.LeftAttach = ((uint)(1));
+                       w6.RightAttach = ((uint)(2));
+                       w6.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child toolstable.Gtk.Table+TableChild
+                       this.ellipsebutton = new global::Gtk.RadioButton ("");
+                       this.ellipsebutton.TooltipMarkup = "Ellipse tool";
+                       this.ellipsebutton.CanFocus = true;
+                       this.ellipsebutton.Name = "ellipsebutton";
+                       this.ellipsebutton.DrawIndicator = false;
+                       this.ellipsebutton.UseUnderline = true;
+                       this.ellipsebutton.Group = this.anglebutton.Group;
+                       this.ellipsebutton.Remove (this.ellipsebutton.Child);
+                       // Container child ellipsebutton.Gtk.Container+ContainerChild
+                       this.image79 = new global::Gtk.Image ();
+                       this.image79.Name = "image79";
+                       this.image79.Pixbuf = global::Gdk.Pixbuf.LoadFromResource 
("draw-circle-unfilled.png");
+                       this.ellipsebutton.Add (this.image79);
+                       this.toolstable.Add (this.ellipsebutton);
+                       global::Gtk.Table.TableChild w8 = ((global::Gtk.Table.TableChild)(this.toolstable 
[this.ellipsebutton]));
+                       w8.TopAttach = ((uint)(3));
+                       w8.BottomAttach = ((uint)(4));
+                       w8.LeftAttach = ((uint)(1));
+                       w8.RightAttach = ((uint)(2));
+                       w8.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child toolstable.Gtk.Table+TableChild
+                       this.ellipsefilledbutton = new global::Gtk.RadioButton ("");
+                       this.ellipsefilledbutton.TooltipMarkup = "Filled ellipse";
+                       this.ellipsefilledbutton.CanFocus = true;
+                       this.ellipsefilledbutton.Name = "ellipsefilledbutton";
+                       this.ellipsefilledbutton.DrawIndicator = false;
+                       this.ellipsefilledbutton.UseUnderline = true;
+                       this.ellipsefilledbutton.Group = this.anglebutton.Group;
+                       this.ellipsefilledbutton.Remove (this.ellipsefilledbutton.Child);
+                       // Container child ellipsefilledbutton.Gtk.Container+ContainerChild
+                       this.image86 = new global::Gtk.Image ();
+                       this.image86.Name = "image86";
+                       this.image86.Pixbuf = global::Gdk.Pixbuf.LoadFromResource ("draw-ellipse.png");
+                       this.ellipsefilledbutton.Add (this.image86);
+                       this.toolstable.Add (this.ellipsefilledbutton);
+                       global::Gtk.Table.TableChild w10 = ((global::Gtk.Table.TableChild)(this.toolstable 
[this.ellipsefilledbutton]));
+                       w10.TopAttach = ((uint)(4));
+                       w10.BottomAttach = ((uint)(5));
+                       w10.LeftAttach = ((uint)(1));
+                       w10.RightAttach = ((uint)(2));
+                       w10.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child toolstable.Gtk.Table+TableChild
+                       this.eraserbutton = new global::Gtk.RadioButton ("");
+                       this.eraserbutton.TooltipMarkup = "Rubber tool";
+                       this.eraserbutton.CanFocus = true;
+                       this.eraserbutton.Name = "eraserbutton";
+                       this.eraserbutton.DrawIndicator = false;
+                       this.eraserbutton.UseUnderline = true;
+                       this.eraserbutton.Group = this.anglebutton.Group;
+                       this.eraserbutton.Remove (this.eraserbutton.Child);
+                       // Container child eraserbutton.Gtk.Container+ContainerChild
+                       this.image81 = new global::Gtk.Image ();
+                       this.image81.Name = "image81";
+                       this.image81.Pixbuf = global::Gdk.Pixbuf.LoadFromResource ("draw-eraser.png");
+                       this.eraserbutton.Add (this.image81);
+                       this.toolstable.Add (this.eraserbutton);
+                       global::Gtk.Table.TableChild w12 = ((global::Gtk.Table.TableChild)(this.toolstable 
[this.eraserbutton]));
+                       w12.LeftAttach = ((uint)(1));
+                       w12.RightAttach = ((uint)(2));
+                       w12.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child toolstable.Gtk.Table+TableChild
+                       this.linebutton = new global::Gtk.RadioButton ("");
+                       this.linebutton.TooltipMarkup = "Line tool";
+                       this.linebutton.CanFocus = true;
+                       this.linebutton.Name = "linebutton";
+                       this.linebutton.DrawIndicator = false;
+                       this.linebutton.UseUnderline = true;
+                       this.linebutton.Group = this.anglebutton.Group;
+                       this.linebutton.Remove (this.linebutton.Child);
+                       // Container child linebutton.Gtk.Container+ContainerChild
+                       this.image82 = new global::Gtk.Image ();
+                       this.image82.Name = "image82";
+                       this.image82.Pixbuf = global::Gdk.Pixbuf.LoadFromResource ("draw-arrow.png");
+                       this.linebutton.Add (this.image82);
+                       this.toolstable.Add (this.linebutton);
+                       global::Gtk.Table.TableChild w14 = ((global::Gtk.Table.TableChild)(this.toolstable 
[this.linebutton]));
+                       w14.TopAttach = ((uint)(2));
+                       w14.BottomAttach = ((uint)(3));
+                       w14.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child toolstable.Gtk.Table+TableChild
+                       this.numberbutton = new global::Gtk.RadioButton ("");
+                       this.numberbutton.TooltipMarkup = "Index tool";
+                       this.numberbutton.CanFocus = true;
+                       this.numberbutton.Name = "numberbutton";
+                       this.numberbutton.DrawIndicator = false;
+                       this.numberbutton.UseUnderline = true;
+                       this.numberbutton.Group = this.anglebutton.Group;
+                       this.numberbutton.Remove (this.numberbutton.Child);
+                       // Container child numberbutton.Gtk.Container+ContainerChild
+                       this.image88 = new global::Gtk.Image ();
+                       this.image88.Name = "image88";
+                       this.image88.Pixbuf = global::Gdk.Pixbuf.LoadFromResource ("draw-number.png");
+                       this.numberbutton.Add (this.image88);
+                       this.toolstable.Add (this.numberbutton);
+                       global::Gtk.Table.TableChild w16 = ((global::Gtk.Table.TableChild)(this.toolstable 
[this.numberbutton]));
+                       w16.TopAttach = ((uint)(5));
+                       w16.BottomAttach = ((uint)(6));
+                       w16.LeftAttach = ((uint)(1));
+                       w16.RightAttach = ((uint)(2));
+                       w16.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child toolstable.Gtk.Table+TableChild
+                       this.penbutton = new global::Gtk.RadioButton ("");
+                       this.penbutton.TooltipMarkup = "Pencil tool";
+                       this.penbutton.CanFocus = true;
+                       this.penbutton.Name = "penbutton";
+                       this.penbutton.DrawIndicator = false;
+                       this.penbutton.UseUnderline = true;
+                       this.penbutton.Group = this.anglebutton.Group;
+                       this.penbutton.Remove (this.penbutton.Child);
+                       // Container child penbutton.Gtk.Container+ContainerChild
+                       this.image91 = new global::Gtk.Image ();
+                       this.image91.Name = "image91";
+                       this.image91.Pixbuf = global::Gdk.Pixbuf.LoadFromResource ("draw-freehand.png");
+                       this.penbutton.Add (this.image91);
+                       this.toolstable.Add (this.penbutton);
+                       global::Gtk.Table.TableChild w18 = ((global::Gtk.Table.TableChild)(this.toolstable 
[this.penbutton]));
+                       w18.TopAttach = ((uint)(1));
+                       w18.BottomAttach = ((uint)(2));
+                       w18.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child toolstable.Gtk.Table+TableChild
+                       this.playerbutton = new global::Gtk.RadioButton ("");
+                       this.playerbutton.TooltipMarkup = "Player tool";
+                       this.playerbutton.CanFocus = true;
+                       this.playerbutton.Name = "playerbutton";
+                       this.playerbutton.DrawIndicator = false;
+                       this.playerbutton.UseUnderline = true;
+                       this.playerbutton.Group = this.anglebutton.Group;
+                       this.playerbutton.Remove (this.playerbutton.Child);
+                       // Container child playerbutton.Gtk.Container+ContainerChild
+                       this.image89 = new global::Gtk.Image ();
+                       this.image89.Name = "image89";
+                       this.image89.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "stock_person", 
global::Gtk.IconSize.Menu);
+                       this.playerbutton.Add (this.image89);
+                       this.toolstable.Add (this.playerbutton);
+                       global::Gtk.Table.TableChild w20 = ((global::Gtk.Table.TableChild)(this.toolstable 
[this.playerbutton]));
+                       w20.TopAttach = ((uint)(5));
+                       w20.BottomAttach = ((uint)(6));
+                       w20.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child toolstable.Gtk.Table+TableChild
+                       this.rectanglebutton = new global::Gtk.RadioButton ("");
+                       this.rectanglebutton.TooltipMarkup = "Rectangle tool";
+                       this.rectanglebutton.CanFocus = true;
+                       this.rectanglebutton.Name = "rectanglebutton";
+                       this.rectanglebutton.DrawIndicator = false;
+                       this.rectanglebutton.UseUnderline = true;
+                       this.rectanglebutton.Group = this.anglebutton.Group;
+                       this.rectanglebutton.Remove (this.rectanglebutton.Child);
+                       // Container child rectanglebutton.Gtk.Container+ContainerChild
+                       this.image84 = new global::Gtk.Image ();
+                       this.image84.Name = "image84";
+                       this.image84.Pixbuf = global::Gdk.Pixbuf.LoadFromResource 
("draw-rectangle-unfilled.png");
+                       this.rectanglebutton.Add (this.image84);
+                       this.toolstable.Add (this.rectanglebutton);
+                       global::Gtk.Table.TableChild w22 = ((global::Gtk.Table.TableChild)(this.toolstable 
[this.rectanglebutton]));
+                       w22.TopAttach = ((uint)(3));
+                       w22.BottomAttach = ((uint)(4));
+                       w22.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child toolstable.Gtk.Table+TableChild
+                       this.rectanglefilledbutton = new global::Gtk.RadioButton ("");
+                       this.rectanglefilledbutton.TooltipMarkup = "Filled rectangle tool";
+                       this.rectanglefilledbutton.CanFocus = true;
+                       this.rectanglefilledbutton.Name = "rectanglefilledbutton";
+                       this.rectanglefilledbutton.DrawIndicator = false;
+                       this.rectanglefilledbutton.UseUnderline = true;
+                       this.rectanglefilledbutton.Group = this.anglebutton.Group;
+                       this.rectanglefilledbutton.Remove (this.rectanglefilledbutton.Child);
+                       // Container child rectanglefilledbutton.Gtk.Container+ContainerChild
+                       this.image85 = new global::Gtk.Image ();
+                       this.image85.Name = "image85";
+                       this.image85.Pixbuf = global::Gdk.Pixbuf.LoadFromResource ("draw-rectangle.png");
+                       this.rectanglefilledbutton.Add (this.image85);
+                       this.toolstable.Add (this.rectanglefilledbutton);
+                       global::Gtk.Table.TableChild w24 = ((global::Gtk.Table.TableChild)(this.toolstable 
[this.rectanglefilledbutton]));
+                       w24.TopAttach = ((uint)(4));
+                       w24.BottomAttach = ((uint)(5));
+                       w24.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child toolstable.Gtk.Table+TableChild
+                       this.selectbutton = new global::Gtk.RadioButton ("");
+                       this.selectbutton.TooltipMarkup = "Selection tool";
+                       this.selectbutton.CanFocus = true;
+                       this.selectbutton.Name = "selectbutton";
+                       this.selectbutton.DrawIndicator = false;
+                       this.selectbutton.UseUnderline = true;
+                       this.selectbutton.Group = this.anglebutton.Group;
+                       this.selectbutton.Remove (this.selectbutton.Child);
+                       // Container child selectbutton.Gtk.Container+ContainerChild
+                       this.image80 = new global::Gtk.Image ();
+                       this.image80.Name = "image80";
+                       this.image80.Pixbuf = global::Gdk.Pixbuf.LoadFromResource ("draw-pointer.png");
+                       this.selectbutton.Add (this.image80);
+                       this.toolstable.Add (this.selectbutton);
+                       global::Gtk.Table.TableChild w26 = ((global::Gtk.Table.TableChild)(this.toolstable 
[this.selectbutton]));
+                       w26.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child toolstable.Gtk.Table+TableChild
+                       this.textbutton = new global::Gtk.RadioButton ("");
+                       this.textbutton.TooltipMarkup = "Text tool";
+                       this.textbutton.CanFocus = true;
+                       this.textbutton.Name = "textbutton";
+                       this.textbutton.DrawIndicator = false;
+                       this.textbutton.UseUnderline = true;
+                       this.textbutton.Group = this.anglebutton.Group;
+                       this.textbutton.Remove (this.textbutton.Child);
+                       // Container child textbutton.Gtk.Container+ContainerChild
+                       this.image87 = new global::Gtk.Image ();
+                       this.image87.Name = "image87";
+                       this.image87.Pixbuf = global::Gdk.Pixbuf.LoadFromResource ("draw-text.png");
+                       this.textbutton.Add (this.image87);
+                       this.toolstable.Add (this.textbutton);
+                       global::Gtk.Table.TableChild w28 = ((global::Gtk.Table.TableChild)(this.toolstable 
[this.textbutton]));
+                       w28.TopAttach = ((uint)(1));
+                       w28.BottomAttach = ((uint)(2));
+                       w28.LeftAttach = ((uint)(1));
+                       w28.RightAttach = ((uint)(2));
+                       w28.YOptions = ((global::Gtk.AttachOptions)(4));
+                       this.vbox3.Add (this.toolstable);
+                       global::Gtk.Box.BoxChild w29 = ((global::Gtk.Box.BoxChild)(this.vbox3 
[this.toolstable]));
+                       w29.Position = 1;
+                       w29.Expand = false;
+                       // Container child vbox3.Gtk.Box+BoxChild
+                       this.colorslabel = new global::Gtk.Label ();
+                       this.colorslabel.Name = "colorslabel";
+                       this.colorslabel.Xalign = 0F;
+                       this.colorslabel.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Color</b>");
+                       this.colorslabel.UseMarkup = true;
+                       this.vbox3.Add (this.colorslabel);
+                       global::Gtk.Box.BoxChild w30 = ((global::Gtk.Box.BoxChild)(this.vbox3 
[this.colorslabel]));
+                       w30.Position = 2;
+                       w30.Expand = false;
+                       w30.Fill = false;
+                       // Container child vbox3.Gtk.Box+BoxChild
+                       this.colorbutton = new global::Gtk.ColorButton ();
+                       this.colorbutton.CanFocus = true;
+                       this.colorbutton.Events = ((global::Gdk.EventMask)(784));
+                       this.colorbutton.Name = "colorbutton";
+                       this.vbox3.Add (this.colorbutton);
+                       global::Gtk.Box.BoxChild w31 = ((global::Gtk.Box.BoxChild)(this.vbox3 
[this.colorbutton]));
+                       w31.Position = 3;
+                       w31.Expand = false;
+                       w31.Fill = false;
+                       // Container child vbox3.Gtk.Box+BoxChild
+                       this.label3 = new global::Gtk.Label ();
+                       this.label3.Name = "label3";
+                       this.label3.Xalign = 0F;
+                       this.label3.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Line size</b>");
+                       this.label3.UseMarkup = true;
+                       this.vbox3.Add (this.label3);
+                       global::Gtk.Box.BoxChild w32 = ((global::Gtk.Box.BoxChild)(this.vbox3 [this.label3]));
+                       w32.Position = 4;
+                       w32.Expand = false;
+                       w32.Fill = false;
+                       // Container child vbox3.Gtk.Box+BoxChild
+                       this.widthcombobox = global::Gtk.ComboBox.NewText ();
+                       this.widthcombobox.AppendText (global::Mono.Unix.Catalog.GetString ("2 px"));
+                       this.widthcombobox.AppendText (global::Mono.Unix.Catalog.GetString ("4 px"));
+                       this.widthcombobox.AppendText (global::Mono.Unix.Catalog.GetString ("6 px"));
+                       this.widthcombobox.AppendText (global::Mono.Unix.Catalog.GetString ("8 px"));
+                       this.widthcombobox.AppendText (global::Mono.Unix.Catalog.GetString ("10 px"));
+                       this.widthcombobox.TooltipMarkup = "Change the line width";
+                       this.widthcombobox.Name = "widthcombobox";
+                       this.widthcombobox.Active = 2;
+                       this.vbox3.Add (this.widthcombobox);
+                       global::Gtk.Box.BoxChild w33 = ((global::Gtk.Box.BoxChild)(this.vbox3 
[this.widthcombobox]));
+                       w33.Position = 5;
+                       w33.Expand = false;
+                       w33.Fill = false;
+                       // Container child vbox3.Gtk.Box+BoxChild
+                       this.label4 = new global::Gtk.Label ();
+                       this.label4.Name = "label4";
+                       this.label4.Xalign = 0F;
+                       this.label4.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Line style</b>");
+                       this.label4.UseMarkup = true;
+                       this.vbox3.Add (this.label4);
+                       global::Gtk.Box.BoxChild w34 = ((global::Gtk.Box.BoxChild)(this.vbox3 [this.label4]));
+                       w34.Position = 6;
+                       w34.Expand = false;
+                       w34.Fill = false;
+                       // Container child vbox3.Gtk.Box+BoxChild
+                       this.stylecombobox = global::Gtk.ComboBox.NewText ();
+                       this.stylecombobox.TooltipMarkup = "Change the line style";
+                       this.stylecombobox.Name = "stylecombobox";
+                       this.vbox3.Add (this.stylecombobox);
+                       global::Gtk.Box.BoxChild w35 = ((global::Gtk.Box.BoxChild)(this.vbox3 
[this.stylecombobox]));
+                       w35.Position = 7;
+                       w35.Expand = false;
+                       w35.Fill = false;
+                       // Container child vbox3.Gtk.Box+BoxChild
+                       this.label5 = new global::Gtk.Label ();
+                       this.label5.Name = "label5";
+                       this.label5.Xalign = 0F;
+                       this.label5.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Line type</b>");
+                       this.label5.UseMarkup = true;
+                       this.vbox3.Add (this.label5);
+                       global::Gtk.Box.BoxChild w36 = ((global::Gtk.Box.BoxChild)(this.vbox3 [this.label5]));
+                       w36.Position = 8;
+                       w36.Expand = false;
+                       w36.Fill = false;
+                       // Container child vbox3.Gtk.Box+BoxChild
+                       this.typecombobox = global::Gtk.ComboBox.NewText ();
+                       this.typecombobox.TooltipMarkup = "Change the line style";
+                       this.typecombobox.Name = "typecombobox";
+                       this.vbox3.Add (this.typecombobox);
+                       global::Gtk.Box.BoxChild w37 = ((global::Gtk.Box.BoxChild)(this.vbox3 
[this.typecombobox]));
+                       w37.Position = 9;
+                       w37.Expand = false;
+                       w37.Fill = false;
+                       // Container child vbox3.Gtk.Box+BoxChild
+                       this.textcolorslabel = new global::Gtk.Label ();
+                       this.textcolorslabel.Name = "textcolorslabel";
+                       this.textcolorslabel.Xalign = 0F;
+                       this.textcolorslabel.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Text 
color</b>");
+                       this.textcolorslabel.UseMarkup = true;
+                       this.vbox3.Add (this.textcolorslabel);
+                       global::Gtk.Box.BoxChild w38 = ((global::Gtk.Box.BoxChild)(this.vbox3 
[this.textcolorslabel]));
+                       w38.Position = 10;
+                       w38.Expand = false;
+                       w38.Fill = false;
+                       // Container child vbox3.Gtk.Box+BoxChild
+                       this.textcolorbutton = new global::Gtk.ColorButton ();
+                       this.textcolorbutton.CanFocus = true;
+                       this.textcolorbutton.Events = ((global::Gdk.EventMask)(784));
+                       this.textcolorbutton.Name = "textcolorbutton";
+                       this.vbox3.Add (this.textcolorbutton);
+                       global::Gtk.Box.BoxChild w39 = ((global::Gtk.Box.BoxChild)(this.vbox3 
[this.textcolorbutton]));
+                       w39.Position = 11;
+                       w39.Expand = false;
+                       w39.Fill = false;
+                       // Container child vbox3.Gtk.Box+BoxChild
+                       this.backgroundcolorslabel = new global::Gtk.Label ();
+                       this.backgroundcolorslabel.Name = "backgroundcolorslabel";
+                       this.backgroundcolorslabel.Xalign = 0F;
+                       this.backgroundcolorslabel.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Text 
background</b>");
+                       this.backgroundcolorslabel.UseMarkup = true;
+                       this.vbox3.Add (this.backgroundcolorslabel);
+                       global::Gtk.Box.BoxChild w40 = ((global::Gtk.Box.BoxChild)(this.vbox3 
[this.backgroundcolorslabel]));
+                       w40.Position = 12;
+                       w40.Expand = false;
+                       w40.Fill = false;
+                       // Container child vbox3.Gtk.Box+BoxChild
+                       this.backgroundcolorbutton = new global::Gtk.ColorButton ();
+                       this.backgroundcolorbutton.CanFocus = true;
+                       this.backgroundcolorbutton.Events = ((global::Gdk.EventMask)(784));
+                       this.backgroundcolorbutton.Name = "backgroundcolorbutton";
+                       this.vbox3.Add (this.backgroundcolorbutton);
+                       global::Gtk.Box.BoxChild w41 = ((global::Gtk.Box.BoxChild)(this.vbox3 
[this.backgroundcolorbutton]));
+                       w41.Position = 13;
+                       w41.Expand = false;
+                       w41.Fill = false;
+                       // Container child vbox3.Gtk.Box+BoxChild
+                       this.clearbutton = new global::Gtk.Button ();
+                       this.clearbutton.TooltipMarkup = "Clear all drawings";
+                       this.clearbutton.CanFocus = true;
+                       this.clearbutton.Name = "clearbutton";
+                       this.clearbutton.UseUnderline = true;
+                       // Container child clearbutton.Gtk.Container+ContainerChild
+                       global::Gtk.Alignment w42 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       // Container child GtkAlignment.Gtk.Container+ContainerChild
+                       global::Gtk.HBox w43 = new global::Gtk.HBox ();
+                       w43.Spacing = 2;
+                       // Container child GtkHBox.Gtk.Container+ContainerChild
+                       global::Gtk.Image w44 = new global::Gtk.Image ();
+                       w44.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-clear", 
global::Gtk.IconSize.LargeToolbar);
+                       w43.Add (w44);
+                       // Container child GtkHBox.Gtk.Container+ContainerChild
+                       global::Gtk.Label w46 = new global::Gtk.Label ();
+                       w43.Add (w46);
+                       w42.Add (w43);
+                       this.clearbutton.Add (w42);
+                       this.vbox3.Add (this.clearbutton);
+                       global::Gtk.Box.BoxChild w50 = ((global::Gtk.Box.BoxChild)(this.vbox3 
[this.clearbutton]));
+                       w50.Position = 14;
+                       w50.Expand = false;
+                       w50.Fill = false;
+                       this.vbox2.Add (this.vbox3);
+                       global::Gtk.Box.BoxChild w51 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.vbox3]));
+                       w51.Position = 0;
+                       w51.Expand = false;
+                       w51.Fill = false;
                        // Container child vbox2.Gtk.Box+BoxChild
                        this.savetoprojectbutton = new global::Gtk.Button ();
                        this.savetoprojectbutton.CanFocus = true;
                        this.savetoprojectbutton.Name = "savetoprojectbutton";
                        this.savetoprojectbutton.UseUnderline = true;
                        // Container child savetoprojectbutton.Gtk.Container+ContainerChild
-                       global::Gtk.Alignment w3 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       global::Gtk.Alignment w52 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
                        // Container child GtkAlignment.Gtk.Container+ContainerChild
-                       global::Gtk.HBox w4 = new global::Gtk.HBox ();
-                       w4.Spacing = 2;
+                       global::Gtk.HBox w53 = new global::Gtk.HBox ();
+                       w53.Spacing = 2;
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Image w5 = new global::Gtk.Image ();
-                       w5.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-save", 
global::Gtk.IconSize.Menu);
-                       w4.Add (w5);
+                       global::Gtk.Image w54 = new global::Gtk.Image ();
+                       w54.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-save", 
global::Gtk.IconSize.Menu);
+                       w53.Add (w54);
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Label w7 = new global::Gtk.Label ();
-                       w7.LabelProp = global::Mono.Unix.Catalog.GetString ("Save to Project");
-                       w7.UseUnderline = true;
-                       w4.Add (w7);
-                       w3.Add (w4);
-                       this.savetoprojectbutton.Add (w3);
+                       global::Gtk.Label w56 = new global::Gtk.Label ();
+                       w56.LabelProp = global::Mono.Unix.Catalog.GetString ("Save to Project");
+                       w56.UseUnderline = true;
+                       w53.Add (w56);
+                       w52.Add (w53);
+                       this.savetoprojectbutton.Add (w52);
                        this.vbox2.Add (this.savetoprojectbutton);
-                       global::Gtk.Box.BoxChild w11 = ((global::Gtk.Box.BoxChild)(this.vbox2 
[this.savetoprojectbutton]));
-                       w11.PackType = ((global::Gtk.PackType)(1));
-                       w11.Position = 1;
-                       w11.Expand = false;
-                       w11.Fill = false;
+                       global::Gtk.Box.BoxChild w60 = ((global::Gtk.Box.BoxChild)(this.vbox2 
[this.savetoprojectbutton]));
+                       w60.PackType = ((global::Gtk.PackType)(1));
+                       w60.Position = 1;
+                       w60.Expand = false;
+                       w60.Fill = false;
                        // Container child vbox2.Gtk.Box+BoxChild
                        this.savebutton = new global::Gtk.Button ();
                        this.savebutton.CanFocus = true;
                        this.savebutton.Name = "savebutton";
                        this.savebutton.UseUnderline = true;
                        // Container child savebutton.Gtk.Container+ContainerChild
-                       global::Gtk.Alignment w12 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       global::Gtk.Alignment w61 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
                        // Container child GtkAlignment.Gtk.Container+ContainerChild
-                       global::Gtk.HBox w13 = new global::Gtk.HBox ();
-                       w13.Spacing = 2;
+                       global::Gtk.HBox w62 = new global::Gtk.HBox ();
+                       w62.Spacing = 2;
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Image w14 = new global::Gtk.Image ();
-                       w14.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-save", 
global::Gtk.IconSize.Menu);
-                       w13.Add (w14);
+                       global::Gtk.Image w63 = new global::Gtk.Image ();
+                       w63.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-save", 
global::Gtk.IconSize.Menu);
+                       w62.Add (w63);
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Label w16 = new global::Gtk.Label ();
-                       w16.LabelProp = global::Mono.Unix.Catalog.GetString ("Save to File");
-                       w16.UseUnderline = true;
-                       w13.Add (w16);
-                       w12.Add (w13);
-                       this.savebutton.Add (w12);
+                       global::Gtk.Label w65 = new global::Gtk.Label ();
+                       w65.LabelProp = global::Mono.Unix.Catalog.GetString ("Save to File");
+                       w65.UseUnderline = true;
+                       w62.Add (w65);
+                       w61.Add (w62);
+                       this.savebutton.Add (w61);
                        this.vbox2.Add (this.savebutton);
-                       global::Gtk.Box.BoxChild w20 = ((global::Gtk.Box.BoxChild)(this.vbox2 
[this.savebutton]));
-                       w20.PackType = ((global::Gtk.PackType)(1));
-                       w20.Position = 2;
-                       w20.Expand = false;
-                       w20.Fill = false;
+                       global::Gtk.Box.BoxChild w69 = ((global::Gtk.Box.BoxChild)(this.vbox2 
[this.savebutton]));
+                       w69.PackType = ((global::Gtk.PackType)(1));
+                       w69.Position = 2;
+                       w69.Expand = false;
+                       w69.Fill = false;
                        this.hbox1.Add (this.vbox2);
-                       global::Gtk.Box.BoxChild w21 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.vbox2]));
-                       w21.Position = 0;
-                       w21.Expand = false;
-                       w21.Fill = false;
+                       global::Gtk.Box.BoxChild w70 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.vbox2]));
+                       w70.Position = 0;
+                       w70.Expand = false;
+                       w70.Fill = false;
                        // Container child hbox1.Gtk.Box+BoxChild
-                       this.drawingwidget1 = new global::LongoMatch.Gui.Component.DrawingWidget ();
-                       this.drawingwidget1.Events = ((global::Gdk.EventMask)(256));
-                       this.drawingwidget1.Name = "drawingwidget1";
-                       this.hbox1.Add (this.drawingwidget1);
-                       global::Gtk.Box.BoxChild w22 = ((global::Gtk.Box.BoxChild)(this.hbox1 
[this.drawingwidget1]));
-                       w22.Position = 1;
+                       this.drawingarea = new global::Gtk.DrawingArea ();
+                       this.drawingarea.Name = "drawingarea";
+                       this.hbox1.Add (this.drawingarea);
+                       global::Gtk.Box.BoxChild w71 = ((global::Gtk.Box.BoxChild)(this.hbox1 
[this.drawingarea]));
+                       w71.Position = 1;
                        w1.Add (this.hbox1);
-                       global::Gtk.Box.BoxChild w23 = ((global::Gtk.Box.BoxChild)(w1 [this.hbox1]));
-                       w23.Position = 0;
+                       global::Gtk.Box.BoxChild w72 = ((global::Gtk.Box.BoxChild)(w1 [this.hbox1]));
+                       w72.Position = 0;
                        // Internal child LongoMatch.Gui.Dialog.DrawingTool.ActionArea
-                       global::Gtk.HButtonBox w24 = this.ActionArea;
-                       w24.Name = "dialog1_ActionArea";
-                       w24.Spacing = 6;
-                       w24.BorderWidth = ((uint)(5));
-                       w24.LayoutStyle = ((global::Gtk.ButtonBoxStyle)(4));
+                       global::Gtk.HButtonBox w73 = this.ActionArea;
+                       w73.Name = "dialog1_ActionArea";
+                       w73.Spacing = 6;
+                       w73.BorderWidth = ((uint)(5));
+                       w73.LayoutStyle = ((global::Gtk.ButtonBoxStyle)(4));
                        // Container child dialog1_ActionArea.Gtk.ButtonBox+ButtonBoxChild
-                       this.button271 = new global::Gtk.Button ();
-                       this.button271.CanFocus = true;
-                       this.button271.Name = "button271";
-                       this.button271.UseUnderline = true;
-                       this.button271.Label = "";
-                       this.AddActionWidget (this.button271, 0);
-                       global::Gtk.ButtonBox.ButtonBoxChild w25 = 
((global::Gtk.ButtonBox.ButtonBoxChild)(w24 [this.button271]));
-                       w25.Expand = false;
-                       w25.Fill = false;
+                       this.closebutton = new global::Gtk.Button ();
+                       this.closebutton.CanFocus = true;
+                       this.closebutton.Name = "closebutton";
+                       this.closebutton.UseUnderline = true;
+                       // Container child closebutton.Gtk.Container+ContainerChild
+                       global::Gtk.Alignment w74 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       // Container child GtkAlignment.Gtk.Container+ContainerChild
+                       global::Gtk.HBox w75 = new global::Gtk.HBox ();
+                       w75.Spacing = 2;
+                       // Container child GtkHBox.Gtk.Container+ContainerChild
+                       global::Gtk.Image w76 = new global::Gtk.Image ();
+                       w76.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-close", 
global::Gtk.IconSize.Menu);
+                       w75.Add (w76);
+                       // Container child GtkHBox.Gtk.Container+ContainerChild
+                       global::Gtk.Label w78 = new global::Gtk.Label ();
+                       w78.LabelProp = global::Mono.Unix.Catalog.GetString ("Close");
+                       w78.UseUnderline = true;
+                       w75.Add (w78);
+                       w74.Add (w75);
+                       this.closebutton.Add (w74);
+                       this.AddActionWidget (this.closebutton, 0);
+                       global::Gtk.ButtonBox.ButtonBoxChild w82 = 
((global::Gtk.ButtonBox.ButtonBoxChild)(w73 [this.closebutton]));
+                       w82.Expand = false;
+                       w82.Fill = false;
                        if ((this.Child != null)) {
                                this.Child.ShowAll ();
                        }
-                       this.DefaultWidth = 600;
-                       this.DefaultHeight = 579;
+                       this.DefaultWidth = 977;
+                       this.DefaultHeight = 863;
                        this.savetoprojectbutton.Hide ();
-                       this.button271.Hide ();
+                       this.closebutton.Hide ();
                        this.Show ();
-                       this.drawingtoolbox1.LineWidthChanged += new 
global::LongoMatch.Handlers.LineWidthChangedHandler (this.OnDrawingtoolbox1LineWidthChanged);
-                       this.drawingtoolbox1.ColorChanged += new 
global::LongoMatch.Handlers.ColorChangedHandler (this.OnDrawingtoolbox1ColorChanged);
-                       this.drawingtoolbox1.VisibilityChanged += new 
global::LongoMatch.Handlers.VisibilityChangedHandler (this.OnDrawingtoolbox1VisibilityChanged);
-                       this.drawingtoolbox1.ClearDrawing += new 
global::LongoMatch.Handlers.ClearDrawingHandler (this.OnDrawingtoolbox1ClearDrawing);
                        this.savebutton.Clicked += new global::System.EventHandler (this.OnSavebuttonClicked);
                        this.savetoprojectbutton.Clicked += new global::System.EventHandler 
(this.OnSavetoprojectbuttonClicked);
                }
diff --git a/LongoMatch.GUI/gtk-gui/gui.stetic b/LongoMatch.GUI/gtk-gui/gui.stetic
index 9eeaa99..6ac0b04 100644
--- a/LongoMatch.GUI/gtk-gui/gui.stetic
+++ b/LongoMatch.GUI/gtk-gui/gui.stetic
@@ -829,7 +829,6 @@ Sort by duration</property>
                                             <property name="MemberName" />
                                             <property name="CanFocus">True</property>
                                             <property name="Label" translatable="yes">Enable</property>
-                                            <property name="Active">True</property>
                                             <property name="DrawIndicator">True</property>
                                             <property name="HasLabel">True</property>
                                             <property name="UseUnderline">True</property>
@@ -962,7 +961,6 @@ Sort by duration</property>
                                         <property name="MemberName" />
                                         <property name="CanFocus">True</property>
                                         <property name="Label" translatable="yes">Enable</property>
-                                        <property name="Active">True</property>
                                         <property name="DrawIndicator">True</property>
                                         <property name="HasLabel">True</property>
                                         <property name="UseUnderline">True</property>
@@ -1685,7 +1683,6 @@ new one.</property>
                     <property name="MemberName" />
                     <property name="CanFocus">True</property>
                     <property name="Label" translatable="yes">Enable title overlay</property>
-                    <property name="Active">True</property>
                     <property name="DrawIndicator">True</property>
                     <property name="HasLabel">True</property>
                     <property name="UseUnderline">True</property>
@@ -2480,366 +2477,6 @@ Hotkeys with a single key are also allowed with Ctrl+key.</property>
       </widget>
     </child>
   </widget>
-  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.DrawingToolBox" design-size="94 430">
-    <property name="MemberName" />
-    <property name="Visible">False</property>
-    <child>
-      <widget class="Gtk.VBox" id="vbox2">
-        <property name="MemberName" />
-        <property name="Spacing">6</property>
-        <child>
-          <widget class="Gtk.Label" id="toolslabel">
-            <property name="MemberName" />
-            <property name="Xalign">0</property>
-            <property name="LabelProp" translatable="yes">&lt;b&gt;Tools&lt;/b&gt;</property>
-            <property name="UseMarkup">True</property>
-          </widget>
-          <packing>
-            <property name="Position">0</property>
-            <property name="AutoSize">True</property>
-            <property name="Expand">False</property>
-            <property name="Fill">False</property>
-          </packing>
-        </child>
-        <child>
-          <widget class="Gtk.Table" id="toolstable">
-            <property name="MemberName" />
-            <property name="NRows">3</property>
-            <property name="NColumns">2</property>
-            <property name="RowSpacing">6</property>
-            <property name="ColumnSpacing">6</property>
-            <child>
-              <widget class="Gtk.RadioButton" id="circlebutton">
-                <property name="MemberName" />
-                <property name="CanFocus">True</property>
-                <property name="Label" translatable="yes" />
-                <property name="Active">True</property>
-                <property name="DrawIndicator">False</property>
-                <property name="HasLabel">False</property>
-                <property name="UseUnderline">True</property>
-                <property name="Group">tools</property>
-                <signal name="Toggled" handler="OnCirclebuttonToggled" />
-                <child>
-                  <widget class="Gtk.Image" id="image79">
-                    <property name="MemberName" />
-                    <property name="Tooltip" translatable="yes">Circle tool</property>
-                    <property name="Pixbuf">resource:stock_draw-circle-unfilled.png</property>
-                  </widget>
-                </child>
-              </widget>
-              <packing>
-                <property name="TopAttach">2</property>
-                <property name="BottomAttach">3</property>
-                <property name="LeftAttach">1</property>
-                <property name="RightAttach">2</property>
-                <property name="AutoSize">True</property>
-                <property name="YOptions">Fill</property>
-                <property name="XExpand">True</property>
-                <property name="XFill">True</property>
-                <property name="XShrink">False</property>
-                <property name="YExpand">False</property>
-                <property name="YFill">True</property>
-                <property name="YShrink">False</property>
-              </packing>
-            </child>
-            <child>
-              <widget class="Gtk.RadioButton" id="crossbutton">
-                <property name="MemberName" />
-                <property name="CanFocus">True</property>
-                <property name="Label" translatable="yes" />
-                <property name="DrawIndicator">False</property>
-                <property name="HasLabel">False</property>
-                <property name="UseUnderline">True</property>
-                <property name="Group">tools</property>
-                <signal name="Toggled" handler="OnCrossbuttonToggled" />
-                <child>
-                  <widget class="Gtk.Image" id="image83">
-                    <property name="MemberName" />
-                    <property name="Tooltip" translatable="yes">Cross tool</property>
-                    <property name="Pixbuf">resource:stock_draw-line-45.png</property>
-                  </widget>
-                </child>
-              </widget>
-              <packing>
-                <property name="TopAttach">1</property>
-                <property name="BottomAttach">2</property>
-                <property name="LeftAttach">1</property>
-                <property name="RightAttach">2</property>
-                <property name="AutoSize">True</property>
-                <property name="YOptions">Fill</property>
-                <property name="XExpand">True</property>
-                <property name="XFill">True</property>
-                <property name="XShrink">False</property>
-                <property name="YExpand">False</property>
-                <property name="YFill">True</property>
-                <property name="YShrink">False</property>
-              </packing>
-            </child>
-            <child>
-              <widget class="Gtk.RadioButton" id="eraserbutton">
-                <property name="MemberName" />
-                <property name="Tooltip" translatable="yes">Rubber tool</property>
-                <property name="CanFocus">True</property>
-                <property name="Label" translatable="yes" />
-                <property name="DrawIndicator">False</property>
-                <property name="HasLabel">False</property>
-                <property name="UseUnderline">True</property>
-                <property name="Group">tools</property>
-                <signal name="Toggled" handler="OnEraserbuttonToggled" />
-                <child>
-                  <widget class="Gtk.Image" id="image81">
-                    <property name="MemberName" />
-                    <property name="Pixbuf">stock:gtk-delete Menu</property>
-                  </widget>
-                </child>
-              </widget>
-              <packing>
-                <property name="LeftAttach">1</property>
-                <property name="RightAttach">2</property>
-                <property name="AutoSize">True</property>
-                <property name="YOptions">Fill</property>
-                <property name="XExpand">True</property>
-                <property name="XFill">True</property>
-                <property name="XShrink">False</property>
-                <property name="YExpand">False</property>
-                <property name="YFill">True</property>
-                <property name="YShrink">False</property>
-              </packing>
-            </child>
-            <child>
-              <widget class="Gtk.RadioButton" id="linebutton">
-                <property name="MemberName" />
-                <property name="CanFocus">True</property>
-                <property name="Label" translatable="yes" />
-                <property name="DrawIndicator">False</property>
-                <property name="HasLabel">False</property>
-                <property name="UseUnderline">True</property>
-                <property name="Group">tools</property>
-                <signal name="Toggled" handler="OnLinebuttonToggled" />
-                <child>
-                  <widget class="Gtk.Image" id="image82">
-                    <property name="MemberName" />
-                    <property name="Tooltip" translatable="yes">Arrow line tool</property>
-                    <property name="Pixbuf">resource:stock_draw-line-ends-with-arrow.png</property>
-                  </widget>
-                </child>
-              </widget>
-              <packing>
-                <property name="TopAttach">1</property>
-                <property name="BottomAttach">2</property>
-                <property name="AutoSize">True</property>
-                <property name="YOptions">Fill</property>
-                <property name="XExpand">True</property>
-                <property name="XFill">True</property>
-                <property name="XShrink">False</property>
-                <property name="YExpand">False</property>
-                <property name="YFill">True</property>
-                <property name="YShrink">False</property>
-              </packing>
-            </child>
-            <child>
-              <widget class="Gtk.RadioButton" id="penbutton">
-                <property name="MemberName" />
-                <property name="Tooltip" translatable="yes">Pencil tool</property>
-                <property name="CanFocus">True</property>
-                <property name="Label" translatable="yes" />
-                <property name="DrawIndicator">False</property>
-                <property name="HasLabel">False</property>
-                <property name="UseUnderline">True</property>
-                <property name="Group">tools</property>
-                <signal name="Toggled" handler="OnPenbuttonToggled" />
-                <child>
-                  <widget class="Gtk.Image" id="image80">
-                    <property name="MemberName" />
-                    <property name="Tooltip" translatable="yes">Pencil</property>
-                    <property name="Pixbuf">resource:stock_draw-freeform-line.png</property>
-                  </widget>
-                </child>
-              </widget>
-              <packing>
-                <property name="AutoSize">True</property>
-                <property name="YOptions">Fill</property>
-                <property name="XExpand">True</property>
-                <property name="XFill">True</property>
-                <property name="XShrink">False</property>
-                <property name="YExpand">False</property>
-                <property name="YFill">True</property>
-                <property name="YShrink">False</property>
-              </packing>
-            </child>
-            <child>
-              <widget class="Gtk.RadioButton" id="rectanglebutton">
-                <property name="MemberName" />
-                <property name="CanFocus">True</property>
-                <property name="Label" translatable="yes" />
-                <property name="DrawIndicator">False</property>
-                <property name="HasLabel">False</property>
-                <property name="UseUnderline">True</property>
-                <property name="Group">tools</property>
-                <signal name="Toggled" handler="OnRectanglebuttonToggled" />
-                <child>
-                  <widget class="Gtk.Image" id="image84">
-                    <property name="MemberName" />
-                    <property name="Tooltip" translatable="yes">Rectangle tool</property>
-                    <property name="Pixbuf">resource:stock_draw-rectangle-unfilled.png</property>
-                  </widget>
-                </child>
-              </widget>
-              <packing>
-                <property name="TopAttach">2</property>
-                <property name="BottomAttach">3</property>
-                <property name="AutoSize">True</property>
-                <property name="YOptions">Fill</property>
-                <property name="XExpand">True</property>
-                <property name="XFill">True</property>
-                <property name="XShrink">False</property>
-                <property name="YExpand">False</property>
-                <property name="YFill">True</property>
-                <property name="YShrink">False</property>
-              </packing>
-            </child>
-          </widget>
-          <packing>
-            <property name="Position">1</property>
-            <property name="AutoSize">False</property>
-            <property name="Expand">False</property>
-          </packing>
-        </child>
-        <child>
-          <widget class="Gtk.Label" id="colorslabel">
-            <property name="MemberName" />
-            <property name="Xalign">0</property>
-            <property name="LabelProp" translatable="yes">&lt;b&gt;Color&lt;/b&gt;</property>
-            <property name="UseMarkup">True</property>
-          </widget>
-          <packing>
-            <property name="Position">2</property>
-            <property name="AutoSize">True</property>
-            <property name="Expand">False</property>
-            <property name="Fill">False</property>
-          </packing>
-        </child>
-        <child>
-          <widget class="Gtk.ColorButton" id="colorbutton">
-            <property name="MemberName" />
-            <property name="CanFocus">True</property>
-            <property name="Events">ButtonMotionMask, ButtonPressMask, ButtonReleaseMask</property>
-            <property name="Alpha">-1</property>
-            <signal name="ColorSet" handler="OnColorbuttonColorSet" />
-          </widget>
-          <packing>
-            <property name="Position">3</property>
-            <property name="AutoSize">True</property>
-            <property name="Expand">False</property>
-            <property name="Fill">False</property>
-          </packing>
-        </child>
-        <child>
-          <widget class="Gtk.Label" id="label3">
-            <property name="MemberName" />
-            <property name="Xalign">0</property>
-            <property name="LabelProp" translatable="yes">&lt;b&gt;Width&lt;/b&gt;</property>
-            <property name="UseMarkup">True</property>
-          </widget>
-          <packing>
-            <property name="Position">4</property>
-            <property name="AutoSize">True</property>
-            <property name="Expand">False</property>
-            <property name="Fill">False</property>
-          </packing>
-        </child>
-        <child>
-          <widget class="Gtk.ComboBox" id="combobox1">
-            <property name="MemberName" />
-            <property name="Tooltip">Change the line's width</property>
-            <property name="IsTextCombo">True</property>
-            <property name="Items">2 px
-4 px
-6 px
-8 px
-10 px</property>
-            <property name="Active">2</property>
-            <signal name="Changed" handler="OnCombobox1Changed" />
-          </widget>
-          <packing>
-            <property name="Position">5</property>
-            <property name="AutoSize">True</property>
-            <property name="Expand">False</property>
-            <property name="Fill">False</property>
-          </packing>
-        </child>
-        <child>
-          <widget class="Gtk.Label" id="transparencylabel">
-            <property name="MemberName" />
-            <property name="Xalign">0</property>
-            <property name="LabelProp" translatable="yes">&lt;b&gt;Transparency&lt;/b&gt;</property>
-            <property name="UseMarkup">True</property>
-          </widget>
-          <packing>
-            <property name="Position">6</property>
-            <property name="AutoSize">True</property>
-            <property name="Expand">False</property>
-            <property name="Fill">False</property>
-          </packing>
-        </child>
-        <child>
-          <widget class="Gtk.SpinButton" id="spinbutton1">
-            <property name="MemberName" />
-            <property name="Tooltip" translatable="yes">Change the drawings' transparency</property>
-            <property name="CanFocus">True</property>
-            <property name="Upper">100</property>
-            <property name="PageIncrement">10</property>
-            <property name="StepIncrement">1</property>
-            <property name="ClimbRate">1</property>
-            <property name="Numeric">True</property>
-            <property name="Value">80</property>
-            <signal name="Changed" handler="OnSpinbutton1Changed" />
-          </widget>
-          <packing>
-            <property name="Position">7</property>
-            <property name="AutoSize">True</property>
-            <property name="Expand">False</property>
-            <property name="Fill">False</property>
-          </packing>
-        </child>
-        <child>
-          <widget class="Gtk.Button" id="clearbutton">
-            <property name="MemberName" />
-            <property name="Tooltip" translatable="yes">Clear all drawings</property>
-            <property name="CanFocus">True</property>
-            <property name="Type">TextAndIcon</property>
-            <property name="Icon">stock:gtk-clear LargeToolbar</property>
-            <property name="Label" translatable="yes" />
-            <property name="UseUnderline">True</property>
-            <signal name="Clicked" handler="OnClearbuttonClicked" />
-          </widget>
-          <packing>
-            <property name="Position">8</property>
-            <property name="AutoSize">False</property>
-            <property name="Expand">False</property>
-            <property name="Fill">False</property>
-          </packing>
-        </child>
-        <child>
-          <widget class="Gtk.Label" id="label1">
-            <property name="MemberName" />
-            <property name="LabelProp" translatable="yes">Draw-&gt;&lt;b&gt; D&lt;/b&gt;
-Clear-&gt;&lt;b&gt; C&lt;/b&gt;
-Hide-&gt;&lt;b&gt; S&lt;/b&gt;
-Show-&gt;&lt;b&gt; S&lt;/b&gt;
-</property>
-            <property name="UseMarkup">True</property>
-          </widget>
-          <packing>
-            <property name="Position">9</property>
-            <property name="AutoSize">True</property>
-            <property name="Expand">False</property>
-            <property name="Fill">False</property>
-          </packing>
-        </child>
-      </widget>
-    </child>
-  </widget>
   <widget class="Gtk.Dialog" id="LongoMatch.Gui.Dialog.EditCategoryDialog" design-size="522 538">
     <property name="MemberName" />
     <property name="Title" translatable="yes">Category Details</property>
@@ -2890,36 +2527,7 @@ Show-&gt;&lt;b&gt; S&lt;/b&gt;
       </widget>
     </child>
   </widget>
-  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.DrawingWidget" design-size="300 300">
-    <property name="MemberName" />
-    <property name="Visible">False</property>
-    <child>
-      <widget class="Gtk.ScrolledWindow" id="GtkScrolledWindow">
-        <property name="MemberName" />
-        <property name="ShadowType">In</property>
-        <child>
-          <widget class="Gtk.Viewport" id="GtkViewport">
-            <property name="MemberName" />
-            <property name="ShadowType">None</property>
-            <child>
-              <widget class="Gtk.DrawingArea" id="drawingarea">
-                <property name="MemberName" />
-                <property name="Events">ButtonMotionMask, ButtonPressMask, ButtonReleaseMask</property>
-                <property name="ShowScrollbars">True</property>
-                <signal name="ExposeEvent" handler="OnDrawingareaExposeEvent" />
-                <signal name="ButtonPressEvent" handler="OnDrawingareaButtonPressEvent" />
-                <signal name="ButtonReleaseEvent" handler="OnDrawingareaButtonReleaseEvent" />
-                <signal name="MotionNotifyEvent" handler="OnDrawingareaMotionNotifyEvent" />
-                <signal name="SizeAllocated" handler="OnDrawingareaSizeAllocated" />
-                <signal name="ConfigureEvent" handler="OnDrawingareaConfigureEvent" />
-              </widget>
-            </child>
-          </widget>
-        </child>
-      </widget>
-    </child>
-  </widget>
-  <widget class="Gtk.Dialog" id="LongoMatch.Gui.Dialog.DrawingTool" design-size="600 579">
+  <widget class="Gtk.Dialog" id="LongoMatch.Gui.Dialog.DrawingTool" design-size="977 863">
     <property name="MemberName" />
     <property name="Title" translatable="yes">Drawing Tool</property>
     <property name="Icon">resource:logo.svg</property>
@@ -2943,13 +2551,642 @@ Show-&gt;&lt;b&gt; S&lt;/b&gt;
                 <property name="MemberName" />
                 <property name="Spacing">6</property>
                 <child>
-                  <widget class="LongoMatch.Gui.Component.DrawingToolBox" id="drawingtoolbox1">
+                  <widget class="Gtk.VBox" id="vbox3">
                     <property name="MemberName" />
-                    <property name="Events">ButtonPressMask</property>
-                    <signal name="LineWidthChanged" handler="OnDrawingtoolbox1LineWidthChanged" />
-                    <signal name="ColorChanged" handler="OnDrawingtoolbox1ColorChanged" />
-                    <signal name="VisibilityChanged" handler="OnDrawingtoolbox1VisibilityChanged" />
-                    <signal name="ClearDrawing" handler="OnDrawingtoolbox1ClearDrawing" />
+                    <property name="Spacing">6</property>
+                    <child>
+                      <widget class="Gtk.Label" id="toolslabel">
+                        <property name="MemberName" />
+                        <property name="Xalign">0</property>
+                        <property name="LabelProp" translatable="yes">&lt;b&gt;Tools&lt;/b&gt;</property>
+                        <property name="UseMarkup">True</property>
+                      </widget>
+                      <packing>
+                        <property name="Position">0</property>
+                        <property name="AutoSize">True</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Table" id="toolstable">
+                        <property name="MemberName" />
+                        <property name="NRows">7</property>
+                        <property name="NColumns">2</property>
+                        <property name="Homogeneous">True</property>
+                        <property name="RowSpacing">6</property>
+                        <property name="ColumnSpacing">6</property>
+                        <child>
+                          <placeholder />
+                        </child>
+                        <child>
+                          <widget class="Gtk.RadioButton" id="anglebutton">
+                            <property name="MemberName" />
+                            <property name="Tooltip" translatable="yes">Angle tool</property>
+                            <property name="CanFocus">True</property>
+                            <property name="Label" translatable="yes" />
+                            <property name="Active">True</property>
+                            <property name="DrawIndicator">False</property>
+                            <property name="HasLabel">False</property>
+                            <property name="UseUnderline">True</property>
+                            <property name="Group">tools</property>
+                            <child>
+                              <widget class="Gtk.Image" id="image90">
+                                <property name="MemberName" />
+                                <property name="Tooltip" translatable="yes" />
+                                <property name="Pixbuf">stock:gtk-go-down Menu</property>
+                              </widget>
+                            </child>
+                          </widget>
+                          <packing>
+                            <property name="TopAttach">6</property>
+                            <property name="BottomAttach">7</property>
+                            <property name="AutoSize">True</property>
+                            <property name="YOptions">Fill</property>
+                            <property name="XExpand">True</property>
+                            <property name="XFill">True</property>
+                            <property name="XShrink">False</property>
+                            <property name="YExpand">False</property>
+                            <property name="YFill">True</property>
+                            <property name="YShrink">False</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="Gtk.RadioButton" id="crossbutton">
+                            <property name="MemberName" />
+                            <property name="Tooltip" translatable="yes">Cross tool</property>
+                            <property name="CanFocus">True</property>
+                            <property name="Label" translatable="yes" />
+                            <property name="DrawIndicator">False</property>
+                            <property name="HasLabel">False</property>
+                            <property name="UseUnderline">True</property>
+                            <property name="Group">tools</property>
+                            <child>
+                              <widget class="Gtk.Image" id="image83">
+                                <property name="MemberName" />
+                                <property name="Tooltip" translatable="yes" />
+                                <property name="Pixbuf">resource:draw-cross.png</property>
+                              </widget>
+                            </child>
+                          </widget>
+                          <packing>
+                            <property name="TopAttach">2</property>
+                            <property name="BottomAttach">3</property>
+                            <property name="LeftAttach">1</property>
+                            <property name="RightAttach">2</property>
+                            <property name="AutoSize">True</property>
+                            <property name="YOptions">Fill</property>
+                            <property name="XExpand">True</property>
+                            <property name="XFill">True</property>
+                            <property name="XShrink">False</property>
+                            <property name="YExpand">False</property>
+                            <property name="YFill">True</property>
+                            <property name="YShrink">False</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="Gtk.RadioButton" id="ellipsebutton">
+                            <property name="MemberName" />
+                            <property name="Tooltip" translatable="yes">Ellipse tool</property>
+                            <property name="CanFocus">True</property>
+                            <property name="Label" translatable="yes" />
+                            <property name="DrawIndicator">False</property>
+                            <property name="HasLabel">False</property>
+                            <property name="UseUnderline">True</property>
+                            <property name="Group">tools</property>
+                            <child>
+                              <widget class="Gtk.Image" id="image79">
+                                <property name="MemberName" />
+                                <property name="Tooltip" translatable="yes" />
+                                <property name="Pixbuf">resource:draw-circle-unfilled.png</property>
+                              </widget>
+                            </child>
+                          </widget>
+                          <packing>
+                            <property name="TopAttach">3</property>
+                            <property name="BottomAttach">4</property>
+                            <property name="LeftAttach">1</property>
+                            <property name="RightAttach">2</property>
+                            <property name="AutoSize">True</property>
+                            <property name="YOptions">Fill</property>
+                            <property name="XExpand">True</property>
+                            <property name="XFill">True</property>
+                            <property name="XShrink">False</property>
+                            <property name="YExpand">False</property>
+                            <property name="YFill">True</property>
+                            <property name="YShrink">False</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="Gtk.RadioButton" id="ellipsefilledbutton">
+                            <property name="MemberName" />
+                            <property name="Tooltip" translatable="yes">Filled ellipse</property>
+                            <property name="CanFocus">True</property>
+                            <property name="Label" translatable="yes" />
+                            <property name="DrawIndicator">False</property>
+                            <property name="HasLabel">False</property>
+                            <property name="UseUnderline">True</property>
+                            <property name="Group">tools</property>
+                            <child>
+                              <widget class="Gtk.Image" id="image86">
+                                <property name="MemberName" />
+                                <property name="Tooltip" translatable="yes" />
+                                <property name="Pixbuf">resource:draw-ellipse.png</property>
+                              </widget>
+                            </child>
+                          </widget>
+                          <packing>
+                            <property name="TopAttach">4</property>
+                            <property name="BottomAttach">5</property>
+                            <property name="LeftAttach">1</property>
+                            <property name="RightAttach">2</property>
+                            <property name="AutoSize">True</property>
+                            <property name="YOptions">Fill</property>
+                            <property name="XExpand">True</property>
+                            <property name="XFill">True</property>
+                            <property name="XShrink">False</property>
+                            <property name="YExpand">False</property>
+                            <property name="YFill">True</property>
+                            <property name="YShrink">False</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="Gtk.RadioButton" id="eraserbutton">
+                            <property name="MemberName" />
+                            <property name="Tooltip" translatable="yes">Rubber tool</property>
+                            <property name="CanFocus">True</property>
+                            <property name="Label" translatable="yes" />
+                            <property name="DrawIndicator">False</property>
+                            <property name="HasLabel">False</property>
+                            <property name="UseUnderline">True</property>
+                            <property name="Group">tools</property>
+                            <child>
+                              <widget class="Gtk.Image" id="image81">
+                                <property name="MemberName" />
+                                <property name="Pixbuf">resource:draw-eraser.png</property>
+                              </widget>
+                            </child>
+                          </widget>
+                          <packing>
+                            <property name="LeftAttach">1</property>
+                            <property name="RightAttach">2</property>
+                            <property name="AutoSize">True</property>
+                            <property name="YOptions">Fill</property>
+                            <property name="XExpand">True</property>
+                            <property name="XFill">True</property>
+                            <property name="XShrink">False</property>
+                            <property name="YExpand">False</property>
+                            <property name="YFill">True</property>
+                            <property name="YShrink">False</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="Gtk.RadioButton" id="linebutton">
+                            <property name="MemberName" />
+                            <property name="Tooltip" translatable="yes">Line tool</property>
+                            <property name="CanFocus">True</property>
+                            <property name="Label" translatable="yes" />
+                            <property name="DrawIndicator">False</property>
+                            <property name="HasLabel">False</property>
+                            <property name="UseUnderline">True</property>
+                            <property name="Group">tools</property>
+                            <child>
+                              <widget class="Gtk.Image" id="image82">
+                                <property name="MemberName" />
+                                <property name="Tooltip" translatable="yes" />
+                                <property name="Pixbuf">resource:draw-arrow.png</property>
+                              </widget>
+                            </child>
+                          </widget>
+                          <packing>
+                            <property name="TopAttach">2</property>
+                            <property name="BottomAttach">3</property>
+                            <property name="AutoSize">True</property>
+                            <property name="YOptions">Fill</property>
+                            <property name="XExpand">True</property>
+                            <property name="XFill">True</property>
+                            <property name="XShrink">False</property>
+                            <property name="YExpand">False</property>
+                            <property name="YFill">True</property>
+                            <property name="YShrink">False</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="Gtk.RadioButton" id="numberbutton">
+                            <property name="MemberName" />
+                            <property name="Tooltip" translatable="yes">Index tool</property>
+                            <property name="CanFocus">True</property>
+                            <property name="Label" translatable="yes" />
+                            <property name="DrawIndicator">False</property>
+                            <property name="HasLabel">False</property>
+                            <property name="UseUnderline">True</property>
+                            <property name="Group">tools</property>
+                            <child>
+                              <widget class="Gtk.Image" id="image88">
+                                <property name="MemberName" />
+                                <property name="Tooltip" translatable="yes" />
+                                <property name="Pixbuf">resource:draw-number.png</property>
+                              </widget>
+                            </child>
+                          </widget>
+                          <packing>
+                            <property name="TopAttach">5</property>
+                            <property name="BottomAttach">6</property>
+                            <property name="LeftAttach">1</property>
+                            <property name="RightAttach">2</property>
+                            <property name="AutoSize">True</property>
+                            <property name="YOptions">Fill</property>
+                            <property name="XExpand">True</property>
+                            <property name="XFill">True</property>
+                            <property name="XShrink">False</property>
+                            <property name="YExpand">False</property>
+                            <property name="YFill">True</property>
+                            <property name="YShrink">False</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="Gtk.RadioButton" id="penbutton">
+                            <property name="MemberName" />
+                            <property name="Tooltip" translatable="yes">Pencil tool</property>
+                            <property name="CanFocus">True</property>
+                            <property name="Label" translatable="yes" />
+                            <property name="DrawIndicator">False</property>
+                            <property name="HasLabel">False</property>
+                            <property name="UseUnderline">True</property>
+                            <property name="Group">tools</property>
+                            <child>
+                              <widget class="Gtk.Image" id="image91">
+                                <property name="MemberName" />
+                                <property name="Tooltip" translatable="yes" />
+                                <property name="Pixbuf">resource:draw-freehand.png</property>
+                              </widget>
+                            </child>
+                          </widget>
+                          <packing>
+                            <property name="TopAttach">1</property>
+                            <property name="BottomAttach">2</property>
+                            <property name="AutoSize">True</property>
+                            <property name="YOptions">Fill</property>
+                            <property name="XExpand">True</property>
+                            <property name="XFill">True</property>
+                            <property name="XShrink">False</property>
+                            <property name="YExpand">False</property>
+                            <property name="YFill">True</property>
+                            <property name="YShrink">False</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="Gtk.RadioButton" id="playerbutton">
+                            <property name="MemberName" />
+                            <property name="Tooltip" translatable="yes">Player tool</property>
+                            <property name="CanFocus">True</property>
+                            <property name="Label" translatable="yes" />
+                            <property name="DrawIndicator">False</property>
+                            <property name="HasLabel">False</property>
+                            <property name="UseUnderline">True</property>
+                            <property name="Group">tools</property>
+                            <child>
+                              <widget class="Gtk.Image" id="image89">
+                                <property name="MemberName" />
+                                <property name="Tooltip" translatable="yes" />
+                                <property name="Pixbuf">stock:stock_person Menu</property>
+                              </widget>
+                            </child>
+                          </widget>
+                          <packing>
+                            <property name="TopAttach">5</property>
+                            <property name="BottomAttach">6</property>
+                            <property name="AutoSize">True</property>
+                            <property name="YOptions">Fill</property>
+                            <property name="XExpand">True</property>
+                            <property name="XFill">True</property>
+                            <property name="XShrink">False</property>
+                            <property name="YExpand">False</property>
+                            <property name="YFill">True</property>
+                            <property name="YShrink">False</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="Gtk.RadioButton" id="rectanglebutton">
+                            <property name="MemberName" />
+                            <property name="Tooltip" translatable="yes">Rectangle tool</property>
+                            <property name="CanFocus">True</property>
+                            <property name="Label" translatable="yes" />
+                            <property name="DrawIndicator">False</property>
+                            <property name="HasLabel">False</property>
+                            <property name="UseUnderline">True</property>
+                            <property name="Group">tools</property>
+                            <child>
+                              <widget class="Gtk.Image" id="image84">
+                                <property name="MemberName" />
+                                <property name="Tooltip" translatable="yes" />
+                                <property name="Pixbuf">resource:draw-rectangle-unfilled.png</property>
+                              </widget>
+                            </child>
+                          </widget>
+                          <packing>
+                            <property name="TopAttach">3</property>
+                            <property name="BottomAttach">4</property>
+                            <property name="AutoSize">True</property>
+                            <property name="YOptions">Fill</property>
+                            <property name="XExpand">True</property>
+                            <property name="XFill">True</property>
+                            <property name="XShrink">False</property>
+                            <property name="YExpand">False</property>
+                            <property name="YFill">True</property>
+                            <property name="YShrink">False</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="Gtk.RadioButton" id="rectanglefilledbutton">
+                            <property name="MemberName" />
+                            <property name="Tooltip" translatable="yes">Filled rectangle tool</property>
+                            <property name="CanFocus">True</property>
+                            <property name="Label" translatable="yes" />
+                            <property name="DrawIndicator">False</property>
+                            <property name="HasLabel">False</property>
+                            <property name="UseUnderline">True</property>
+                            <property name="Group">tools</property>
+                            <child>
+                              <widget class="Gtk.Image" id="image85">
+                                <property name="MemberName" />
+                                <property name="Tooltip" translatable="yes" />
+                                <property name="Pixbuf">resource:draw-rectangle.png</property>
+                              </widget>
+                            </child>
+                          </widget>
+                          <packing>
+                            <property name="TopAttach">4</property>
+                            <property name="BottomAttach">5</property>
+                            <property name="AutoSize">True</property>
+                            <property name="YOptions">Fill</property>
+                            <property name="XExpand">True</property>
+                            <property name="XFill">True</property>
+                            <property name="XShrink">False</property>
+                            <property name="YExpand">False</property>
+                            <property name="YFill">True</property>
+                            <property name="YShrink">False</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="Gtk.RadioButton" id="selectbutton">
+                            <property name="MemberName" />
+                            <property name="Tooltip" translatable="yes">Selection tool</property>
+                            <property name="CanFocus">True</property>
+                            <property name="Label" translatable="yes" />
+                            <property name="DrawIndicator">False</property>
+                            <property name="HasLabel">False</property>
+                            <property name="UseUnderline">True</property>
+                            <property name="Group">tools</property>
+                            <child>
+                              <widget class="Gtk.Image" id="image80">
+                                <property name="MemberName" />
+                                <property name="Tooltip" translatable="yes" />
+                                <property name="Pixbuf">resource:draw-pointer.png</property>
+                              </widget>
+                            </child>
+                          </widget>
+                          <packing>
+                            <property name="AutoSize">True</property>
+                            <property name="YOptions">Fill</property>
+                            <property name="XExpand">True</property>
+                            <property name="XFill">True</property>
+                            <property name="XShrink">False</property>
+                            <property name="YExpand">False</property>
+                            <property name="YFill">True</property>
+                            <property name="YShrink">False</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="Gtk.RadioButton" id="textbutton">
+                            <property name="MemberName" />
+                            <property name="Tooltip" translatable="yes">Text tool</property>
+                            <property name="CanFocus">True</property>
+                            <property name="Label" translatable="yes" />
+                            <property name="DrawIndicator">False</property>
+                            <property name="HasLabel">False</property>
+                            <property name="UseUnderline">True</property>
+                            <property name="Group">tools</property>
+                            <child>
+                              <widget class="Gtk.Image" id="image87">
+                                <property name="MemberName" />
+                                <property name="Tooltip" translatable="yes" />
+                                <property name="Pixbuf">resource:draw-text.png</property>
+                              </widget>
+                            </child>
+                          </widget>
+                          <packing>
+                            <property name="TopAttach">1</property>
+                            <property name="BottomAttach">2</property>
+                            <property name="LeftAttach">1</property>
+                            <property name="RightAttach">2</property>
+                            <property name="AutoSize">True</property>
+                            <property name="YOptions">Fill</property>
+                            <property name="XExpand">True</property>
+                            <property name="XFill">True</property>
+                            <property name="XShrink">False</property>
+                            <property name="YExpand">False</property>
+                            <property name="YFill">True</property>
+                            <property name="YShrink">False</property>
+                          </packing>
+                        </child>
+                      </widget>
+                      <packing>
+                        <property name="Position">1</property>
+                        <property name="AutoSize">False</property>
+                        <property name="Expand">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Label" id="colorslabel">
+                        <property name="MemberName" />
+                        <property name="Xalign">0</property>
+                        <property name="LabelProp" translatable="yes">&lt;b&gt;Color&lt;/b&gt;</property>
+                        <property name="UseMarkup">True</property>
+                      </widget>
+                      <packing>
+                        <property name="Position">2</property>
+                        <property name="AutoSize">True</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.ColorButton" id="colorbutton">
+                        <property name="MemberName" />
+                        <property name="CanFocus">True</property>
+                        <property name="Events">ButtonMotionMask, ButtonPressMask, 
ButtonReleaseMask</property>
+                        <property name="Alpha">-1</property>
+                      </widget>
+                      <packing>
+                        <property name="Position">3</property>
+                        <property name="AutoSize">True</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Label" id="label3">
+                        <property name="MemberName" />
+                        <property name="Xalign">0</property>
+                        <property name="LabelProp" translatable="yes">&lt;b&gt;Line size&lt;/b&gt;</property>
+                        <property name="UseMarkup">True</property>
+                      </widget>
+                      <packing>
+                        <property name="Position">4</property>
+                        <property name="AutoSize">True</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.ComboBox" id="widthcombobox">
+                        <property name="MemberName" />
+                        <property name="Tooltip">Change the line width</property>
+                        <property name="IsTextCombo">True</property>
+                        <property name="Items">2 px
+4 px
+6 px
+8 px
+10 px</property>
+                        <property name="Active">2</property>
+                      </widget>
+                      <packing>
+                        <property name="Position">5</property>
+                        <property name="AutoSize">True</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Label" id="label4">
+                        <property name="MemberName" />
+                        <property name="Xalign">0</property>
+                        <property name="LabelProp" translatable="yes">&lt;b&gt;Line 
style&lt;/b&gt;</property>
+                        <property name="UseMarkup">True</property>
+                      </widget>
+                      <packing>
+                        <property name="Position">6</property>
+                        <property name="AutoSize">True</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.ComboBox" id="stylecombobox">
+                        <property name="MemberName" />
+                        <property name="Tooltip">Change the line style</property>
+                        <property name="IsTextCombo">True</property>
+                        <property name="Items" />
+                      </widget>
+                      <packing>
+                        <property name="Position">7</property>
+                        <property name="AutoSize">True</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Label" id="label5">
+                        <property name="MemberName" />
+                        <property name="Xalign">0</property>
+                        <property name="LabelProp" translatable="yes">&lt;b&gt;Line type&lt;/b&gt;</property>
+                        <property name="UseMarkup">True</property>
+                      </widget>
+                      <packing>
+                        <property name="Position">8</property>
+                        <property name="AutoSize">True</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.ComboBox" id="typecombobox">
+                        <property name="MemberName" />
+                        <property name="Tooltip">Change the line style</property>
+                        <property name="IsTextCombo">True</property>
+                        <property name="Items" />
+                      </widget>
+                      <packing>
+                        <property name="Position">9</property>
+                        <property name="AutoSize">True</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Label" id="textcolorslabel">
+                        <property name="MemberName" />
+                        <property name="Xalign">0</property>
+                        <property name="LabelProp" translatable="yes">&lt;b&gt;Text 
color&lt;/b&gt;</property>
+                        <property name="UseMarkup">True</property>
+                      </widget>
+                      <packing>
+                        <property name="Position">10</property>
+                        <property name="AutoSize">True</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.ColorButton" id="textcolorbutton">
+                        <property name="MemberName" />
+                        <property name="CanFocus">True</property>
+                        <property name="Events">ButtonMotionMask, ButtonPressMask, 
ButtonReleaseMask</property>
+                        <property name="Alpha">-1</property>
+                      </widget>
+                      <packing>
+                        <property name="Position">11</property>
+                        <property name="AutoSize">True</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Label" id="backgroundcolorslabel">
+                        <property name="MemberName" />
+                        <property name="Xalign">0</property>
+                        <property name="LabelProp" translatable="yes">&lt;b&gt;Text 
background&lt;/b&gt;</property>
+                        <property name="UseMarkup">True</property>
+                      </widget>
+                      <packing>
+                        <property name="Position">12</property>
+                        <property name="AutoSize">True</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.ColorButton" id="backgroundcolorbutton">
+                        <property name="MemberName" />
+                        <property name="CanFocus">True</property>
+                        <property name="Events">ButtonMotionMask, ButtonPressMask, 
ButtonReleaseMask</property>
+                        <property name="Alpha">-1</property>
+                      </widget>
+                      <packing>
+                        <property name="Position">13</property>
+                        <property name="AutoSize">True</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Button" id="clearbutton">
+                        <property name="MemberName" />
+                        <property name="Tooltip" translatable="yes">Clear all drawings</property>
+                        <property name="CanFocus">True</property>
+                        <property name="Type">TextAndIcon</property>
+                        <property name="Icon">stock:gtk-clear LargeToolbar</property>
+                        <property name="Label" translatable="yes" />
+                        <property name="UseUnderline">True</property>
+                      </widget>
+                      <packing>
+                        <property name="Position">14</property>
+                        <property name="AutoSize">False</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
                   </widget>
                   <packing>
                     <property name="Position">0</property>
@@ -3004,13 +3241,12 @@ Show-&gt;&lt;b&gt; S&lt;/b&gt;
               </packing>
             </child>
             <child>
-              <widget class="LongoMatch.Gui.Component.DrawingWidget" id="drawingwidget1">
+              <widget class="Gtk.DrawingArea" id="drawingarea">
                 <property name="MemberName" />
-                <property name="Events">ButtonPressMask</property>
               </widget>
               <packing>
                 <property name="Position">1</property>
-                <property name="AutoSize">False</property>
+                <property name="AutoSize">True</property>
               </packing>
             </child>
           </widget>
@@ -3029,12 +3265,13 @@ Show-&gt;&lt;b&gt; S&lt;/b&gt;
         <property name="Size">1</property>
         <property name="LayoutStyle">End</property>
         <child>
-          <widget class="Gtk.Button" id="button271">
+          <widget class="Gtk.Button" id="closebutton">
             <property name="MemberName" />
             <property name="Visible">False</property>
             <property name="CanFocus">True</property>
-            <property name="Type">TextOnly</property>
-            <property name="Label" translatable="yes" />
+            <property name="Type">TextAndIcon</property>
+            <property name="Icon">stock:gtk-close Menu</property>
+            <property name="Label" translatable="yes">Close</property>
             <property name="UseUnderline">True</property>
             <property name="ResponseId">0</property>
           </widget>
@@ -5969,6 +6206,7 @@ You can continue with the current capture, cancel it or save your project.
                             <property name="MemberName" />
                             <property name="CanFocus">True</property>
                             <property name="Label" translatable="yes">New project using a video 
file</property>
+                            <property name="Active">True</property>
                             <property name="DrawIndicator">True</property>
                             <property name="HasLabel">True</property>
                             <property name="UseUnderline">True</property>
@@ -9175,17 +9413,6 @@ Click 2 players to swap them</property>
     </child>
   </widget>
   <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.CodingWidget" design-size="673 300">
-    <action-group name="Timeline">
-      <action id="positionMode">
-        <property name="Type">Radio</property>
-        <property name="Label" translatable="yes" />
-        <property name="StockId">gtk-justify-fill</property>
-        <property name="DrawAsRadio">False</property>
-        <property name="Active">False</property>
-        <property name="Value">0</property>
-        <property name="Group">codingmode</property>
-      </action>
-    </action-group>
     <action-group name="Default">
       <action id="timelineMode">
         <property name="Type">Radio</property>
@@ -9222,6 +9449,17 @@ Click 2 players to swap them</property>
         <property name="Group">codingmode</property>
       </action>
     </action-group>
+    <action-group name="Timeline">
+      <action id="positionMode">
+        <property name="Type">Radio</property>
+        <property name="Label" translatable="yes" />
+        <property name="StockId">gtk-justify-fill</property>
+        <property name="DrawAsRadio">False</property>
+        <property name="Active">False</property>
+        <property name="Value">0</property>
+        <property name="Group">codingmode</property>
+      </action>
+    </action-group>
     <property name="MemberName" />
     <property name="Visible">False</property>
     <child>
diff --git a/LongoMatch.GUI/gtk-gui/objects.xml b/LongoMatch.GUI/gtk-gui/objects.xml
index 083d16c..2759da1 100644
--- a/LongoMatch.GUI/gtk-gui/objects.xml
+++ b/LongoMatch.GUI/gtk-gui/objects.xml
@@ -7,19 +7,6 @@
     <itemgroups />
     <signals />
   </object>
-  <object type="LongoMatch.Gui.Component.DrawingToolBox" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
-    <itemgroups />
-    <signals>
-      <itemgroup label="DrawingToolBox Signals">
-        <signal name="LineWidthChanged" />
-        <signal name="DrawToolChanged" />
-        <signal name="ColorChanged" />
-        <signal name="VisibilityChanged" />
-        <signal name="ClearDrawing" />
-        <signal name="TransparencyChanged" />
-      </itemgroup>
-    </signals>
-  </object>
   <object type="LongoMatch.Gui.Component.NotesWidget" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
     <itemgroups />
     <signals />
@@ -95,14 +82,6 @@
     <itemgroups />
     <signals />
   </object>
-  <object type="LongoMatch.Gui.Component.DrawingWidget" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
-    <itemgroups />
-    <signals />
-  </object>
-  <object type="LongoMatch.Gui.Component.BackgroundWidget" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
-    <itemgroups />
-    <signals />
-  </object>
   <object type="LongoMatch.Gui.SubCategoriesTreeView" palette-category="General" allow-children="false" 
base-type="Gtk.TreeView">
     <itemgroups />
     <signals>
@@ -142,8 +121,7 @@
     <signals />
   </object>
   <object type="LongoMatch.Gui.Component.CoordinatesTagger" palette-category="General" 
allow-children="false" base-type="Gtk.Bin">
-    <itemgroups>
-    </itemgroups>
+    <itemgroups />
     <signals />
   </object>
   <object type="LongoMatch.Gui.Component.GeneralPreferencesPanel" palette-category="General" 
allow-children="false" base-type="Gtk.Bin">
@@ -228,6 +206,10 @@
     <itemgroups />
     <signals />
   </object>
+  <object type="LongoMatch.Gui.Component.BackgroundWidget" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
+    <itemgroups />
+    <signals />
+  </object>
   <object type="LongoMatch.Gui.Panel.OpenProjectPanel" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
     <itemgroups />
     <signals>
@@ -312,14 +294,17 @@
     <itemgroups />
     <signals />
   </object>
+  <object type="LongoMatch.Gui.Component.PlaysPositionViewer" palette-category="General" 
allow-children="false" base-type="Gtk.Bin">
+    <itemgroups />
+    <signals />
+  </object>
   <object type="LongoMatch.Gui.CapturerBin" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
     <itemgroups>
       <itemgroup label="CapturerBin Properties">
         <property name="Capturing" />
       </itemgroup>
     </itemgroups>
-    <signals>
-    </signals>
+    <signals />
   </object>
   <object type="LongoMatch.Gui.PlayerBin" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
     <itemgroups>
@@ -328,7 +313,7 @@
       </itemgroup>
     </itemgroups>
     <signals>
-      <itemgroup label="IPlayerBin Signals">
+      <itemgroup label="PlayerBin Signals">
         <signal name="Tick" />
         <signal name="PlayStateChanged" />
         <signal name="SeekEvent" />
@@ -342,14 +327,10 @@
       </itemgroup>
     </itemgroups>
     <signals>
-      <itemgroup label="ICapturerBin Signals">
+      <itemgroup label="IPlayerBin Signals">
         <signal name="PlayStateChanged" />
         <signal name="SeekEvent" />
       </itemgroup>
     </signals>
   </object>
-  <object type="LongoMatch.Gui.Component.PlaysPositionViewer" palette-category="General" 
allow-children="false" base-type="Gtk.Bin">
-    <itemgroups />
-    <signals />
-  </object>
 </objects>
\ No newline at end of file
diff --git a/LongoMatch.Multimedia/Player/GstPlayer.cs b/LongoMatch.Multimedia/Player/GstPlayer.cs
index 06f3d6a..a845f85 100644
--- a/LongoMatch.Multimedia/Player/GstPlayer.cs
+++ b/LongoMatch.Multimedia/Player/GstPlayer.cs
@@ -461,14 +461,19 @@ namespace LongoMatch.Video.Player {
                }
 
                public Image GetCurrentFrame (int outwidth=-1, int outheight=-1) {
-                       IntPtr raw_ret = lgm_video_player_get_current_frame (Handle);
-                       Gdk.Pixbuf unmanaged = GLib.Object.GetObject(raw_ret) as Gdk.Pixbuf;
+                       Gdk.Pixbuf managed, unmanaged;
+                       IntPtr raw_ret;
+                       int h, w;
+                       double rate;
+                       
+                       raw_ret = lgm_video_player_get_current_frame (Handle);
+                       unmanaged = GLib.Object.GetObject(raw_ret) as Gdk.Pixbuf;
                        if(unmanaged == null)
                                return null;
-                       Gdk.Pixbuf managed;
-                       int h = unmanaged.Height;
-                       int w = unmanaged.Width;
-                       double rate = (double)w/(double)h;
+
+                       h = unmanaged.Height;
+                       w = unmanaged.Width;
+                       rate = (double)w/(double)h;
                        if(outwidth == -1 || outheight == -1) {
                                outwidth = w;
                                outheight = h;
@@ -477,6 +482,7 @@ namespace LongoMatch.Video.Player {
                        } else {
                                outheight = (int)(outwidth/rate);
                        }
+
                        managed = unmanaged.ScaleSimple(outwidth,outheight,Gdk.InterpType.Bilinear);
                        unmanaged.Dispose();
                        lgm_video_player_unref_pixbuf (raw_ret);
diff --git a/LongoMatch.Services/Services/EventsManager.cs b/LongoMatch.Services/Services/EventsManager.cs
index fb141ef..437e6b6 100644
--- a/LongoMatch.Services/Services/EventsManager.cs
+++ b/LongoMatch.Services/Services/EventsManager.cs
@@ -88,7 +88,7 @@ namespace LongoMatch.Services
                        Config.EventsBroker.PlaysDeleted += OnPlaysDeleted;
                        Config.EventsBroker.PlaySelected += OnPlaySelected;
                        Config.EventsBroker.PlayCategoryChanged += OnPlayCategoryChanged;
-                       Config.EventsBroker.DuplicatePlay += OnDuplicatePlay;
+                       Config.EventsBroker.DuplicatePlays += OnDuplicatePlays;
                        Config.EventsBroker.PlayListNodeSelectedEvent += (tn) => {loadedPlay = tn;};
                        Config.EventsBroker.SnapshotSeries += OnSnapshotSeries;
                        
@@ -328,14 +328,16 @@ namespace LongoMatch.Services
                        filter.Update();
                }
 
-               void OnDuplicatePlay (Play play)
+               void OnDuplicatePlays (List<Play> plays)
                {
-                       Play copy = Cloner.Clone (play);
-                       copy.ID = Guid.NewGuid();
-                       /* The category is also serialized and desarialized */
-                       copy.Category = play.Category;
-                       openedProject.AddPlay (copy);
-                       analysisWindow.AddPlay (copy);
+                       foreach (Play play in plays) {
+                               Play copy = Cloner.Clone (play);
+                               copy.ID = Guid.NewGuid();
+                               /* The category is also serialized and desarialized */
+                               copy.Category = play.Category;
+                               openedProject.AddPlay (copy);
+                               analysisWindow.AddPlay (copy);
+                       }
                        filter.Update();
                }
 
@@ -358,11 +360,20 @@ namespace LongoMatch.Services
                        player.Seek (pos, false);
                }
 
-               protected virtual void OnDrawFrame (Time time) {
-                       Image pixbuf = null;
+               protected virtual void OnDrawFrame (Play play, int drawingIndex) {
+                       Image pixbuf;
                        player.Pause();
                        pixbuf = player.CurrentFrame;
-                       guiToolkit.DrawingTool (pixbuf, loadedPlay as Play, time);
+                       if (play == null) {
+                               play = loadedPlay as Play;
+                       }
+                       if (play != null && drawingIndex == -1) {
+                               FrameDrawing drawing = new FrameDrawing ();
+                               drawing.Render = player.CurrentTime;
+                               play.Drawings.Add (drawing);
+                               drawingIndex = play.Drawings.Count - 1;
+                       }
+                       guiToolkit.DrawingTool (pixbuf, play, drawingIndex);
                }
 
                protected virtual void OnPlayCategoryChanged(Play play, Category cat)
diff --git a/LongoMatch.Services/Services/RenderingJobsManager.cs 
b/LongoMatch.Services/Services/RenderingJobsManager.cs
index abf2a78..fb7e02e 100644
--- a/LongoMatch.Services/Services/RenderingJobsManager.cs
+++ b/LongoMatch.Services/Services/RenderingJobsManager.cs
@@ -188,7 +188,7 @@ namespace LongoMatch.Services
                        
                        Log.Debug(String.Format("Adding segment with {0} drawings", segment.Drawings.Count));
                        if (segment.Drawings.Count >= 1) {
-                               Drawing drawing = segment.Drawings[0];
+                               FrameDrawing drawing = segment.Drawings[0];
                                string image_path = CreateStillImage(segment.MediaFile.FilePath, drawing);
                                
                                videoEditor.AddSegment(segment.MediaFile.FilePath,
@@ -218,15 +218,15 @@ namespace LongoMatch.Services
                        return true;
                }
                
-               private string CreateStillImage(string filename, Drawing drawing) {
+               private string CreateStillImage(string filename, FrameDrawing drawing) {
                        Image frame, final_image;
                        string path = System.IO.Path.GetTempFileName().Replace(@"\", @"\\");
                        
                        capturer.Open(filename);
                        capturer.Seek (drawing.Render, true);
                        frame = capturer.GetCurrentFrame();
-                       final_image = Image.Composite(frame, drawing.Pixbuf);
-                       final_image.Save(path);
+                       //final_image = Image.Composite(frame, drawing.Pixbuf);
+                       //final_image.Save(path);
                        return path;
                }
                
diff --git a/Tests/Core/Drawables/TestAngle.cs b/Tests/Core/Drawables/TestAngle.cs
index 84245b3..e75321b 100644
--- a/Tests/Core/Drawables/TestAngle.cs
+++ b/Tests/Core/Drawables/TestAngle.cs
@@ -69,7 +69,7 @@ namespace Tests.Core.Drawables
                        
                        p = new Point (5, 5);
                        s = a.GetSelection (p, 0.5);
-                       Assert.AreEqual (SelectionPosition.None, s.Position);
+                       Assert.IsNull (s);
                }
                
                [Test()]
diff --git a/Tests/Core/Drawables/TestLine.cs b/Tests/Core/Drawables/TestLine.cs
index f649ce5..783bfd5 100644
--- a/Tests/Core/Drawables/TestLine.cs
+++ b/Tests/Core/Drawables/TestLine.cs
@@ -66,7 +66,7 @@ namespace Tests.Core.Drawables
                        /* None */
                        p3 = new Point (10, 5);
                        s = line.GetSelection (p3, 1);
-                       Assert.AreEqual (SelectionPosition.None, s.Position);
+                       Assert.IsNull (s);
                        
                        /* Start */
                        p3 = new Point (0, 5);
@@ -105,7 +105,7 @@ namespace Tests.Core.Drawables
 
                        p3 = new Point (0, 3);
                        s = line.GetSelection (p3, 1);
-                       Assert.AreEqual (SelectionPosition.None, s.Position);
+                       Assert.IsNull (s);
                        
                        p3 = new Point (2.5, 2.5);
                        s = line.GetSelection (p3, 1);
diff --git a/Tests/Core/Drawables/TestMultipoints.cs b/Tests/Core/Drawables/TestMultipoints.cs
index 8423250..042ec59 100644
--- a/Tests/Core/Drawables/TestMultipoints.cs
+++ b/Tests/Core/Drawables/TestMultipoints.cs
@@ -94,9 +94,9 @@ namespace Tests.Core.Drawables
                        Assert.AreEqual (SelectionPosition.All, s.Position);
                        
                        s = m.GetSelection (new Point (0, 5), 1);
-                       Assert.AreEqual (SelectionPosition.None, s.Position);
+                       Assert.IsNull (s);
                        s = m.GetSelection (new Point (5, 12), 1);
-                       Assert.AreEqual (SelectionPosition.None, s.Position);
+                       Assert.IsNull (s);
                }
        }
 }
diff --git a/Tests/Core/Drawables/TestQuadrilateral.cs b/Tests/Core/Drawables/TestQuadrilateral.cs
index 97f35ed..ee48ef5 100644
--- a/Tests/Core/Drawables/TestQuadrilateral.cs
+++ b/Tests/Core/Drawables/TestQuadrilateral.cs
@@ -51,10 +51,10 @@ namespace Tests.Core.Drawables
                        Quadrilateral q;
                        Selection s;
                        
-                       bl = new Point (1, 1);
-                       br = new Point (10, 4);
-                       tl = new Point (3, 20);
-                       tr = new Point (12, 15);
+                       tl = new Point (1, 1);
+                       tr = new Point (10, 4);
+                       bl = new Point (3, 20);
+                       br = new Point (12, 15);
                        q = new Quadrilateral (tl, tr, bl, br);
                        
                        s = q.GetSelection (bl, 1);
@@ -71,13 +71,13 @@ namespace Tests.Core.Drawables
                         *  1,1    12, 1
                         */ 
                        s = q.GetSelection (new Point (0, 1), 0.5);
-                       Assert.AreEqual (SelectionPosition.None, s.Position);
+                       Assert.IsNull (s);
                        s = q.GetSelection (new Point (1, 21), 0.5);
-                       Assert.AreEqual (SelectionPosition.None, s.Position);
+                       Assert.IsNull (s);
                        s = q.GetSelection (new Point (13, 5), 0.5);
-                       Assert.AreEqual (SelectionPosition.None, s.Position);
+                       Assert.IsNull (s);
                        s = q.GetSelection (new Point (4, 0), 0.5);
-                       Assert.AreEqual (SelectionPosition.None, s.Position);
+                       Assert.IsNull (s);
                        
                        s = q.GetSelection (new Point (4, 5), 0);
                        Assert.AreEqual (SelectionPosition.All, s.Position);
diff --git a/Tests/Core/Drawables/TestRectangle.cs b/Tests/Core/Drawables/TestRectangle.cs
index 03d0273..39b5b11 100644
--- a/Tests/Core/Drawables/TestRectangle.cs
+++ b/Tests/Core/Drawables/TestRectangle.cs
@@ -51,15 +51,15 @@ namespace Tests.Core.Drawables
                        Assert.AreEqual (height, r.Height);
                        Assert.AreEqual (width, r.Width);
                        p2 = new Point (2, 10);
-                       Assert.AreEqual (p2, r.BottomLeft);
+                       Assert.AreEqual (p2, r.TopLeft);
                        p2.X += width; 
-                       Assert.AreEqual (p2, r.BottomRight);
-                       p2.Y += height; 
                        Assert.AreEqual (p2, r.TopRight);
+                       p2.Y += height; 
+                       Assert.AreEqual (p2, r.BottomRight);
                        p2.X = 2;
-                       Assert.AreEqual (p2, r.TopLeft);
-                       p2.X = r.BottomLeft.X + width / 2;
-                       p2.Y = r.BottomLeft.Y + height / 2;
+                       Assert.AreEqual (p2, r.BottomLeft);
+                       p2.X = r.TopLeft.X + width / 2;
+                       p2.Y = r.TopLeft.Y + height / 2;
                        Assert.AreEqual (p2, r.Center);
                }
                
@@ -78,13 +78,13 @@ namespace Tests.Core.Drawables
                        Assert.AreEqual (SelectionPosition.Left, s.Position);
                        p2 = new Point (15, 30);
                        s = r.GetSelection (p2, 0);
-                       Assert.AreEqual (SelectionPosition.Top, s.Position);
+                       Assert.AreEqual (SelectionPosition.Bottom, s.Position);
                        p2 = new Point (32, 12);
                        s = r.GetSelection (p2, 0);
                        Assert.AreEqual (SelectionPosition.Right, s.Position);
                        p2 = new Point (30, 10);
                        s = r.GetSelection (p2, 0);
-                       Assert.AreEqual (SelectionPosition.Bottom, s.Position);
+                       Assert.AreEqual (SelectionPosition.Top, s.Position);
                }
                
                [Test()]
@@ -99,19 +99,19 @@ namespace Tests.Core.Drawables
                        r1 = new Rectangle (p1, width, height);
                        
                        p2 = new Point (1, 1);
-                       r1.Move (SelectionPosition.BottomLeft, p2, null);
+                       r1.Move (SelectionPosition.TopLeft, p2, null);
                        CompareRect (r1, p2, 9, 9);
                        
                        p2 = new Point (9, 8);
-                       r1.Move (SelectionPosition.TopRight, p2, null);
+                       r1.Move (SelectionPosition.BottomRight, p2, null);
                        CompareRect (r1, new Point (1, 1), 8, 7);
                        
                        p2 = new Point (11, 2);
-                       r1.Move (SelectionPosition.BottomRight, p2, null);
+                       r1.Move (SelectionPosition.TopRight, p2, null);
                        CompareRect (r1, new Point (1, 2), 10, 6);
                        
                        p2 = new Point (2, 9);
-                       r1.Move (SelectionPosition.TopLeft, p2, null);
+                       r1.Move (SelectionPosition.BottomLeft, p2, null);
                        CompareRect (r1, new Point (2, 2), 9, 7);
                        
                        /* Move borders */
@@ -123,11 +123,11 @@ namespace Tests.Core.Drawables
                        CompareRect (r1, new Point (3, 0), 7, 10);
                        
                        p2 = new Point (5, 11);
-                       r1.Move (SelectionPosition.Top, p2, null);
+                       r1.Move (SelectionPosition.Bottom, p2, null);
                        CompareRect (r1, new Point (3, 0), 7, 11);
                        
                        p2 = new Point (6, 2);
-                       r1.Move (SelectionPosition.Bottom, p2, null);
+                       r1.Move (SelectionPosition.Top, p2, null);
                        CompareRect (r1, new Point (3, 2), 7, 9);
                        
                        p2 = new Point (8, 11);
diff --git a/Tests/Tests.mdp b/Tests/Tests.mdp
index 6ae96b9..7b0d1be 100644
--- a/Tests/Tests.mdp
+++ b/Tests/Tests.mdp
@@ -43,7 +43,6 @@
     <File subtype="Code" buildaction="Compile" name="Core/Drawables/TestAngle.cs" />
     <File subtype="Code" buildaction="Compile" name="Core/Drawables/TestMultipoints.cs" />
     <File subtype="Code" buildaction="Compile" name="Core/Drawables/TestDrawable.cs" />
-    <File subtype="Code" buildaction="Compile" name="Core/Drawables/TestCircle.cs" />
     <File subtype="Code" buildaction="Compile" name="Core/TestColor.cs" />
     <File subtype="Code" buildaction="Compile" name="Core/TestTime.cs" />
     <File subtype="Code" buildaction="Compile" name="Core/TestImage.cs" />
diff --git a/images/cursors/angle b/images/cursors/angle
new file mode 100644
index 0000000..7a7febb
--- /dev/null
+++ b/images/cursors/angle
@@ -0,0 +1,38 @@
+/* XPM */
+static char const *rect[] = {
+"32 32 3 1 4 4",
+"      c None",
+".     c #FFFFFF",
+"+     c #000000",
+"   ...                          ",
+"   .+.                          ",
+"   .+.                          ",
+"....+....                       ",
+".+++ +++.                       ",
+"....+....                       ",
+"   .+.                          ",
+"   .+. .................        ",
+"   ... .+++++++++++++++.        ",
+"       .+.............+.        ",
+"       .+.............+.        ",
+"       .+.............+.        ",
+"       .+.............+.        ",
+"       .+.............+.        ",
+"       .+.............+.        ",
+"       .+.............+.        ",
+"       .+.............+.        ",
+"       .+.............+.        ",
+"       .+++++++++++++++.        ",
+"       .................        ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                "};
diff --git a/images/cursors/arrow b/images/cursors/arrow
new file mode 100644
index 0000000..f4c498b
--- /dev/null
+++ b/images/cursors/arrow
@@ -0,0 +1,38 @@
+/* XPM */
+static char const *arrow[] = {
+"32 32 3 1 4 4",
+"      c None",
+".     c #FFFFFF",
+"+     c #000000",
+"   ...                          ",
+"   .+.                          ",
+"   .+.                          ",
+"....+....                       ",
+".+++ +++.                       ",
+"....+....                       ",
+"   .+.                          ",
+"   .+.                          ",
+"   ...                          ",
+"         .++..                  ",
+"         .+.++..                ",
+"          .+..++..              ",
+"          .+....++..            ",
+"           .+.....++.           ",
+"           .+.......+.          ",
+"            .+......+.          ",
+"            .+.....+.           ",
+"             .+.....+.          ",
+"             .+..+...+.         ",
+"              .++.+...+.        ",
+"               .. .+...+.       ",
+"                   .+...+.      ",
+"                    .+...+.     ",
+"                     .+...+.    ",
+"                      .+...+.   ",
+"                       .+ +.    ",
+"                        .+.     ",
+"                         .      ",
+"                                ",
+"                                ",
+"                                ",
+"                                "};
diff --git a/images/cursors/ellipse b/images/cursors/ellipse
new file mode 100644
index 0000000..7429188
--- /dev/null
+++ b/images/cursors/ellipse
@@ -0,0 +1,38 @@
+/* XPM */
+static char const *ellipse[] = {
+"32 32 3 1 4 4",
+"      c None",
+".     c #FFFFFF",
+"+     c #000000",
+"   ...                          ",
+"   .+.                          ",
+"   .+.                          ",
+"....+....                       ",
+".+++ +++.                       ",
+"....+....                       ",
+"   .+.                          ",
+"   .+.       .......            ",
+"   ...    ....+++++....         ",
+"         ..+++.....+++..        ",
+"        ..+...........+..       ",
+"       ..+.............+..      ",
+"       .+...............+.      ",
+"       .+...............+.      ",
+"       .+...............+.      ",
+"       ..+.............+..      ",
+"        ..+...........+..       ",
+"         ..+++.....+++..        ",
+"          ....+++++....         ",
+"             .......            ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                "};
diff --git a/images/cursors/freehand b/images/cursors/freehand
new file mode 100644
index 0000000..031d5e8
--- /dev/null
+++ b/images/cursors/freehand
@@ -0,0 +1,38 @@
+/* XPM */
+static char const *freehand[] = {
+"32 32 3 1 4 4",
+"      c None",
+".     c #FFFFFF",
+"+     c #000000",
+"   ...                          ",
+"   .+.                          ",
+"   .+.                          ",
+"....+....                       ",
+".+++ +++.                       ",
+"....+....                       ",
+"   .+.                          ",
+"   .+.                          ",
+"   ...                          ",
+"         ..                     ",
+"         .+......               ",
+"          .++++++.              ",
+"          .++..+.+.             ",
+"          .+..++..+.            ",
+"          .+.+..+..+.           ",
+"          .+++...+..+.          ",
+"          .+..+...+..+.         ",
+"           .+..+...+..+.        ",
+"            .+..+...+..+.       ",
+"             .+..+...+..+.      ",
+"              .+..+...+.++.     ",
+"               .+..+...+..+.    ",
+"                .+..+.+...+.    ",
+"                 .+..+...+.     ",
+"                  .++...+.      ",
+"                   .+..+.       ",
+"                    .++.        ",
+"                     ..         ",
+"                                ",
+"                                ",
+"                                ",
+"                                "};
diff --git a/images/cursors/number b/images/cursors/number
new file mode 100644
index 0000000..7d6b664
--- /dev/null
+++ b/images/cursors/number
@@ -0,0 +1,38 @@
+/* XPM */
+static char const *number[] = {
+"32 32 3 1 7 7",
+"      c None",
+".     c #FFFFFF",
+"+     c #000000",
+"       .                        ",
+"      .+.                       ",
+"      .+.                       ",
+"      .+.                       ",
+"      .+.                       ",
+"      .+.                       ",
+" .....   .....                  ",
+".+++++   +++++.                 ",
+" .....   .....                  ",
+"      .+.                       ",
+"      .+.                       ",
+"      .+.                       ",
+"      .+.                       ",
+"      .+.                       ",
+"       .            .......     ",
+"                   .++++++.     ",
+"                  .+++++++.     ",
+"                 ....+++++.     ",
+"         ....        .++++.     ",
+"         .++.        .++++.     ",
+"         .++.        .++++.     ",
+"      ....++....     .++++.     ",
+"      .++++++++.     .++++.     ",
+"      .++++++++.     .++++.     ",
+"      ....++....     .++++.     ",
+"         .++.        .++++.     ",
+"         .++.     ...++++++...  ",
+"         ....     .++++++++++.  ",
+"                  .++++++++++.  ",
+"                  ............  ",
+"                                ",
+"                                "};
diff --git a/images/cursors/rect b/images/cursors/rect
new file mode 100644
index 0000000..7a7febb
--- /dev/null
+++ b/images/cursors/rect
@@ -0,0 +1,38 @@
+/* XPM */
+static char const *rect[] = {
+"32 32 3 1 4 4",
+"      c None",
+".     c #FFFFFF",
+"+     c #000000",
+"   ...                          ",
+"   .+.                          ",
+"   .+.                          ",
+"....+....                       ",
+".+++ +++.                       ",
+"....+....                       ",
+"   .+.                          ",
+"   .+. .................        ",
+"   ... .+++++++++++++++.        ",
+"       .+.............+.        ",
+"       .+.............+.        ",
+"       .+.............+.        ",
+"       .+.............+.        ",
+"       .+.............+.        ",
+"       .+.............+.        ",
+"       .+.............+.        ",
+"       .+.............+.        ",
+"       .+.............+.        ",
+"       .+++++++++++++++.        ",
+"       .................        ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                "};
diff --git a/images/cursors/text b/images/cursors/text
new file mode 100644
index 0000000..6fd139e
--- /dev/null
+++ b/images/cursors/text
@@ -0,0 +1,38 @@
+/* XPM */
+static char const *text[] = {
+"32 32 3 1 7 7",
+"      c None",
+".     c #FFFFFF",
+"+     c #000000",
+"       .                        ",
+"      .+.                       ",
+"      .+.                       ",
+"      .+.                       ",
+"      .+.                       ",
+"      .+.                       ",
+" .....   .....                  ",
+".+++++   +++++.                 ",
+" .....   .....                  ",
+"      .+.                       ",
+"      .+.                       ",
+"      .+.    ....               ",
+"      .+.   .++++.              ",
+"      .+.   .++++.              ",
+"       .   .++++++.             ",
+"           .++++++.             ",
+"           .++++++.             ",
+"          .+++..+++.            ",
+"          .+++..+++.            ",
+"          .++++++++.            ",
+"         .++++++++++.           ",
+"         .+++....+++.           ",
+"          ...    ...            ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                "};
diff --git a/images/tools/dash-line.svg b/images/tools/dash-line.svg
new file mode 100644
index 0000000..3a1af5f
--- /dev/null
+++ b/images/tools/dash-line.svg
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="92"
+   height="24"
+   id="svg3759"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="dash-line.svg">
+  <defs
+     id="defs3761" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.94"
+     inkscape:cx="55.102327"
+     inkscape:cy="-16.802957"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1439"
+     inkscape:window-height="653"
+     inkscape:window-x="-334"
+     inkscape:window-y="156"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata3764">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Capa 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1028.3622)">
+    <path
+       
style="fill:none;stroke:#000000;stroke-width:3.01958704;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:12.07834859,
 12.07834859;stroke-dashoffset:0"
+       d="m 4.3222552,1040.1126 85.2823618,0 0,0 0,0"
+       id="path3767"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/images/tools/draw-arrow.png b/images/tools/draw-arrow.png
new file mode 100644
index 0000000..e200e7e
Binary files /dev/null and b/images/tools/draw-arrow.png differ
diff --git a/images/tools/draw-ellipse.png b/images/tools/draw-ellipse.png
new file mode 100644
index 0000000..afc7f14
Binary files /dev/null and b/images/tools/draw-ellipse.png differ
diff --git a/images/tools/draw-eraser.png b/images/tools/draw-eraser.png
new file mode 100644
index 0000000..f1413a1
Binary files /dev/null and b/images/tools/draw-eraser.png differ
diff --git a/images/tools/draw-freehand.png b/images/tools/draw-freehand.png
new file mode 100644
index 0000000..c373ea8
Binary files /dev/null and b/images/tools/draw-freehand.png differ
diff --git a/images/tools/draw-number.png b/images/tools/draw-number.png
new file mode 100644
index 0000000..467e45f
Binary files /dev/null and b/images/tools/draw-number.png differ
diff --git a/images/tools/draw-pointer.png b/images/tools/draw-pointer.png
new file mode 100644
index 0000000..18b6485
Binary files /dev/null and b/images/tools/draw-pointer.png differ
diff --git a/images/tools/draw-rectangle.png b/images/tools/draw-rectangle.png
new file mode 100644
index 0000000..2aa6af8
Binary files /dev/null and b/images/tools/draw-rectangle.png differ
diff --git a/images/tools/draw-text.png b/images/tools/draw-text.png
new file mode 100644
index 0000000..5b70f6d
Binary files /dev/null and b/images/tools/draw-text.png differ
diff --git a/images/tools/line-arrow.svg b/images/tools/line-arrow.svg
new file mode 100644
index 0000000..42922c6
--- /dev/null
+++ b/images/tools/line-arrow.svg
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="92"
+   height="24"
+   id="svg3759"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="line.svg">
+  <defs
+     id="defs3761">
+    <marker
+       inkscape:stockid="TriangleOutM"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="TriangleOutM"
+       style="overflow:visible">
+      <path
+         id="path3925"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Mend"
+       style="overflow:visible;">
+      <path
+         id="path3807"
+         style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 
6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.6) rotate(180) translate(0,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Sstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Sstart"
+       style="overflow:visible">
+      <path
+         id="path3792"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(0.2) translate(6,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mstart"
+       style="overflow:visible">
+      <path
+         id="path3786"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(0.4) translate(10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lstart"
+       style="overflow:visible">
+      <path
+         id="path3798"
+         style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 
6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) translate(1,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.94"
+     inkscape:cx="-142.2381"
+     inkscape:cy="-16.802957"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1439"
+     inkscape:window-height="653"
+     inkscape:window-x="68"
+     inkscape:window-y="196"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata3764">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Capa 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1028.3622)">
+    <path
+       
style="fill:none;stroke:#000000;stroke-width:2.84642601;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker-start:none;marker-end:url(#TriangleOutM)"
+       d="m 4.2354683,1040.1126 74.5369087,0 0,0 0,0"
+       id="path3767"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/images/tools/line-dot.svg b/images/tools/line-dot.svg
new file mode 100644
index 0000000..031c4d3
--- /dev/null
+++ b/images/tools/line-dot.svg
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="92"
+   height="24"
+   id="svg3759"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="line--double-arrow.svg">
+  <defs
+     id="defs3761">
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="DotM"
+       style="overflow:visible">
+      <path
+         id="path3844"
+         d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 
C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(0.4) translate(7.4, 1)" />
+    </marker>
+    <marker
+       inkscape:stockid="TriangleInM"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="TriangleInM"
+       style="overflow:visible">
+      <path
+         id="path3916"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(-0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="TriangleOutM"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="TriangleOutM"
+       style="overflow:visible">
+      <path
+         id="path3925"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Mend"
+       style="overflow:visible;">
+      <path
+         id="path3807"
+         style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 
6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.6) rotate(180) translate(0,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Sstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Sstart"
+       style="overflow:visible">
+      <path
+         id="path3792"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(0.2) translate(6,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mstart"
+       style="overflow:visible">
+      <path
+         id="path3786"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(0.4) translate(10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lstart"
+       style="overflow:visible">
+      <path
+         id="path3798"
+         style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 
6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) translate(1,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.94"
+     inkscape:cx="-142.2381"
+     inkscape:cy="-16.802957"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1439"
+     inkscape:window-height="653"
+     inkscape:window-x="68"
+     inkscape:window-y="196"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata3764">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Capa 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1028.3622)">
+    <path
+       
style="fill:none;stroke:#000000;stroke-width:2.72143435000000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker-start:none;marker-end:url(#DotM)"
+       d="m 12.114091,1040.1126 67.290301,0 0,0 0,0"
+       id="path3767"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/images/tools/line-double-arrow.svg b/images/tools/line-double-arrow.svg
new file mode 100644
index 0000000..06d72f7
--- /dev/null
+++ b/images/tools/line-double-arrow.svg
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="92"
+   height="24"
+   id="svg3759"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="line-arrow.svg">
+  <defs
+     id="defs3761">
+    <marker
+       inkscape:stockid="TriangleInM"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="TriangleInM"
+       style="overflow:visible">
+      <path
+         id="path3916"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(-0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="TriangleOutM"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="TriangleOutM"
+       style="overflow:visible">
+      <path
+         id="path3925"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Mend"
+       style="overflow:visible;">
+      <path
+         id="path3807"
+         style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 
6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.6) rotate(180) translate(0,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Sstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Sstart"
+       style="overflow:visible">
+      <path
+         id="path3792"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(0.2) translate(6,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mstart"
+       style="overflow:visible">
+      <path
+         id="path3786"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(0.4) translate(10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lstart"
+       style="overflow:visible">
+      <path
+         id="path3798"
+         style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 
6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) translate(1,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.94"
+     inkscape:cx="-142.2381"
+     inkscape:cy="-16.802957"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1439"
+     inkscape:window-height="653"
+     inkscape:window-x="68"
+     inkscape:window-y="196"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata3764">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Capa 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1028.3622)">
+    <path
+       
style="fill:none;stroke:#000000;stroke-width:2.72143435;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker-start:url(#TriangleInM);marker-end:url(#TriangleOutM)"
+       d="m 12.114091,1040.1126 67.290301,0 0,0 0,0"
+       id="path3767"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/images/tools/line-double-dot.svg b/images/tools/line-double-dot.svg
new file mode 100644
index 0000000..a46d74a
--- /dev/null
+++ b/images/tools/line-double-dot.svg
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="92"
+   height="24"
+   id="svg3759"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="line-dot.svg">
+  <defs
+     id="defs3761">
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="DotM"
+       style="overflow:visible">
+      <path
+         id="path3844"
+         d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 
C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(0.4) translate(7.4, 1)" />
+    </marker>
+    <marker
+       inkscape:stockid="TriangleInM"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="TriangleInM"
+       style="overflow:visible">
+      <path
+         id="path3916"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(-0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="TriangleOutM"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="TriangleOutM"
+       style="overflow:visible">
+      <path
+         id="path3925"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Mend"
+       style="overflow:visible;">
+      <path
+         id="path3807"
+         style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 
6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.6) rotate(180) translate(0,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Sstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Sstart"
+       style="overflow:visible">
+      <path
+         id="path3792"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(0.2) translate(6,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mstart"
+       style="overflow:visible">
+      <path
+         id="path3786"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(0.4) translate(10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lstart"
+       style="overflow:visible">
+      <path
+         id="path3798"
+         style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 
6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) translate(1,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.94"
+     inkscape:cx="-142.2381"
+     inkscape:cy="-16.802957"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1439"
+     inkscape:window-height="653"
+     inkscape:window-x="68"
+     inkscape:window-y="196"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata3764">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Capa 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1028.3622)">
+    <path
+       
style="fill:none;stroke:#000000;stroke-width:2.72143435000000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker-start:url(#DotM);marker-end:url(#DotM)"
+       d="m 12.114091,1040.1126 67.290301,0 0,0 0,0"
+       id="path3767"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/images/tools/line.svg b/images/tools/line.svg
new file mode 100644
index 0000000..3ebd793
--- /dev/null
+++ b/images/tools/line.svg
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="92"
+   height="24"
+   id="svg3759"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="dash-line.svg">
+  <defs
+     id="defs3761" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.94"
+     inkscape:cx="-142.2381"
+     inkscape:cy="-16.802957"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1439"
+     inkscape:window-height="653"
+     inkscape:window-x="68"
+     inkscape:window-y="196"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata3764">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Capa 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1028.3622)">
+    <path
+       
style="fill:none;stroke:#000000;stroke-width:3.02;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       d="m 4.3222552,1040.1126 85.2823618,0 0,0 0,0"
+       id="path3767"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]