[longomatch] Add configurable coding panels



commit 46ff0565cbaaac5176bba6eb43134490b6c877aa
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date:   Mon Aug 4 12:42:30 2014 +0200

    Add configurable coding panels

 LongoMatch.Core/Common/Constants.cs                |    3 +-
 LongoMatch.Core/Common/EventsBroker.cs             |   30 +-
 LongoMatch.Core/Common/PlaysFilter.cs              |    2 +-
 LongoMatch.Core/Handlers/Handlers.cs               |   20 +-
 .../Interfaces/Drawing/IDrawingToolkit.cs          |    2 +
 LongoMatch.Core/Interfaces/ITemplates.cs           |    3 +-
 LongoMatch.Core/LongoMatch.Core.mdp                |    4 +-
 LongoMatch.Core/Makefile.am                        |    4 +
 LongoMatch.Core/Store/Category.cs                  |   32 +-
 LongoMatch.Core/Store/PenaltyCard.cs               |   14 +-
 LongoMatch.Core/Store/Project.cs                   |    3 +-
 LongoMatch.Core/Store/Score.cs                     |    9 +-
 .../enums.cs => LongoMatch.Core/Store/TagButton.cs |   24 +-
 LongoMatch.Core/Store/TaggerButton.cs              |  117 ++
 .../Store/Templates/CategoriesTemplate.cs          |  125 +-
 LongoMatch.Core/Store/Timer.cs                     |   30 +-
 LongoMatch.Drawing.Cairo/CairoBackend.cs           |  247 ++-
 LongoMatch.Drawing.Cairo/CairoContext.cs           |   10 +-
 LongoMatch.Drawing.Cairo/Surface.cs                |   21 +-
 LongoMatch.Drawing.Cairo/WidgetWrapper.cs          |   65 +-
 LongoMatch.Drawing/Canvas.cs                       |  109 +-
 LongoMatch.Drawing/CanvasObject/CardObject.cs      |   71 +
 LongoMatch.Drawing/CanvasObject/CategoryLabel.cs   |   21 +-
 LongoMatch.Drawing/CanvasObject/CategoryObject.cs  |  224 ++-
 LongoMatch.Drawing/CanvasObject/CounterObject.cs   |    9 +-
 LongoMatch.Drawing/CanvasObject/CrossObject.cs     |    7 +-
 LongoMatch.Drawing/CanvasObject/EllipseObject.cs   |    7 +-
 LongoMatch.Drawing/CanvasObject/LineObject.cs      |   16 +-
 LongoMatch.Drawing/CanvasObject/PlayObject.cs      |   13 +-
 LongoMatch.Drawing/CanvasObject/PlayerObject.cs    |   40 +-
 LongoMatch.Drawing/CanvasObject/PositionObject.cs  |   41 +-
 .../CanvasObject/QuadrilateralObject.cs            |    7 +-
 LongoMatch.Drawing/CanvasObject/RectangleObject.cs |    5 +-
 LongoMatch.Drawing/CanvasObject/ScoreObject.cs     |   55 +
 LongoMatch.Drawing/CanvasObject/TagObject.cs       |   55 +
 LongoMatch.Drawing/CanvasObject/TaggerObject.cs    |  190 ++
 LongoMatch.Drawing/CanvasObject/TextObject.cs      |    5 +-
 LongoMatch.Drawing/CanvasObject/TimeNodeObject.cs  |   66 +-
 LongoMatch.Drawing/CanvasObject/TimelineObject.cs  |   55 +-
 LongoMatch.Drawing/CanvasObject/TimerObject.cs     |  120 ++
 LongoMatch.Drawing/Constants.cs                    |    5 +-
 LongoMatch.Drawing/LongoMatch.Drawing.mdp          |    8 +-
 LongoMatch.Drawing/Makefile.am                     |   10 +-
 LongoMatch.Drawing/Utils.cs                        |   43 +-
 LongoMatch.Drawing/Widgets/Blackboard.cs           |  121 +-
 LongoMatch.Drawing/Widgets/CategoriesLabels.cs     |   25 +-
 LongoMatch.Drawing/Widgets/PlaysTagger.cs          |  288 +++
 LongoMatch.Drawing/Widgets/PlaysTimeline.cs        |   86 +-
 LongoMatch.Drawing/Widgets/PositionTagger.cs       |   36 +-
 LongoMatch.Drawing/Widgets/TeamTagger.cs           |   92 +-
 LongoMatch.Drawing/Widgets/TimersTimeline.cs       |   45 +-
 LongoMatch.Drawing/Widgets/Timerule.cs             |   18 +-
 LongoMatch.GUI.Multimedia/Gui/CapturerBin.cs       |    6 +-
 LongoMatch.GUI/Gui/Component/AnalysisComponent.cs  |    6 +-
 .../Gui/Component/AnalysisTemplateEditor.cs        |   70 +-
 LongoMatch.GUI/Gui/Component/ButtonsWidget.cs      |  228 ++-
 LongoMatch.GUI/Gui/Component/CategoryProperties.cs |  281 ++-
 LongoMatch.GUI/Gui/Component/CodingWidget.cs       |   40 +-
 LongoMatch.GUI/Gui/Component/PeriodsRecoder.cs     |    4 +-
 .../Gui/Component/PlaysListTreeWidget.cs           |    9 +-
 LongoMatch.GUI/Gui/Component/ProjectPeriods.cs     |    4 +-
 LongoMatch.GUI/Gui/Dialog/EditCategoryDialog.cs    |    7 +-
 LongoMatch.GUI/Gui/Menu/PlaysMenu.cs               |    2 +-
 LongoMatch.GUI/Gui/Panel/SportsTemplatesPanel.cs   |   22 +-
 .../Gui/TreeView/CategoriesFilterTreeView.cs       |    2 +-
 LongoMatch.GUI/Gui/TreeView/ListTreeViewBase.cs    |    4 +-
 LongoMatch.GUI/Gui/TreeView/PlayListTreeView.cs    |    3 +-
 LongoMatch.GUI/Gui/TreeView/PlayersTreeView.cs     |    2 +-
 LongoMatch.GUI/Gui/TreeView/PlaysTreeView.cs       |   13 +-
 LongoMatch.GUI/LongoMatch.GUI.mdp                  |    4 -
 LongoMatch.GUI/Makefile.am                         |    4 -
 .../LongoMatch.Gui.Component.AnalysisComponent.cs  |   48 +-
 ...goMatch.Gui.Component.AnalysisTemplateEditor.cs |  348 ----
 .../LongoMatch.Gui.Component.ButtonTagger.cs       |   50 -
 .../LongoMatch.Gui.Component.ButtonsWidget.cs      |  438 ++++-
 .../LongoMatch.Gui.Component.CategoryProperties.cs |  695 ++++---
 .../LongoMatch.Gui.Component.CodingWidget.cs       |  106 +-
 .../LongoMatch.Gui.Dialog.EditCategoryDialog.cs    |    1 +
 .../LongoMatch.Gui.Panel.NewProjectPanel.cs        |    3 +-
 .../LongoMatch.Gui.Panel.SportsTemplatesPanel.cs   |  110 +-
 LongoMatch.GUI/gtk-gui/gui.stetic                  | 2187 +++++++++++---------
 LongoMatch.GUI/gtk-gui/objects.xml                 |   39 +-
 LongoMatch.Migration/Makefile.am                   |    8 +-
 LongoMatch.Multimedia/LongoMatch.Multimedia.mdp    |    2 +-
 LongoMatch.Services/Services/EventsManager.cs      |  145 +-
 LongoMatch.Services/Services/HotKeysManager.cs     |    2 +-
 LongoMatch.Services/Services/TemplatesService.cs   |    2 +-
 LongoMatch.mds                                     |    3 +
 Tests/Core/TestCategoriesTemplate.cs               |    6 +-
 Tests/Core/TestCategory.cs                         |    1 -
 Tests/Core/TestPlaysFilter.cs                      |   46 +-
 Tests/Core/TestProject.cs                          |   76 +-
 92 files changed, 4672 insertions(+), 3013 deletions(-)
---
diff --git a/LongoMatch.Core/Common/Constants.cs b/LongoMatch.Core/Common/Constants.cs
index cce702c..bd0b8d8 100644
--- a/LongoMatch.Core/Common/Constants.cs
+++ b/LongoMatch.Core/Common/Constants.cs
@@ -116,7 +116,8 @@ Xavier Queralt Mateu (ca)";
                public const int MAX_THUMBNAIL_SIZE = 100;
                public const int MAX_BACKGROUND_WIDTH = 600;
                public const int MAX_BACKGROUND_HEIGHT = 400;
-               
+               public const int BUTTON_WIDTH = 120;
+               public const int BUTTON_HEIGHT = 80;
                
                public static Color HOME_COLOR = Color.Red1;
                public static Color AWAY_COLOR = Color.Blue1;
diff --git a/LongoMatch.Core/Common/EventsBroker.cs b/LongoMatch.Core/Common/EventsBroker.cs
index d78e337..36309a7 100644
--- a/LongoMatch.Core/Common/EventsBroker.cs
+++ b/LongoMatch.Core/Common/EventsBroker.cs
@@ -28,10 +28,6 @@ namespace LongoMatch.Common
        {
        
                public event NewTagHandler NewTagEvent;
-               public event NewTagAtPosHandler NewTagAtPosEvent;
-               public event NewTagStartHandler NewTagStartEvent;
-               public event NewTagStopHandler NewTagStopEvent;
-               public event NewTagCancelHandler NewTagCancelEvent;
                public event PlaysDeletedHandler PlaysDeleted;
                public event PlaySelectedHandler PlaySelected;
                public event PlayCategoryChangedHandler PlayCategoryChanged;
@@ -96,32 +92,12 @@ namespace LongoMatch.Common
                {
                }
                
-               public void EmitNewTagAtPos(Category category, Time pos) {
-                       if (NewTagAtPosEvent != null)
-                               NewTagAtPosEvent(category, pos);
-               }
-
-               public void EmitNewTag(Category category, List<Player> players = null) {
+               public void EmitNewTag (TaggerButton tagger, List<Player> players = null, List<Tag> tags = 
null,
+                                       Time start = null, Time stop = null) {
                        if (NewTagEvent != null)
-                               NewTagEvent(category, players);
+                               NewTagEvent (tagger, players, tags, start, stop);
                }
 
-               public void EmitNewTagStart(Category category) {
-                       if (NewTagStartEvent != null)
-                               NewTagStartEvent (category);
-               }
-
-               public void EmitNewTagStop(Category category) {
-                       if (NewTagStopEvent != null)
-                               NewTagStopEvent (category);
-               }
-               
-               public void EmitNewTagCancel(Category category) {
-                       if (NewTagCancelEvent != null)
-                               NewTagCancelEvent (category);
-               }
-               
-               
                public void EmitPlaysDeleted(List<Play> plays)
                {
                        if (PlaysDeleted != null)
diff --git a/LongoMatch.Core/Common/PlaysFilter.cs b/LongoMatch.Core/Common/PlaysFilter.cs
index 8444ded..69cc0b4 100644
--- a/LongoMatch.Core/Common/PlaysFilter.cs
+++ b/LongoMatch.Core/Common/PlaysFilter.cs
@@ -148,7 +148,7 @@ namespace LongoMatch.Common
                
                void UpdateVisibleCategories () {
                        if (categoriesFilter.Count == 0) {
-                               VisibleCategories = project.Categories.List.ToList();
+                               VisibleCategories = project.Categories.CategoriesList;
                        } else {
                                VisibleCategories = categoriesFilter.Keys.ToList();
                        }
diff --git a/LongoMatch.Core/Handlers/Handlers.cs b/LongoMatch.Core/Handlers/Handlers.cs
index f94b4e2..cef5b0f 100644
--- a/LongoMatch.Core/Handlers/Handlers.cs
+++ b/LongoMatch.Core/Handlers/Handlers.cs
@@ -34,17 +34,10 @@ namespace LongoMatch.Handlers
        /* A Play was selected */
        public delegate void PlaySelectedHandler(Play play);
        /* A new play needs to be create for a specific category at the current play time */
-       public delegate void NewTagHandler(Category category, List<Player> plays);
-       /* Signal the start time to tag a new play */
-       public delegate void NewTagStartHandler (Category category);
-       /* Signal the stop time to tag a new play */
-       public delegate void NewTagStopHandler(Category category);
-       /* Signal cancellation of tag */
-       public delegate void NewTagCancelHandler(Category category);
-       /* A new play needs to be created at a defined frame */
-       public delegate void NewTagAtPosHandler(Category category, Time position);
+       public delegate void NewTagHandler (TaggerButton tagger, List<Player> plays, List<Tag> tags, Time 
start, Time stop);
        //A play was edited
        public delegate void TimeNodeChangedHandler(TimeNode tNode, object val);
+       public delegate void CategoryChangedHandler(Category cat);
        /* A list of plays needs to be deleted */
        public delegate void PlaysDeletedHandler(List<Play> plays);
        /* Tag a play */
@@ -53,6 +46,15 @@ namespace LongoMatch.Handlers
        public delegate void PlayCategoryChangedHandler(Play play, Category cat);
        /* DUplicate play */
        public delegate void DuplicatePlaysHandler (List<Play> plays);
+       /* Category Selected */
+       public delegate void TaggersSelectedHandler (List<TaggerButton> taggerbuttons);
+       public delegate void TaggerSelectedHandler (TaggerButton taggerbutton);
+       public delegate void ShowButtonsTaggerMenuHandler (TaggerButton taggerbutton, Tag tag);
+       
+       /* Penalty Card */
+       public delegate void PenaltyCardHandler (PenaltyCard card);
+       /* Score */
+       public delegate void ScoreHandler (Score score);
        
        public delegate void TeamsTagsChangedHandler ();
        
diff --git a/LongoMatch.Core/Interfaces/Drawing/IDrawingToolkit.cs 
b/LongoMatch.Core/Interfaces/Drawing/IDrawingToolkit.cs
index 52b42d1..039f8fa 100644
--- a/LongoMatch.Core/Interfaces/Drawing/IDrawingToolkit.cs
+++ b/LongoMatch.Core/Interfaces/Drawing/IDrawingToolkit.cs
@@ -56,6 +56,8 @@ namespace LongoMatch.Interfaces.Drawing
                                   SelectionPosition orientation);
                void DrawRectangle (Point start, double width, double height);
                void DrawRoundedRectangle (Point start, double width, double height, double radius);
+               void DrawButton (Point start, double width, double height, double radius,
+                                Color startColor, Color stopColor);
                void DrawArea (params Point[] vertices);
                void DrawPoint (Point point);
                void DrawCircle (Point center, double radius);
diff --git a/LongoMatch.Core/Interfaces/ITemplates.cs b/LongoMatch.Core/Interfaces/ITemplates.cs
index fad1fca..c5be324 100644
--- a/LongoMatch.Core/Interfaces/ITemplates.cs
+++ b/LongoMatch.Core/Interfaces/ITemplates.cs
@@ -30,7 +30,6 @@ namespace LongoMatch.Interfaces
        
        public interface ITemplate<T>: ITemplate {
                List<T> List {get;set;}
-               T AddDefaultItem (int index);
        }
        
        public interface ITemplateProvider
@@ -51,7 +50,7 @@ namespace LongoMatch.Interfaces
                void Update (ITemplate<U> template);
        }
        
-       public interface ICategoriesTemplatesProvider: ITemplateProvider<Categories, Category> {}
+       public interface ICategoriesTemplatesProvider: ITemplateProvider<Categories, TaggerButton> {}
        public interface ITeamTemplatesProvider: ITemplateProvider<TeamTemplate, Player> {}
 }
 
diff --git a/LongoMatch.Core/LongoMatch.Core.mdp b/LongoMatch.Core/LongoMatch.Core.mdp
index dbfe0e9..b819374 100644
--- a/LongoMatch.Core/LongoMatch.Core.mdp
+++ b/LongoMatch.Core/LongoMatch.Core.mdp
@@ -143,6 +143,8 @@
     <File subtype="Code" buildaction="Compile" name="Store/TaggerButton.cs" />
     <File subtype="Code" buildaction="Compile" name="Store/TagButton.cs" />
     <File subtype="Code" buildaction="Compile" name="Interfaces/Multimedia/IDiscoverer.cs" />
+    <File subtype="Code" buildaction="Compile" name="Store/TaggerButton.cs" />
+    <File subtype="Code" buildaction="Compile" name="Store/TagButton.cs" />
   </Contents>
   <References>
     <ProjectReference type="Package" localcopy="True" refto="System, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b77a5c561934e089" />
@@ -154,4 +156,4 @@
     <ProjectReference type="Package" localcopy="True" refto="System.Drawing, Version=4.0.0.0, 
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
     <ProjectReference type="Package" localcopy="False" refto="Newtonsoft.Json, Version=5.0.0.0, 
Culture=neutral, PublicKeyToken=b9a188c8922137c6" />
   </References>
-</Project>
+</Project>
\ No newline at end of file
diff --git a/LongoMatch.Core/Makefile.am b/LongoMatch.Core/Makefile.am
index 3f93ff2..54af969 100644
--- a/LongoMatch.Core/Makefile.am
+++ b/LongoMatch.Core/Makefile.am
@@ -95,6 +95,10 @@ SOURCES = Common/Area.cs \
        Store/Score.cs \
        Store/ScoreEvent.cs \
        Store/Tag.cs \
+       Store/TagButton.cs \
+       Store/TagButton.cs \
+       Store/TaggerButton.cs \
+       Store/TaggerButton.cs \
        Store/Templates/CategoriesTemplate.cs \
        Store/Templates/TeamTemplate.cs \
        Store/Time.cs \
diff --git a/LongoMatch.Core/Store/Category.cs b/LongoMatch.Core/Store/Category.cs
index 4e4cbf4..8997dbb 100644
--- a/LongoMatch.Core/Store/Category.cs
+++ b/LongoMatch.Core/Store/Category.cs
@@ -36,7 +36,7 @@ namespace LongoMatch.Store
        /// tagged in this category
        /// </summary>
        [Serializable]
-       public class Category:TimeNode, IIDObject
+       public class Category:TaggerButton, IIDObject
        {
 
                #region Constructors
@@ -45,6 +45,14 @@ namespace LongoMatch.Store
                        Tags = new List<Tag>();
                        TagGoalPosition = false;
                        TagFieldPosition = true;
+                       Position = new Point (0, 0);
+                       ShowSubcategories = true;
+                       TagsPerRow = 2;
+                       Color = Color.Red;
+                       TextColor = Color.Grey2;
+                       TagMode = TagMode.Predifined;
+                       Width = 30;
+                       Height = 20;
                }
                #endregion
 
@@ -66,14 +74,6 @@ namespace LongoMatch.Store
                        set;
                }
 
-               /// <summary>
-               /// A color to identify plays in this category
-               /// </summary>
-               public  Color Color {
-                       get;
-                       set;
-               }
-
                //// <summary>
                /// Sort method used to sort plays for this category
                /// </summary>
@@ -82,15 +82,17 @@ namespace LongoMatch.Store
                        set;
                }
 
-               /// <summary>
-               /// Position of the category in the list of categories
-               /// </summary>
-               public int Position {
+               public List<Tag> Tags  {
                        get;
                        set;
                }
-
-               public List<Tag> Tags  {
+               
+               public bool ShowSubcategories {
+                       get;
+                       set;
+               }
+               
+               public int TagsPerRow {
                        get;
                        set;
                }
diff --git a/LongoMatch.Core/Store/PenaltyCard.cs b/LongoMatch.Core/Store/PenaltyCard.cs
index 623fda5..33bb955 100644
--- a/LongoMatch.Core/Store/PenaltyCard.cs
+++ b/LongoMatch.Core/Store/PenaltyCard.cs
@@ -17,10 +17,11 @@
 //
 using System;
 using LongoMatch.Common;
+using LongoMatch.Interfaces;
 
 namespace LongoMatch.Store
 {
-       public class PenaltyCard
+       public class PenaltyCard: EventButton
        {
                public PenaltyCard ()
                {
@@ -33,21 +34,10 @@ namespace LongoMatch.Store
                        Shape = shape;
                }
 
-               public string Name {
-                       get;
-                       set;
-               }
-               
-               public Color Color {
-                       get;
-                       set;
-               }
-               
                public CardShape Shape {
                        get;
                        set;
                }
-               
        }
 }
 
diff --git a/LongoMatch.Core/Store/Project.cs b/LongoMatch.Core/Store/Project.cs
index ad7f6b9..5d3ae8e 100644
--- a/LongoMatch.Core/Store/Project.cs
+++ b/LongoMatch.Core/Store/Project.cs
@@ -218,10 +218,9 @@ namespace LongoMatch.Store
                /// A <see cref="System.Int32"/>: category index
                /// </param>
                public void RemoveCategory(Category category) {
-                       if(Categories.List.Count == 1)
+                       if(Categories.CategoriesList.Count == 1)
                                throw new Exception("You can't remove the last Category");
                        Categories.List.Remove(category);
-
                        Timeline.RemoveAll(p => p.Category.ID == category.ID);
                }
                
diff --git a/LongoMatch.Core/Store/Score.cs b/LongoMatch.Core/Store/Score.cs
index e569971..926e894 100644
--- a/LongoMatch.Core/Store/Score.cs
+++ b/LongoMatch.Core/Store/Score.cs
@@ -16,11 +16,13 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 //
 using System;
+using LongoMatch.Interfaces;
+using LongoMatch.Common;
 
 namespace LongoMatch.Store
 {
        [Serializable]
-       public class Score
+       public class Score: EventButton
        {
                public Score ()
                {
@@ -32,11 +34,6 @@ namespace LongoMatch.Store
                        Points = points;
                }
                
-               public string Name {
-                       get;
-                       set;
-               }
-               
                public int Points {
                        get;
                        set;
diff --git a/LongoMatch.Drawing/enums.cs b/LongoMatch.Core/Store/TagButton.cs
similarity index 77%
rename from LongoMatch.Drawing/enums.cs
rename to LongoMatch.Core/Store/TagButton.cs
index ce6760c..1fcb182 100644
--- a/LongoMatch.Drawing/enums.cs
+++ b/LongoMatch.Core/Store/TagButton.cs
@@ -17,8 +17,24 @@
 //
 using System;
 
-namespace LongoMatch.Drawing
+namespace LongoMatch.Store
 {
-
-}
-
+       [Serializable]
+       public class TagButton: TaggerButton
+       {
+               public TagButton ()
+               {
+               }
+               
+               public TagButton (Tag tag)
+               {
+                       Tag = tag;
+                       Name = tag.Value;
+               }
+               
+               public Tag Tag {
+                       get;
+                       set;
+               }
+       }
+}
\ No newline at end of file
diff --git a/LongoMatch.Core/Store/TaggerButton.cs b/LongoMatch.Core/Store/TaggerButton.cs
new file mode 100644
index 0000000..c29b13f
--- /dev/null
+++ b/LongoMatch.Core/Store/TaggerButton.cs
@@ -0,0 +1,117 @@
+//
+//  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.Common;
+using Newtonsoft.Json;
+
+namespace LongoMatch.Store
+{
+       [Serializable]
+       public class TaggerButton
+       {
+               Color color;
+       
+               public TaggerButton () {
+                       Position = new Point (0, 0);
+                       Width = Constants.BUTTON_WIDTH;
+                       Height = Constants.BUTTON_HEIGHT;
+                       Color = Color.Red;
+                       TextColor = Color.Grey2;
+                       Start = new Time {Seconds = 10};
+                       Stop = new Time {Seconds = 10};
+               }
+               
+               public string Name {
+                       get;
+                       set;
+               }
+               
+               public Point Position {
+                       get;
+                       set;
+               }
+               
+               public int Width {
+                       get;
+                       set;
+               }
+               
+               public int Height {
+                       get;
+                       set;
+               }
+               
+               public Color Color {
+                       get {
+                               return color;
+                       }
+                       set {
+                               byte y;
+                               YCbCrColor c = YCbCrColor.YCbCrFromColor (value);
+                               y = c.Y;
+                               c.Y = (byte) (Math.Min (y + 50, 255));
+                               LightColor = YCbCrColor.ColorFromYCbCr (c);
+                               c.Y = (byte) (Math.Max (y - 50, 0));
+                               DarkColor = YCbCrColor.ColorFromYCbCr (c);
+                               color = value;
+                       }
+               }
+               
+               public Color TextColor {
+                       get;
+                       set;
+               }
+
+               public TagMode TagMode {
+                       get;
+                       set;
+               }
+               
+               public Time Start {
+                       get;
+                       set;
+               }
+
+               public Time Stop {
+                       get;
+                       set;
+               }
+
+               
+               [JsonIgnore]
+               public Color LightColor {
+                       get;
+                       set;
+               }
+               
+               [JsonIgnore]
+               public Color DarkColor {
+                       get;
+                       set;
+               }
+               
+       }
+       
+       public class EventButton: TaggerButton {
+               public Time EventTime {
+                       get;
+                       set;
+               }
+       }
+}
+
diff --git a/LongoMatch.Core/Store/Templates/CategoriesTemplate.cs 
b/LongoMatch.Core/Store/Templates/CategoriesTemplate.cs
index db4ac57..0933f41 100644
--- a/LongoMatch.Core/Store/Templates/CategoriesTemplate.cs
+++ b/LongoMatch.Core/Store/Templates/CategoriesTemplate.cs
@@ -40,9 +40,12 @@ namespace LongoMatch.Store.Templates
        /// The <see cref="LongoMatch.DB.Project"/> must handle all the changes
        /// </summary>
        [Serializable]
-       public class Categories: ITemplate, ITemplate<Category>
+       public class Categories: ITemplate<TaggerButton>
        {
 
+               const int CAT_WIDTH = 120;
+               const int CAT_HEIGHT = 80;
+               
                /// <summary>
                /// Creates a new template
                /// </summary>
@@ -51,10 +54,7 @@ namespace LongoMatch.Store.Templates
                        HalfFieldBackground = Config.HalfFieldBackground;
                        GoalBackground = Config.GoalBackground;
                        ID = Guid.NewGuid ();
-                       List = new List<Category>();
-                       Scores = new List<Score> ();
-                       PenaltyCards = new List<PenaltyCard> ();
-                       CommonTags = new List<Tag>();
+                       List = new List<TaggerButton>();
                }
                
                public Guid ID {
@@ -62,16 +62,11 @@ namespace LongoMatch.Store.Templates
                        set;
                }
                
-               public List<Category> List {
+               public List<TaggerButton> List {
                        get;
                        set;
                }
                
-               public List<Tag> CommonTags {
-                       get;
-                       set;
-               }
-
                public string Name {
                        get;
                        set;
@@ -82,16 +77,6 @@ namespace LongoMatch.Store.Templates
                        set;
                }
                
-               public List<Score> Scores {
-                       get;
-                       set;
-               }
-               
-               public List<PenaltyCard> PenaltyCards {
-                       get;
-                       set;
-               }
-               
                public Image Image {
                        get;
                        set;
@@ -112,6 +97,55 @@ namespace LongoMatch.Store.Templates
                        set;
                }
                
+               [JsonIgnore]
+               public List<Score> Scores {
+                       get {
+                               return List.OfType<Score>().ToList();
+                       }
+               }
+               
+               [JsonIgnore]
+               public List<PenaltyCard> PenaltyCards {
+                       get {
+                               return List.OfType<PenaltyCard>().ToList();
+                       }
+               }
+               
+               [JsonIgnore]
+               public List<Timer> Timers {
+                       get {
+                               return List.OfType<Timer>().ToList();
+                       }
+               }
+               
+               [JsonIgnore]
+               public List<Category> CategoriesList {
+                       get {
+                               return List.OfType<Category>().ToList();
+                       }
+               }
+               
+               [JsonIgnore]
+               public List<TagButton> CommonTags {
+                       get {
+                               return List.OfType<TagButton>().ToList();
+                       }
+               }
+
+               [JsonIgnore]
+               public int CanvasWidth {
+                       get {
+                               return (int) List.Max (c => c.Position.X + c.Width);
+                       }
+               }
+               
+               [JsonIgnore]
+               public int CanvasHeight {
+                       get {
+                               return (int) List.Max (c => c.Position.Y + c.Height);
+                       }
+               }
+               
                public void Save(string filePath) {
                        Serializer.Save(this, filePath);
                }
@@ -132,7 +166,11 @@ namespace LongoMatch.Store.Templates
                                Stop = new Time {Seconds = 10},
                                SortMethod = SortMethodType.SortByStartTime,
                                HotKey = h,
-                               Position = index-1,
+                               /* Leave the first row for the timers and score */
+                               Position = new Point (10 + (index % 7) * (CAT_WIDTH + 10),
+                                                     10 + (index / 7 + 1) * (CAT_HEIGHT + 10)),
+                               Width = CAT_WIDTH,
+                               Height = CAT_HEIGHT,
                        };
                        AddDefaultTags(cat);
                        List.Insert(index, cat);
@@ -150,6 +188,10 @@ namespace LongoMatch.Store.Templates
                }
 
                public static Categories DefaultTemplate(int count) {
+                       Score score;
+                       Timer timer;
+                       PenaltyCard card;
+                       TagButton tag;
                        List<string> periods = new List<string>();
                        Categories template = new Categories();
                        
@@ -157,14 +199,37 @@ namespace LongoMatch.Store.Templates
                        periods.Add ("1");
                        periods.Add ("2");
                        template.GamePeriods = periods; 
-                       template.CommonTags.Add (new Tag (Catalog.GetString ("Attack"),
-                                                         Constants.COMMON_TAG));
-                       template.CommonTags.Add (new Tag (Catalog.GetString ("Defense"),
-                                                         Constants.COMMON_TAG));
-                       template.PenaltyCards.Add (new PenaltyCard (Catalog.GetString ("Red"),
-                                                                   Color.Red, CardShape.Rectangle));
-                       template.PenaltyCards.Add (new PenaltyCard (Catalog.GetString ("Yellow"),
-                                                                   Color.Yellow, CardShape.Rectangle));
+                       tag = new TagButton (new Tag (Catalog.GetString ("Attack"),
+                                                     Constants.COMMON_TAG));
+                       tag.Position = new Point (10, 10);
+                       template.List.Add (tag);
+                       
+                       tag = new TagButton (new Tag (Catalog.GetString ("Defense"),
+                                                     Constants.COMMON_TAG));
+                       tag.Position = new Point (10 + (10 + CAT_WIDTH) * 1, 10);
+                       template.List.Add (tag);
+
+                       card = new PenaltyCard (Catalog.GetString ("Red"),
+                                               Color.Red, CardShape.Rectangle);
+                       card.Position = new Point (10 + (10 + CAT_WIDTH) * 2, 10);
+                       template.List.Add (card);
+
+                       card = new PenaltyCard (Catalog.GetString ("Yellow"),
+                                               Color.Yellow, CardShape.Rectangle);
+                       card.Position = new Point (10 + (10 + CAT_WIDTH) * 3, 10);
+                       template.List.Add (card);
+                       
+                       score = new Score (Catalog.GetString ("Field goal"), 1);
+                       score.Position = new Point (10 + (10 + CAT_WIDTH) * 4, 10);
+                       template.List.Add (score);
+                       
+                       score = new Score (Catalog.GetString ("Penalty goal"), 1);
+                       score.Position = new Point (10 + (10 + CAT_WIDTH) * 5, 10);
+                       template.List.Add (score);
+                       
+                       timer = new Timer {Name = Catalog.GetString ("Ball playing")};
+                       timer.Position = new Point (10 + (10 + CAT_WIDTH) * 6, 10);
+                       template.List.Add (timer);
                        return template;
                }
 
diff --git a/LongoMatch.Core/Store/Timer.cs b/LongoMatch.Core/Store/Timer.cs
index ee28aac..dd4cc21 100644
--- a/LongoMatch.Core/Store/Timer.cs
+++ b/LongoMatch.Core/Store/Timer.cs
@@ -20,21 +20,18 @@ using System.Linq;
 using LongoMatch.Store;
 using System.Collections.Generic;
 using Newtonsoft.Json;
+using LongoMatch.Interfaces;
+using LongoMatch.Common;
 
 namespace LongoMatch.Store
 {
-       public class Timer
+       public class Timer: TaggerButton
        {
                public Timer ()
                {
                        Nodes = new List<TimeNode>();
                }
                
-               public string Name {
-                       get;
-                       set;
-               }
-               
                public List<TimeNode> Nodes {
                        get;
                        set;
@@ -47,21 +44,34 @@ namespace LongoMatch.Store
                        }
                }
                
-               public void Start (Time start, string name = null) {
+               public TimeNode StartTimer (Time start, string name = null) {
+                       TimeNode tn;
+
                        if (name == null)
                                name = Name;
-                       Stop (start);
-                       TimeNode tn = new TimeNode {Name = name, Start = start};
+                       StopTimer (start);
+                       tn = new TimeNode {Name = name, Start = start};
                        Nodes.Add (tn);
+                       return tn;
                }
                
-               public void Stop (Time stop) {
+               public void StopTimer (Time stop) {
                        if (Nodes.Count > 0) {
                                TimeNode last = Nodes.Last ();
                                if (last.Stop == null) {
                                        last.Stop = stop;
                                }
                        }
+                       Nodes.OrderBy (tn => tn.Start.MSeconds);
+               }
+               
+               public void CancelTimer () {
+                       if (Nodes.Count > 0) {
+                               TimeNode last = Nodes.Last ();
+                               if (last.Stop == null) {
+                                       Nodes.Remove (last);
+                               }
+                       }
                }
        }
 }
diff --git a/LongoMatch.Drawing.Cairo/CairoBackend.cs b/LongoMatch.Drawing.Cairo/CairoBackend.cs
index d1ffa93..5bcccfb 100644
--- a/LongoMatch.Drawing.Cairo/CairoBackend.cs
+++ b/LongoMatch.Drawing.Cairo/CairoBackend.cs
@@ -16,10 +16,8 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 //
 using System;
-using System.Collections.Generic;
 using Cairo;
 using LongoMatch.Common;
-using LongoMatch.Interfaces;
 using LongoMatch.Interfaces.Drawing;
 using Color = LongoMatch.Common.Color;
 using FontSlant = Cairo.FontSlant;
@@ -44,7 +42,7 @@ namespace LongoMatch.Drawing.Cairo
                LineStyle savedLineStyle;
                string savedFontFamily;
                bool disableScalling;
-               
+
                public CairoBackend ()
                {
                        StrokeColor = Color.Black;
@@ -57,39 +55,39 @@ namespace LongoMatch.Drawing.Cairo
                        LineStyle = LineStyle.Normal;
                        ClearOperation = false;
                }
-               
+
                public IContext Context {
                        set {
                                context = value;
                        }
                }
-               
+
                public int LineWidth {
                        set;
                        protected get;
                }
-               
+
                public Color StrokeColor {
                        set;
                        protected get;
                }
-               
+
                public Color FillColor {
                        set;
                        protected get;
                }
-               
+
                public string FontFamily {
                        set;
                        protected get;
                        
                }
-               
+
                public int FontSize {
                        set;
                        protected get;
                }
-               
+
                public LFontSlant FontSlant {
                        set {
                                switch (value) {
@@ -105,7 +103,7 @@ namespace LongoMatch.Drawing.Cairo
                                }
                        }
                }
-               
+
                public LFontWeight FontWeight {
                        set {
                                switch (value) {
@@ -118,29 +116,32 @@ namespace LongoMatch.Drawing.Cairo
                                }
                        }
                }
-               
+
                public LineStyle LineStyle {
                        get;
                        set;
                }
-               
+
                public bool ClearOperation {
                        get;
                        set;
                }
-               
-               public ISurface CreateSurface (int width, int height, Image image=null) {
+
+               public ISurface CreateSurface (int width, int height, Image image=null)
+               {
                        return new Surface (width, height, image);
                }
-               
-               public void Clear (Color color) {
+
+               public void Clear (Color color)
+               {
                        SetColor (color);
                        CContext.Operator = Operator.Source;
                        CContext.Paint ();
                        CContext.Operator = Operator.Over;
                }
-               
-               public void Begin() {
+
+               public void Begin ()
+               {
                        savedStrokeColor = StrokeColor;
                        savedFillColor = FillColor;
                        savedFSlant = fSlant;
@@ -152,15 +153,17 @@ namespace LongoMatch.Drawing.Cairo
                        savedClear = ClearOperation;
                        CContext.Save ();
                }
-               
-               public void TranslateAndScale (Point translation, Point scale) {
+
+               public void TranslateAndScale (Point translation, Point scale)
+               {
                        if (!disableScalling) {
                                CContext.Translate (translation.X, translation.Y);
                                CContext.Scale (scale.X, scale.Y);
                        }
                }
-               
-               public void End() {
+
+               public void End ()
+               {
                        CContext.Restore ();
                        ClearOperation = savedClear;
                        StrokeColor = savedStrokeColor;
@@ -172,16 +175,18 @@ namespace LongoMatch.Drawing.Cairo
                        FontFamily = savedFontFamily;
                        LineStyle = savedLineStyle;
                }
-               
-               public void DrawLine (Point start, Point stop) {
+
+               public void DrawLine (Point start, Point stop)
+               {
                        CContext.LineWidth = LineWidth;
                        CContext.MoveTo (start.X, start.Y);
                        CContext.LineTo (stop.X, stop.Y);
                        StrokeAndFill ();
                }
-               
+
                public void DrawTriangle (Point corner, double width, double height,
-                                         SelectionPosition position) {
+                                         SelectionPosition position)
+               {
                        double x1, y1, x2, y2, x3, y3;
 
                        x1 = corner.X;
@@ -189,16 +194,16 @@ namespace LongoMatch.Drawing.Cairo
                        
                        switch (position) {
                        case SelectionPosition.Top:
-                               x2 = x1 + width/2;
+                               x2 = x1 + width / 2;
                                y2 = y1 + height;
-                               x3 = x1 - width/2;
+                               x3 = x1 - width / 2;
                                y3 = y1 + height;
                                break;
                        case SelectionPosition.Bottom:
                        default:
-                               x2 = x1 + width/2;
+                               x2 = x1 + width / 2;
                                y2 = y1 - height;
-                               x3 = x1 - width/2;
+                               x3 = x1 - width / 2;
                                y3 = y1 - height;
                                break;
                        }
@@ -207,40 +212,78 @@ namespace LongoMatch.Drawing.Cairo
                        CContext.MoveTo (x1, y1);
                        CContext.LineTo (x2, y2);
                        CContext.LineTo (x3, y3);
-                       CContext.ClosePath();
+                       CContext.ClosePath ();
                        StrokeAndFill ();
                }
-               
-               public void DrawArea (params Point[] vertices) {
+
+               public void DrawArea (params Point[] vertices)
+               {
                        for (int i=0; i < vertices.Length - 1; i++) {
                                double x1, y1, x2, y2;
                                
-                               x1 = vertices[i].X;
-                               y1 = vertices[i].Y;
-                               x2 = vertices[i+1].X;
-                               y2 = vertices[i+1].Y;
+                               x1 = vertices [i].X;
+                               y1 = vertices [i].Y;
+                               x2 = vertices [i + 1].X;
+                               y2 = vertices [i + 1].Y;
                                
                                CContext.MoveTo (x1, y1);
                                CContext.LineTo (x2, y2);
                        }
-                       CContext.ClosePath();
+                       CContext.ClosePath ();
                        StrokeAndFill ();
                }
-               
-               public void DrawRectangle (Point start, double width, double height) {
+
+               public void DrawRectangle (Point start, double width, double height)
+               {
                        CContext.Rectangle (start.X, start.Y, width, height);
                        StrokeAndFill ();
                }
-               
-               public void DrawRoundedRectangle (Point start, double width, double height, double radius) {
+
+               static public double ByteToDouble (byte val)
+               {
+                       return (double)(val) / byte.MaxValue;
+               }
+
+               public static global::Cairo.Color RGBToCairoColor (Color c)
+               {
+                       return new global::Cairo.Color (ByteToDouble (c.R),
+                                                       ByteToDouble (c.G),
+                                                       ByteToDouble (c.B));
+               }
+
+               public void DrawButton (Point start, double width, double height, double radius, Color 
startColor, Color stopColor)
+               {
+                       LinearGradient p;
+                       DrawRoundedRectangle (start, width, height, radius, false);
+                       p = new LinearGradient (start.X, start.Y, start.X, start.Y + height);
+                       p.AddColorStop (0, RGBToCairoColor (startColor));
+                       p.AddColorStop (1, RGBToCairoColor (stopColor));
+                       CContext.Pattern = p;
+                       CContext.LineCap = LineCap.Round;
+                       CContext.LineJoin = LineJoin.Round;
+                       CContext.LineWidth = LineWidth;
+                       CContext.FillPreserve ();
+                       SetColor (StrokeColor);
+                       CContext.StrokePreserve ();
+                       CContext.Stroke ();
+                       p.Dispose ();
+               }
+
+               public void DrawRoundedRectangle (Point start, double width, double height, double radius)
+               {
+                       DrawRoundedRectangle (start, width, height, radius, true);
+               }
+
+               public void DrawRoundedRectangle (Point start, double width, double height, double radius, 
bool strokeAndFill)
+               {
                        double x, y;
                        
                        x = start.X + LineWidth / 2;
                        y = start.Y + LineWidth / 2;
-                       height -= LineWidth;
-                       width -= LineWidth;
+                       height -= LineWidth / 2;
+                       width -= LineWidth / 2;
 
-                       if((radius > height / 2) || (radius > width / 2))
+                       if ((radius > height / 2) || (radius > width / 2))
                                radius = Math.Min (height / 2, width / 2);
 
                        CContext.MoveTo (x, y + radius);
@@ -251,20 +294,25 @@ namespace LongoMatch.Drawing.Cairo
                        CContext.Arc (x + width - radius, y + height - radius, radius, 0, Math.PI / 2);
                        CContext.LineTo (x + radius, y + height);
                        CContext.Arc (x + radius, y + height - radius, radius, Math.PI / 2, Math.PI);
-                       CContext.ClosePath();
-                       StrokeAndFill ();
+                       CContext.ClosePath ();
+                       if (strokeAndFill) {
+                               StrokeAndFill ();
+                       }
                }
 
-               public void DrawCircle (Point center, double radius) {
+               public void DrawCircle (Point center, double radius)
+               {
                        CContext.Arc (center.X, center.Y, radius, 0, 2 * Math.PI);
                        StrokeAndFill ();
                }
 
-               public void DrawPoint (Point point) {
+               public void DrawPoint (Point point)
+               {
                        DrawCircle (point, LineWidth);
                }
-               
-               public void DrawText (Point point, double width, double height, string text) {
+
+               public void DrawText (Point point, double width, double height, string text)
+               {
                        TextExtents extents;
                        FontExtents fextents;
                        double x, y;
@@ -283,18 +331,20 @@ namespace LongoMatch.Drawing.Cairo
                        CContext.ShowText (text);
                        StrokeAndFill ();
                }
-               
-               public void DrawImage (Image image) {
+
+               public void DrawImage (Image image)
+               {
                        CairoHelper.SetSourcePixbuf (CContext, image.Value, 0, 0);
                        CContext.Paint ();
                }
 
-               public void DrawImage (Point start, double width, double height, Image image, bool scale) {
+               public void DrawImage (Point start, double width, double height, Image image, bool scale)
+               {
                        double scaleX, scaleY;
                        Point offset;
                        
                        if (scale) {
-                               image.ScaleFactor ((int) width, (int) height, out scaleX, out scaleY, out 
offset);
+                               image.ScaleFactor ((int)width, (int)height, out scaleX, out scaleY, out 
offset);
                        } else {
                                offset = new Point (0, 0);
                                scaleX = width / image.Width;
@@ -308,7 +358,8 @@ namespace LongoMatch.Drawing.Cairo
                        CContext.Restore ();
                }
 
-               public void DrawEllipse (Point center, double axisX, double axisY) {
+               public void DrawEllipse (Point center, double axisX, double axisY)
+               {
                        double max = Math.Max (axisX, axisY);
                        CContext.Save ();
                        CContext.Translate (center.X, center.Y);
@@ -317,56 +368,60 @@ namespace LongoMatch.Drawing.Cairo
                        StrokeAndFill ();
                        CContext.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);
+               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);
 
-                       CContext.MoveTo(stop.X, stop.Y);
-                       CContext.LineTo(vx1, vy1);
+                       CContext.MoveTo (stop.X, stop.Y);
+                       CContext.LineTo (vx1, vy1);
                        if (!closed) {
-                               CContext.MoveTo(stop.X, stop.Y);
-                               CContext.LineTo(vx2,vy2);
+                               CContext.MoveTo (stop.X, stop.Y);
+                               CContext.LineTo (vx2, vy2);
                        } else {
-                               CContext.LineTo(vx2,vy2);
+                               CContext.LineTo (vx2, vy2);
                                CContext.ClosePath ();
                        }
-                       StrokeAndFill();
+                       StrokeAndFill ();
                }
 
-               public void DrawSurface (ISurface surface) {
+               public void DrawSurface (ISurface surface)
+               {
                        CContext.SetSourceSurface (surface.Value as ImageSurface, 0, 0);
                        CContext.Paint ();
                }
-               
-               public Image Copy (ICanvas canvas, double width, double height) {
+
+               public Image Copy (ICanvas canvas, double width, double height)
+               {
                        Image img;
                        Pixmap pm;
                        
-                       pm = new Pixmap (null, (int) width, (int) height, 24);
+                       pm = new Pixmap (null, (int)width, (int)height, 24);
                        disableScalling = true;
-                       using(CairoContext c = new CairoContext (CairoHelper.Create (pm))) {
+                       using (CairoContext c = new CairoContext (CairoHelper.Create (pm))) {
                                canvas.Draw (c, 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));
+                                                                 (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);
+               public void Save (ICanvas canvas, double width, double height, string filename)
+               {
+                       ImageSurface pngSurface = new ImageSurface (Format.ARGB32, (int)width, (int)height);
                        disableScalling = true;
-                       using(CairoContext c = new CairoContext (new Context(pngSurface))) {
+                       using (CairoContext c = new CairoContext (new Context(pngSurface))) {
                                canvas.Draw (c, new Area (new Point (0, 0), width, height));
                        }
-                       pngSurface.WriteToPng(filename);
+                       pngSurface.WriteToPng (filename);
                        disableScalling = false;
                        pngSurface.Dispose ();
                }
@@ -376,19 +431,21 @@ namespace LongoMatch.Drawing.Cairo
                                return context.Value as Context;
                        }
                }
-               
-               void SetDash() {
+
+               void SetDash ()
+               {
                        switch (LineStyle) {
                        case LineStyle.Normal:
-                               CContext.SetDash(new double[] {}, 0);
+                               CContext.SetDash (new double[] { }, 0);
                                break;  
                        default:
-                               CContext.SetDash(new double[] {10, 10}, 10);
+                               CContext.SetDash (new double[] { 10, 10 }, 10);
                                break;
                        }
                }
 
-               void StrokeAndFill () {
+               void StrokeAndFill ()
+               {
                        SetDash ();
                        if (ClearOperation) {
                                CContext.Operator = Operator.Clear;
@@ -399,22 +456,22 @@ namespace LongoMatch.Drawing.Cairo
                        CContext.LineJoin = LineJoin.Round;
                        CContext.LineWidth = LineWidth;
                        SetColor (StrokeColor);
-                       CContext.StrokePreserve();
+                       CContext.StrokePreserve ();
                        SetColor (FillColor);
-                       CContext.Fill();
+                       CContext.Fill ();
                }
-               
-               void SetColor (Color color) {
+
+               void SetColor (Color color)
+               {
                        if (color != null) {
-                               CContext.SetSourceRGBA ((double) color.R / byte.MaxValue,
-                                                      (double) color.G / byte.MaxValue,
-                                                      (double) color.B / byte.MaxValue,
-                                                      (double) color.A / byte.MaxValue);
+                               CContext.SetSourceRGBA ((double)color.R / byte.MaxValue,
+                                                       (double)color.G / byte.MaxValue,
+                                                       (double)color.B / byte.MaxValue,
+                                                       (double)color.A / byte.MaxValue);
                        } else {
                                CContext.SetSourceRGBA (0, 0, 0, 0);
                        }
                }
-               
        }
 }
 
diff --git a/LongoMatch.Drawing.Cairo/CairoContext.cs b/LongoMatch.Drawing.Cairo/CairoContext.cs
index 2a2f2ab..2eb66a4 100644
--- a/LongoMatch.Drawing.Cairo/CairoContext.cs
+++ b/LongoMatch.Drawing.Cairo/CairoContext.cs
@@ -15,7 +15,6 @@
 //  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 Gdk;
 using Cairo;
 using LongoMatch.Interfaces.Drawing;
@@ -38,14 +37,15 @@ namespace LongoMatch.Drawing.Cairo
                {
                        Value = context;
                }
-               
+
                public object Value {
                        get;
                        protected set;
                }
-               
-               public void Dispose () {
-                       (Value as Context).Dispose();
+
+               public void Dispose ()
+               {
+                       (Value as Context).Dispose ();
                }
        }
 }
diff --git a/LongoMatch.Drawing.Cairo/Surface.cs b/LongoMatch.Drawing.Cairo/Surface.cs
index 9a65c8b..cfa6c93 100644
--- a/LongoMatch.Drawing.Cairo/Surface.cs
+++ b/LongoMatch.Drawing.Cairo/Surface.cs
@@ -15,7 +15,6 @@
 //  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 Cairo;
 using LongoMatch.Interfaces.Drawing;
 using LongoMatch.Common;
@@ -28,35 +27,37 @@ namespace LongoMatch.Drawing.Cairo
 
                public Surface (int width, int height, Image image)
                {
-                       surface = new ImageSurface(Format.ARGB32, width, height);
+                       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();
+                                       context.Paint ();
                                }
                        }
                }
-               
+
                public object Value {
                        get {
                                return surface;
                        }
                }
-               
+
                public IContext Context {
                        get {
                                return new CairoContext (surface);
                        }
                }
-               
-               public Image Copy () {
-                       string tempFile = System.IO.Path.GetTempFileName();
+
+               public Image Copy ()
+               {
+                       string tempFile = System.IO.Path.GetTempFileName ();
                        surface.WriteToPng (tempFile);
                        Gdk.Pixbuf pixbuf = new Gdk.Pixbuf (tempFile);
                        return new Image (pixbuf);
                }
-               
-               public void Dispose () {
+
+               public void Dispose ()
+               {
                        surface.Dispose ();
                }
        }
diff --git a/LongoMatch.Drawing.Cairo/WidgetWrapper.cs b/LongoMatch.Drawing.Cairo/WidgetWrapper.cs
index 4046149..313e924 100644
--- a/LongoMatch.Drawing.Cairo/WidgetWrapper.cs
+++ b/LongoMatch.Drawing.Cairo/WidgetWrapper.cs
@@ -15,14 +15,11 @@
 //  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 Gtk;
 using Gdk;
-using Cairo;
 using LongoMatch.Common;
 using LongoMatch.Interfaces.Drawing;
 using LongoMatch.Handlers.Drawing;
-
 using Rectangle = Gdk.Rectangle;
 using Point = LongoMatch.Common.Point;
 using CursorType = LongoMatch.Common.CursorType;
@@ -44,7 +41,7 @@ namespace LongoMatch.Drawing.Cairo
                double lastX, lastY;
                bool canMove;
                uint moveTimerID, hoverTimerID;
-               
+
                public WidgetWrapper (DrawingArea widget)
                {
                        this.widget = widget;
@@ -63,7 +60,7 @@ namespace LongoMatch.Drawing.Cairo
                                return currentWidth;
                        }
                        set {
-                               widget.WidthRequest = (int) value;
+                               widget.WidthRequest = (int)value;
                        }
                }
 
@@ -72,37 +69,41 @@ namespace LongoMatch.Drawing.Cairo
                                return currentHeight;
                        }
                        set {
-                               widget.HeightRequest = (int) value;
+                               widget.HeightRequest = (int)value;
                        }
                }
-               
-               public void ReDraw (Area area = null) {
+
+               public void ReDraw (Area area = null)
+               {
                        if (widget.GdkWindow == null) {
                                return;
                        }
                        if (area == null) {
                                Gdk.Region region = widget.GdkWindow.ClipRegion;
-                               widget.GdkWindow.InvalidateRegion(region,true);
+                               widget.GdkWindow.InvalidateRegion (region, true);
                        } else {
                                widget.GdkWindow.InvalidateRect (
                                        new Gdk.Rectangle ((int)area.Start.X, (int)area.Start.Y,
-                                                  (int)area.Width, (int)area.Height),
+                                                   (int)area.Width, (int)area.Height),
                                        true);
                        }
-                       widget.GdkWindow.ProcessUpdates(true);
+                       widget.GdkWindow.ProcessUpdates (true);
                }
-               
-               public void ReDraw (IMovableObject drawable) {
+
+               public void ReDraw (IMovableObject drawable)
+               {
                        /* FIXME: get region from drawable */
                        ReDraw ();
                }
-               
-               public void ShowTooltip (string text) {
+
+               public void ShowTooltip (string text)
+               {
                        widget.HasTooltip = true;
                        widget.TooltipText = text;
                }
 
-               public void SetCursor (CursorType type) {
+               public void SetCursor (CursorType type)
+               {
                        GCursorType gtype;
                        switch (type) {
                        case CursorType.Arrow:
@@ -124,7 +125,8 @@ namespace LongoMatch.Drawing.Cairo
                        widget.GdkWindow.Cursor = new Cursor (gtype);
                }
 
-               public void SetCursorForTool (DrawTool tool) {
+               public void SetCursorForTool (DrawTool tool)
+               {
                        string cursor;
                        
                        switch (tool) {
@@ -170,8 +172,9 @@ namespace LongoMatch.Drawing.Cairo
                                widget.GdkWindow.Cursor = c;
                        }
                }
-               
-               void Draw (Area area) {
+
+               void Draw (Area area)
+               {
                        if (DrawEvent != null) {
                                using (CairoContext c = new CairoContext (widget.GdkWindow)) {
                                        if (area == null) {
@@ -181,8 +184,9 @@ namespace LongoMatch.Drawing.Cairo
                                }
                        }
                }
-               
-               ButtonType ParseButtonType (uint button) {
+
+               ButtonType ParseButtonType (uint button)
+               {
                        ButtonType bt;
                        
                        switch (button) {
@@ -201,8 +205,9 @@ namespace LongoMatch.Drawing.Cairo
                        }
                        return bt;
                }
-               
-               ButtonModifier ParseButtonModifier (ModifierType modifier) {
+
+               ButtonModifier ParseButtonModifier (ModifierType modifier)
+               {
                        ButtonModifier bm;
                        
                        switch (modifier) {
@@ -218,14 +223,16 @@ namespace LongoMatch.Drawing.Cairo
                        }
                        return bm;
                }
-               
-               bool ReadyToMove () {
+
+               bool ReadyToMove ()
+               {
                        canMove = true;
                        moveTimerID = 0;
                        return false;
                }
-               
-               bool EmitShowTooltip () {
+
+               bool EmitShowTooltip ()
+               {
                        if (ShowTooltipEvent != null) {
                                ShowTooltipEvent (new Point (lastX, lastY));
                        }
@@ -235,7 +242,7 @@ namespace LongoMatch.Drawing.Cairo
 
                void HandleMotionNotifyEvent (object o, MotionNotifyEventArgs args)
                {
-                       if (hoverTimerID != 0){
+                       if (hoverTimerID != 0) {
                                GLib.Source.Remove (hoverTimerID);
                                hoverTimerID = 0;
                        }
@@ -284,7 +291,7 @@ namespace LongoMatch.Drawing.Cairo
                                                  args.Event.Time, bt, bm);
                        }
                }
-               
+
                void HandleExposeEvent (object o, ExposeEventArgs args)
                {
                        Rectangle r;
diff --git a/LongoMatch.Drawing/Canvas.cs b/LongoMatch.Drawing/Canvas.cs
index 8dc4d27..3407cd3 100644
--- a/LongoMatch.Drawing/Canvas.cs
+++ b/LongoMatch.Drawing/Canvas.cs
@@ -32,30 +32,32 @@ namespace LongoMatch.Drawing
                protected IWidget widget;
                protected double scaleX, scaleY;
                protected Point translation;
-               
+
                public Canvas (IWidget widget)
                {
                        this.widget = widget;
                        tk = Config.DrawingToolkit;
-                       Objects = new List<ICanvasObject>();
+                       Objects = new List<ICanvasObject> ();
                        widget.DrawEvent += Draw;
                        scaleX = 1;
                        scaleY = 1;
                        translation = new Point (0, 0);
                }
-               
+
                public List<ICanvasObject> Objects {
                        get;
                        set;
                }
-               
-               protected Point ToUserCoords (Point p) {
+
+               protected Point ToUserCoords (Point p)
+               {
                        return new Point ((p.X - translation.X) / scaleX,
                                          (p.Y - translation.Y) / scaleY);
                
                }
-               
-               public virtual void Draw (IContext context, Area area) {
+
+               public virtual void Draw (IContext context, Area area)
+               {
                        tk.Context = context;
                        tk.Begin ();
                        tk.TranslateAndScale (translation, new Point (scaleX, scaleY));
@@ -78,16 +80,17 @@ namespace LongoMatch.Drawing
                        tk.Context = null;
                }
        }
-       
+
        public class SelectionCanvas: Canvas
        {
                protected bool moving;
-               protected Point start; 
+               protected Point start;
                uint lastTime;
                Selection clickedSel;
-               
-               public SelectionCanvas (IWidget widget): base (widget) {
-                       Selections = new List<Selection>();
+
+               public SelectionCanvas (IWidget widget): base (widget)
+               {
+                       Selections = new List<Selection> ();
                        SelectionMode = MultiSelectionMode.Single;
                        Accuracy = 1;
                        MoveWithoutSelection = false;
@@ -98,51 +101,58 @@ namespace LongoMatch.Drawing
                        widget.MotionEvent += HandleMotionEvent;
                        widget.ShowTooltipEvent += HandleShowTooltipEvent;
                }
-               
+
                public double Accuracy {
                        get;
                        set;
                }
-               
+
                public MultiSelectionMode SelectionMode {
                        get;
                        set;
                }
-               
+
                protected bool MoveWithoutSelection {
                        get;
                        set;
                }
-               
+
                protected List<Selection> Selections {
                        get;
                        set;
                }
-               
+
                protected bool ObjectsCanMove {
                        get;
                        set;
                }
-               
-               protected virtual void StartMove (Selection sel) {
+
+               protected virtual void StartMove (Selection sel)
+               {
                }
-               
-               protected virtual void CursorMoved (Point coords) {
+
+               protected virtual void CursorMoved (Point coords)
+               {
                }
 
-               protected virtual void SelectionMoved (Selection sel) {
+               protected virtual void SelectionMoved (Selection sel)
+               {
                }
-               
-               protected virtual void StopMove () {
+
+               protected virtual void StopMove ()
+               {
                }
-               
-               protected virtual void SelectionChanged (List<Selection> sel) {
+
+               protected virtual void SelectionChanged (List<Selection> sel)
+               {
                }
-               
-               protected virtual void ShowMenu (Point coords) {
+
+               protected virtual void ShowMenu (Point coords)
+               {
                }
-               
-               public void ClearSelection () {
+
+               public void ClearSelection ()
+               {
                        foreach (Selection sel in Selections) {
                                ICanvasSelectableObject po = sel.Drawable as ICanvasSelectableObject;
                                po.Selected = false;
@@ -154,8 +164,9 @@ namespace LongoMatch.Drawing
                        widget.ReDraw ();
                        Selections.Clear ();
                }
-               
-               protected void UpdateSelection (Selection sel, bool notify=true) {
+
+               protected void UpdateSelection (Selection sel, bool notify=true)
+               {
                        ICanvasSelectableObject so;
                        Selection seldup;
 
@@ -201,7 +212,7 @@ namespace LongoMatch.Drawing
                        }
                        return sel;
                }
-               
+
                void HandleShowTooltipEvent (Point coords)
                {
                        Selection sel = GetSelection (ToUserCoords (coords)); 
@@ -212,8 +223,9 @@ namespace LongoMatch.Drawing
                                }
                        }
                }
-               
-               protected virtual void HandleLeftButton (Point coords, ButtonModifier modif) {
+
+               protected virtual void HandleLeftButton (Point coords, ButtonModifier modif)
+               {
                        Selection sel;
                        
                        sel = GetSelection (coords);
@@ -224,10 +236,9 @@ namespace LongoMatch.Drawing
                        }
 
                        if ((SelectionMode == MultiSelectionMode.Multiple) ||
-                           (SelectionMode == MultiSelectionMode.MultipleWithModifier &&
-                           (modif == ButtonModifier.Control ||
-                           modif == ButtonModifier.Shift)))
-                       {
+                               (SelectionMode == MultiSelectionMode.MultipleWithModifier &&
+                               (modif == ButtonModifier.Control ||
+                               modif == ButtonModifier.Shift))) {
                                if (sel != null) {
                                        sel.Position = SelectionPosition.All;
                                        UpdateSelection (sel);
@@ -241,15 +252,16 @@ namespace LongoMatch.Drawing
                        }
                        widget.ReDraw ();
                }
-               
-               protected virtual void HandleRightButton (Point coords, ButtonModifier modif) {
+
+               protected virtual void HandleRightButton (Point coords, ButtonModifier modif)
+               {
                        if (Selections.Count <= 1) {
                                ClearSelection ();
                                UpdateSelection (GetSelection (coords));
                        }
                        ShowMenu (coords);
                }
-               
+
                protected virtual void HandleMotionEvent (Point coords)
                {
                        Selection sel;
@@ -259,7 +271,7 @@ namespace LongoMatch.Drawing
                                CursorMoved (coords);
                                start = coords;
                        } else if (moving) {
-                               sel = Selections[0];
+                               sel = Selections [0];
                                sel.Drawable.Move (sel, coords, start);  
                                widget.ReDraw (sel.Drawable);
                                SelectionMoved (sel);
@@ -293,13 +305,14 @@ namespace LongoMatch.Drawing
                        lastTime = time;
                }
        }
-       
+
        public abstract class BackgroundCanvas: SelectionCanvas
        {
 
                Image background;
 
-               public BackgroundCanvas (IWidget widget): base (widget) {
+               public BackgroundCanvas (IWidget widget): base (widget)
+               {
                        widget.SizeChangedEvent += HandleSizeChangedEvent;
                }
 
@@ -312,15 +325,15 @@ namespace LongoMatch.Drawing
                                return background;
                        }
                }
-               
+
                protected virtual void HandleSizeChangedEvent ()
                {
                        if (background != null) {
-                               background.ScaleFactor ((int) widget.Width, (int) widget.Height, out scaleX,
+                               background.ScaleFactor ((int)widget.Width, (int)widget.Height, out scaleX,
                                                        out scaleY, out translation);
                        }
                }
-               
+
                public override void Draw (IContext context, Area area)
                {
                        if (Background != null) {
diff --git a/LongoMatch.Drawing/CanvasObject/CardObject.cs b/LongoMatch.Drawing/CanvasObject/CardObject.cs
new file mode 100644
index 0000000..3aed21e
--- /dev/null
+++ b/LongoMatch.Drawing/CanvasObject/CardObject.cs
@@ -0,0 +1,71 @@
+//
+//  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.Common;
+using LongoMatch.Interfaces.Drawing;
+using LongoMatch.Store;
+
+namespace LongoMatch.Drawing.CanvasObject
+{
+       public class CardObject: TaggerObject
+       {
+
+               public CardObject (PenaltyCard card): base (card)
+               {
+                       Card = card;
+               }
+
+               public PenaltyCard Card {
+                       get;
+                       set;
+               }
+
+               public override void Draw (IDrawingToolkit tk, Area area)
+               {
+                       tk.Begin ();
+
+                       /* Draw Rectangle */
+                       tk.FillColor = Color;
+                       tk.StrokeColor = Color;
+                       tk.LineWidth = 0;
+                       switch (Card.Shape) {
+                       case CardShape.Rectangle:
+                               tk.DrawRoundedRectangle (Card.Position, Card.Width, Card.Height, 3);
+                               break;
+                       case CardShape.Circle:
+                               tk.DrawCircle (new Point (Card.Position.X + Card.Width / 2,
+                                                         Card.Position.Y + Card.Height / 2),
+                                              Math.Min (Card.Width, Card.Height) / 2);
+                               break;
+                       case CardShape.Triangle:
+                               tk.DrawTriangle (new Point (Card.Position.X + Card.Width / 2, 
Card.Position.Y),
+                                                Card.Width, Card.Height, SelectionPosition.Top);
+                               break;
+                       }
+
+                       /* Draw header */
+                       tk.LineWidth = 2;
+                       tk.StrokeColor = Color.Grey2;
+                       tk.FillColor = Color.Grey2;
+                       tk.DrawText (Position, Card.Width, Card.Height, Card.Name);
+                       DrawSelectionArea (tk);
+                       tk.End ();
+               }
+       }
+}
+
diff --git a/LongoMatch.Drawing/CanvasObject/CategoryLabel.cs 
b/LongoMatch.Drawing/CanvasObject/CategoryLabel.cs
index 970858a..98ec7a2 100644
--- a/LongoMatch.Drawing/CanvasObject/CategoryLabel.cs
+++ b/LongoMatch.Drawing/CanvasObject/CategoryLabel.cs
@@ -15,10 +15,8 @@
 //  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.Store;
 using LongoMatch.Interfaces.Drawing;
-using LongoMatch.Interfaces;
 using LongoMatch.Common;
 
 namespace LongoMatch.Drawing.CanvasObject
@@ -29,39 +27,40 @@ namespace LongoMatch.Drawing.CanvasObject
                double width, height;
 
                public CategoryLabel (Category category, double width, double height,
-                                     double offsetY)
+                                           double offsetY)
                {
                        this.category = category;
                        this.height = height;
                        this.width = width;
                        OffsetY = offsetY;
                }
-               
+
                public double Scroll {
                        get;
                        set;
                }
-               
+
                public double OffsetY {
                        set;
                        protected get;
                }
-               
-               public override void Draw (IDrawingToolkit tk, Area area) {
+
+               public override void Draw (IDrawingToolkit tk, Area area)
+               {
                        double y;
                        
                        y = OffsetY - Scroll;
-                       tk.Begin();
+                       tk.Begin ();
                        tk.FillColor = category.Color;
                        tk.StrokeColor = category.Color;
                        tk.FontSlant = FontSlant.Normal;
                        tk.FontSize = 12;
-                       tk.DrawRoundedRectangle (new Point(0, y + 1), width, height - 1, 3);  
+                       tk.DrawRoundedRectangle (new Point (0, y + 1), width, height - 1, 3);  
                        tk.FillColor = Constants.TEXT_COLOR;
                        tk.StrokeColor = Constants.TEXT_COLOR;
                        tk.DrawText (new Point (0, y), width, height,
-                                    category.Name);
-                       tk.End();
+                                             category.Name);
+                       tk.End ();
                }
        }
 }
diff --git a/LongoMatch.Drawing/CanvasObject/CategoryObject.cs 
b/LongoMatch.Drawing/CanvasObject/CategoryObject.cs
index eca4f2d..ebb63d4 100644
--- a/LongoMatch.Drawing/CanvasObject/CategoryObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/CategoryObject.cs
@@ -16,75 +16,221 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 //
 using System;
+using System.Collections.Generic;
+using LongoMatch.Common;
 using LongoMatch.Interfaces.Drawing;
 using LongoMatch.Store;
-using LongoMatch.Interfaces;
-using LongoMatch.Common;
 using LongoMatch.Store.Drawables;
 
 namespace LongoMatch.Drawing.CanvasObject
 {
-       public class CategoryObject: BaseCanvasObject, ICanvasSelectableObject
+       public class CategoryObject: TaggerObject
        {
-               public CategoryObject (Category category)
+
+               Dictionary <Rectangle, object> rects;
+               bool catSelected;
+
+               public CategoryObject (Category category): base (category)
                {
                        Category = category;
+                       rects = new Dictionary <Rectangle, object> ();
+                       SelectedTags = new List<Tag> ();
                }
-               
+
                public Category Category {
                        get;
                        set;
                }
-               
-               public Point Position {
+
+               public Tag AddTag {
                        get;
                        set;
                }
-               
-               public double Width {
-                       get;
-                       set;
+
+               public override int NRows {
+                       get {
+                               /* Header */
+                               int rows = 1;
+                               int tagsPerRow = Math.Max (1, Category.TagsPerRow);
+
+                               /* Recorder */
+                               if (Category.TagMode == TagMode.Free) {
+                                       rows ++;
+                               }
+                               rows += (int)Math.Ceiling ((float)TagsCount / tagsPerRow);
+                               return rows;
+                       }
                }
-               
-               public double Height {
+
+               int TagsCount {
+                       get {
+                               int tagsCount = Category.Tags.Count;
+                               if (Mode == TagMode.Edit) {
+                                       tagsCount ++;
+                               }
+                               return tagsCount;
+                       }
+               }
+
+               public List<Tag> SelectedTags {
                        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 Tag GetTagForCoords (Point p)
+               {
+                       Tag tag = null;
+
+                       foreach (Rectangle rect in rects.Keys) {
+                               Selection subsel = rect.GetSelection (p, 0);
+                               if (subsel != null) {
+                                       if (rects [rect] is Tag) {
+                                               tag = rects [rect] as Tag;
+                                       }
+                                       break;
+                               }
+                       }
+                       if (tag != AddTag) {
+                               return tag;
+                       } else {
+                               return null;
                        }
                }
-               
-               public override void Draw (IDrawingToolkit tk, Area area) {
-                       double heightPerRow;
-                       double ptr = 0;
-                       
-                       tk.Begin();
-                       heightPerRow = NRows / Height;
+
+               public override void ClickPressed (Point p)
+               {
+                       foreach (Rectangle rect in rects.Keys) {
+                               Selection subsel = rect.GetSelection (p, 0);
+                               if (subsel != null) {
+                                       if (rects [rect] is Category) {
+                                               CategoryClicked (rects [rect] as Category);
+                                       } else if (rects [rect] is Tag) {
+                                               TagClicked (rects [rect] as Tag);
+                                       } else {
+                                               RecordClicked ();
+                                       }
+                                       break;
+                               }
+                       }
+               }
+
+               public override void ClickReleased ()
+               {
+                       if (catSelected) {
+                               EmitClickEvent ();
+                               SelectedTags.Clear ();
+                               catSelected = false;
+                       }
+               }
+
+               public override void Draw (IDrawingToolkit tk, Area area)
+               {
+                       Point position;
+                       double heightPerRow, catWidth, rowwidth, yptr = 0;
+                       int tagsPerRow, tagsCount, row = 0;
+
+                       rects.Clear ();
+                       position = Category.Position;
+                       heightPerRow = Category.Height / NRows;
+                       catWidth = Category.Width;
+                       tagsCount = TagsCount;
+                       tagsPerRow = Math.Max (1, Category.TagsPerRow);
+                       rowwidth = catWidth / tagsPerRow;
+
+                       tk.Begin ();
+                       tk.FontWeight = FontWeight.Bold;
+
+                       /* Draw Rectangle */
+                       DrawButton (tk, true);
 
                        /* Draw header */
-                       tk.DrawRectangle (Position, Width,  heightPerRow);
-                       tk.DrawText (Position, Width, heightPerRow, Category.Name);
-                       ptr += heightPerRow;
-                       /* Draw Tagger */
-                       
-                       tk.End();
+                       tk.FillColor = LongoMatch.Common.Color.Grey2;
+                       tk.LineWidth = 2;
+                       if (catSelected && Mode != TagMode.Edit) {
+                               tk.StrokeColor = Category.DarkColor;
+                               tk.DrawText (position, catWidth, heightPerRow, Category.Name);
+                       } else {
+                               tk.StrokeColor = LongoMatch.Common.Color.Grey2;
+                               tk.DrawText (position, catWidth, heightPerRow, Category.Name);
+                       }
+                       rects.Add (new Rectangle (position, catWidth, heightPerRow), Category);
+                       yptr += heightPerRow;
+
+                       /* Draw tags */
+                       for (int i=0; i < tagsCount; i++) {
+                               Point pos;
+                               int col;
+                               Tag tag;
+
+                               row = i / tagsPerRow;
+                               col = i % tagsPerRow;
+                               pos = new Point (position.X + col * rowwidth,
+                                                            position.Y + yptr + row * heightPerRow);
+
+                               if (col == 0) {
+                                       if (i + tagsPerRow > tagsCount) {
+                                               rowwidth = catWidth / (tagsCount - i);
+                                       }
+                               }
+                               tk.StrokeColor = Category.DarkColor;
+                               tk.LineWidth = 1;
+                               if (col == 0) {
+                                       /* Horizontal line */
+                                       tk.DrawLine (pos, new Point (pos.X + catWidth, pos.Y));
+                               } else {
+                                       /* Vertical line */
+                                       tk.DrawLine (pos, new Point (pos.X, pos.Y + heightPerRow));
+                               }
+                               tk.StrokeColor = Category.TextColor;
+                               if (i < Category.Tags.Count) {
+                                       tag = Category.Tags [i];
+                                       if (Mode == TagMode.Edit || !SelectedTags.Contains (tag)) {
+                                               tk.DrawText (pos, rowwidth, heightPerRow, tag.Value);
+                                       } else {
+                                               tk.StrokeColor = Category.DarkColor;
+                                               tk.DrawText (pos, rowwidth, heightPerRow, tag.Value);
+                                       }
+                               } else {
+                                       tag = AddTag;
+                                       tk.DrawText (pos, rowwidth, heightPerRow, "Add");
+                               }
+                               rects.Add (new Rectangle (pos, rowwidth, heightPerRow), tag);
+                       }
+                       yptr += heightPerRow * (row + 1);
+
+                       if (Category.TagMode == TagMode.Free) {
+                               /* Draw Tagger */
+                               tk.DrawLine (new Point (position.X, position.Y + yptr),
+                                                        new Point (position.X + catWidth, position.Y + 
yptr));
+                               tk.DrawText (new Point (position.X, position.Y + yptr), catWidth, 
heightPerRow, "Record");
+                       }
+                       DrawSelectionArea (tk);
+                       tk.End ();
                }
-               
-               public Selection GetSelection (Point point, double precision) {
-                       return null;
+
+               void CategoryClicked (Category category)
+               {
+                       if (Category.TagMode == TagMode.Predifined) {
+                               catSelected = true;
+                       }
                }
 
-               public void Move (Selection s, Point p, Point start) {
+               void TagClicked (Tag tag)
+               {
+                       if (SelectedTags.Contains (tag)) {
+                               SelectedTags.Remove (tag);
+                       } else {
+                               SelectedTags.Clear ();
+                               SelectedTags.Add (tag);
+                               if (Category.TagMode == TagMode.Predifined) {
+                                       catSelected = true;
+                               }
+                       }
                }
 
+               void RecordClicked ()
+               {
+               }
        }
 }
 
diff --git a/LongoMatch.Drawing/CanvasObject/CounterObject.cs 
b/LongoMatch.Drawing/CanvasObject/CounterObject.cs
index 6ba4315..c69a217 100644
--- a/LongoMatch.Drawing/CanvasObject/CounterObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/CounterObject.cs
@@ -29,13 +29,14 @@ namespace LongoMatch.Drawing.CanvasObject
                public CounterObject ()
                {
                }
-               
+
                public CounterObject (Counter counter)
                {
                        Drawable = counter;
                }
-               
-               public override void Draw (IDrawingToolkit tk, Area area) {
+
+               public override void Draw (IDrawingToolkit tk, Area area)
+               {
                        Area darea;
                        
                        darea = Drawable.Area;
@@ -46,7 +47,7 @@ namespace LongoMatch.Drawing.CanvasObject
                        tk.DrawEllipse (Drawable.Center, Drawable.AxisX, Drawable.AxisY);
                        tk.StrokeColor = Drawable.TextColor;
                        tk.DrawText (darea.Start, darea.Width, darea.Height,
-                                    Drawable.Count.ToString());
+                                    Drawable.Count.ToString ());
                        DrawSelectionArea (tk);
                        tk.End ();
                }
diff --git a/LongoMatch.Drawing/CanvasObject/CrossObject.cs b/LongoMatch.Drawing/CanvasObject/CrossObject.cs
index 57c3a2d..1d6fcf1 100644
--- a/LongoMatch.Drawing/CanvasObject/CrossObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/CrossObject.cs
@@ -28,13 +28,14 @@ namespace LongoMatch.Drawing.CanvasObject
                public CrossObject ()
                {
                }
-               
+
                public CrossObject (Cross cross)
                {
                        Drawable = cross;
                }
-               
-               public override void Draw (IDrawingToolkit tk, Area area) {
+
+               public override void Draw (IDrawingToolkit tk, Area area)
+               {
                        tk.Begin ();
                        tk.FillColor = Drawable.FillColor;
                        tk.StrokeColor = Drawable.StrokeColor;
diff --git a/LongoMatch.Drawing/CanvasObject/EllipseObject.cs 
b/LongoMatch.Drawing/CanvasObject/EllipseObject.cs
index 365f74f..e4975a9 100644
--- a/LongoMatch.Drawing/CanvasObject/EllipseObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/EllipseObject.cs
@@ -29,13 +29,14 @@ namespace LongoMatch.Drawing.CanvasObject
                public EllipseObject ()
                {
                }
-               
+
                public EllipseObject (Ellipse ellipse)
                {
                        Drawable = ellipse;
                }
-               
-               public override void Draw (IDrawingToolkit tk, Area area) {
+
+               public override void Draw (IDrawingToolkit tk, Area area)
+               {
                        tk.Begin ();
                        tk.FillColor = Drawable.FillColor;
                        tk.StrokeColor = Drawable.StrokeColor;
diff --git a/LongoMatch.Drawing/CanvasObject/LineObject.cs b/LongoMatch.Drawing/CanvasObject/LineObject.cs
index fb3a63a..04e79fb 100644
--- a/LongoMatch.Drawing/CanvasObject/LineObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/LineObject.cs
@@ -28,13 +28,14 @@ namespace LongoMatch.Drawing.CanvasObject
                public LineObject ()
                {
                }
-               
+
                public LineObject (Line line)
                {
                        Drawable = line;
                }
-               
-               public override void Draw (IDrawingToolkit tk, Area area) {
+
+               public override void Draw (IDrawingToolkit tk, Area area)
+               {
                        tk.Begin ();
                        tk.FillColor = Drawable.FillColor;
                        tk.StrokeColor = Drawable.StrokeColor;
@@ -43,18 +44,18 @@ namespace LongoMatch.Drawing.CanvasObject
                        tk.DrawLine (Drawable.Start, Drawable.Stop);
                        tk.LineStyle = LineStyle.Normal;
                        if (Drawable.Type == LineType.Arrow ||
-                           Drawable.Type == LineType.DoubleArrow) {
+                               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);
+                               Drawable.Type == LineType.DoubleDot) {
+                               tk.DrawPoint (Drawable.Stop);
                        }
                        if (Drawable.Type == LineType.DoubleDot) {
-                           tk.DrawPoint (Drawable.Start);
+                               tk.DrawPoint (Drawable.Start);
                        }
                        
                        if (Selected) {
@@ -63,7 +64,6 @@ namespace LongoMatch.Drawing.CanvasObject
                        }
                        tk.End ();
                }
-
        }
 }
 
diff --git a/LongoMatch.Drawing/CanvasObject/PlayObject.cs b/LongoMatch.Drawing/CanvasObject/PlayObject.cs
index 322416d..1f3bb59 100644
--- a/LongoMatch.Drawing/CanvasObject/PlayObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/PlayObject.cs
@@ -29,7 +29,7 @@ namespace LongoMatch.Drawing.CanvasObject
                public PlayObject (Play play):base (play)
                {
                }
-               
+
                public override string Description {
                        get {
                                return Play.Name;
@@ -41,11 +41,12 @@ namespace LongoMatch.Drawing.CanvasObject
                                return TimeNode as Play;
                        }
                }
-               
-               public override void Draw (IDrawingToolkit tk, Area area) {
+
+               public override void Draw (IDrawingToolkit tk, Area area)
+               {
                        Color c = Play.Category.Color;
                        tk.Begin ();
-                       tk.FillColor = new Color (c.R, c.G, c.B, (byte) (0.8 * byte.MaxValue));
+                       tk.FillColor = new Color (c.R, c.G, c.B, (byte)(0.8 * byte.MaxValue));
                        if (Selected) {
                                tk.StrokeColor = Constants.PLAY_OBJECT_SELECTED_COLOR;
                        } else {
@@ -53,8 +54,8 @@ namespace LongoMatch.Drawing.CanvasObject
                        }
                        tk.LineWidth = 2;
                        tk.DrawRoundedRectangle (new Point (StartX, OffsetY),
-                                         Utils.TimeToPos (Play.Duration, SecondsPerPixel),
-                                         Constants.CATEGORY_HEIGHT, 2);
+                                                Utils.TimeToPos (Play.Duration, SecondsPerPixel),
+                                                Constants.CATEGORY_HEIGHT, 2);
                        tk.End ();
                }
        }
diff --git a/LongoMatch.Drawing/CanvasObject/PlayerObject.cs b/LongoMatch.Drawing/CanvasObject/PlayerObject.cs
index dcf9ccc..6e201c8 100644
--- a/LongoMatch.Drawing/CanvasObject/PlayerObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/PlayerObject.cs
@@ -36,37 +36,37 @@ namespace LongoMatch.Drawing.CanvasObject
                        UnSelectedColor = Constants.PLAYER_UNSELECTED_COLOR;
                        IconSize = PlayersIconSize.Medium;
                }
-               
-               public Player Player  {
+
+               public Player Player {
                        get;
                        protected set;
                }
-               
+
                public Point Position {
                        get;
                        set;
                }
-               
+
                public PlayersIconSize IconSize {
                        set;
                        get;
                }
-               
+
                public bool DrawPhoto {
                        get;
                        set;
                }
-               
+
                public Color SelectedColor {
                        get;
                        set;
                }
-               
+
                public Color UnSelectedColor {
                        get;
                        set;
                }
-               
+
                int Width {
                        get {
                                return (int)IconSize;
@@ -78,8 +78,9 @@ namespace LongoMatch.Drawing.CanvasObject
                                return (int)IconSize;
                        }
                }
-               
-               public Selection GetSelection (Point point, double precision) {
+
+               public Selection GetSelection (Point point, double precision)
+               {
                        Point position = new Point (Position.X - Width / 2, Position.Y - Height / 2);
 
                        if (point.X >= position.X && point.X <= position.X + Width) {
@@ -89,15 +90,17 @@ namespace LongoMatch.Drawing.CanvasObject
                        }
                        return null;
                }
-               
-               public void Move (Selection sel, Point p, Point start) {
+
+               public void Move (Selection sel, Point p, Point start)
+               {
                }
 
-               public override void Draw (IDrawingToolkit tk, Area area) {
+               public override void Draw (IDrawingToolkit tk, Area area)
+               {
                        Color background, line;
                        Point position = new Point (Position.X - Width / 2, Position.Y - Height / 2);
                        
-                       tk.Begin();
+                       tk.Begin ();
                        
                        /* Background */
                        if (Selected) {
@@ -119,11 +122,11 @@ namespace LongoMatch.Drawing.CanvasObject
                                tk.FontWeight = FontWeight.Bold;
                                /* Only draw player number for the smaller size */
                                if (IconSize > PlayersIconSize.Small) {
-                                       tk.DrawText (position, Width, Height - 20, Player.Number.ToString());
+                                       tk.DrawText (position, Width, Height - 20, Player.Number.ToString ());
                                        tk.FontSize = 8;
                                        tk.DrawText (new Point (position.X, position.Y + Height - 20), Width, 
20, Player.Name);
                                } else {
-                                       tk.DrawText (position, Width, Height, Player.Number.ToString());
+                                       tk.DrawText (position, Width, Height, Player.Number.ToString ());
                                }
                        } else {
                                tk.FillColor = Color.Black;
@@ -131,12 +134,11 @@ namespace LongoMatch.Drawing.CanvasObject
                                tk.DrawImage (position, Width, Height, Player.Photo, true);
                                tk.FontSize = 16;
                                tk.FontWeight = FontWeight.Bold;
-                               tk.DrawText (new Point (position.X, position.Y + Height - 20), Width, 20, 
Player.Number.ToString());
+                               tk.DrawText (new Point (position.X, position.Y + Height - 20), Width, 20, 
Player.Number.ToString ());
                        }
 
-                       tk.End();
+                       tk.End ();
                }
-
        }
 }
 
diff --git a/LongoMatch.Drawing/CanvasObject/PositionObject.cs 
b/LongoMatch.Drawing/CanvasObject/PositionObject.cs
index 05e9e66..be11be3 100644
--- a/LongoMatch.Drawing/CanvasObject/PositionObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/PositionObject.cs
@@ -25,7 +25,6 @@ using System.Collections.Generic;
 
 namespace LongoMatch.Drawing.CanvasObject
 {
-
        public class PositionObject:  CanvasObject, ICanvasSelectableObject
        {
 
@@ -35,7 +34,7 @@ namespace LongoMatch.Drawing.CanvasObject
                        Width = width;
                        Height = height;
                }
-               
+
                public override string Description {
                        get {
                                if (Play != null) {
@@ -49,41 +48,40 @@ namespace LongoMatch.Drawing.CanvasObject
                        get;
                        set;
                }
-               
+
                public int Height {
                        get;
                        set;
                }
-               
+
                public Play Play {
                        get;
                        set;
                }
-               
+
                public List<Point> Points {
                        get;
                        set;
                }
-               
+
                Point Start {
                        get {
-                               return Points[0].Denormalize (Width, Height);
+                               return Points [0].Denormalize (Width, Height);
                        }
-                       set{
-                               Points[0] = value.Normalize (Width, Height);
+                       set {
+                               Points [0] = value.Normalize (Width, Height);
                        }
                }
-               
+
                Point Stop {
                        get {
-                               return Points[1].Denormalize (Width, Height);
+                               return Points [1].Denormalize (Width, Height);
                        }
                        set {
-                               Points[1] = value.Normalize (Width, Height);
+                               Points [1] = value.Normalize (Width, Height);
                        }
                }
-               
-               
+
                public Selection GetSelection (Point point, double precision)
                {
                        if (point.Distance (Start) < precision) {
@@ -93,7 +91,7 @@ namespace LongoMatch.Drawing.CanvasObject
                        }
                        return null;
                }
-               
+
                public void Move (Selection sel, Point p, Point start)
                {
                        switch (sel.Position) {
@@ -107,12 +105,13 @@ namespace LongoMatch.Drawing.CanvasObject
                                throw new Exception ("Unsupported move for circle:  " + sel.Position);
                        }
                }
-               
-               public override void Draw (IDrawingToolkit tk, Area area) {
+
+               public override void Draw (IDrawingToolkit tk, Area area)
+               {
                        Color color, scolor;
                        double relSize;
                        
-                        relSize = Math.Max (1, (double) Width / 200);
+                       relSize = Math.Max (1, (double)Width / 200);
                        
                        tk.Begin ();
                        if (Play != null) {
@@ -128,10 +127,10 @@ namespace LongoMatch.Drawing.CanvasObject
                        }
                        tk.FillColor = color;
                        tk.StrokeColor = scolor;
-                       tk.LineWidth = (int) relSize;
-                       tk.DrawCircle (Start, (int) relSize * 2);
+                       tk.LineWidth = (int)relSize;
+                       tk.DrawCircle (Start, (int)relSize * 2);
                        if (Points.Count == 2) {
-                               tk.LineWidth = (int) relSize * 2;
+                               tk.LineWidth = (int)relSize * 2;
                                tk.DrawLine (Start, Stop);
                                tk.DrawArrow (Start, Stop, 10, 0.3, true);
                        }
diff --git a/LongoMatch.Drawing/CanvasObject/QuadrilateralObject.cs 
b/LongoMatch.Drawing/CanvasObject/QuadrilateralObject.cs
index b165df2..78c544d 100644
--- a/LongoMatch.Drawing/CanvasObject/QuadrilateralObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/QuadrilateralObject.cs
@@ -28,13 +28,14 @@ namespace LongoMatch.Drawing.CanvasObject
                public QuadrilateralObject ()
                {
                }
-               
+
                public QuadrilateralObject (Quadrilateral quadrilateral)
                {
                        Drawable = quadrilateral;
                }
-               
-               public override void Draw (IDrawingToolkit tk, Area area) {
+
+               public override void Draw (IDrawingToolkit tk, Area area)
+               {
                        tk.Begin ();
                        tk.FillColor = Drawable.FillColor;
                        tk.StrokeColor = Drawable.StrokeColor;
diff --git a/LongoMatch.Drawing/CanvasObject/RectangleObject.cs 
b/LongoMatch.Drawing/CanvasObject/RectangleObject.cs
index e779acb..1606f77 100644
--- a/LongoMatch.Drawing/CanvasObject/RectangleObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/RectangleObject.cs
@@ -33,8 +33,9 @@ namespace LongoMatch.Drawing.CanvasObject
                {
                        Drawable = rectangle;
                }
-               
-               public override void Draw (IDrawingToolkit tk, Area area) {
+
+               public override void Draw (IDrawingToolkit tk, Area area)
+               {
                        tk.Begin ();
                        tk.FillColor = Drawable.FillColor;
                        tk.StrokeColor = Drawable.StrokeColor;
diff --git a/LongoMatch.Drawing/CanvasObject/ScoreObject.cs b/LongoMatch.Drawing/CanvasObject/ScoreObject.cs
new file mode 100644
index 0000000..8da051e
--- /dev/null
+++ b/LongoMatch.Drawing/CanvasObject/ScoreObject.cs
@@ -0,0 +1,55 @@
+//
+//  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.Common;
+using LongoMatch.Interfaces;
+using LongoMatch.Store;
+
+namespace LongoMatch.Drawing.CanvasObject
+{
+       public class ScoreObject: TaggerObject
+       {
+               public ScoreObject (Score score): base (score)
+               {
+                       Score = score;
+               }
+
+               public Score Score {
+                       get;
+                       set;
+               }
+
+               public override void Draw (IDrawingToolkit tk, Area area)
+               {
+                       tk.Begin ();
+       
+                       /* Draw Rectangle */
+                       DrawButton (tk);
+                       
+                       /* Draw header */
+                       tk.LineWidth = 2;
+                       tk.StrokeColor = Score.TextColor;
+                       tk.FillColor = Score.TextColor;
+                       tk.DrawText (Position, Score.Width, Score.Height, Score.Name);
+                       DrawSelectionArea (tk);
+                       tk.End ();
+               }
+       }
+}
+
diff --git a/LongoMatch.Drawing/CanvasObject/TagObject.cs b/LongoMatch.Drawing/CanvasObject/TagObject.cs
new file mode 100644
index 0000000..0a12148
--- /dev/null
+++ b/LongoMatch.Drawing/CanvasObject/TagObject.cs
@@ -0,0 +1,55 @@
+//
+//  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.Common;
+using LongoMatch.Interfaces;
+using LongoMatch.Store;
+
+namespace LongoMatch.Drawing.CanvasObject
+{
+       public class TagObject: TaggerObject
+       {
+               public TagObject (TagButton tagger): base (tagger)
+               {
+                       TagButton = tagger;
+                       Toggle = true;
+               }
+
+               public TagButton TagButton {
+                       get;
+                       set;
+               }
+
+               public override void Draw (IDrawingToolkit tk, Area area)
+               {
+                       tk.Begin ();
+                       
+                       /* Draw Rectangle */
+                       DrawButton (tk);
+                       
+                       /* Draw header */
+                       tk.LineWidth = 2;
+                       tk.StrokeColor = TagButton.TextColor;
+                       tk.FillColor = TagButton.TextColor;
+                       tk.DrawText (Position, TagButton.Width, TagButton.Height, TagButton.Name);
+                       DrawSelectionArea (tk);
+                       tk.End ();
+               }
+       }
+}
diff --git a/LongoMatch.Drawing/CanvasObject/TaggerObject.cs b/LongoMatch.Drawing/CanvasObject/TaggerObject.cs
new file mode 100644
index 0000000..f9b2904
--- /dev/null
+++ b/LongoMatch.Drawing/CanvasObject/TaggerObject.cs
@@ -0,0 +1,190 @@
+//
+//  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.Common;
+using LongoMatch.Interfaces;
+using LongoMatch.Interfaces.Drawing;
+using LongoMatch.Store.Drawables;
+using LongoMatch.Store;
+using LongoMatch.Handlers;
+
+namespace LongoMatch.Drawing.CanvasObject
+{
+       public delegate void TaggerObjectHandler (TaggerObject to);
+       public abstract class TaggerObject: CanvasObject, ICanvasSelectableObject
+       {
+               public event TaggerObjectHandler TaggerClickedEvent;
+
+               public TaggerObject (TaggerButton tagger)
+               {
+                       Tagger = tagger;
+                       Toggle = false;
+               }
+
+               public TaggerButton Tagger {
+                       get;
+                       set;
+               }
+
+               public Point Position {
+                       get {
+                               if (!Active) {
+                                       return Tagger.Position;
+                               } else {
+                                       return new Point (Tagger.Position.X + 1, Tagger.Position.Y + 1);
+                               }
+                       }
+               }
+
+               public Color Color {
+                       get {
+                               if (!Active) {
+                                       return Tagger.Color;
+                               } else {
+                                       return Tagger.DarkColor;
+                               }
+                       }
+               }
+
+               public TagMode Mode {
+                       get;
+                       set;
+               }
+
+               public virtual int NRows {
+                       get {
+                               return 1;
+                       }
+               }
+
+               public bool Toggle {
+                       get;
+                       set;
+               }
+
+               public bool Active {
+                       get;
+                       set;
+               }
+
+               public Time Start {
+                       get;
+                       set;
+               }
+
+               public override void ClickPressed (Point p)
+               {
+                       Active = !Active;
+               }
+
+               protected void EmitClickEvent ()
+               {
+                       if (TaggerClickedEvent != null) {
+                               TaggerClickedEvent (this);
+                       }
+               }
+
+               public override void ClickReleased ()
+               {
+                       if (!Toggle) {
+                               Active = !Active;
+                       }
+                       EmitClickEvent ();
+               }
+
+               public virtual Selection GetSelection (Point p, double precision)
+               {
+                       Selection s;
+
+                       Rectangle r = new Rectangle (Tagger.Position, Tagger.Width,
+                                                    Tagger.Height);
+                       s = r.GetSelection (p, precision);
+                       if (s != null) {
+                               s.Drawable = this;
+                               if (s.Position != SelectionPosition.BottomRight &&
+                                       s.Position != SelectionPosition.Right &&
+                                       s.Position != SelectionPosition.Bottom) {
+                                       s.Position = SelectionPosition.All;
+                               }
+                       }
+                       return s;
+               }
+
+               public void Move (Selection s, Point p, Point start)
+               {
+                       switch (s.Position) {
+                       case SelectionPosition.Right:
+                               Tagger.Width = (int)(p.X - Tagger.Position.X);
+                               Tagger.Width = (int)Math.Max (10, Tagger.Width);
+                               break;
+                       case SelectionPosition.Bottom:
+                               Tagger.Height = (int)(p.Y - Tagger.Position.Y);
+                               Tagger.Height = (int)Math.Max (10, Tagger.Height);
+                               break;
+                       case SelectionPosition.BottomRight:
+                               Tagger.Width = (int)(p.X - Tagger.Position.X);
+                               Tagger.Height = (int)(p.Y - Tagger.Position.Y);
+                               Tagger.Width = Math.Max (10, Tagger.Width);
+                               Tagger.Height = Math.Max (10, Tagger.Height);
+                               break;
+                       case SelectionPosition.All:
+                               {
+                                       Tagger.Position.X += p.X - start.X;
+                                       Tagger.Position.Y += p.Y - start.Y;
+                                       Tagger.Position.X = Math.Max (Tagger.Position.X, 0);
+                                       Tagger.Position.Y = Math.Max (Tagger.Position.Y, 0);
+                                       break;
+                               }
+                       default:
+                               throw new Exception ("Unsupported move for tagger object:  " + s.Position);
+                       }
+               }
+
+               protected void DrawSelectionArea (IDrawingToolkit tk)
+               {
+                       if (!Selected || Mode != TagMode.Edit) {
+                               return;
+                       }
+                       tk.StrokeColor = Constants.SELECTION_INDICATOR_COLOR;
+                       tk.StrokeColor = Constants.SELECTION_AREA_COLOR;
+                       tk.FillColor = null;
+                       tk.LineStyle = LineStyle.Dashed;
+                       tk.LineWidth = 1;
+                       tk.DrawRectangle (Tagger.Position, Tagger.Width, Tagger.Height);
+
+                       tk.StrokeColor = tk.FillColor = Constants.SELECTION_INDICATOR_COLOR;
+                       tk.LineStyle = LineStyle.Normal;
+                       tk.DrawRectangle (new Point (Tagger.Position.X + Tagger.Width - 3,
+                                                    Tagger.Position.Y + Tagger.Height - 3),
+                                         6, 6);
+               }
+
+               protected void DrawButton (IDrawingToolkit tk, bool ignoreActive=false)
+               {
+                       tk.LineWidth = 0;
+                       if (Active && !ignoreActive) {
+                               tk.DrawButton (Tagger.Position, Tagger.Width, Tagger.Height, 3, Tagger.Color, 
Tagger.DarkColor);
+                       } else {
+                               tk.DrawButton (Tagger.Position, Tagger.Width, Tagger.Height, 3, 
Tagger.LightColor, Tagger.Color);
+                       }
+               }
+
+               public abstract override void Draw (IDrawingToolkit tk, Area area);
+       }
+}
+
diff --git a/LongoMatch.Drawing/CanvasObject/TextObject.cs b/LongoMatch.Drawing/CanvasObject/TextObject.cs
index e822311..8fb8996 100644
--- a/LongoMatch.Drawing/CanvasObject/TextObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/TextObject.cs
@@ -33,8 +33,9 @@ namespace LongoMatch.Drawing.CanvasObject
                {
                        Drawable = text;
                }
-               
-               public override void Draw (IDrawingToolkit tk, Area area) {
+
+               public override void Draw (IDrawingToolkit tk, Area area)
+               {
                        tk.Begin ();
                        tk.FillColor = Drawable.FillColor;
                        tk.StrokeColor = Drawable.StrokeColor;
diff --git a/LongoMatch.Drawing/CanvasObject/TimeNodeObject.cs 
b/LongoMatch.Drawing/CanvasObject/TimeNodeObject.cs
index 850a0f7..0dcd049 100644
--- a/LongoMatch.Drawing/CanvasObject/TimeNodeObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/TimeNodeObject.cs
@@ -26,59 +26,60 @@ namespace LongoMatch.Drawing.CanvasObject
 {
        public class TimeNodeObject: CanvasObject, ICanvasSelectableObject
        {
-               const int MAX_TIME_SPAN=1000;
-               
+               const int MAX_TIME_SPAN = 1000;
+
                public TimeNodeObject (TimeNode node)
                {
                        TimeNode = node;
                        SelectWhole = true;
                }
-               
+
                public TimeNode TimeNode {
                        get;
                        set;
                }
-               
+
                public bool SelectWhole {
                        get;
                        set;
                }
-               
+
                public Time MaxTime {
                        set;
                        protected get;
                }
-               
+
                public double OffsetY {
                        get;
                        set;
                }
-               
+
                public double SecondsPerPixel {
                        set;
                        protected get;
                }
-               
+
                protected double StartX {
                        get {
                                return Utils.TimeToPos (TimeNode.Start, SecondsPerPixel);
                        }
                }
-               
+
                protected double StopX {
                        get {
                                return Utils.TimeToPos (TimeNode.Stop, SecondsPerPixel);
                        }
                }
-               
+
                protected double CenterX {
                        get {
                                return Utils.TimeToPos (TimeNode.Start + TimeNode.Duration / 2,
                                                        SecondsPerPixel);
                        }
                }
-               
-               public Selection GetSelection (Point point, double precision) {
+
+               public Selection GetSelection (Point point, double precision)
+               {
                        double accuracy;
                        if (point.Y >= OffsetY && point.Y < OffsetY + Constants.CATEGORY_HEIGHT) {
                                if (Drawable.MatchAxis (point.X, StartX, precision, out accuracy)) {
@@ -92,8 +93,9 @@ namespace LongoMatch.Drawing.CanvasObject
                        }
                        return null;
                }
-               
-               public void Move (Selection sel, Point p, Point start) {
+
+               public void Move (Selection sel, Point p, Point start)
+               {
                        Time newTime = Utils.PosToTime (p, SecondsPerPixel);
 
                        if (p.X < 0) {
@@ -104,26 +106,29 @@ namespace LongoMatch.Drawing.CanvasObject
                        newTime = Utils.PosToTime (p, SecondsPerPixel);
 
                        switch (sel.Position) {
-                       case SelectionPosition.Left: {
-                               if (newTime.MSeconds + MAX_TIME_SPAN > TimeNode.Stop.MSeconds) {
-                                       TimeNode.Start.MSeconds = TimeNode.Stop.MSeconds - MAX_TIME_SPAN;
-                               } else {
-                                       TimeNode.Start = newTime;
+                       case SelectionPosition.Left:
+                               {
+                                       if (newTime.MSeconds + MAX_TIME_SPAN > TimeNode.Stop.MSeconds) {
+                                               TimeNode.Start.MSeconds = TimeNode.Stop.MSeconds - 
MAX_TIME_SPAN;
+                                       } else {
+                                               TimeNode.Start = newTime;
+                                       }
+                                       break;
                                }
-                               break;
-                       }
-                       case SelectionPosition.Right: {
-                               if (newTime.MSeconds - MAX_TIME_SPAN < TimeNode.Start.MSeconds) {
-                                       TimeNode.Stop.MSeconds = TimeNode.Start.MSeconds + MAX_TIME_SPAN;
-                               } else {
-                                       TimeNode.Stop = newTime;
+                       case SelectionPosition.Right:
+                               {
+                                       if (newTime.MSeconds - MAX_TIME_SPAN < TimeNode.Start.MSeconds) {
+                                               TimeNode.Stop.MSeconds = TimeNode.Start.MSeconds + 
MAX_TIME_SPAN;
+                                       } else {
+                                               TimeNode.Stop = newTime;
+                                       }
+                                       break;
                                }
-                               break;
-                       }
                        }
                }
-               
-               public override void Draw (IDrawingToolkit tk, Area area) {
+
+               public override void Draw (IDrawingToolkit tk, Area area)
+               {
                        double mid, bottom, stop;
                        Color c;
 
@@ -153,6 +158,5 @@ namespace LongoMatch.Drawing.CanvasObject
                                     
                        tk.End ();
                }
-               
        }
 }
diff --git a/LongoMatch.Drawing/CanvasObject/TimelineObject.cs 
b/LongoMatch.Drawing/CanvasObject/TimelineObject.cs
index c8ae890..a5c5d85 100644
--- a/LongoMatch.Drawing/CanvasObject/TimelineObject.cs
+++ b/LongoMatch.Drawing/CanvasObject/TimelineObject.cs
@@ -31,7 +31,7 @@ namespace LongoMatch.Drawing.CanvasObject
                List<TimeNodeObject> nodes;
                double secondsPerPixel;
                protected Time maxTime;
-               
+
                public TimelineObject (Time maxTime, double offsetY, Color background)
                {
                        this.background = background;
@@ -39,10 +39,10 @@ namespace LongoMatch.Drawing.CanvasObject
                        this.maxTime = maxTime;
                        Visible = true;
                        CurrentTime = new Time (0);
-                       OffsetY  = offsetY;
+                       OffsetY = offsetY;
                        SecondsPerPixel = 0.1;
                }
-               
+
                public double SecondsPerPixel {
                        set {
                                secondsPerPixel = value;
@@ -54,35 +54,38 @@ namespace LongoMatch.Drawing.CanvasObject
                                return secondsPerPixel;
                        }
                }
-               
+
                public Time CurrentTime {
                        set;
                        protected get;
                }
-               
+
                public double Width {
                        set;
                        protected get;
                }
-               
+
                public double OffsetY {
                        set;
                        get;
                }
-               
-               public void AddNode (TimeNodeObject o) {
+
+               public void AddNode (TimeNodeObject o)
+               {
                        nodes.Add (o);
                }
-               
-               public void RemoveNode (TimeNode node) {
+
+               public void RemoveNode (TimeNode node)
+               {
                        nodes.RemoveAll (po => po.TimeNode == node);
                }
 
-               public override void Draw (IDrawingToolkit tk, Area area) {
+               public override void Draw (IDrawingToolkit tk, Area area)
+               {
                        double position;
                        List<TimeNodeObject> selected;
                        
-                       selected = new List<TimeNodeObject>();
+                       selected = new List<TimeNodeObject> ();
 
                        tk.Begin ();
                        tk.FillColor = background;
@@ -108,10 +111,11 @@ namespace LongoMatch.Drawing.CanvasObject
                        tk.DrawLine (new Point (position, OffsetY),
                                     new Point (position, OffsetY + Constants.CATEGORY_HEIGHT));
                        
-                       tk.End();
+                       tk.End ();
                }
-               
-               public Selection GetSelection (Point point, double precision) {
+
+               public Selection GetSelection (Point point, double precision)
+               {
                        Selection selection = null;
 
                        if (point.Y >= OffsetY && point.Y < OffsetY + Constants.CATEGORY_HEIGHT) {
@@ -132,13 +136,15 @@ namespace LongoMatch.Drawing.CanvasObject
                        }
                        return selection;
                }
-               
-               public void Move (Selection s, Point p, Point start) {
+
+               public void Move (Selection s, Point p, Point start)
+               {
                        s.Drawable.Move (s, p, start);
                }
        }
-       
-       public class CategoryTimeline: TimelineObject {
+
+       public class CategoryTimeline: TimelineObject
+       {
 
                public CategoryTimeline (List<Play> plays, Time maxTime, double offsetY, Color background):
                        base (maxTime, offsetY, background)
@@ -147,18 +153,19 @@ namespace LongoMatch.Drawing.CanvasObject
                                AddPlay (p);
                        }
                }
-               
-               public void AddPlay (Play play){
+
+               public void AddPlay (Play play)
+               {
                        PlayObject po = new PlayObject (play);
                        po.OffsetY = OffsetY;
                        po.SecondsPerPixel = SecondsPerPixel;
                        po.MaxTime = maxTime;
                        AddNode (po);
                }
-
        }
-       
-       public class TimerTimeline: TimelineObject {
+
+       public class TimerTimeline: TimelineObject
+       {
 
                public TimerTimeline (List<Timer> timers, Time maxTime, double offsetY, Color background):
                        base (maxTime, offsetY, background)
diff --git a/LongoMatch.Drawing/CanvasObject/TimerObject.cs b/LongoMatch.Drawing/CanvasObject/TimerObject.cs
new file mode 100644
index 0000000..197ab6d
--- /dev/null
+++ b/LongoMatch.Drawing/CanvasObject/TimerObject.cs
@@ -0,0 +1,120 @@
+//
+//  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 LongoMatch.Common;
+using LongoMatch.Interfaces;
+using LongoMatch.Interfaces.Drawing;
+using LongoMatch.Store;
+
+namespace LongoMatch.Drawing.CanvasObject
+{
+       public class TimerObject: TaggerObject
+       {
+               Time currentTime;
+
+               public TimerObject (Timer timer): base (timer)
+               {
+                       Timer = timer;
+                       Toggle = true;
+                       CurrentTime = new Time (0);
+               }
+
+               public Timer Timer {
+                       get;
+                       set;
+               }
+
+               public Time CurrentTime {
+                       set {
+                               if (CurrentTimeNode != null) {
+                                       if (value < CurrentTimeNode.Start) {
+                                               Timer.CancelTimer ();
+                                               CurrentTimeNode = null;
+                                       }
+                               }
+                               currentTime = value;
+                       }
+                       get {
+                               return currentTime;
+                       }
+               }
+
+               TimeNode CurrentTimeNode {
+                       get;
+                       set;
+               }
+
+               Time PartialTime {
+                       get {
+                               if (CurrentTimeNode == null) {
+                                       return new Time (0);
+                               } else {
+                                       return CurrentTime - CurrentTimeNode.Start;
+                               }
+                       }
+               }
+
+               public override void ClickReleased ()
+               {
+                       TimeNode tn;
+
+                       base.ClickReleased ();
+                       tn = CurrentTimeNode;
+                       if (tn == null) {
+                               Log.Debug ("Start timer at " + CurrentTime.ToMSecondsString ());
+                               CurrentTimeNode = Timer.StartTimer (CurrentTime);
+                       } else {
+                               Log.Debug ("Stop timer at " + CurrentTime.ToMSecondsString ());
+                               Timer.StopTimer (CurrentTime);
+                               tn.Stop = CurrentTime;
+                               CurrentTimeNode = null;
+                       }
+               }
+
+               public override void Draw (IDrawingToolkit tk, Area area)
+               {
+                       double h;
+
+                       if (CurrentTimeNode == null || Mode == TagMode.Edit) {
+                               h = Timer.Height;
+                       } else {
+                               h = Timer.Height / 2;
+                       }
+                       
+                       tk.Begin ();
+
+                       /* Draw Rectangle */
+                       DrawButton (tk);
+                       
+                       /* Draw header */
+                       tk.LineWidth = 2;
+                       tk.StrokeColor = Timer.TextColor;
+                       tk.FillColor = Timer.TextColor;
+                       tk.FontWeight = FontWeight.Bold;
+                       tk.DrawText (Position, Timer.Width, h, Timer.Name);
+                       if (CurrentTimeNode != null && Mode != TagMode.Edit) {
+                               tk.DrawText (new Point (Position.X, Position.Y + h), Timer.Width, h,
+                                            PartialTime.ToSecondsString ());
+                       }
+                       DrawSelectionArea (tk);
+                       tk.End ();
+               }
+       }
+}
+
diff --git a/LongoMatch.Drawing/Constants.cs b/LongoMatch.Drawing/Constants.cs
index 61d8d83..f2a852c 100644
--- a/LongoMatch.Drawing/Constants.cs
+++ b/LongoMatch.Drawing/Constants.cs
@@ -29,12 +29,11 @@ namespace LongoMatch.Drawing
                public const int CATEGORY_H_SPACE = 5;
                public const int TIMER_HEIGHT = 20;
                public const int TIMERULE_HEIGHT = 30;
-
                public const int TAGGER_POINT_SIZE = 5;
                public const int TAGGER_LINE_WIDTH = 3;
                public static Color TAGGER_POINT_COLOR = Color.Blue1;
                public static Color TAGGER_SELECTION_COLOR = Color.Grey1;
-
+               public const int CATEGORY_TPL_GRID = 10;
                public const double TIMELINE_ACCURACY = 5;
                public static Color TEXT_COLOR = Color.Black;
                public static Color TIMELINE_LINE_COLOR = Color.Black;
@@ -49,9 +48,7 @@ namespace LongoMatch.Drawing
                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 27d410f..57d4b38 100644
--- a/LongoMatch.Drawing/LongoMatch.Drawing.mdp
+++ b/LongoMatch.Drawing/LongoMatch.Drawing.mdp
@@ -16,7 +16,6 @@
   <Contents>
     <File subtype="Directory" buildaction="Compile" name="CanvasObject" />
     <File subtype="Code" buildaction="Compile" name="Canvas.cs" />
-    <File subtype="Code" buildaction="Compile" name="enums.cs" />
     <File subtype="Directory" buildaction="Compile" name="CanvasObject" />
     <File subtype="Directory" buildaction="Compile" name="Widgets" />
     <File subtype="Code" buildaction="Compile" name="CanvasObject/CategoryLabel.cs" />
@@ -43,6 +42,13 @@
     <File subtype="Code" buildaction="Compile" name="CanvasObject/TextObject.cs" />
     <File subtype="Code" buildaction="Compile" name="CanvasObject/CounterObject.cs" />
     <File subtype="Code" buildaction="Compile" name="Utils.cs" />
+    <File subtype="Code" buildaction="Compile" name="CanvasObject/CategoryObject.cs" />
+    <File subtype="Code" buildaction="Compile" name="Widgets/PlaysTagger.cs" />
+    <File subtype="Code" buildaction="Compile" name="CanvasObject/TaggerObject.cs" />
+    <File subtype="Code" buildaction="Compile" name="CanvasObject/ScoreObject.cs" />
+    <File subtype="Code" buildaction="Compile" name="CanvasObject/CardObject.cs" />
+    <File subtype="Code" buildaction="Compile" name="CanvasObject/TimerObject.cs" />
+    <File subtype="Code" buildaction="Compile" name="CanvasObject/TagObject.cs" />
   </Contents>
   <References>
     <ProjectReference type="Package" localcopy="True" refto="System, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b77a5c561934e089" />
diff --git a/LongoMatch.Drawing/Makefile.am b/LongoMatch.Drawing/Makefile.am
index 55c9d42..92a8cbb 100644
--- a/LongoMatch.Drawing/Makefile.am
+++ b/LongoMatch.Drawing/Makefile.am
@@ -6,7 +6,9 @@ LINK = $(REF_DEP_LONGOMATCH_DRAWING)
 
 SOURCES = Canvas.cs \
        CanvasObject/CanvasObject.cs \
+       CanvasObject/CardObject.cs \
        CanvasObject/CategoryLabel.cs \
+       CanvasObject/CategoryObject.cs \
        CanvasObject/CounterObject.cs \
        CanvasObject/CrossObject.cs \
        CanvasObject/EllipseObject.cs \
@@ -16,19 +18,23 @@ SOURCES = Canvas.cs \
        CanvasObject/PositionObject.cs \
        CanvasObject/QuadrilateralObject.cs \
        CanvasObject/RectangleObject.cs \
+       CanvasObject/ScoreObject.cs \
+       CanvasObject/TagObject.cs \
+       CanvasObject/TaggerObject.cs \
        CanvasObject/TextObject.cs \
        CanvasObject/TimeNodeObject.cs \
        CanvasObject/TimelineObject.cs \
+       CanvasObject/TimerObject.cs \
        Constants.cs \
        Utils.cs \
        Widgets/Blackboard.cs \
        Widgets/CategoriesLabels.cs \
+       Widgets/PlaysTagger.cs \
        Widgets/PlaysTimeline.cs \
        Widgets/PositionTagger.cs \
        Widgets/TeamTagger.cs \
        Widgets/TimersTimeline.cs \
-       Widgets/Timerule.cs \
-       enums.cs
+       Widgets/Timerule.cs
 
 RESOURCES = 
 
diff --git a/LongoMatch.Drawing/Utils.cs b/LongoMatch.Drawing/Utils.cs
index 5a5b059..a2d224e 100644
--- a/LongoMatch.Drawing/Utils.cs
+++ b/LongoMatch.Drawing/Utils.cs
@@ -27,24 +27,47 @@ namespace LongoMatch.Drawing
 {
        public class Utils
        {
-               public static double TimeToPos (Time time, double secondsPerPixel) {
+               public static double Round (double n, int multiple)
+               {
+                       if (n % multiple > multiple / 2) {
+                               return RoundUp (n, multiple);
+                       } else {
+                               return RoundDown (n, multiple);
+                       }
+               }
+
+               public static double RoundUp (double n, int multiple)
+               {
+                       return  (multiple - n % multiple) + n;
+               }
+
+               public static double RoundDown (double n, int multiple)
+               {
+                       return n - n % multiple; 
+               }
+
+               public static double TimeToPos (Time time, double secondsPerPixel)
+               {
                        return (double)time.MSeconds / 1000 / secondsPerPixel;
                }
-               
-               public static Time PosToTime (Point p, double secondsPerPixel) {
-                       return new Time ((int) (p.X * 1000 * secondsPerPixel));
+
+               public static Time PosToTime (Point p, double secondsPerPixel)
+               {
+                       return new Time ((int)(p.X * 1000 * secondsPerPixel));
                }
-               
-               public static ICanvasSelectableObject CanvasFromDrawableObject (IBlackboardObject drawable) {
+
+               public static ICanvasSelectableObject CanvasFromDrawableObject (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();
+                                                          drawable.GetType ().ToString ().Split ('.').Last 
());
+                       ObjectHandle handle = Activator.CreateInstance (null, objecttype);
+                       ICanvasDrawableObject d = (ICanvasDrawableObject)handle.Unwrap ();
                        d.IDrawableObject = drawable;
                        return d;
                }
 
-               public static Image RenderFrameDrawingToImage (IDrawingToolkit tk, Image image, FrameDrawing 
fd) {
+               public static Image RenderFrameDrawingToImage (IDrawingToolkit tk, Image image, FrameDrawing 
fd)
+               {
                        Image img;
                        ISurface surface;
                        
diff --git a/LongoMatch.Drawing/Widgets/Blackboard.cs b/LongoMatch.Drawing/Widgets/Blackboard.cs
index ca0d267..f6f0695 100644
--- a/LongoMatch.Drawing/Widgets/Blackboard.cs
+++ b/LongoMatch.Drawing/Widgets/Blackboard.cs
@@ -34,6 +34,7 @@ namespace LongoMatch.Drawing.Widgets
                public event ShowDrawToolMenuHandler ShowMenuEvent;
                public event ConfigureDrawingObjectHandler ConfigureObjectEvent;
                public event DrawableChangedHandler DrawableChangedEvent;
+
                DrawTool tool;
                FrameDrawing drawing;
                ISurface backbuffer;
@@ -48,22 +49,23 @@ namespace LongoMatch.Drawing.Widgets
                        LineStyle = LineStyle.Normal;
                        LineType = LineType.Arrow;
                        tool = DrawTool.Selection;
-                       
                }
 
-               public void Dispose(){
-                       Dispose(true);
-                       GC.SuppressFinalize(this);
+               public void Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
                }
 
-               protected virtual void Dispose(bool disposing){
+               protected virtual void Dispose (bool disposing)
+               {
                        if (disposing) {
                                if (backbuffer != null)
-                                       backbuffer.Dispose();
-                                       backbuffer = null;
+                                       backbuffer.Dispose ();
+                               backbuffer = null;
                        }
-               }       
-               
+               }
+
                public FrameDrawing Drawing {
                        set {
                                Clear (false);
@@ -71,7 +73,7 @@ namespace LongoMatch.Drawing.Widgets
                                foreach (IBlackboardObject d in value.Drawables) {
                                        Add (d);
                                }
-                               if (backbuffer !=  null) {
+                               if (backbuffer != null) {
                                        backbuffer.Dispose ();
                                }
                                backbuffer = tk.CreateSurface (Background.Width, Background.Height,
@@ -83,12 +85,12 @@ namespace LongoMatch.Drawing.Widgets
                        get;
                        set;
                }
-               
+
                public Color TextColor {
                        get;
                        set;
                }
-               
+
                public Color TextBackgroundColor {
                        get;
                        set;
@@ -98,7 +100,7 @@ namespace LongoMatch.Drawing.Widgets
                        get;
                        set;
                }
-               
+
                public LineType LineType {
                        get;
                        set;
@@ -108,7 +110,7 @@ namespace LongoMatch.Drawing.Widgets
                        get;
                        set;
                }
-               
+
                public DrawTool Tool {
                        get {
                                return tool;
@@ -118,8 +120,9 @@ namespace LongoMatch.Drawing.Widgets
                                widget.SetCursorForTool (tool);
                        }
                }
-               
-               public void DeleteSelection () {
+
+               public void DeleteSelection ()
+               {
                        foreach (ICanvasDrawableObject o in Selections.Select (s => s.Drawable)) {
                                Objects.Remove (o);
                                drawing.Drawables.Remove ((Drawable)o.IDrawableObject);
@@ -128,8 +131,9 @@ namespace LongoMatch.Drawing.Widgets
                        UpdateCounters ();
                        widget.ReDraw ();
                }
-               
-               public void Clear (bool resetDrawing = true) {
+
+               public void Clear (bool resetDrawing = true)
+               {
                        ClearSelection ();
                        Objects.Clear ();
                        if (drawing != null && resetDrawing) {
@@ -140,28 +144,32 @@ namespace LongoMatch.Drawing.Widgets
                                        tk.Context = c;
                                        tk.Clear (new Color (0, 0, 0, 0));
                                        tk.Context = null;
-                               };
+                               }
+                               ;
                        }
                        widget.ReDraw ();
                }
-               
-               public Image Save () {
+
+               public Image Save ()
+               {
                        ClearSelection ();
-                       drawing.Freehand = backbuffer.Copy();
+                       drawing.Freehand = backbuffer.Copy ();
                        return tk.Copy (this, Background.Width, Background.Height);
                }
 
-               public void Save (string filename) {
+               public void Save (string filename)
+               {
                        ClearSelection ();
                        tk.Save (this, Background.Width, Background.Height, filename);
                }
-               
-               ICanvasSelectableObject Add (IBlackboardObject drawable) {
+
+               ICanvasSelectableObject Add (IBlackboardObject drawable)
+               {
                        ICanvasSelectableObject cso = Utils.CanvasFromDrawableObject (drawable);
                        Objects.Add (cso);
                        return cso;
                }
-               
+
                protected override void StartMove (Selection sel)
                {
                        Drawable drawable = null;
@@ -174,7 +182,7 @@ namespace LongoMatch.Drawing.Widgets
                        switch (Tool) {
                        case DrawTool.Line:
                                drawable = new Line (start, new Point (start.X + 1, start.Y + 1),
-                                                  LineType, LineStyle);
+                                                    LineType, LineStyle);
                                drawable.FillColor = Color;
                                pos = SelectionPosition.LineStop;
                                break;
@@ -190,37 +198,38 @@ namespace LongoMatch.Drawing.Widgets
                                break;
                        case DrawTool.CircleArea:
                                drawable = new Ellipse (start, 2, 2);
-                               drawable.FillColor = Color.Copy();
+                               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 = 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 = 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;
+                       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;
                                }
-                               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;
@@ -246,16 +255,16 @@ namespace LongoMatch.Drawing.Widgets
                                widget.ReDraw ();
                        }
                }
-               
+
                protected override void StopMove ()
                {
-                       Selection sel = Selections.FirstOrDefault();
+                       Selection sel = Selections.FirstOrDefault ();
                        if (sel != null) {
-                               (sel.Drawable as ICanvasDrawableObject).IDrawableObject.Reorder();
+                               (sel.Drawable as ICanvasDrawableObject).IDrawableObject.Reorder ();
                        }
                        handdrawing = false;
                }
-               
+
                protected override void ShowMenu (Point coords)
                {
                        Selection sel = Selections.FirstOrDefault ();
@@ -264,19 +273,20 @@ namespace LongoMatch.Drawing.Widgets
                        }
                        
                }
-               
+
                protected override void SelectionChanged (System.Collections.Generic.List<Selection> sel)
                {
                        if (DrawableChangedEvent != null) {
                                if (sel != null && sel.Count > 0) {
-                                       DrawableChangedEvent ((sel[0].Drawable as 
ICanvasDrawableObject).IDrawableObject);
+                                       DrawableChangedEvent ((sel [0].Drawable as 
ICanvasDrawableObject).IDrawableObject);
                                } else {
                                        DrawableChangedEvent (null);
                                }
                        }
                }
 
-               void UpdateCounters () {
+               void UpdateCounters ()
+               {
                        int index = 1;
                        
                        foreach (IBlackboardObject bo in
@@ -287,7 +297,7 @@ namespace LongoMatch.Drawing.Widgets
                                }
                        }
                }
-               
+
                protected override void CursorMoved (Point coords)
                {
                        if (handdrawing) {
@@ -306,10 +316,10 @@ namespace LongoMatch.Drawing.Widgets
                                        tk.DrawLine (start, coords);
                                        tk.End ();
                                }
-                               widget.ReDraw();
+                               widget.ReDraw ();
                        }
                }
-               
+
                public override void Draw (IContext context, Area area)
                {
                        tk.Context = context;
@@ -321,6 +331,7 @@ namespace LongoMatch.Drawing.Widgets
                        if (backbuffer != null) {
                                tk.Context = context;
                                tk.Begin ();
+                               tk.TranslateAndScale (translation, new Point (scaleX, scaleY));
                                tk.DrawSurface (backbuffer);
                                tk.End ();
                        }
diff --git a/LongoMatch.Drawing/Widgets/CategoriesLabels.cs b/LongoMatch.Drawing/Widgets/CategoriesLabels.cs
index a196f0e..cc40798 100644
--- a/LongoMatch.Drawing/Widgets/CategoriesLabels.cs
+++ b/LongoMatch.Drawing/Widgets/CategoriesLabels.cs
@@ -32,9 +32,9 @@ namespace LongoMatch.Drawing.Widgets
 
                public CategoriesLabels (IWidget widget): base (widget)
                {
-                       categories = new Dictionary<Category, CategoryLabel>();
+                       categories = new Dictionary<Category, CategoryLabel> ();
                }
-               
+
                public double Scroll {
                        set {
                                foreach (var o in Objects) {
@@ -43,8 +43,9 @@ namespace LongoMatch.Drawing.Widgets
                                }
                        }
                }
-               
-               public void LoadProject (Project project, PlaysFilter filter) {
+
+               public void LoadProject (Project project, PlaysFilter filter)
+               {
                        Objects.Clear ();
                        this.project = project;
                        this.filter = filter;
@@ -54,31 +55,33 @@ namespace LongoMatch.Drawing.Widgets
                                filter.FilterUpdated += UpdateVisibleCategories;
                        }
                }
-               
-               void FillCanvas () {
+
+               void FillCanvas ()
+               {
                        int i = 0;
                        
                        widget.Width = Constants.CATEGORY_WIDTH;
                        
                        /* Start from bottom to top  with categories */
-                       foreach (Category cat in project.Categories.List) {
+                       foreach (Category cat in project.Categories.CategoriesList) {
                                CategoryLabel l;
                                
                                /* Add the category label */
                                l = new CategoryLabel (cat, Constants.CATEGORY_WIDTH,
                                                       Constants.CATEGORY_HEIGHT,
                                                       i * Constants.CATEGORY_HEIGHT);
-                               categories[cat] = l;
+                               categories [cat] = l;
                                Objects.Add (l);
                                i++;
                        }
                }
-               
-               void UpdateVisibleCategories () {
+
+               void UpdateVisibleCategories ()
+               {
                        int i = 0;
 
                        foreach (Category cat in categories.Keys) {
-                               CategoryLabel label = categories[cat];
+                               CategoryLabel label = categories [cat];
 
                                if (filter.VisibleCategories.Contains (cat)) {
                                        label.OffsetY = i * Constants.CATEGORY_HEIGHT;
diff --git a/LongoMatch.Drawing/Widgets/PlaysTagger.cs b/LongoMatch.Drawing/Widgets/PlaysTagger.cs
new file mode 100644
index 0000000..b1b5fa5
--- /dev/null
+++ b/LongoMatch.Drawing/Widgets/PlaysTagger.cs
@@ -0,0 +1,288 @@
+//
+//  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 LongoMatch.Store.Templates;
+using System.Collections.Generic;
+using LongoMatch.Common;
+using LongoMatch.Drawing.CanvasObject;
+using LongoMatch.Handlers;
+using LongoMatch.Store;
+using LongoMatch.Store.Drawables;
+using LongoMatch.Interfaces.Drawing;
+using LongoMatch.Interfaces;
+
+namespace LongoMatch.Drawing.Widgets
+{
+       public class PlaysTagger: SelectionCanvas
+       {
+       
+               public event TaggersSelectedHandler TaggersSelectedEvent;
+               public event TaggerSelectedHandler AddNewTagEvent;
+               public event ShowButtonsTaggerMenuHandler ShowMenuEvent;
+               public event NewTagHandler NewTagEvent;
+
+               Categories template;
+               TagMode tagMode;
+               Time currentTime;
+               int templateWidth, templateHeight;
+
+               public PlaysTagger (IWidget widget): base (widget)
+               {
+                       Accuracy = 5;
+                       TagMode = TagMode.Edit;
+                       widget.SizeChangedEvent += SizeChanged;
+                       FitMode = FitMode.Fit;
+                       AddTag = new Tag ("", "");
+               }
+
+               public Categories Template {
+                       set {
+                               template = value;
+                               LoadTemplate ();
+                       }
+               }
+
+               public Tag AddTag {
+                       get;
+                       set;
+               }
+
+               public bool Edited {
+                       get;
+                       set;
+               }
+
+               public Time CurrentTime {
+                       set {
+                               currentTime = value;
+                               foreach (TimerObject to in Objects.OfType<TimerObject>()) {
+                                       to.CurrentTime = value;
+                               }
+                       }
+                       get {
+                               return currentTime;
+                       }
+               }
+
+               public TagMode TagMode {
+                       set {
+                               tagMode = value;
+                               ObjectsCanMove = tagMode == TagMode.Edit;
+                       }
+                       get {
+                               return tagMode;
+                       }
+               }
+
+               public FitMode FitMode {
+                       set;
+                       get;
+               }
+
+               public void Refresh (TaggerButton b)
+               {
+                       TaggerObject to;
+                       
+                       LoadTemplate ();
+                       to = (TaggerObject)Objects.FirstOrDefault (o => (o as TaggerObject).Tagger == b);
+                       if (to != null) {
+                               UpdateSelection (new Selection (to, SelectionPosition.All, 0));
+                       }
+               }
+
+               protected override void ShowMenu (Point coords)
+               {
+                       Selection sel;
+                       if (ShowMenuEvent == null)
+                               return;
+                       
+                       sel = Selections.LastOrDefault ();
+                       if (sel != null) {
+                               TaggerObject to = sel.Drawable as TaggerObject;
+                               Tag tag = null;
+
+                               if (to is CategoryObject) {
+                                       tag = (to as CategoryObject).GetTagForCoords (coords);
+                               }
+                               ShowMenuEvent (to.Tagger, tag);
+                       }
+               }
+
+               protected override void SelectionMoved (Selection sel)
+               {
+                       SizeChanged ();
+                       Edited = true;
+                       base.SelectionMoved (sel);
+               }
+
+               protected override void SelectionChanged (List<Selection> sel)
+               {
+                       List<TaggerButton> taggers;
+                       
+                       taggers = sel.Select (s => (s.Drawable as TaggerObject).Tagger).ToList ();
+                       if (TagMode == TagMode.Edit) {
+                               if (TaggersSelectedEvent != null) {
+                                       TaggersSelectedEvent (taggers);
+                               }
+                       }
+                       base.SelectionChanged (sel);
+               }
+
+               protected override void StopMove ()
+               {
+                       Selection sel = Selections.FirstOrDefault ();
+                       
+                       if (sel != null) {
+                               int i = Constants.CATEGORY_TPL_GRID;
+                               TaggerButton tb = (sel.Drawable as TaggerObject).Tagger;
+                               tb.Position.X = Utils.Round (tb.Position.X, i);
+                               tb.Position.Y = Utils.Round (tb.Position.Y, i);
+                               tb.Width = (int)Utils.Round (tb.Width, i);
+                               tb.Height = (int)Utils.Round (tb.Height, i);
+                               widget.ReDraw ();
+                       }
+
+                       base.StopMove ();
+               }
+
+               public override void Draw (IContext context, Area area)
+               {
+                       if (TagMode == TagMode.Edit) {
+                               tk.Context = context;
+                               tk.Begin ();
+                               tk.TranslateAndScale (translation, new Point (scaleX, scaleY));
+                               /* Draw grid */
+                               tk.LineWidth = 1;
+                               tk.StrokeColor = Color.Grey1;
+                               tk.FillColor = Color.Grey1;
+                               /* Vertical lines */
+                               for (int i = 0; i <= templateHeight; i += Constants.CATEGORY_TPL_GRID) {
+                                       tk.DrawLine (new Point (0, i), new Point (templateWidth, i));
+                               }
+                               /* Horizontal lines */
+                               for (int i = 0; i < templateWidth; i += Constants.CATEGORY_TPL_GRID) {
+                                       tk.DrawLine (new Point (i, 0), new Point (i, templateHeight));
+                               }
+                               tk.End ();
+                       }
+                       
+                       base.Draw (context, area);
+               }
+
+               void LoadTemplate ()
+               {
+                       Objects.Clear ();
+                       foreach (TagButton tag in template.CommonTags) {
+                               TagObject to = new TagObject (tag);
+                               to.TaggerClickedEvent += HandleTaggerClickedEvent;
+                               to.Mode = TagMode;
+                               Objects.Add (to);
+                       }
+                       
+                       foreach (Category cat in template.CategoriesList) {
+                               CategoryObject co = new CategoryObject (cat);
+                               co.TaggerClickedEvent += HandleTaggerClickedEvent;
+                               co.Mode = TagMode;
+                               co.AddTag = AddTag;
+                               Objects.Add (co);
+                       }
+
+                       foreach (PenaltyCard c in template.PenaltyCards) {
+                               CardObject co = new CardObject (c);
+                               co.TaggerClickedEvent += HandleTaggerClickedEvent;
+                               co.Mode = TagMode;
+                               Objects.Add (co);
+                       }
+                       foreach (Score s in template.Scores) {
+                               ScoreObject co = new ScoreObject (s);
+                               co.TaggerClickedEvent += HandleTaggerClickedEvent;
+                               co.Mode = TagMode;
+                               Objects.Add (co);
+                       }
+
+                       foreach (Timer t in template.Timers) {
+                               TimerObject to = new TimerObject (t);
+                               to.TaggerClickedEvent += HandleTaggerClickedEvent;
+                               to.Mode = TagMode;
+                               Objects.Add (to);
+                       }
+                       Edited = false;
+                       SizeChanged ();
+                       widget.ReDraw ();
+               }
+
+               void SizeChanged ()
+               {
+                       templateHeight = template.CanvasHeight;
+                       templateWidth = template.CanvasWidth;
+                       if (FitMode == FitMode.Original) {
+                               widget.Width = templateWidth;
+                               widget.Height = templateHeight;
+                       } else if (FitMode == FitMode.Fill) {
+                               scaleX = (double)widget.Width / templateWidth;
+                               scaleY = (double)widget.Height / templateHeight;
+                       } else if (FitMode == FitMode.Fit) {
+                               Image.ScaleFactor (templateWidth, templateHeight,
+                                                  (int)widget.Width, (int)widget.Height,
+                                                  out scaleX, out scaleY, out translation);
+                       }
+               }
+
+               void HandleTaggerClickedEvent (TaggerObject tagger)
+               {
+                       Time start = null, stop = null;
+                       List<Tag> tags = null;
+                       
+                       if (NewTagEvent == null || tagger is TimerObject ||
+                               tagger is TagObject) {
+                               return;
+                       }
+                       
+                       if (TagMode == TagMode.Edit) {
+                               if (tagger is CategoryObject) {
+                                       if ((tagger as CategoryObject).SelectedTags.Contains (AddTag)) {
+                                               AddNewTagEvent (tagger.Tagger);
+                                       }
+                               }
+                               return;
+                       }
+                       
+                       if (tagger.Tagger.TagMode == TagMode.Predifined) {
+                               stop = CurrentTime + tagger.Tagger.Stop;
+                               start = CurrentTime - tagger.Tagger.Start;
+                       } else {
+                               stop = CurrentTime;
+                               start = tagger.Start - tagger.Tagger.Start;
+                       }
+                       
+                       if (tagger is CategoryObject) {
+                               tags = new List<Tag> ();
+                               tags.AddRange ((tagger as CategoryObject).SelectedTags);
+                               foreach (TagObject to in Objects.OfType<TagObject>()) {
+                                       if (to.Active) {
+                                               tags.Add (to.TagButton.Tag);
+                                       }
+                                       to.Active = false;
+                               }
+                       }
+                       NewTagEvent (tagger.Tagger, null, tags, start, stop);
+               }
+       }
+}
+
diff --git a/LongoMatch.Drawing/Widgets/PlaysTimeline.cs b/LongoMatch.Drawing/Widgets/PlaysTimeline.cs
index 012ef23..45a3f03 100644
--- a/LongoMatch.Drawing/Widgets/PlaysTimeline.cs
+++ b/LongoMatch.Drawing/Widgets/PlaysTimeline.cs
@@ -27,7 +27,6 @@ using LongoMatch.Store.Drawables;
 
 namespace LongoMatch.Drawing.Widgets
 {
-        
        public class PlaysTimeline: SelectionCanvas
        {
        
@@ -38,7 +37,7 @@ namespace LongoMatch.Drawing.Widgets
                double secondsPerPixel;
                Time duration;
                Dictionary<Category, CategoryTimeline> categories;
-               
+
                public PlaysTimeline (IWidget widget): base(widget)
                {
                        categories = new Dictionary<Category, CategoryTimeline> ();
@@ -47,17 +46,18 @@ namespace LongoMatch.Drawing.Widgets
                        SelectionMode = MultiSelectionMode.MultipleWithModifier;
                }
 
-               public void LoadProject (Project project, PlaysFilter filter) {
+               public void LoadProject (Project project, PlaysFilter filter)
+               {
                        this.project = project;
-                       Objects.Clear();
-                       categories.Clear();
+                       Objects.Clear ();
+                       categories.Clear ();
                        duration = project.Description.File.Duration;
                        widget.Height = project.Categories.List.Count * Constants.CATEGORY_HEIGHT;
                        playsFilter = filter;
                        FillCanvas ();
                        filter.FilterUpdated += UpdateVisibleCategories;
                }
-               
+
                public Time CurrentTime {
                        set {
                                foreach (CategoryTimeline tl in categories.Values) {
@@ -65,7 +65,7 @@ namespace LongoMatch.Drawing.Widgets
                                }
                        }
                }
-               
+
                public double SecondsPerPixel {
                        set {
                                secondsPerPixel = value;
@@ -75,19 +75,22 @@ namespace LongoMatch.Drawing.Widgets
                                return secondsPerPixel;
                        }
                }
-               
-               public void AddPlay(Play play) {
-                       categories[play.Category].AddPlay (play);
+
+               public void AddPlay (Play play)
+               {
+                       categories [play.Category].AddPlay (play);
                }
 
-               public void RemovePlays(List<Play> plays) {
+               public void RemovePlays (List<Play> plays)
+               {
                        foreach (Play p in plays) {
-                               categories[p.Category].RemoveNode (p);
+                               categories [p.Category].RemoveNode (p);
                                Selections.RemoveAll (s => (s.Drawable as PlayObject).Play == p);
                        }
                }
-               
-               void Update () {
+
+               void Update ()
+               {
                        double width = duration.Seconds / SecondsPerPixel;
                        widget.Width = width + 10;
                        foreach (TimelineObject tl in categories.Values) {
@@ -95,9 +98,10 @@ namespace LongoMatch.Drawing.Widgets
                                tl.SecondsPerPixel = SecondsPerPixel;
                        }
                }
-               
-               void FillCanvas () {
-                       for (int i=0; i<project.Categories.List.Count; i++) {
+
+               void FillCanvas ()
+               {
+                       for (int i=0; i<project.Categories.CategoriesList.Count; i++) {
                                Category cat;
                                CategoryTimeline tl;
                                Color c;
@@ -108,20 +112,21 @@ namespace LongoMatch.Drawing.Widgets
                                        c = Color.Grey1;
                                }
                                
-                               cat = project.Categories.List[i];
+                               cat = project.Categories.CategoriesList [i];
                                tl = new CategoryTimeline (project.PlaysInCategory (cat),
                                                           duration, i * Constants.CATEGORY_HEIGHT, c);
-                               categories[cat] = tl;
+                               categories [cat] = tl;
                                Objects.Add (tl);
                        }
                        UpdateVisibleCategories ();
                        Update ();
                }
-               
-               void UpdateVisibleCategories () {
-                       int i=0;
+
+               void UpdateVisibleCategories ()
+               {
+                       int i = 0;
                        foreach (Category cat in categories.Keys) {
-                               TimelineObject timeline = categories[cat];
+                               TimelineObject timeline = categories [cat];
                                if (playsFilter.VisibleCategories.Contains (cat)) {
                                        timeline.OffsetY = i * Constants.CATEGORY_HEIGHT;
                                        timeline.Visible = true;
@@ -136,17 +141,19 @@ namespace LongoMatch.Drawing.Widgets
                void RedrawSelection (Selection sel)
                {
                        PlayObject po = sel.Drawable as PlayObject;
-                       widget.ReDraw (categories[po.Play.Category]);
-               }               
-               
-               protected override void SelectionChanged (List<Selection> selections) {
+                       widget.ReDraw (categories [po.Play.Category]);
+               }
+
+               protected override void SelectionChanged (List<Selection> selections)
+               {
                        if (selections.Count > 0) {
-                               PlayObject po = selections.Last().Drawable as PlayObject;
+                               PlayObject po = selections.Last ().Drawable as PlayObject;
                                Config.EventsBroker.EmitPlaySelected (po.Play);
                        }
                }
-               
-               protected override void StartMove (Selection sel) {
+
+               protected override void StartMove (Selection sel)
+               {
                        if (sel == null)
                                return;
 
@@ -154,17 +161,19 @@ namespace LongoMatch.Drawing.Widgets
                                widget.SetCursor (CursorType.DoubleArrow);
                        }
                }
-               
-               protected override void StopMove () {
+
+               protected override void StopMove ()
+               {
                        widget.SetCursor (CursorType.Arrow);
                }
 
-               protected override void ShowMenu (Point coords) {
+               protected override void ShowMenu (Point coords)
+               {
                        Category cat = null;
-                       List<Play> plays = Selections.Select (p => (p.Drawable as PlayObject).Play).ToList();
+                       List<Play> plays = Selections.Select (p => (p.Drawable as PlayObject).Play).ToList ();
                        
                        foreach (Category c in categories.Keys) {
-                               TimelineObject tl = categories[c];
+                               TimelineObject tl = categories [c];
                                if (!tl.Visible)
                                        continue;
                                if (coords.Y >= tl.OffsetY && coords.Y < tl.OffsetY + 
Constants.CATEGORY_HEIGHT) {
@@ -175,11 +184,12 @@ namespace LongoMatch.Drawing.Widgets
                        
                        if (cat != null && ShowMenuEvent != null) {
                                ShowMenuEvent (plays, cat,
-                                         Utils.PosToTime (coords, SecondsPerPixel));
+                                              Utils.PosToTime (coords, SecondsPerPixel));
                        }
                }
-               
-               protected override void SelectionMoved (Selection sel) {
+
+               protected override void SelectionMoved (Selection sel)
+               {
                        Time moveTime;
                        Play play = (sel.Drawable as PlayObject).Play;
                        
diff --git a/LongoMatch.Drawing/Widgets/PositionTagger.cs b/LongoMatch.Drawing/Widgets/PositionTagger.cs
index 4ce5202..cab1e47 100644
--- a/LongoMatch.Drawing/Widgets/PositionTagger.cs
+++ b/LongoMatch.Drawing/Widgets/PositionTagger.cs
@@ -31,6 +31,7 @@ namespace LongoMatch.Drawing.Widgets
        {
        
                public event ShowTaggerMenuHandler ShowMenuEvent;
+
                Play playSelected;
 
                public PositionTagger (IWidget widget): base (widget)
@@ -39,14 +40,14 @@ namespace LongoMatch.Drawing.Widgets
                        EmitSignals = true;
                        SelectionMode = MultiSelectionMode.MultipleWithModifier;
                }
-               
+
                public PositionTagger (IWidget widget, List<Play> plays, Image background, FieldPositionType 
position): base (widget)
                {
                        Background = background;
                        Plays = plays;
                        FieldPosition = position;
                }
-               
+
                public FieldPositionType FieldPosition {
                        get;
                        set;
@@ -56,8 +57,9 @@ namespace LongoMatch.Drawing.Widgets
                        get;
                        set;
                }
-               
-               public void SelectPlay (Play play) {
+
+               public void SelectPlay (Play play)
+               {
                        PositionObject po;
                        
                        if (play == playSelected) {
@@ -73,14 +75,14 @@ namespace LongoMatch.Drawing.Widgets
                                widget.ReDraw ();
                        }
                }
-               
+
                public List<Point> Points {
                        set {
                                Objects.Clear ();
                                Objects.Add (new PositionObject (value, Background.Width, Background.Height));
                        }
                }
-               
+
                public List<Play> Plays {
                        set {
                                Objects.Clear ();
@@ -89,8 +91,9 @@ namespace LongoMatch.Drawing.Widgets
                                }
                        }
                }
-               
-               public void AddPlay(Play play) {
+
+               public void AddPlay (Play play)
+               {
                        PositionObject po;
                        Coordinates coords;
                        
@@ -104,23 +107,26 @@ namespace LongoMatch.Drawing.Widgets
                        Objects.Add (po);
                }
 
-               public void RemovePlays(List<Play> plays) {
-                       Objects.RemoveAll (o => plays.Contains((o as PositionObject).Play));
+               public void RemovePlays (List<Play> plays)
+               {
+                       Objects.RemoveAll (o => plays.Contains ((o as PositionObject).Play));
                }
 
-               protected override void SelectionChanged (List<Selection> selections) {
+               protected override void SelectionChanged (List<Selection> selections)
+               {
                        if (selections.Count > 0) {
-                               Play p = (selections.Last().Drawable as PositionObject).Play;
+                               Play p = (selections.Last ().Drawable as PositionObject).Play;
                                playSelected = p;
                                if (EmitSignals) {
                                        Config.EventsBroker.EmitPlaySelected (p);
                                }
                        }
                }
-               
-               protected override void ShowMenu (Point coords) {
+
+               protected override void ShowMenu (Point coords)
+               {
                        if (ShowMenuEvent != null) {
-                               List<Play> plays = Selections.Select (p => (p.Drawable as 
PositionObject).Play).ToList();
+                               List<Play> plays = Selections.Select (p => (p.Drawable as 
PositionObject).Play).ToList ();
                                ShowMenuEvent (plays);
                        }
                }
diff --git a/LongoMatch.Drawing/Widgets/TeamTagger.cs b/LongoMatch.Drawing/Widgets/TeamTagger.cs
index 72e2d55..398de12 100644
--- a/LongoMatch.Drawing/Widgets/TeamTagger.cs
+++ b/LongoMatch.Drawing/Widgets/TeamTagger.cs
@@ -36,11 +36,10 @@ namespace LongoMatch.Drawing.Widgets
 
                TeamTemplate homeTeam, awayTeam;
                Image background;
-               double currentWidth, currentHeight, scaleX, scaleY;
+               double currentWidth, currentHeight;
                double backgroundWidth;
                Point offset;
                MultiSelectionMode prevMode;
-               PlayersIconSize iconSize;
                bool inSubs;
 
                public TeamTagger (IWidget widget): base (widget)
@@ -53,34 +52,35 @@ namespace LongoMatch.Drawing.Widgets
                        PlayersPorRowInBench = 2;
                        BenchIconSize = PlayersIconSize.Small;
                }
-               
+
                public Color HomeColor {
                        get;
                        set;
                }
-               
+
                public Color AwayColor {
                        get;
                        set;
                }
-               
+
                public int PlayersPorRowInBench {
                        get;
                        set;
                }
-               
+
                public PlayersIconSize BenchIconSize {
                        get;
                        set;
                }
-               
-               public void LoadTeams (TeamTemplate homeTeam, TeamTemplate awayTeam, Image background) {
+
+               public void LoadTeams (TeamTemplate homeTeam, TeamTemplate awayTeam, Image background)
+               {
                        this.homeTeam = homeTeam;
                        this.awayTeam = awayTeam;
                        this.background = background;
                        Resize ();
                }
-               
+
                public bool SubstitutionsMode {
                        set {
                                if (value) {
@@ -97,7 +97,8 @@ namespace LongoMatch.Drawing.Widgets
                        }
                }
 
-               public void Select (List<Player> players) {
+               public void Select (List<Player> players)
+               {
                        ClearSelection ();
                        if (players != null) {
                                foreach (Player p in players) {
@@ -107,14 +108,16 @@ namespace LongoMatch.Drawing.Widgets
                        widget.ReDraw ();
                }
 
-               public void Select (Player p) {
+               public void Select (Player p)
+               {
                        ClearSelection ();
                        SelectPlayer (p, false);
                        widget.ReDraw ();
                }
-               
-               public void Reload () {
-                       Objects.Clear();
+
+               public void Reload ()
+               {
+                       Objects.Clear ();
                        if (homeTeam != null) {
                                LoadTeam (homeTeam, Team.LOCAL);
                        }
@@ -123,19 +126,19 @@ namespace LongoMatch.Drawing.Widgets
                        }
                        widget.ReDraw ();
                }
-               
+
                int NTeams {
                        get {
                                return awayTeam == null ? 1 : 2;
                        }
                }
-               
+
                int BenchWidth {
                        get {
                                return PlayersPorRowInBench * (int)BenchIconSize;
                        }
                }
-               
+
                void SelectPlayer (Player p, bool notify=true)
                {
                        if (p != null) {
@@ -146,27 +149,29 @@ namespace LongoMatch.Drawing.Widgets
                                }
                        }
                }
-               
-               PlayersIconSize BestIconSize (int[] formation) {
+
+               PlayersIconSize BestIconSize (int[] formation)
+               {
                        double width = backgroundWidth / NTeams;
-                       double optWidth = width / formation.Count();
-                       double optHeight = currentHeight / formation.Max();
+                       double optWidth = width / formation.Count ();
+                       double optHeight = currentHeight / formation.Max ();
                        double size = Math.Min (optWidth, optHeight);
 
-                       if (size < (int) PlayersIconSize.Small) {
+                       if (size < (int)PlayersIconSize.Small) {
                                return PlayersIconSize.Smallest;
-                       } else if (size < (int) PlayersIconSize.Medium) {
+                       } else if (size < (int)PlayersIconSize.Medium) {
                                return PlayersIconSize.Small;
-                       } else if (size < (int) PlayersIconSize.Large) {
+                       } else if (size < (int)PlayersIconSize.Large) {
                                return PlayersIconSize.Medium;
-                       } else if (size < (int) PlayersIconSize.ExtraLarge) {
+                       } else if (size < (int)PlayersIconSize.ExtraLarge) {
                                return PlayersIconSize.Large;
                        } else {
                                return PlayersIconSize.ExtraLarge;
                        }
                }
 
-               void LoadTeam (TeamTemplate template, Team team) {
+               void LoadTeam (TeamTemplate template, Team team)
+               {
                        int index = 0;
                        double width, colWidth, offsetX;
                        Color color;
@@ -194,7 +199,7 @@ namespace LongoMatch.Drawing.Widgets
                                } else {
                                        colX = offsetX - colWidth * col - colWidth / 2;
                                }
-                               rowHeight = currentHeight / template.Formation[col];
+                               rowHeight = currentHeight / template.Formation [col];
 
                                for (int row=0; row < template.Formation[col]; row ++) {
                                        Point p = new Point (colX, rowHeight * row + rowHeight / 2);
@@ -227,37 +232,39 @@ namespace LongoMatch.Drawing.Widgets
                                Objects.Add (po);
                        }
                }
-               
-               void Resize () {
+
+               void Resize ()
+               {
                        currentWidth = widget.Width;
                        currentHeight = widget.Height;
                        backgroundWidth = currentWidth - BenchWidth * NTeams;
                        
                        if (background != null) {
-                               background.ScaleFactor ((int) backgroundWidth, (int) currentHeight,
+                               background.ScaleFactor ((int)backgroundWidth, (int)currentHeight,
                                                        out scaleX, out scaleY, out offset);
                        }
                        Reload ();
                }
-               
-               protected override void SelectionChanged (List<Selection> selections) {
+
+               protected override void SelectionChanged (List<Selection> selections)
+               {
                        List<Player> players;
                        
-                       players = selections.Select (s => (s.Drawable as PlayerObject).Player).ToList();
+                       players = selections.Select (s => (s.Drawable as PlayerObject).Player).ToList ();
 
                        if (SubstitutionsMode) {
                                bool subsDone = false;
                                if (homeTeam != null) {
-                                       List<Player> hplayers = players.Where (p => homeTeam.List.Contains 
(p)).ToList();
+                                       List<Player> hplayers = players.Where (p => homeTeam.List.Contains 
(p)).ToList ();
                                        if (hplayers.Count == 2) {
-                                               homeTeam.List.Swap (hplayers[0], hplayers[1]);
+                                               homeTeam.List.Swap (hplayers [0], hplayers [1]);
                                                subsDone = true;
                                        }
                                }
                                if (awayTeam != null) {
-                                       List<Player> aplayers = players.Where (p => awayTeam.List.Contains 
(p)).ToList();
+                                       List<Player> aplayers = players.Where (p => awayTeam.List.Contains 
(p)).ToList ();
                                        if (aplayers.Count == 2) {
-                                               awayTeam.List.Swap (aplayers[0], aplayers[1]);
+                                               awayTeam.List.Swap (aplayers [0], aplayers [1]);
                                                subsDone = true;
                                        }
                                }
@@ -272,14 +279,15 @@ namespace LongoMatch.Drawing.Widgets
                                }
                        }
                }
-               
-               protected override void ShowMenu (Point coords) {
-                       if (ShowMenuEvent != null && Selections.Count > 0){
+
+               protected override void ShowMenu (Point coords)
+               {
+                       if (ShowMenuEvent != null && Selections.Count > 0) {
                                ShowMenuEvent (
-                                       Selections.Select (s => (s.Drawable as 
PlayerObject).Player).ToList());
+                                       Selections.Select (s => (s.Drawable as PlayerObject).Player).ToList 
());
                        }
                }
-               
+
                public override void Draw (IContext context, Area area)
                {
                        if (currentWidth != widget.Width || currentHeight != widget.Height) {
diff --git a/LongoMatch.Drawing/Widgets/TimersTimeline.cs b/LongoMatch.Drawing/Widgets/TimersTimeline.cs
index 93b7a8d..4441a16 100644
--- a/LongoMatch.Drawing/Widgets/TimersTimeline.cs
+++ b/LongoMatch.Drawing/Widgets/TimersTimeline.cs
@@ -13,13 +13,11 @@ namespace LongoMatch.Drawing.Widgets
        {
        
                public event TimeNodeChangedHandler TimeNodeChanged;
-               public event PlaySelectedHandler TimeNodeSelected;
-               public event ShowTimelineMenuHandler ShowMenuEvent;
 
                double secondsPerPixel;
                Time duration;
                Dictionary <Timer, TimerTimeline> timers;
-               
+
                public TimersTimeline (IWidget widget): base(widget)
                {
                        secondsPerPixel = 0.1;
@@ -27,17 +25,19 @@ namespace LongoMatch.Drawing.Widgets
                        SelectionMode = MultiSelectionMode.MultipleWithModifier;
                }
 
-               public void LoadPeriods (List<Period> periods, Time duration) {
-                       LoadTimers (periods.Select (p => p as Timer).ToList(), duration, false);
+               public void LoadPeriods (List<Period> periods, Time duration)
+               {
+                       LoadTimers (periods.Select (p => p as Timer).ToList (), duration, false);
                }
 
-               public void LoadTimers (List<Timer> timers, Time duration, bool splitTimers = true) {
-                       Objects.Clear();
-                       this.timers = new Dictionary<Timer, TimerTimeline>();
+               public void LoadTimers (List<Timer> timers, Time duration, bool splitTimers = true)
+               {
+                       Objects.Clear ();
+                       this.timers = new Dictionary<Timer, TimerTimeline> ();
                        this.duration = duration;
                        FillCanvas (timers, splitTimers);
                }
-               
+
                public Time CurrentTime {
                        set {
                                foreach (TimerTimeline tl in timers.Values) {
@@ -45,7 +45,7 @@ namespace LongoMatch.Drawing.Widgets
                                }
                        }
                }
-               
+
                public double SecondsPerPixel {
                        set {
                                secondsPerPixel = value;
@@ -55,8 +55,9 @@ namespace LongoMatch.Drawing.Widgets
                                return secondsPerPixel;
                        }
                }
-               
-               void Update () {
+
+               void Update ()
+               {
                        double width;
 
                        if (duration == null)
@@ -68,13 +69,14 @@ namespace LongoMatch.Drawing.Widgets
                                tl.SecondsPerPixel = SecondsPerPixel;
                        }
                }
-               
-               void FillCanvas (List<Timer> timers, bool splitTimers) {
+
+               void FillCanvas (List<Timer> timers, bool splitTimers)
+               {
                        if (!splitTimers) {
                                widget.Height = Constants.TIMER_HEIGHT;
                                TimerTimeline tl = new TimerTimeline (timers, duration, 0, Color.White);
                                foreach (Timer t in timers) {
-                                       this.timers[t] = tl;
+                                       this.timers [t] = tl;
                                }
                                Objects.Add (tl);
                        } else {
@@ -82,8 +84,9 @@ namespace LongoMatch.Drawing.Widgets
                        }
                        Update ();
                }
-               
-               protected override void StartMove (Selection sel) {
+
+               protected override void StartMove (Selection sel)
+               {
                        if (sel == null)
                                return;
 
@@ -91,12 +94,14 @@ namespace LongoMatch.Drawing.Widgets
                                widget.SetCursor (CursorType.DoubleArrow);
                        }
                }
-               
-               protected override void StopMove () {
+
+               protected override void StopMove ()
+               {
                        widget.SetCursor (CursorType.Arrow);
                }
 
-               protected override void SelectionMoved (Selection sel) {
+               protected override void SelectionMoved (Selection sel)
+               {
                        if (TimeNodeChanged != null) {
                                Time moveTime;
                                TimeNode tn = (sel.Drawable as TimeNodeObject).TimeNode;
diff --git a/LongoMatch.Drawing/Widgets/Timerule.cs b/LongoMatch.Drawing/Widgets/Timerule.cs
index 7a553ce..9d559d5 100644
--- a/LongoMatch.Drawing/Widgets/Timerule.cs
+++ b/LongoMatch.Drawing/Widgets/Timerule.cs
@@ -35,12 +35,12 @@ namespace LongoMatch.Drawing.Widgets
                        SecondsPerPixel = 0.1;
                        CurrentTime = new Time (0);
                }
-               
+
                public double Scroll {
                        set;
                        protected get;
                }
-               
+
                public Time Duration {
                        set;
                        protected get;
@@ -50,12 +50,12 @@ namespace LongoMatch.Drawing.Widgets
                        get;
                        set;
                }
-               
+
                public double SecondsPerPixel {
                        set;
                        get;
                }
-               
+
                public override void Draw (IContext context, Area area)
                {
                        double height = widget.Height;
@@ -70,7 +70,7 @@ namespace LongoMatch.Drawing.Widgets
                        tk.Begin ();
                        tk.FillColor = Constants.TIMERULE_BACKGROUND;
                        tk.StrokeColor = Constants.TIMERULE_BACKGROUND;
-                       tk.DrawRectangle (new Point(0, 0), width, height);
+                       tk.DrawRectangle (new Point (0, 0), width, height);
                        
                        tk.StrokeColor = Constants.TIMELINE_LINE_COLOR;
                        tk.LineWidth = Constants.TIMELINE_LINE_WIDTH;
@@ -79,16 +79,16 @@ namespace LongoMatch.Drawing.Widgets
                        tk.DrawLine (new Point (0, height), new Point (width, height));
                
                        /* Draw big lines each 10 * secondsPerPixel */
-                       for(int i=0; i <= Duration.Seconds / SecondsPerPixel; i += TIME_SPACING) {
+                       for (int i=0; i <= Duration.Seconds / SecondsPerPixel; i += TIME_SPACING) {
                                double pos = i - Scroll;
                                tk.DrawLine (new Point (pos, height),
                                             new Point (pos, height - BIG_LINE_HEIGHT));
-                               tk.DrawText (new Point (pos - TEXT_WIDTH/2, 0), TEXT_WIDTH, height - 
BIG_LINE_HEIGHT - 4,
-                                            new Time {Seconds = (int) (i * 
SecondsPerPixel)}.ToSecondsString());
+                               tk.DrawText (new Point (pos - TEXT_WIDTH / 2, 0), TEXT_WIDTH, height - 
BIG_LINE_HEIGHT - 4,
+                                            new Time { Seconds = (int) (i * SecondsPerPixel) 
}.ToSecondsString ());
                        }
                        
                        /* Draw small lines each 1 * secondsPerPixel */
-                       for(int i=0; i<= Duration.Seconds / SecondsPerPixel; i+= TIME_SPACING / 10) {
+                       for (int i=0; i<= Duration.Seconds / SecondsPerPixel; i+= TIME_SPACING / 10) {
                                double pos;
                                
                                if (i % TIME_SPACING == 0)
diff --git a/LongoMatch.GUI.Multimedia/Gui/CapturerBin.cs b/LongoMatch.GUI.Multimedia/Gui/CapturerBin.cs
index 9474881..630adec 100644
--- a/LongoMatch.GUI.Multimedia/Gui/CapturerBin.cs
+++ b/LongoMatch.GUI.Multimedia/Gui/CapturerBin.cs
@@ -117,7 +117,7 @@ namespace LongoMatch.Gui
                        }
 
                        currentPeriod = new Period {Name = periods[periodIndex]};
-                       currentPeriod.Start (ellapsedTime);
+                       currentPeriod.StartTimer (ellapsedTime);
                        Log.Information (String.Format ("Start new period {0} at {1}",
                                                        currentPeriod.Name, ellapsedTime.ToSecondsString()));
                        Capturing = true;
@@ -153,7 +153,7 @@ namespace LongoMatch.Gui
                        periodIndex ++;
                        Capturing = false;
                        capturer.TogglePause ();
-                       currentPeriod.Stop (ellapsedTime);
+                       currentPeriod.StopTimer (ellapsedTime);
                        UpdateLabel (periods[periodIndex]);
                        currentPeriod = null;
                        recbutton.Visible = true;
@@ -164,7 +164,7 @@ namespace LongoMatch.Gui
                        if (currentPeriod != null) {
                                Log.Information (String.Format ("Stop period {0} at {1}",
                                                                currentPeriod.Name, 
ellapsedTime.ToSecondsString()));
-                               currentPeriod.Stop (ellapsedTime);
+                               currentPeriod.StopTimer (ellapsedTime);
                        }
                        Log.Information ("Stop capture");
                        capturer.Stop ();
diff --git a/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs 
b/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs
index d760bef..8437c3e 100644
--- a/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs
+++ b/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs
@@ -37,15 +37,17 @@ namespace LongoMatch.Gui.Component
                ProjectType projectType;
                bool detachedPlayer;
                Gtk.Window playerWindow;
+               PlaysSelectionWidget playsSelection;
+               PlayerCapturerBin playercapturer;
+               CodingWidget codingwidget;
+               HBox videowidgetsbox;
                
                public AnalysisComponent ()
                {
                        this.Build ();
                        projectType = ProjectType.None;
-                       playsSelection.Visible = true;
                        detachedPlayer = false;
 
-                       playercapturer.Mode = PlayerCapturerBin.PlayerOperationMode.Player;
                        ConnectSignals();
                }
                
diff --git a/LongoMatch.GUI/Gui/Component/AnalysisTemplateEditor.cs 
b/LongoMatch.GUI/Gui/Component/AnalysisTemplateEditor.cs
index 6e372df..fb2ec3a 100644
--- a/LongoMatch.GUI/Gui/Component/AnalysisTemplateEditor.cs
+++ b/LongoMatch.GUI/Gui/Component/AnalysisTemplateEditor.cs
@@ -31,33 +31,18 @@ namespace LongoMatch.Gui.Component
        {
                bool edited;
                Categories template;
-               Category selectedCategory;
 
                public AnalysisTemplateEditor ()
                {
                        this.Build ();
-                       buttonswidget.Mode = LongoMatch.Common.TagMode.Predifined;
-                       buttonswidget.NewTagEvent += HandleCategorySelected;
-                       categoryproperties.Visible = false;
+                       buttonswidget.Mode = TagMode.Edit;
                        savebutton.Clicked += HandleSaveClicked;
-                       deletebutton.Sensitive = false;
-                       newbutton.Sensitive = false;
-                       newbutton.Clicked += HandleNewClicked;
-                       deletebutton.Clicked += HandleDeleteClicked;
-                       fieldeventbox.ButtonPressEvent += HandleFieldButtonPressEvent;
-                       hfieldeventbox.ButtonPressEvent += HandleFieldButtonPressEvent;
-                       goaleventbox.ButtonPressEvent += HandleFieldButtonPressEvent;
                }
 
                public Categories Template {
                        set {
                                template = value;
-                               categoryproperties.Template = value;
-                               newbutton.Sensitive = true;
-                               buttonswidget.UpdateCategories (value);
-                               fieldimage.Pixbuf = value.FieldBackground.Scale (50, 50).Value;
-                               hfieldimage.Pixbuf = value.HalfFieldBackground.Scale (50, 50).Value;
-                               goalimage.Pixbuf = value.GoalBackground.Scale (50, 50).Value;
+                               buttonswidget.Template = value;
                                Edited = false;
                        }
                }
@@ -67,36 +52,10 @@ namespace LongoMatch.Gui.Component
                                edited = value;
                        }
                        get {
-                               return edited;
+                               return buttonswidget.Edited;
                        }
                }
                
-               void HandleDeleteClicked (object sender, EventArgs e)
-               {
-                       string msg = Catalog.GetString ("Do you want to delete: ") +
-                               selectedCategory.Name + "?";
-                       if (Config.GUIToolkit.QuestionMessage (msg, null, this)) {
-                               template.List.Remove (selectedCategory);
-                               buttonswidget.UpdateCategories (template);
-                               Edited = true;
-                       }
-               }
-
-               void HandleNewClicked (object sender, EventArgs e)
-               {
-                       template.AddDefaultItem (template.List.Count);
-                       buttonswidget.UpdateCategories (template);
-                       Edited = true;
-               }
-               
-               void HandleCategorySelected (Category category, List<Player> players)
-               {
-                       categoryproperties.Visible = true;
-                       deletebutton.Sensitive = true;
-                       categoryproperties.Category = category;
-                       selectedCategory = category;
-               }
-               
                void HandleSaveClicked (object sender, EventArgs e)
                {
                        if (template != null) {
@@ -104,29 +63,6 @@ namespace LongoMatch.Gui.Component
                        }
                }
                
-               void HandleFieldButtonPressEvent (object o, Gtk.ButtonPressEventArgs args)
-               {
-                       LongoMatch.Common.Image background;
-                       Pixbuf pix = Helpers.Misc.OpenImage (this);
-                       
-                       if (pix == null) {
-                               return;
-                       }
-                       
-                       background = new LongoMatch.Common.Image (pix);
-                       background.ScaleInplace (Constants.MAX_BACKGROUND_WIDTH,
-                                                Constants.MAX_BACKGROUND_HEIGHT);
-                       if (o == fieldeventbox) {
-                               template.FieldBackground = background;
-                               fieldimage.Pixbuf = background.Scale (50, 50).Value;
-                       } else if (o == hfieldeventbox) {
-                               template.HalfFieldBackground = background;
-                               hfieldimage.Pixbuf = background.Scale (50, 50).Value;
-                       } else if (o == goaleventbox) {
-                               template.GoalBackground = background;
-                               goalimage.Pixbuf = background.Scale (50, 50).Value;
-                       }
-               }
        }
 }
 
diff --git a/LongoMatch.GUI/Gui/Component/ButtonsWidget.cs b/LongoMatch.GUI/Gui/Component/ButtonsWidget.cs
index 652daf1..2cdb51f 100644
--- a/LongoMatch.GUI/Gui/Component/ButtonsWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/ButtonsWidget.cs
@@ -21,12 +21,16 @@
 using System;
 using System.Collections.Generic;
 using Gtk;
-using Gdk;
 using LongoMatch.Common;
 using LongoMatch.Handlers;
 using LongoMatch.Store;
 using LongoMatch.Store.Templates;
 using LongoMatch.Gui;
+using LongoMatch.Drawing.Widgets;
+using LongoMatch.Drawing.Cairo;
+using Mono.Unix;
+using Image = LongoMatch.Common.Image;
+using LongoMatch.Gui.Helpers;
 
 namespace LongoMatch.Gui.Component
 {
@@ -35,91 +39,201 @@ namespace LongoMatch.Gui.Component
        public partial class ButtonsWidget : Gtk.Bin
        {
                public event NewTagHandler NewTagEvent;
-               public event NewTagStartHandler NewTagStartEvent;
-               public event NewTagStopHandler NewTagStopEvent;
-               public event NewTagCancelHandler NewTagCancelEvent;
 
                TagMode tagMode;
-               Dictionary<ButtonTagger, Category> buttonsDic;
-               const int N_COLUMNS = 5;
+               PlaysTagger tagger;
+               Categories template;
+               TaggerButton selected;
+               bool edited;
 
                public ButtonsWidget()
                {
                        this.Build();
-                       buttonsDic = new Dictionary<ButtonTagger, Category>();
+                       tagger = new PlaysTagger (new WidgetWrapper (drawingarea1));
+                       tagger.TaggersSelectedEvent += HandleTaggersSelectedEvent;
+                       tagger.ShowMenuEvent += HandleShowMenuEvent;
+                       tagger.NewTagEvent += HandleNewTagEvent;
+                       tagger.AddNewTagEvent += HandleAddNewTagEvent;
+                       drawingarea1.CanFocus = true;
+                       drawingarea1.KeyPressEvent += HandleKeyPressEvent;
                        Mode = TagMode.Predifined;
+                       fieldeventbox.ButtonPressEvent += HandleFieldButtonPressEvent;
+                       hfieldeventbox.ButtonPressEvent += HandleFieldButtonPressEvent;
+                       goaleventbox.ButtonPressEvent += HandleFieldButtonPressEvent;
+                       categoryproperties1.EditedEvent += (sender, e) => {drawingarea1.QueueDraw();};
+                       addcatbutton.Clicked += HandleAddClicked;
+                       addtimerbutton.Clicked += HandleAddClicked;
+                       addscorebutton.Clicked += HandleAddClicked;
+                       addtagbutton.Clicked += HandleAddClicked;
+                       addcardbutton.Clicked += HandleAddClicked;
+                       Config.EventsBroker.Tick += HandleTick;
+                       Edited = false;
+               }
+
+               public override void Destroy ()
+               {
+                       Config.EventsBroker.Tick -= HandleTick;
+                       base.Destroy ();
                }
                
-               public Project Project {
+               public bool Edited {
+                       get {
+                               return edited || tagger.Edited || categoryproperties1.Edited;
+                       }
+                       set {
+                               edited = value;
+                       }
+               }
+
+               public Categories Template {
                        set {
-                               if (value != null)
-                                       UpdateCategories (value.Categories);
+                               template = value;
+                               tagger.Template = value;
+                               fieldimage.Pixbuf = value.FieldBackground.Scale (50, 50).Value;
+                               hfieldimage.Pixbuf = value.HalfFieldBackground.Scale (50, 50).Value;
+                               goalimage.Pixbuf = value.GoalBackground.Scale (50, 50).Value;
+                               Edited = false;
                        }
                }
 
                public TagMode Mode {
                        set {
                                tagMode = value;
-                               foreach (ButtonTagger b in buttonsDic.Keys) {
-                                       b.Mode = tagMode;
-                               }
+                               tagger.TagMode = value;
+                               hbuttonbox2.Visible = rightbox.Visible = tagMode == TagMode.Edit;
                        }
                }
                
-               public Time CurrentTime {
-                       set {
-                               foreach (ButtonTagger b in buttonsDic.Keys) {
-                                       b.CurrentTime = value;
-                               }
+               public void Refresh (TaggerButton b = null) {
+                       tagger.Refresh (b);
+               }
+               
+               void RemoveButton (TaggerButton button) {
+                       string msg = Catalog.GetString ("Do you want to delete: ") +
+                               button.Name + "?";
+                       if (Config.GUIToolkit.QuestionMessage (msg, null, this)) {
+                               template.List.Remove (button);
+                               Refresh ();
                        }
                }
                
-               public void UpdateCategories (Categories categories) {
-                       foreach(Widget w in table1.AllChildren) {
-                               table1.Remove(w);
-                               w.Destroy();
+               void HandleTaggersSelectedEvent (List<TaggerButton> taggers)
+               {
+                       if (taggers.Count == 1) {
+                               selected = taggers[0];
+                               categoryproperties1.Tagger = taggers[0];
+                               propsframe.Sensitive = true;
+                       } else {
+                               selected = null;
+                               propsframe.Sensitive = false;
                        }
+               }
+               
+               void HandleFieldButtonPressEvent (object o, Gtk.ButtonPressEventArgs args)
+               {
+                       LongoMatch.Common.Image background;
+                       Gdk.Pixbuf pix = Helpers.Misc.OpenImage (this);
                        
-                       if (categories == null)
+                       if (pix == null) {
                                return;
+                       }
+                       
+                       background = new Image (pix);
+                       background.ScaleInplace (Constants.MAX_BACKGROUND_WIDTH,
+                                                Constants.MAX_BACKGROUND_HEIGHT);
+                       if (o == fieldeventbox) {
+                               template.FieldBackground = background;
+                               fieldimage.Pixbuf = background.Scale (50, 50).Value;
+                       } else if (o == hfieldeventbox) {
+                               template.HalfFieldBackground = background;
+                               hfieldimage.Pixbuf = background.Scale (50, 50).Value;
+                       } else if (o == goaleventbox) {
+                               template.GoalBackground = background;
+                               goalimage.Pixbuf = background.Scale (50, 50).Value;
+                       }
+                       Edited = true;
+               }
 
-                       buttonsDic.Clear();
-                       int sectionsCount = categories.List.Count;
+               void HandleTick (Time currentTime)
+               {
+                       tagger.CurrentTime = currentTime;
+                       drawingarea1.QueueDraw ();
+               }
+               
+               void HandleKeyPressEvent (object o, KeyPressEventArgs args)
+               {
+                       if (args.Event.Key == Gdk.Key.Delete && selected != null) {
+                               RemoveButton (selected);
+                       }
+               }
+               
+               void HandleShowMenuEvent (TaggerButton taggerbutton, Tag tag)
+               {
+                       Menu menu;
+                       MenuItem delbut, deltag;
                        
-                       table1.NColumns =(uint) N_COLUMNS;
-                       table1.NRows =(uint)(sectionsCount/N_COLUMNS);
+                       menu = new Menu ();
+                       delbut = new MenuItem (Catalog.GetString ("Delete"));
+                       delbut.Activated += (sender, e) => {RemoveButton (taggerbutton);};
+                       menu.Add (delbut);
                        
-                       for(int i=0; i<sectionsCount; i++) {
-                               Category cat = categories.List[i];
-                               ButtonTagger b = new ButtonTagger (cat);
-                                       b.NewTag += (category, p) => {
-                                       if (NewTagEvent != null) {
-                                               NewTagEvent (category, p);
-                                       }
-                               };
-                               b.NewTagStart += (category) => {
-                                       if (NewTagStartEvent != null)
-                                               NewTagStartEvent (category);
-                               };
-                               b.NewTagStop += (category) => {
-                                       if (NewTagStopEvent != null)
-                                               NewTagStopEvent (category);
-                               };
-                               b.NewTagCancel += (category) => {
-                                       if (NewTagCancelEvent != null)
-                                               NewTagCancelEvent (category);
+                       if (tag != null) {
+                               deltag = new MenuItem (String.Format ("{0} \"{1}\"",
+                                                                     Catalog.GetString ("Delete tag:"),
+                                                                     tag.Value));
+                               deltag.Activated += (sender, e) => {
+                                       (taggerbutton as Category).Tags.Remove (tag);
+                                       Edited = true;
+                                       tagger.Refresh (taggerbutton);
                                };
-                               b.Mode = tagMode;
-                               
-                               uint row_top =(uint)(i/table1.NColumns);
-                               uint row_bottom = (uint) row_top+1 ;
-                               uint col_left = (uint) i%table1.NColumns;
-                               uint col_right = (uint) col_left+1 ;
-                               
-                               table1.Attach(b,col_left,col_right,row_top,row_bottom);
-                               
-                               buttonsDic.Add(b, cat);
-                               b.Show();
+                               menu.Add (deltag);
+                       }
+
+                       menu.ShowAll ();
+                       menu.Popup ();
+               }
+
+               void HandleAddClicked (object sender, EventArgs e) {
+                       TaggerButton tagger = null;
+                       
+                       if (sender == addcardbutton) {
+                               tagger = new PenaltyCard ("Red", Color.Red, CardShape.Rectangle);
+                       } else if (sender == addscorebutton) {
+                               tagger = new Score ("Score", 1);
+                       } else if (sender == addtimerbutton) {
+                               tagger = new Timer {Name = "Timer"};
+                       } else if (sender == addtagbutton) {
+                               tagger = new TagButton {Name = "Tag"};
+                       } else if (sender == addcatbutton) {
+                               tagger = template.AddDefaultItem (template.List.Count);
+                       } else {
+                               return;
+                       }
+                       
+                       if (!(tagger is Category)) {
+                               template.List.Add (tagger);
+                       }
+                       tagger.Position = new Point (template.CanvasWidth, 0);
+                       Refresh (tagger);
+               }
+               
+               void HandleNewTagEvent (TaggerButton button, List<Player> players,
+                                       List<Tag> tags, Time start, Time stop)
+               {
+                       if (button is TagButton || button is Timer) {
+                               return;
+                       }
+                       
+                       Config.EventsBroker.EmitNewTag (button, players, tags, start, stop);
+               }
+
+               void HandleAddNewTagEvent (TaggerButton taggerbutton)
+               {
+                       string res = MessagesHelpers.QueryMessage (this, Catalog.GetString ("Name"),
+                                                                  Catalog.GetString ("New tag"));
+                       if (res != null && res != "") {
+                               (taggerbutton as Category).Tags.Add (new Tag (res));
+                               tagger.Refresh (null);
                        }
                }
        }
diff --git a/LongoMatch.GUI/Gui/Component/CategoryProperties.cs 
b/LongoMatch.GUI/Gui/Component/CategoryProperties.cs
index 4105601..1302b8f 100644
--- a/LongoMatch.GUI/Gui/Component/CategoryProperties.cs
+++ b/LongoMatch.GUI/Gui/Component/CategoryProperties.cs
@@ -44,36 +44,74 @@ namespace LongoMatch.Gui.Component
        {
 
                public event HotKeyChangeHandler HotKeyChanged;
+               public event EventHandler EditedEvent;
+               SizeGroup sizegroup;
 
+               TaggerButton tagger;
                Category cat;
-               ListStore model;
-               CoordinatesTagger fieldcoordinatestagger;
-               CoordinatesTagger halffieldcoordinatestagger;
-               CoordinatesTagger goalcoordinatestagger;
+               PenaltyCard card;
+               Score score;
+               Time lastLeadTime;
+               bool edited, ignore;
 
                public CategoryProperties()
                {
                        this.Build();
-                       leadtimebutton.ValueChanged += OnLeadTimeChanged;;
-                       lagtimebutton.ValueChanged += OnLagTimeChanged;
-                       fieldcoordinatestagger = new CoordinatesTagger ();
-                       halffieldcoordinatestagger = new CoordinatesTagger ();
-                       goalcoordinatestagger = new CoordinatesTagger ();
-                       table1.Attach (fieldcoordinatestagger, 0, 1, 0, 1);
-                       table1.Attach (halffieldcoordinatestagger, 1, 2, 0, 1);
-                       table1.Attach (goalcoordinatestagger, 2, 3, 0, 1);
+                       nameentry.Changed += HandleNameentryChanged;
+                       colorbutton1.ColorSet += HandleColorSet;
+                       colorbutton2.ColorSet += HandleColorSet;
+                       tagmodecombobox.Changed += HandleTagModeChanged;
+                       tagscheckbutton.Toggled += HandleTagsToggled;
+                       tprbutton.ValueChanged += HandleTagsPerRowValueChanged;
+                       leadtimebutton.ValueChanged += HandleLeadTimeChanged;
+                       lagtimebutton.ValueChanged += HandleLagTimeChanged;
+                       changebuton.Clicked += HandleChangeHotkey;
+                       sortmethodcombobox.Changed += HandleSortMethodChanged;
+                       fieldcombobox.Changed += HandlePositionChanged;
+                       hfieldcombobox.Changed += HandlePositionChanged;
+                       goalcombobox.Changed += HandlePositionChanged;
+                       shapecombobox.Changed += HandleShapeChanged;
+                       pointsbutton.Changed += HandlePointsChanged;
+                       sizegroup = new SizeGroup (SizeGroupMode.Horizontal);
+                       sizegroup.IgnoreHidden = false;
+                       foreach (Widget w in vbox3.Children) {
+                               foreach (Widget t in (w as Table).Children) {
+                                       if (!(t is Label)) {
+                                               sizegroup.AddWidget (t);
+                                       }
+                               }
+                       }
+                       CanChangeHotkey = true;
                }
-               
+
+               public bool Edited {
+                       set {
+                               edited = value;
+                               if (!ignore && EditedEvent != null) {
+                                       EditedEvent (this, null);
+                               }
+                       }
+                       get {
+                               return edited;
+                       }
+               }
+
                public bool CanChangeHotkey {
                        set {
                                if (value == true)
                                        changebuton.Sensitive = true;
                        }
                }
-               
-               public Category Category {
+
+               public TaggerButton Tagger {
                        set {
-                               cat = value;
+                               tagger = value;
+                               cat = value as Category;
+                               card = value as PenaltyCard;
+                               score = value as Score;
+                               cattable.Visible = cat != null;
+                               scoretable.Visible = score != null;
+                               cardtable.Visible = card != null;
                                UpdateGui();
                        }
                        get {
@@ -86,75 +124,64 @@ namespace LongoMatch.Gui.Component
                        get;
                }
                
-               public Categories Template {
-                       set {
-                               fieldcoordinatestagger.Tagger.Background = value.FieldBackground;
-                               halffieldcoordinatestagger.Tagger.Background = value.HalfFieldBackground;
-                               goalcoordinatestagger.Tagger.Background = value.GoalBackground;
+               void SetPositionCombo (ComboBox box, bool tagField, bool asTrayectory) {
+                       if (!tagField) {
+                               box.Active = 0;
+                       } else if (!asTrayectory) {
+                               box.Active = 1;
+                       } else {
+                               box.Active = 2;
                        }
+                       Edited = true;
                }
-
-               private void  UpdateGui() {
-                       ListStore list;
-                       
-                       if(cat == null)
-                               return;
-                               
-                       nameentry.Text = cat.Name;
-                               
-                       leadtimebutton.Value = cat.Start.Seconds;
-                       lagtimebutton.Value = cat.Stop.Seconds;
-                       colorbutton1.Color = Helpers.Misc.ToGdkColor(cat.Color);
-                       sortmethodcombobox.Active = (int)cat.SortMethod;
-                       
-                       tagfieldcheckbutton.Active = cat.TagFieldPosition;
-                       fieldcoordinatestagger.Visible = cat.TagFieldPosition;
-                       UpdatePosition (FieldPositionType.Field);
-                       trajectorycheckbutton.Active = cat.FieldPositionIsDistance;
-                       
-                       taghalffieldcheckbutton.Active = cat.TagHalfFieldPosition;
-                       halffieldcoordinatestagger.Visible = cat.TagHalfFieldPosition;
-                       UpdatePosition (FieldPositionType.HalfField);
-                       trajectoryhalfcheckbutton.Active = cat.HalfFieldPositionIsDistance;
-                       
-                       taggoalcheckbutton.Active = cat.TagGoalPosition;
-                       UpdatePosition (FieldPositionType.Goal);
-                       goalcoordinatestagger.Visible = cat.TagGoalPosition;
-                       
-                       if(cat.HotKey.Defined)
-                               hotKeyLabel.Text = cat.HotKey.ToString();
-                       else hotKeyLabel.Text = Catalog.GetString("none");
+               
+               void ReadPositionCombo (ComboBox box, out bool tagField, out bool asTrayectory) {
+                       if (box.Active == 0) {
+                               tagField = true;
+                               asTrayectory = false;
+                       } else if (box.Active == 1) {
+                               tagField = true;
+                               asTrayectory = true;
+                       } else {
+                               tagField = false;
+                               asTrayectory = false;
+                       }
                }
                
-               void UpdatePosition (FieldPositionType position) {
-                       CoordinatesTagger tagger;
-                       List<Point> points;
-                       bool isDistance;
-                       
-                       switch (position) {
-                       case FieldPositionType.Field:
-                               tagger = fieldcoordinatestagger;
-                               isDistance = cat.FieldPositionIsDistance;
-                               break;
-                       case FieldPositionType.HalfField:
-                               tagger = halffieldcoordinatestagger;
-                               isDistance = cat.HalfFieldPositionIsDistance;
-                               break;
-                       default:
-                       case FieldPositionType.Goal:
-                               tagger = goalcoordinatestagger;
-                               isDistance = false;
-                               break;
-                       }
-                       points = new List<Point> ();
-                       points.Add (new Point (0.5, 0.5));
-                       if (isDistance) {
-                               points.Add (new Point (0.5, 0.1));
-                       }
-                       tagger.Tagger.Points = points;
+               private void  UpdateGui() {
+                       ignore = true;
+                       if (tagger != null) {
+                               nameentry.Text = tagger.Name;
+                               colorbutton1.Color = Helpers.Misc.ToGdkColor(tagger.Color);
+                               colorbutton2.Color = Helpers.Misc.ToGdkColor(tagger.TextColor);
+                               lastLeadTime = tagger.Start;
+                               tagmodecombobox.Active = (int)tagger.TagMode;
+                               leadtimebutton.Value = tagger.Start.Seconds;
+                               lagtimebutton.Value = tagger.Stop.Seconds;
+                       }
+                       if(cat != null) {
+                               tagscheckbutton.Active = cat.ShowSubcategories;
+                               tprbutton.Value = cat.TagsPerRow;
+                               sortmethodcombobox.Active = (int)cat.SortMethod;
+                               SetPositionCombo (fieldcombobox, cat.TagFieldPosition, 
cat.FieldPositionIsDistance);
+                               SetPositionCombo (hfieldcombobox, cat.TagHalfFieldPosition, 
cat.HalfFieldPositionIsDistance);
+                               SetPositionCombo (goalcombobox, cat.TagGoalPosition, false);
+                               if(cat.HotKey.Defined)
+                                       hotKeyLabel.Text = cat.HotKey.ToString();
+                               else
+                                       hotKeyLabel.Text = Catalog.GetString("none");
+                       }
+                       if (score != null) {
+                               pointsbutton.Value = score.Points;
+                       }
+                       if (card != null) {
+                               shapecombobox.Active = (int) card.Shape;
+                       }
+                       ignore = false;
+                       Edited = false;
                }
                
-               protected virtual void OnChangebutonClicked(object sender, System.EventArgs e)
+               void HandleChangeHotkey(object sender, System.EventArgs e)
                {
                        HotKeySelectorDialog dialog = new HotKeySelectorDialog();
                        dialog.TransientFor=(Gtk.Window)this.Toplevel;
@@ -166,66 +193,98 @@ namespace LongoMatch.Gui.Component
                        dialog.Destroy();
                        if(HotKeyChanged != null)
                                HotKeyChanged(prevHotKey,cat);
+                       Edited = true;
                }
 
-               protected virtual void OnColorbutton1ColorSet(object sender, System.EventArgs e)
+               void HandlePositionChanged (object sender, EventArgs e)
                {
-                       if(cat != null)
-                               cat.Color= Helpers.Misc.ToLgmColor(colorbutton1.Color);
+                       bool tag = false, trayectory = false;
+                       
+                       ReadPositionCombo (sender as ComboBox, out tag, out trayectory);
+                       if (sender == fieldcombobox) {
+                               cat.TagFieldPosition = tag;
+                               cat.FieldPositionIsDistance = trayectory;
+                       } else if (sender == hfieldcombobox) {
+                               cat.TagHalfFieldPosition = tag;
+                               cat.HalfFieldPositionIsDistance = trayectory;
+                       } else {
+                               cat.TagGoalPosition = tag;
+                       }
+                       Edited = true;
                }
 
-               protected virtual void OnLeadTimeChanged(object sender, System.EventArgs e)
+               void HandleTagsPerRowValueChanged (object sender, EventArgs e)
                {
-                       cat.Start = new Time{Seconds=(int)leadtimebutton.Value};
+                       cat.TagsPerRow = tprbutton.ValueAsInt;
+                       Edited = true;
                }
-
-               protected virtual void OnLagTimeChanged(object sender, System.EventArgs e)
+               
+               void HandleTagsToggled (object sender, EventArgs e)
                {
-                       cat.Stop = new Time{Seconds=(int)lagtimebutton.Value};
+                       cat.ShowSubcategories = tagscheckbutton.Active;
+                       Edited = true;
                }
 
-               protected virtual void OnNameentryChanged(object sender, System.EventArgs e)
+               void HandleTagModeChanged (object sender, EventArgs e)
                {
-                       cat.Name = nameentry.Text;
+                       tagger.TagMode = (TagMode) tagmodecombobox.Active;
+                       if (tagger.TagMode == TagMode.Predifined) {
+                               lagtimebutton.Sensitive = true;
+                               leadtimebutton.Value = lastLeadTime.Seconds;
+                       } else {
+                               lagtimebutton.Sensitive = false;
+                               lastLeadTime = tagger.Start;
+                               leadtimebutton.Value = 0;
+                       }
+                       Edited = true;
                }
-
-               protected virtual void OnSortmethodcomboboxChanged(object sender, System.EventArgs e)
+               
+               void HandleColorSet (object sender, EventArgs e)
                {
-                       cat.SortMethodString = sortmethodcombobox.ActiveText;
+                       LongoMatch.Common.Color c = Helpers.Misc.ToLgmColor((sender as ColorButton).Color);
+                       if (sender == colorbutton1) {
+                               tagger.Color = c;
+                       } else {
+                               tagger.TextColor = c;
+                       }
+                       Edited = true;
                }
                
-               protected virtual void OnAddbuttonClicked (object sender, System.EventArgs e)
+               void HandleLeadTimeChanged(object sender, System.EventArgs e)
                {
+                       tagger.Start = new Time{Seconds=(int)leadtimebutton.Value};
+                       Edited = true;
                }
-               
-               protected void OnTaggoalcheckbuttonClicked (object sender, EventArgs e)
+
+               void HandleLagTimeChanged(object sender, System.EventArgs e)
                {
-                       goalcoordinatestagger.Visible = taggoalcheckbutton.Active;
-                       cat.TagGoalPosition = taggoalcheckbutton.Active;
+                       tagger.Stop = new Time{Seconds=(int)lagtimebutton.Value};
+                       Edited = true;
                }
-               
-               protected void OnTaghalffieldcheckbuttonClicked (object sender, EventArgs e)
+
+               void HandleNameentryChanged(object sender, System.EventArgs e)
                {
-                       halffieldcoordinatestagger.Visible = taghalffieldcheckbutton.Active;
-                       cat.TagHalfFieldPosition = taghalffieldcheckbutton.Active;
+                       tagger.Name = nameentry.Text;
+                       Edited = true;
                }
-               
-               protected void OnTagfieldcheckbuttonClicked (object sender, EventArgs e)
+
+               void HandleSortMethodChanged(object sender, System.EventArgs e)
                {
-                       fieldcoordinatestagger.Visible = tagfieldcheckbutton.Active;
-                       cat.TagFieldPosition = tagfieldcheckbutton.Active;
+                       cat.SortMethodString = sortmethodcombobox.ActiveText;
+                       Edited = true;
                }
                
-               protected void OnTrajectoryhalffieldcheckbuttonClicked (object sender, EventArgs e)
+               void HandleShapeChanged (object sender, EventArgs e)
                {
-                       cat.HalfFieldPositionIsDistance = trajectoryhalfcheckbutton.Active;
-                       UpdatePosition (FieldPositionType.HalfField);
+                       card.Shape = (CardShape) shapecombobox.Active;
+                       Edited = true;
                }
                
-               protected void OnTrajectorycheckbuttonClicked (object sender, EventArgs e)
+               void HandlePointsChanged (object sender, EventArgs e)
                {
-                       cat.FieldPositionIsDistance = trajectorycheckbutton.Active;
-                       UpdatePosition (FieldPositionType.Field);
+                       score.Points = pointsbutton.ValueAsInt;
+                       Edited = true;
                }
+
        }
 }
diff --git a/LongoMatch.GUI/Gui/Component/CodingWidget.cs b/LongoMatch.GUI/Gui/Component/CodingWidget.cs
index 8214c46..844c4e9 100644
--- a/LongoMatch.GUI/Gui/Component/CodingWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/CodingWidget.cs
@@ -16,10 +16,11 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 //
 using System;
+using System.Collections.Generic;
+using Gtk;
 using LongoMatch.Handlers;
 using LongoMatch.Store;
 using LongoMatch.Common;
-using System.Collections.Generic;
 using LongoMatch.Drawing.Widgets;
 using LongoMatch.Drawing.Cairo;
 using LongoMatch.Gui.Helpers;
@@ -29,7 +30,6 @@ namespace LongoMatch.Gui.Component
        [System.ComponentModel.ToolboxItem(true)]
        public partial class CodingWidget : Gtk.Bin
        {
-               VideoAnalysisMode analysisMode;
                TeamTagger teamtagger;
                Project project;
                ProjectType projectType;
@@ -39,28 +39,32 @@ namespace LongoMatch.Gui.Component
                public CodingWidget ()
                {
                        this.Build ();
+                       
+                       notebook.ShowTabs = false;
+                       notebook.ShowBorder = false;
 
                        autoTaggingMode.Activated += HandleViewToggled;
                        timelineMode.Activated += HandleViewToggled;
                        positionMode.Activated += HandleViewToggled;
                        autoTaggingMode.Active = true;
                        
-                       teamtagger = new TeamTagger (new WidgetWrapper (drawingarea1));
+                       teamtagger = new TeamTagger (new WidgetWrapper (teamsdrawingarea));
                        teamtagger.HomeColor = Constants.HOME_COLOR;
                        teamtagger.AwayColor = Constants.AWAY_COLOR;
                        teamtagger.SelectionMode = MultiSelectionMode.Multiple;
                        teamtagger.PlayersSelectionChangedEvent += HandlePlayersSelectionChangedEvent;
 
-                       drawingarea1.HeightRequest = 200;
-                       drawingarea1.WidthRequest = 300;
+                       teamsdrawingarea.HeightRequest = 200;
+                       teamsdrawingarea.WidthRequest = 300;
                        timeline.HeightRequest = 200;
                        playspositionviewer1.HeightRequest = 200;
                        
                        Config.EventsBroker.Tick += HandleTick;
                        Config.EventsBroker.PlaySelected += HandlePlaySelected;
-                       Misc.DisableFocus (vbox2);
+                       LongoMatch.Gui.Helpers.Misc.DisableFocus (vbox);
                        
-                       buttonswidget.NewTagEvent += HandleNewTagEvent;
+                       //buttonswidget.NewTagEvent += HandleNewTagEvent;
+                       buttonswidget.Mode = TagMode.Free;
                }
 
                protected override void OnDestroyed ()
@@ -78,9 +82,9 @@ namespace LongoMatch.Gui.Component
                        this.projectType = projectType;
                        autoTaggingMode.Active = true;
                        buttonswidget.Visible = true;
-                       timeline.Visible = false;
-                       playspositionviewer1.Visible = false;
-                       buttonswidget.Project = project;
+                       if (project != null) {
+                               buttonswidget.Template = project.Categories;
+                       }
                        teamtagger.LoadTeams (project.LocalTeamTemplate, project.VisitorTeamTemplate,
                                              project.Categories.FieldBackground);
                        if (projectType != ProjectType.FileProject) {
@@ -107,15 +111,21 @@ namespace LongoMatch.Gui.Component
                }
 
                public void UpdateCategories () {
-                       buttonswidget.Project = project;
+                       buttonswidget.Refresh ();
                }
                
                void HandleViewToggled (object sender, EventArgs e)
                {
-                       buttonswidget.Visible = autoTaggingMode.Active;
-                       drawingarea1.Visible = buttonswidget.Visible;
-                       timeline.Visible = timelineMode.Active;
-                       playspositionviewer1.Visible = positionMode.Active;
+                       if (!(sender as RadioAction).Active) {
+                               return;
+                       }
+                       if (autoTaggingMode.Active) {
+                               notebook.Page = 0;
+                       } else if (timelineMode.Active) {
+                               notebook.Page = 1;
+                       } else if (positionMode.Active) {
+                               notebook.CurrentPage = 2;
+                       }
                }
                
                void HandlePlaySelected (Play play)
diff --git a/LongoMatch.GUI/Gui/Component/PeriodsRecoder.cs b/LongoMatch.GUI/Gui/Component/PeriodsRecoder.cs
index 8c3d0f4..4bd3f6c 100644
--- a/LongoMatch.GUI/Gui/Component/PeriodsRecoder.cs
+++ b/LongoMatch.GUI/Gui/Component/PeriodsRecoder.cs
@@ -58,7 +58,7 @@ namespace LongoMatch.Gui.Component
                void HandleStopClicked (object sender, EventArgs e)
                {
                        GLib.Source.Remove (timeoutID);
-                       Period.Stop (CurrentTime);
+                       Period.StopTimer (CurrentTime);
                        
                        startbutton.Visible = false;
                        stopbutton.Visible = true;
@@ -76,7 +76,7 @@ namespace LongoMatch.Gui.Component
                        } else {
                                periodName = (currentPeriod + 1).ToString ();
                        }
-                       Period.Start (new Time (0), periodName);
+                       Period.StartTimer (new Time (0), periodName);
                        currentPeriodStart = DateTime.UtcNow;
                        timeoutID = GLib.Timeout.Add (200, UpdateTime);
                }
diff --git a/LongoMatch.GUI/Gui/Component/PlaysListTreeWidget.cs 
b/LongoMatch.GUI/Gui/Component/PlaysListTreeWidget.cs
index b77cb4b..eb730f3 100644
--- a/LongoMatch.GUI/Gui/Component/PlaysListTreeWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/PlaysListTreeWidget.cs
@@ -121,7 +121,7 @@ namespace LongoMatch.Gui.Component
                        Dictionary<Category, TreeIter> itersDic = new Dictionary<Category, TreeIter>();
                        Gtk.TreeStore dataFileListStore = new Gtk.TreeStore(typeof(Play));
 
-                       foreach(Category cat in project.Categories.List) {
+                       foreach(Category cat in project.Categories.CategoriesList) {
                                Gtk.TreeIter iter = dataFileListStore.AppendValues(cat);
                                itersDic.Add(cat, iter);
                        }
@@ -139,14 +139,13 @@ namespace LongoMatch.Gui.Component
                }
 
                private string CategoryPath(Category cat) {
-                       return project.Categories.List.IndexOf(cat).ToString();
+                       return project.Categories.CategoriesList.IndexOf(cat).ToString();
                }
                
-               protected virtual void OnEditProperties(TimeNode tNode, object val) {
-                       EditCategoryDialog dialog = new EditCategoryDialog(project, tNode as Category);
+               protected virtual void OnEditProperties(Category cat) {
+                       EditCategoryDialog dialog = new EditCategoryDialog(project, cat);
                        dialog.Run();
                        dialog.Destroy();
-                       Config.EventsBroker.EmitTimeNodeChanged (tNode, tNode.Name);
                }
 
                protected virtual void OnNewRenderingJob (object sender, EventArgs args)
diff --git a/LongoMatch.GUI/Gui/Component/ProjectPeriods.cs b/LongoMatch.GUI/Gui/Component/ProjectPeriods.cs
index 4907878..fea8aae 100644
--- a/LongoMatch.GUI/Gui/Component/ProjectPeriods.cs
+++ b/LongoMatch.GUI/Gui/Component/ProjectPeriods.cs
@@ -76,8 +76,8 @@ namespace LongoMatch.Gui.Component
                                
                                foreach (string s in gamePeriods) {
                                        Period period = new Period {Name = s};
-                                       period.Start (start);
-                                       period.Stop (start + pDuration);
+                                       period.StartTimer (start);
+                                       period.StopTimer (start + pDuration);
                                        periods.Add (period);
                                        start += pDuration;
                                }
diff --git a/LongoMatch.GUI/Gui/Dialog/EditCategoryDialog.cs b/LongoMatch.GUI/Gui/Dialog/EditCategoryDialog.cs
index 7fb010c..4280e4f 100644
--- a/LongoMatch.GUI/Gui/Dialog/EditCategoryDialog.cs
+++ b/LongoMatch.GUI/Gui/Dialog/EditCategoryDialog.cs
@@ -37,11 +37,10 @@ namespace LongoMatch.Gui.Dialog
        {
                private List<HotKey> hkList;
 
-               public EditCategoryDialog(Project project, Category cat)
+               public EditCategoryDialog(Project project, TaggerButton tagger)
                {
                        this.Build();
-                       timenodeproperties2.Template = project.Categories;
-                       timenodeproperties2.Category = cat;
+                       timenodeproperties2.Tagger = tagger;
                        timenodeproperties2.Project = project;
                        timenodeproperties2.HotKeyChanged += OnHotKeyChanged;
                }
@@ -58,7 +57,7 @@ namespace LongoMatch.Gui.Dialog
                                MessagesHelpers.WarningMessage(this,
                                                               Catalog.GetString("This hotkey is already in 
use."));
                                category.HotKey=prevHotKey;
-                               timenodeproperties2.Category = category; //Update Gui
+                               timenodeproperties2.Tagger = category; //Update Gui
                        }
                        else if(category.HotKey.Defined) {
                                hkList.Remove(prevHotKey);
diff --git a/LongoMatch.GUI/Gui/Menu/PlaysMenu.cs b/LongoMatch.GUI/Gui/Menu/PlaysMenu.cs
index 216d69f..f168554 100644
--- a/LongoMatch.GUI/Gui/Menu/PlaysMenu.cs
+++ b/LongoMatch.GUI/Gui/Menu/PlaysMenu.cs
@@ -184,7 +184,7 @@ namespace LongoMatch.Gui.Menus
 
                void HandleNePlayActivated (object sender, EventArgs e)
                {
-                       Config.EventsBroker.EmitNewTagAtPos (cat, time);
+                       Config.EventsBroker.EmitNewTag (cat, null, null, time - cat.Start, time + cat.Stop);
                }
                
                void EmitRenderPlaylist (List<Play> plays)
diff --git a/LongoMatch.GUI/Gui/Panel/SportsTemplatesPanel.cs 
b/LongoMatch.GUI/Gui/Panel/SportsTemplatesPanel.cs
index 1836181..1384334 100644
--- a/LongoMatch.GUI/Gui/Panel/SportsTemplatesPanel.cs
+++ b/LongoMatch.GUI/Gui/Panel/SportsTemplatesPanel.cs
@@ -26,6 +26,7 @@ using Gdk;
 using Mono.Unix;
 using LongoMatch.Gui.Helpers;
 using LongoMatch.Gui.Dialog;
+using LongoMatch.Common;
 
 namespace LongoMatch.Gui.Panel
 {
@@ -58,20 +59,21 @@ namespace LongoMatch.Gui.Panel
                        
                        teamsvbox.WidthRequest = 280;
                        
-                       //teamtemplateeditor1.Visible = false;
+                       buttonswidget.Sensitive = false;
+                       buttonswidget.Mode = TagMode.Edit;
                        newteam.Visible = true;
                        deleteteambutton.Visible = false;
                        
                        selectedTemplate = new List<string>();
                        newteam.Clicked += HandleNewTeamClicked;
                        deleteteambutton.Clicked += HandleDeleteTeamClicked;
+                       savebutton.Clicked += (sender, e) => Save ();
                        
                        backbutton.Clicked += (sender, o) => {
                                if (BackEvent != null)
                                        BackEvent();
                        };
                        Load (null);
-                       
                }
                
                void Load (string templateName) {
@@ -100,19 +102,21 @@ namespace LongoMatch.Gui.Panel
                        }
                }
                
-               void LoadTemplate (string templateName) {
-                       if (loadedTemplate != null && analysistemplateeditor.Edited) {
+               void Save () {
+                       if (loadedTemplate != null && buttonswidget.Edited) {
                                string msg = Catalog.GetString ("Do you want to save the current template");
                            if (Config.GUIToolkit.QuestionMessage (msg, null, this)) {
                                        provider.Update (loadedTemplate);
-                           } else {
-                                       return;
                            }
                        }
+               }
+               
+               void LoadTemplate (string templateName) {
+                       Save ();
                        
-                       try  {
+                       try {
                                loadedTemplate = provider.Load (templateName);
-                               analysistemplateeditor.Template = loadedTemplate;
+                               buttonswidget.Template = loadedTemplate;
                        } catch (Exception ex) {
                                Log.Exception (ex);
                                GUIToolkit.Instance.ErrorMessage (Catalog.GetString ("Could not load 
template"));
@@ -134,7 +138,7 @@ namespace LongoMatch.Gui.Panel
                        }
                        
                        deleteteambutton.Visible = selectedTemplate.Count >= 1;
-                       analysistemplateeditor.Visible = true;
+                       buttonswidget.Sensitive = true;
                        
                        if (selectedTemplate.Count == 1) {
                                LoadTemplate (selectedTemplate[0]);
diff --git a/LongoMatch.GUI/Gui/TreeView/CategoriesFilterTreeView.cs 
b/LongoMatch.GUI/Gui/TreeView/CategoriesFilterTreeView.cs
index 49a64a7..2ee1df9 100644
--- a/LongoMatch.GUI/Gui/TreeView/CategoriesFilterTreeView.cs
+++ b/LongoMatch.GUI/Gui/TreeView/CategoriesFilterTreeView.cs
@@ -47,7 +47,7 @@ namespace LongoMatch.Gui.Component
                protected override void FillTree () {
                        store = new TreeStore (typeof (object), typeof (bool));
                        
-                       foreach (Category cat in  categories.List) {
+                       foreach (Category cat in  categories.CategoriesList) {
                                TreeIter catIter;
                                
                                catIter = store.AppendValues(cat, filter.VisibleCategories.Contains(cat));
diff --git a/LongoMatch.GUI/Gui/TreeView/ListTreeViewBase.cs b/LongoMatch.GUI/Gui/TreeView/ListTreeViewBase.cs
index 5ded8d9..dc4965f 100644
--- a/LongoMatch.GUI/Gui/TreeView/ListTreeViewBase.cs
+++ b/LongoMatch.GUI/Gui/TreeView/ListTreeViewBase.cs
@@ -132,7 +132,7 @@ namespace LongoMatch.Gui.Component
                
                protected void ShowMenu () {
                        playsMenu.ShowListMenu (SelectedPlays, Project.Description.File,
-                                               Project.Categories.List);
+                                               Project.Categories.CategoriesList);
                }
 
                protected object GetValueFromPath(TreePath path) {
@@ -200,7 +200,7 @@ namespace LongoMatch.Gui.Component
                        } else if(o is Category) {
                                c.Background = "white";
                                c.CellBackground = "white";
-                               c.Markup = String.Format("{0} ({1})", GLib.Markup.EscapeText ((o as 
TimeNode).Name),
+                               c.Markup = String.Format("{0} ({1})", GLib.Markup.EscapeText ((o as 
Category).Name),
                                                         modelFilter.IterNChildren(iter));
                        }
                }
diff --git a/LongoMatch.GUI/Gui/TreeView/PlayListTreeView.cs b/LongoMatch.GUI/Gui/TreeView/PlayListTreeView.cs
index 13fc975..c6a21a5 100644
--- a/LongoMatch.GUI/Gui/TreeView/PlayListTreeView.cs
+++ b/LongoMatch.GUI/Gui/TreeView/PlayListTreeView.cs
@@ -87,7 +87,7 @@ namespace LongoMatch.Gui.Component
                {
                }
 
-               protected override bool OnButtonPressEvent(EventButton evnt)
+               protected override bool OnButtonPressEvent(Gdk.EventButton evnt)
                {
                        if((evnt.Type == EventType.ButtonPress) && (evnt.Button == 3))
                        {
@@ -148,7 +148,6 @@ namespace LongoMatch.Gui.Component
                        Model.GetIter(out selectedIter, Selection.GetSelectedRows()[0]);
                        selectedPlay = (PlayListPlay) Model.GetValue(selectedIter, 0);
                        preDragPos = Model.GetPath(selectedIter).Indices[0];
-                       Console.WriteLine (Model.GetPath(selectedIter));
                        base.OnDragBegin (context);
                }
                
diff --git a/LongoMatch.GUI/Gui/TreeView/PlayersTreeView.cs b/LongoMatch.GUI/Gui/TreeView/PlayersTreeView.cs
index e7b9842..141c168 100644
--- a/LongoMatch.GUI/Gui/TreeView/PlayersTreeView.cs
+++ b/LongoMatch.GUI/Gui/TreeView/PlayersTreeView.cs
@@ -95,7 +95,7 @@ namespace LongoMatch.Gui.Component
                        Model.SetSortFunc(0, SortFunction);
                }
 
-               override protected bool OnButtonPressEvent(EventButton evnt)
+               override protected bool OnButtonPressEvent(Gdk.EventButton evnt)
                {
                        TreePath[] paths = Selection.GetSelectedRows();
 
diff --git a/LongoMatch.GUI/Gui/TreeView/PlaysTreeView.cs b/LongoMatch.GUI/Gui/TreeView/PlaysTreeView.cs
index e5570c2..715ed4c 100644
--- a/LongoMatch.GUI/Gui/TreeView/PlaysTreeView.cs
+++ b/LongoMatch.GUI/Gui/TreeView/PlaysTreeView.cs
@@ -35,7 +35,7 @@ namespace LongoMatch.Gui.Component
        public class PlaysTreeView : ListTreeViewBase
        {
                
-               public event TimeNodeChangedHandler EditProperties;
+               public event CategoryChangedHandler EditProperties;
 
                //Categories menu
                Menu categoriesMenu;
@@ -112,7 +112,7 @@ namespace LongoMatch.Gui.Component
                        sortByStop.Activated += OnSortActivated;
                        sortByDuration.Activated += OnSortActivated;
                        editProp.Activated += delegate(object sender, EventArgs e) {
-                               EditProperties(GetValueFromPath(Selection.GetSelectedRows()[0]) as Category, 
null);
+                               EditProperties(GetValueFromPath(Selection.GetSelectedRows()[0]) as Category);
                        };
                }
 
@@ -218,7 +218,7 @@ namespace LongoMatch.Gui.Component
                        Model.SetSortFunc(0, SortFunction);
                }
 
-               override protected bool OnButtonPressEvent(EventButton evnt)
+               override protected bool OnButtonPressEvent(Gdk.EventButton evnt)
                {
                        TreePath[] paths = Selection.GetSelectedRows();
 
@@ -234,11 +234,10 @@ namespace LongoMatch.Gui.Component
 
                                if(paths.Length == 1) {
                                        TimeNode selectedTimeNode = GetValueFromPath(paths[0]) as TimeNode;
-                                       if(selectedTimeNode is Play) {
+                                       if (selectedTimeNode != null) {
                                                ShowMenu ();
-                                       }
-                                       else {
-                                               SetupSortMenu((selectedTimeNode as Category).SortMethod);
+                                       } else {
+                                               SetupSortMenu((GetValueFromPath(paths[0]) as 
Category).SortMethod);
                                                categoriesMenu.Popup();
                                        }
                                }
diff --git a/LongoMatch.GUI/LongoMatch.GUI.mdp b/LongoMatch.GUI/LongoMatch.GUI.mdp
index 2aaf88b..60ace37 100644
--- a/LongoMatch.GUI/LongoMatch.GUI.mdp
+++ b/LongoMatch.GUI/LongoMatch.GUI.mdp
@@ -126,8 +126,6 @@
     <File subtype="Code" buildaction="Compile" 
name="gtk-gui/LongoMatch.Gui.Component.Stats.PlayerCategoryViewer.cs" />
     <File subtype="Code" buildaction="Compile" name="Gui/Component/Stats/PlayerSubcategoryViewer.cs" />
     <File subtype="Code" buildaction="Compile" 
name="gtk-gui/LongoMatch.Gui.Component.Stats.PlayerSubcategoryViewer.cs" />
-    <File subtype="Code" buildaction="Compile" name="Gui/Component/ButtonTagger.cs" />
-    <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Component.ButtonTagger.cs" />
     <File subtype="Code" buildaction="Compile" name="Gui/Component/AnalysisComponent.cs" />
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Component.AnalysisComponent.cs" 
/>
     <File subtype="Code" buildaction="EmbedAsResource" name="../images/background.svg" />
@@ -149,8 +147,6 @@
     <File subtype="Code" buildaction="Compile" name="Gui/Panel/SportsTemplatesPanel.cs" />
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Panel.SportsTemplatesPanel.cs" />
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Dialog.CalendarDialog.cs" />
-    <File subtype="Code" buildaction="Compile" name="Gui/Component/AnalysisTemplateEditor.cs" />
-    <File subtype="Code" buildaction="Compile" 
name="gtk-gui/LongoMatch.Gui.Component.AnalysisTemplateEditor.cs" />
     <File subtype="Code" buildaction="Compile" name="Gui/Component/BackgroundWidget.cs" />
     <File subtype="Code" buildaction="Compile" name="Gui/Panel/PreferencesPanel.cs" />
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Panel.PreferencesPanel.cs" />
diff --git a/LongoMatch.GUI/Makefile.am b/LongoMatch.GUI/Makefile.am
index 56c1d4d..3d42753 100644
--- a/LongoMatch.GUI/Makefile.am
+++ b/LongoMatch.GUI/Makefile.am
@@ -5,9 +5,7 @@ LINK = $(REF_DEP_LONGOMATCH_GUI)
 
 SOURCES = Gui/Cairo.cs \
        Gui/Component/AnalysisComponent.cs \
-       Gui/Component/AnalysisTemplateEditor.cs \
        Gui/Component/BackgroundWidget.cs \
-       Gui/Component/ButtonTagger.cs \
        Gui/Component/ButtonsWidget.cs \
        Gui/Component/CategoryProperties.cs \
        Gui/Component/CodingWidget.cs \
@@ -78,9 +76,7 @@ SOURCES = Gui/Cairo.cs \
        Gui/TreeView/PlaysTreeView.cs \
        Gui/TreeView/RenderingJobsTreeView.cs \
        gtk-gui/LongoMatch.Gui.Component.AnalysisComponent.cs \
-       gtk-gui/LongoMatch.Gui.Component.AnalysisTemplateEditor.cs \
        gtk-gui/LongoMatch.Gui.Component.BackgroundWidget.cs \
-       gtk-gui/LongoMatch.Gui.Component.ButtonTagger.cs \
        gtk-gui/LongoMatch.Gui.Component.ButtonsWidget.cs \
        gtk-gui/LongoMatch.Gui.Component.CategoryProperties.cs \
        gtk-gui/LongoMatch.Gui.Component.CodingWidget.cs \
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.AnalysisComponent.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.AnalysisComponent.cs
index c286d1d..e0c7e2d 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.AnalysisComponent.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.AnalysisComponent.cs
@@ -5,12 +5,7 @@ namespace LongoMatch.Gui.Component
        public partial class AnalysisComponent
        {
                private global::Gtk.UIManager UIManager;
-               private global::Gtk.VPaned vpaned1;
-               private global::Gtk.HPaned hpaned;
-               private global::LongoMatch.Gui.Component.PlaysSelectionWidget playsSelection;
-               private global::Gtk.HBox videowidgetsbox;
-               private global::LongoMatch.Gui.PlayerCapturerBin playercapturer;
-               private global::LongoMatch.Gui.Component.CodingWidget codingwidget;
+               private global::Gtk.HBox hbox1;
 
                protected virtual void Build ()
                {
@@ -22,43 +17,10 @@ namespace LongoMatch.Gui.Component
                        this.UIManager.InsertActionGroup (w2, 0);
                        this.Name = "LongoMatch.Gui.Component.AnalysisComponent";
                        // Container child 
LongoMatch.Gui.Component.AnalysisComponent.Gtk.Container+ContainerChild
-                       this.vpaned1 = new global::Gtk.VPaned ();
-                       this.vpaned1.CanFocus = true;
-                       this.vpaned1.Name = "vpaned1";
-                       this.vpaned1.Position = 438;
-                       // Container child vpaned1.Gtk.Paned+PanedChild
-                       this.hpaned = new global::Gtk.HPaned ();
-                       this.hpaned.CanFocus = true;
-                       this.hpaned.Name = "hpaned";
-                       this.hpaned.Position = 261;
-                       // Container child hpaned.Gtk.Paned+PanedChild
-                       this.playsSelection = new global::LongoMatch.Gui.Component.PlaysSelectionWidget ();
-                       this.playsSelection.Events = ((global::Gdk.EventMask)(256));
-                       this.playsSelection.Name = "playsSelection";
-                       this.hpaned.Add (this.playsSelection);
-                       global::Gtk.Paned.PanedChild w3 = ((global::Gtk.Paned.PanedChild)(this.hpaned 
[this.playsSelection]));
-                       w3.Resize = false;
-                       // Container child hpaned.Gtk.Paned+PanedChild
-                       this.videowidgetsbox = new global::Gtk.HBox ();
-                       this.videowidgetsbox.Name = "videowidgetsbox";
-                       this.videowidgetsbox.Spacing = 6;
-                       // Container child videowidgetsbox.Gtk.Box+BoxChild
-                       this.playercapturer = new global::LongoMatch.Gui.PlayerCapturerBin ();
-                       this.playercapturer.Events = ((global::Gdk.EventMask)(256));
-                       this.playercapturer.Name = "playercapturer";
-                       this.videowidgetsbox.Add (this.playercapturer);
-                       global::Gtk.Box.BoxChild w4 = ((global::Gtk.Box.BoxChild)(this.videowidgetsbox 
[this.playercapturer]));
-                       w4.Position = 0;
-                       this.hpaned.Add (this.videowidgetsbox);
-                       this.vpaned1.Add (this.hpaned);
-                       global::Gtk.Paned.PanedChild w6 = ((global::Gtk.Paned.PanedChild)(this.vpaned1 
[this.hpaned]));
-                       w6.Resize = false;
-                       // Container child vpaned1.Gtk.Paned+PanedChild
-                       this.codingwidget = new global::LongoMatch.Gui.Component.CodingWidget ();
-                       this.codingwidget.Events = ((global::Gdk.EventMask)(256));
-                       this.codingwidget.Name = "codingwidget";
-                       this.vpaned1.Add (this.codingwidget);
-                       this.Add (this.vpaned1);
+                       this.hbox1 = new global::Gtk.HBox ();
+                       this.hbox1.Name = "hbox1";
+                       this.hbox1.Spacing = 6;
+                       this.Add (this.hbox1);
                        if ((this.Child != null)) {
                                this.Child.ShowAll ();
                        }
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.ButtonsWidget.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.ButtonsWidget.cs
index 172ec69..01c5ae4 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.ButtonsWidget.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.ButtonsWidget.cs
@@ -4,8 +4,44 @@ namespace LongoMatch.Gui.Component
 {
        public partial class ButtonsWidget
        {
-               private global::Gtk.VBox vbox1;
-               private global::Gtk.Table table1;
+               private global::Gtk.HBox hbox2;
+               private global::Gtk.VBox vbox2;
+               private global::Gtk.HButtonBox hbuttonbox2;
+               private global::Gtk.Button addcatbutton;
+               private global::Gtk.Button addtimerbutton;
+               private global::Gtk.Button addscorebutton;
+               private global::Gtk.Button addcardbutton;
+               private global::Gtk.Button addtagbutton;
+               private global::Gtk.ScrolledWindow scrolledwindow4;
+               private global::Gtk.DrawingArea drawingarea1;
+               private global::Gtk.VBox rightbox;
+               private global::Gtk.HBox positionsbox;
+               private global::Gtk.Frame frame8;
+               private global::Gtk.Alignment GtkAlignment13;
+               private global::Gtk.HBox hbox6;
+               private global::Gtk.EventBox fieldeventbox;
+               private global::Gtk.Image fieldimage;
+               private global::Gtk.Button resetfieldbutton;
+               private global::Gtk.Label GtkLabel17;
+               private global::Gtk.Frame frame9;
+               private global::Gtk.Alignment GtkAlignment15;
+               private global::Gtk.HBox hbox7;
+               private global::Gtk.EventBox hfieldeventbox;
+               private global::Gtk.Image hfieldimage;
+               private global::Gtk.Button resethfieldbutton;
+               private global::Gtk.Label GtkLabel20;
+               private global::Gtk.Frame frame10;
+               private global::Gtk.Alignment GtkAlignment17;
+               private global::Gtk.HBox hbox8;
+               private global::Gtk.EventBox goaleventbox;
+               private global::Gtk.Image goalimage;
+               private global::Gtk.Button resetfgoalbutton;
+               private global::Gtk.Label GtkLabel22;
+               private global::Gtk.Frame propsframe;
+               private global::Gtk.Alignment GtkAlignment7;
+               private global::Gtk.ScrolledWindow scrolledwindow5;
+               private global::LongoMatch.Gui.Component.CategoryProperties categoryproperties1;
+               private global::Gtk.Label GtkLabel10;
 
                protected virtual void Build ()
                {
@@ -14,21 +50,395 @@ namespace LongoMatch.Gui.Component
                        global::Stetic.BinContainer.Attach (this);
                        this.Name = "LongoMatch.Gui.Component.ButtonsWidget";
                        // Container child LongoMatch.Gui.Component.ButtonsWidget.Gtk.Container+ContainerChild
-                       this.vbox1 = new global::Gtk.VBox ();
-                       this.vbox1.Name = "vbox1";
-                       this.vbox1.Spacing = 6;
-                       // Container child vbox1.Gtk.Box+BoxChild
-                       this.table1 = new global::Gtk.Table (((uint)(5)), ((uint)(4)), false);
-                       this.table1.Name = "table1";
-                       this.table1.RowSpacing = ((uint)(1));
-                       this.table1.ColumnSpacing = ((uint)(1));
-                       this.vbox1.Add (this.table1);
-                       global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.vbox1 [this.table1]));
-                       w1.Position = 0;
-                       this.Add (this.vbox1);
+                       this.hbox2 = new global::Gtk.HBox ();
+                       this.hbox2.Name = "hbox2";
+                       this.hbox2.Spacing = 6;
+                       // Container child hbox2.Gtk.Box+BoxChild
+                       this.vbox2 = new global::Gtk.VBox ();
+                       this.vbox2.CanFocus = true;
+                       this.vbox2.Name = "vbox2";
+                       this.vbox2.Spacing = 6;
+                       // Container child vbox2.Gtk.Box+BoxChild
+                       this.hbuttonbox2 = new global::Gtk.HButtonBox ();
+                       this.hbuttonbox2.Name = "hbuttonbox2";
+                       this.hbuttonbox2.LayoutStyle = ((global::Gtk.ButtonBoxStyle)(1));
+                       // Container child hbuttonbox2.Gtk.ButtonBox+ButtonBoxChild
+                       this.addcatbutton = new global::Gtk.Button ();
+                       this.addcatbutton.CanFocus = true;
+                       this.addcatbutton.Name = "addcatbutton";
+                       this.addcatbutton.UseUnderline = true;
+                       // Container child addcatbutton.Gtk.Container+ContainerChild
+                       global::Gtk.Alignment w1 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       // Container child GtkAlignment.Gtk.Container+ContainerChild
+                       global::Gtk.HBox w2 = new global::Gtk.HBox ();
+                       w2.Spacing = 2;
+                       // Container child GtkHBox.Gtk.Container+ContainerChild
+                       global::Gtk.Image w3 = new global::Gtk.Image ();
+                       w3.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-add", 
global::Gtk.IconSize.Menu);
+                       w2.Add (w3);
+                       // Container child GtkHBox.Gtk.Container+ContainerChild
+                       global::Gtk.Label w5 = new global::Gtk.Label ();
+                       w5.LabelProp = global::Mono.Unix.Catalog.GetString ("Add category");
+                       w5.UseUnderline = true;
+                       w2.Add (w5);
+                       w1.Add (w2);
+                       this.addcatbutton.Add (w1);
+                       this.hbuttonbox2.Add (this.addcatbutton);
+                       global::Gtk.ButtonBox.ButtonBoxChild w9 = 
((global::Gtk.ButtonBox.ButtonBoxChild)(this.hbuttonbox2 [this.addcatbutton]));
+                       w9.Expand = false;
+                       w9.Fill = false;
+                       // Container child hbuttonbox2.Gtk.ButtonBox+ButtonBoxChild
+                       this.addtimerbutton = new global::Gtk.Button ();
+                       this.addtimerbutton.CanFocus = true;
+                       this.addtimerbutton.Name = "addtimerbutton";
+                       this.addtimerbutton.UseUnderline = true;
+                       // Container child addtimerbutton.Gtk.Container+ContainerChild
+                       global::Gtk.Alignment w10 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       // Container child GtkAlignment.Gtk.Container+ContainerChild
+                       global::Gtk.HBox w11 = new global::Gtk.HBox ();
+                       w11.Spacing = 2;
+                       // Container child GtkHBox.Gtk.Container+ContainerChild
+                       global::Gtk.Image w12 = new global::Gtk.Image ();
+                       w12.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "stock_alarm", 
global::Gtk.IconSize.Menu);
+                       w11.Add (w12);
+                       // Container child GtkHBox.Gtk.Container+ContainerChild
+                       global::Gtk.Label w14 = new global::Gtk.Label ();
+                       w14.LabelProp = global::Mono.Unix.Catalog.GetString ("Add timer");
+                       w14.UseUnderline = true;
+                       w11.Add (w14);
+                       w10.Add (w11);
+                       this.addtimerbutton.Add (w10);
+                       this.hbuttonbox2.Add (this.addtimerbutton);
+                       global::Gtk.ButtonBox.ButtonBoxChild w18 = 
((global::Gtk.ButtonBox.ButtonBoxChild)(this.hbuttonbox2 [this.addtimerbutton]));
+                       w18.Position = 1;
+                       w18.Expand = false;
+                       w18.Fill = false;
+                       // Container child hbuttonbox2.Gtk.ButtonBox+ButtonBoxChild
+                       this.addscorebutton = new global::Gtk.Button ();
+                       this.addscorebutton.CanFocus = true;
+                       this.addscorebutton.Name = "addscorebutton";
+                       this.addscorebutton.UseUnderline = true;
+                       // Container child addscorebutton.Gtk.Container+ContainerChild
+                       global::Gtk.Alignment w19 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       // Container child GtkAlignment.Gtk.Container+ContainerChild
+                       global::Gtk.HBox w20 = new global::Gtk.HBox ();
+                       w20.Spacing = 2;
+                       // Container child GtkHBox.Gtk.Container+ContainerChild
+                       global::Gtk.Image w21 = new global::Gtk.Image ();
+                       w21.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-zoom-100", 
global::Gtk.IconSize.Menu);
+                       w20.Add (w21);
+                       // Container child GtkHBox.Gtk.Container+ContainerChild
+                       global::Gtk.Label w23 = new global::Gtk.Label ();
+                       w23.LabelProp = global::Mono.Unix.Catalog.GetString ("Add score");
+                       w23.UseUnderline = true;
+                       w20.Add (w23);
+                       w19.Add (w20);
+                       this.addscorebutton.Add (w19);
+                       this.hbuttonbox2.Add (this.addscorebutton);
+                       global::Gtk.ButtonBox.ButtonBoxChild w27 = 
((global::Gtk.ButtonBox.ButtonBoxChild)(this.hbuttonbox2 [this.addscorebutton]));
+                       w27.Position = 2;
+                       w27.Expand = false;
+                       w27.Fill = false;
+                       // Container child hbuttonbox2.Gtk.ButtonBox+ButtonBoxChild
+                       this.addcardbutton = new global::Gtk.Button ();
+                       this.addcardbutton.CanFocus = true;
+                       this.addcardbutton.Name = "addcardbutton";
+                       this.addcardbutton.UseUnderline = true;
+                       // Container child addcardbutton.Gtk.Container+ContainerChild
+                       global::Gtk.Alignment w28 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       // Container child GtkAlignment.Gtk.Container+ContainerChild
+                       global::Gtk.HBox w29 = new global::Gtk.HBox ();
+                       w29.Spacing = 2;
+                       // Container child GtkHBox.Gtk.Container+ContainerChild
+                       global::Gtk.Image w30 = new global::Gtk.Image ();
+                       w30.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "stock_media-stop", 
global::Gtk.IconSize.Menu);
+                       w29.Add (w30);
+                       // Container child GtkHBox.Gtk.Container+ContainerChild
+                       global::Gtk.Label w32 = new global::Gtk.Label ();
+                       w32.LabelProp = global::Mono.Unix.Catalog.GetString ("Add penalty card");
+                       w32.UseUnderline = true;
+                       w29.Add (w32);
+                       w28.Add (w29);
+                       this.addcardbutton.Add (w28);
+                       this.hbuttonbox2.Add (this.addcardbutton);
+                       global::Gtk.ButtonBox.ButtonBoxChild w36 = 
((global::Gtk.ButtonBox.ButtonBoxChild)(this.hbuttonbox2 [this.addcardbutton]));
+                       w36.Position = 3;
+                       w36.Expand = false;
+                       w36.Fill = false;
+                       // Container child hbuttonbox2.Gtk.ButtonBox+ButtonBoxChild
+                       this.addtagbutton = new global::Gtk.Button ();
+                       this.addtagbutton.CanFocus = true;
+                       this.addtagbutton.Name = "addtagbutton";
+                       this.addtagbutton.UseUnderline = true;
+                       // Container child addtagbutton.Gtk.Container+ContainerChild
+                       global::Gtk.Alignment w37 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       // Container child GtkAlignment.Gtk.Container+ContainerChild
+                       global::Gtk.HBox w38 = new global::Gtk.HBox ();
+                       w38.Spacing = 2;
+                       // Container child GtkHBox.Gtk.Container+ContainerChild
+                       global::Gtk.Image w39 = new global::Gtk.Image ();
+                       w39.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "stock_zoom-in", 
global::Gtk.IconSize.Menu);
+                       w38.Add (w39);
+                       // Container child GtkHBox.Gtk.Container+ContainerChild
+                       global::Gtk.Label w41 = new global::Gtk.Label ();
+                       w41.LabelProp = global::Mono.Unix.Catalog.GetString ("Add tag");
+                       w41.UseUnderline = true;
+                       w38.Add (w41);
+                       w37.Add (w38);
+                       this.addtagbutton.Add (w37);
+                       this.hbuttonbox2.Add (this.addtagbutton);
+                       global::Gtk.ButtonBox.ButtonBoxChild w45 = 
((global::Gtk.ButtonBox.ButtonBoxChild)(this.hbuttonbox2 [this.addtagbutton]));
+                       w45.Position = 4;
+                       w45.Expand = false;
+                       w45.Fill = false;
+                       this.vbox2.Add (this.hbuttonbox2);
+                       global::Gtk.Box.BoxChild w46 = ((global::Gtk.Box.BoxChild)(this.vbox2 
[this.hbuttonbox2]));
+                       w46.Position = 0;
+                       w46.Expand = false;
+                       w46.Fill = false;
+                       // Container child vbox2.Gtk.Box+BoxChild
+                       this.scrolledwindow4 = new global::Gtk.ScrolledWindow ();
+                       this.scrolledwindow4.CanFocus = true;
+                       this.scrolledwindow4.Name = "scrolledwindow4";
+                       // Container child scrolledwindow4.Gtk.Container+ContainerChild
+                       global::Gtk.Viewport w47 = new global::Gtk.Viewport ();
+                       w47.ShadowType = ((global::Gtk.ShadowType)(0));
+                       // Container child GtkViewport.Gtk.Container+ContainerChild
+                       this.drawingarea1 = new global::Gtk.DrawingArea ();
+                       this.drawingarea1.CanFocus = true;
+                       this.drawingarea1.Name = "drawingarea1";
+                       w47.Add (this.drawingarea1);
+                       this.scrolledwindow4.Add (w47);
+                       this.vbox2.Add (this.scrolledwindow4);
+                       global::Gtk.Box.BoxChild w50 = ((global::Gtk.Box.BoxChild)(this.vbox2 
[this.scrolledwindow4]));
+                       w50.Position = 1;
+                       this.hbox2.Add (this.vbox2);
+                       global::Gtk.Box.BoxChild w51 = ((global::Gtk.Box.BoxChild)(this.hbox2 [this.vbox2]));
+                       w51.Position = 0;
+                       // Container child hbox2.Gtk.Box+BoxChild
+                       this.rightbox = new global::Gtk.VBox ();
+                       this.rightbox.Name = "rightbox";
+                       this.rightbox.Spacing = 6;
+                       // Container child rightbox.Gtk.Box+BoxChild
+                       this.positionsbox = new global::Gtk.HBox ();
+                       this.positionsbox.Name = "positionsbox";
+                       this.positionsbox.Spacing = 6;
+                       // Container child positionsbox.Gtk.Box+BoxChild
+                       this.frame8 = new global::Gtk.Frame ();
+                       this.frame8.Name = "frame8";
+                       this.frame8.ShadowType = ((global::Gtk.ShadowType)(0));
+                       // Container child frame8.Gtk.Container+ContainerChild
+                       this.GtkAlignment13 = new global::Gtk.Alignment (0F, 0F, 1F, 1F);
+                       this.GtkAlignment13.Name = "GtkAlignment13";
+                       this.GtkAlignment13.LeftPadding = ((uint)(12));
+                       // Container child GtkAlignment13.Gtk.Container+ContainerChild
+                       this.hbox6 = new global::Gtk.HBox ();
+                       this.hbox6.Name = "hbox6";
+                       this.hbox6.Spacing = 6;
+                       // Container child hbox6.Gtk.Box+BoxChild
+                       this.fieldeventbox = new global::Gtk.EventBox ();
+                       this.fieldeventbox.Name = "fieldeventbox";
+                       // Container child fieldeventbox.Gtk.Container+ContainerChild
+                       this.fieldimage = new global::Gtk.Image ();
+                       this.fieldimage.Name = "fieldimage";
+                       this.fieldeventbox.Add (this.fieldimage);
+                       this.hbox6.Add (this.fieldeventbox);
+                       global::Gtk.Box.BoxChild w53 = ((global::Gtk.Box.BoxChild)(this.hbox6 
[this.fieldeventbox]));
+                       w53.Position = 0;
+                       // Container child hbox6.Gtk.Box+BoxChild
+                       this.resetfieldbutton = new global::Gtk.Button ();
+                       this.resetfieldbutton.CanFocus = true;
+                       this.resetfieldbutton.Name = "resetfieldbutton";
+                       this.resetfieldbutton.UseUnderline = true;
+                       // Container child resetfieldbutton.Gtk.Container+ContainerChild
+                       global::Gtk.Alignment w54 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       // Container child GtkAlignment.Gtk.Container+ContainerChild
+                       global::Gtk.HBox w55 = new global::Gtk.HBox ();
+                       w55.Spacing = 2;
+                       // Container child GtkHBox.Gtk.Container+ContainerChild
+                       global::Gtk.Image w56 = new global::Gtk.Image ();
+                       w56.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-refresh", 
global::Gtk.IconSize.Menu);
+                       w55.Add (w56);
+                       // Container child GtkHBox.Gtk.Container+ContainerChild
+                       global::Gtk.Label w58 = new global::Gtk.Label ();
+                       w55.Add (w58);
+                       w54.Add (w55);
+                       this.resetfieldbutton.Add (w54);
+                       this.hbox6.Add (this.resetfieldbutton);
+                       global::Gtk.Box.BoxChild w62 = ((global::Gtk.Box.BoxChild)(this.hbox6 
[this.resetfieldbutton]));
+                       w62.Position = 1;
+                       w62.Expand = false;
+                       w62.Fill = false;
+                       this.GtkAlignment13.Add (this.hbox6);
+                       this.frame8.Add (this.GtkAlignment13);
+                       this.GtkLabel17 = new global::Gtk.Label ();
+                       this.GtkLabel17.Name = "GtkLabel17";
+                       this.GtkLabel17.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Field</b>");
+                       this.GtkLabel17.UseMarkup = true;
+                       this.frame8.LabelWidget = this.GtkLabel17;
+                       this.positionsbox.Add (this.frame8);
+                       global::Gtk.Box.BoxChild w65 = ((global::Gtk.Box.BoxChild)(this.positionsbox 
[this.frame8]));
+                       w65.Position = 0;
+                       // Container child positionsbox.Gtk.Box+BoxChild
+                       this.frame9 = new global::Gtk.Frame ();
+                       this.frame9.Name = "frame9";
+                       this.frame9.ShadowType = ((global::Gtk.ShadowType)(0));
+                       // Container child frame9.Gtk.Container+ContainerChild
+                       this.GtkAlignment15 = new global::Gtk.Alignment (0F, 0F, 1F, 1F);
+                       this.GtkAlignment15.Name = "GtkAlignment15";
+                       this.GtkAlignment15.LeftPadding = ((uint)(12));
+                       // Container child GtkAlignment15.Gtk.Container+ContainerChild
+                       this.hbox7 = new global::Gtk.HBox ();
+                       this.hbox7.Name = "hbox7";
+                       this.hbox7.Spacing = 6;
+                       // Container child hbox7.Gtk.Box+BoxChild
+                       this.hfieldeventbox = new global::Gtk.EventBox ();
+                       this.hfieldeventbox.Name = "hfieldeventbox";
+                       // Container child hfieldeventbox.Gtk.Container+ContainerChild
+                       this.hfieldimage = new global::Gtk.Image ();
+                       this.hfieldimage.Name = "hfieldimage";
+                       this.hfieldeventbox.Add (this.hfieldimage);
+                       this.hbox7.Add (this.hfieldeventbox);
+                       global::Gtk.Box.BoxChild w67 = ((global::Gtk.Box.BoxChild)(this.hbox7 
[this.hfieldeventbox]));
+                       w67.Position = 0;
+                       // Container child hbox7.Gtk.Box+BoxChild
+                       this.resethfieldbutton = new global::Gtk.Button ();
+                       this.resethfieldbutton.CanFocus = true;
+                       this.resethfieldbutton.Name = "resethfieldbutton";
+                       this.resethfieldbutton.UseUnderline = true;
+                       // Container child resethfieldbutton.Gtk.Container+ContainerChild
+                       global::Gtk.Alignment w68 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       // Container child GtkAlignment.Gtk.Container+ContainerChild
+                       global::Gtk.HBox w69 = new global::Gtk.HBox ();
+                       w69.Spacing = 2;
+                       // Container child GtkHBox.Gtk.Container+ContainerChild
+                       global::Gtk.Image w70 = new global::Gtk.Image ();
+                       w70.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-refresh", 
global::Gtk.IconSize.Menu);
+                       w69.Add (w70);
+                       // Container child GtkHBox.Gtk.Container+ContainerChild
+                       global::Gtk.Label w72 = new global::Gtk.Label ();
+                       w69.Add (w72);
+                       w68.Add (w69);
+                       this.resethfieldbutton.Add (w68);
+                       this.hbox7.Add (this.resethfieldbutton);
+                       global::Gtk.Box.BoxChild w76 = ((global::Gtk.Box.BoxChild)(this.hbox7 
[this.resethfieldbutton]));
+                       w76.Position = 1;
+                       w76.Expand = false;
+                       w76.Fill = false;
+                       this.GtkAlignment15.Add (this.hbox7);
+                       this.frame9.Add (this.GtkAlignment15);
+                       this.GtkLabel20 = new global::Gtk.Label ();
+                       this.GtkLabel20.Name = "GtkLabel20";
+                       this.GtkLabel20.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Half field</b>");
+                       this.GtkLabel20.UseMarkup = true;
+                       this.frame9.LabelWidget = this.GtkLabel20;
+                       this.positionsbox.Add (this.frame9);
+                       global::Gtk.Box.BoxChild w79 = ((global::Gtk.Box.BoxChild)(this.positionsbox 
[this.frame9]));
+                       w79.Position = 1;
+                       // Container child positionsbox.Gtk.Box+BoxChild
+                       this.frame10 = new global::Gtk.Frame ();
+                       this.frame10.Name = "frame10";
+                       this.frame10.ShadowType = ((global::Gtk.ShadowType)(0));
+                       // Container child frame10.Gtk.Container+ContainerChild
+                       this.GtkAlignment17 = new global::Gtk.Alignment (0F, 0F, 1F, 1F);
+                       this.GtkAlignment17.Name = "GtkAlignment17";
+                       this.GtkAlignment17.LeftPadding = ((uint)(12));
+                       // Container child GtkAlignment17.Gtk.Container+ContainerChild
+                       this.hbox8 = new global::Gtk.HBox ();
+                       this.hbox8.Name = "hbox8";
+                       this.hbox8.Spacing = 6;
+                       // Container child hbox8.Gtk.Box+BoxChild
+                       this.goaleventbox = new global::Gtk.EventBox ();
+                       this.goaleventbox.Name = "goaleventbox";
+                       // Container child goaleventbox.Gtk.Container+ContainerChild
+                       this.goalimage = new global::Gtk.Image ();
+                       this.goalimage.Name = "goalimage";
+                       this.goaleventbox.Add (this.goalimage);
+                       this.hbox8.Add (this.goaleventbox);
+                       global::Gtk.Box.BoxChild w81 = ((global::Gtk.Box.BoxChild)(this.hbox8 
[this.goaleventbox]));
+                       w81.Position = 0;
+                       // Container child hbox8.Gtk.Box+BoxChild
+                       this.resetfgoalbutton = new global::Gtk.Button ();
+                       this.resetfgoalbutton.CanFocus = true;
+                       this.resetfgoalbutton.Name = "resetfgoalbutton";
+                       this.resetfgoalbutton.UseUnderline = true;
+                       // Container child resetfgoalbutton.Gtk.Container+ContainerChild
+                       global::Gtk.Alignment w82 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       // Container child GtkAlignment.Gtk.Container+ContainerChild
+                       global::Gtk.HBox w83 = new global::Gtk.HBox ();
+                       w83.Spacing = 2;
+                       // Container child GtkHBox.Gtk.Container+ContainerChild
+                       global::Gtk.Image w84 = new global::Gtk.Image ();
+                       w84.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-refresh", 
global::Gtk.IconSize.Menu);
+                       w83.Add (w84);
+                       // Container child GtkHBox.Gtk.Container+ContainerChild
+                       global::Gtk.Label w86 = new global::Gtk.Label ();
+                       w83.Add (w86);
+                       w82.Add (w83);
+                       this.resetfgoalbutton.Add (w82);
+                       this.hbox8.Add (this.resetfgoalbutton);
+                       global::Gtk.Box.BoxChild w90 = ((global::Gtk.Box.BoxChild)(this.hbox8 
[this.resetfgoalbutton]));
+                       w90.Position = 1;
+                       w90.Expand = false;
+                       w90.Fill = false;
+                       this.GtkAlignment17.Add (this.hbox8);
+                       this.frame10.Add (this.GtkAlignment17);
+                       this.GtkLabel22 = new global::Gtk.Label ();
+                       this.GtkLabel22.Name = "GtkLabel22";
+                       this.GtkLabel22.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Goal</b>");
+                       this.GtkLabel22.UseMarkup = true;
+                       this.frame10.LabelWidget = this.GtkLabel22;
+                       this.positionsbox.Add (this.frame10);
+                       global::Gtk.Box.BoxChild w93 = ((global::Gtk.Box.BoxChild)(this.positionsbox 
[this.frame10]));
+                       w93.Position = 2;
+                       this.rightbox.Add (this.positionsbox);
+                       global::Gtk.Box.BoxChild w94 = ((global::Gtk.Box.BoxChild)(this.rightbox 
[this.positionsbox]));
+                       w94.Position = 0;
+                       w94.Expand = false;
+                       w94.Fill = false;
+                       // Container child rightbox.Gtk.Box+BoxChild
+                       this.propsframe = new global::Gtk.Frame ();
+                       this.propsframe.Sensitive = false;
+                       this.propsframe.Name = "propsframe";
+                       // Container child propsframe.Gtk.Container+ContainerChild
+                       this.GtkAlignment7 = new global::Gtk.Alignment (0F, 0F, 1F, 1F);
+                       this.GtkAlignment7.Name = "GtkAlignment7";
+                       this.GtkAlignment7.LeftPadding = ((uint)(12));
+                       // Container child GtkAlignment7.Gtk.Container+ContainerChild
+                       this.scrolledwindow5 = new global::Gtk.ScrolledWindow ();
+                       this.scrolledwindow5.CanFocus = true;
+                       this.scrolledwindow5.Name = "scrolledwindow5";
+                       this.scrolledwindow5.HscrollbarPolicy = ((global::Gtk.PolicyType)(2));
+                       // Container child scrolledwindow5.Gtk.Container+ContainerChild
+                       global::Gtk.Viewport w95 = new global::Gtk.Viewport ();
+                       w95.ShadowType = ((global::Gtk.ShadowType)(0));
+                       // Container child GtkViewport1.Gtk.Container+ContainerChild
+                       this.categoryproperties1 = new global::LongoMatch.Gui.Component.CategoryProperties ();
+                       this.categoryproperties1.Events = ((global::Gdk.EventMask)(256));
+                       this.categoryproperties1.Name = "categoryproperties1";
+                       this.categoryproperties1.Edited = false;
+                       w95.Add (this.categoryproperties1);
+                       this.scrolledwindow5.Add (w95);
+                       this.GtkAlignment7.Add (this.scrolledwindow5);
+                       this.propsframe.Add (this.GtkAlignment7);
+                       this.GtkLabel10 = new global::Gtk.Label ();
+                       this.GtkLabel10.Name = "GtkLabel10";
+                       this.GtkLabel10.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Properties</b>");
+                       this.GtkLabel10.UseMarkup = true;
+                       this.propsframe.LabelWidget = this.GtkLabel10;
+                       this.rightbox.Add (this.propsframe);
+                       global::Gtk.Box.BoxChild w100 = ((global::Gtk.Box.BoxChild)(this.rightbox 
[this.propsframe]));
+                       w100.Position = 1;
+                       this.hbox2.Add (this.rightbox);
+                       global::Gtk.Box.BoxChild w101 = ((global::Gtk.Box.BoxChild)(this.hbox2 
[this.rightbox]));
+                       w101.Position = 1;
+                       w101.Expand = false;
+                       w101.Fill = false;
+                       this.Add (this.hbox2);
                        if ((this.Child != null)) {
                                this.Child.ShowAll ();
                        }
+                       this.propsframe.Hide ();
                        this.Show ();
                }
        }
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.CategoryProperties.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.CategoryProperties.cs
index 308ec17..90e3839 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.CategoryProperties.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.CategoryProperties.cs
@@ -4,44 +4,43 @@ namespace LongoMatch.Gui.Component
 {
        public partial class CategoryProperties
        {
-               private global::Gtk.Frame frame4;
-               private global::Gtk.Alignment GtkAlignment1;
                private global::Gtk.VBox vbox3;
                private global::Gtk.Table table2;
                private global::Gtk.ColorButton colorbutton1;
-               private global::Gtk.HBox hbox5;
-               private global::Gtk.Label hotKeyLabel;
-               private global::Gtk.Button changebuton;
+               private global::Gtk.ColorButton colorbutton2;
                private global::Gtk.Label label1;
+               private global::Gtk.Label label13;
                private global::Gtk.Label label4;
-               private global::Gtk.Label label6;
                private global::Gtk.Label label7;
                private global::Gtk.Label label8;
-               private global::Gtk.Label label9;
                private global::Gtk.SpinButton lagtimebutton;
                private global::Gtk.SpinButton leadtimebutton;
                private global::Gtk.Entry nameentry;
+               private global::Gtk.Label taglabel;
+               private global::Gtk.ComboBox tagmodecombobox;
+               private global::Gtk.Table cattable;
+               private global::Gtk.ComboBox fieldcombobox;
+               private global::Gtk.ComboBox goalcombobox;
+               private global::Gtk.HBox hbox5;
+               private global::Gtk.Label hotKeyLabel;
+               private global::Gtk.Button changebuton;
+               private global::Gtk.ComboBox hfieldcombobox;
+               private global::Gtk.Label label10;
+               private global::Gtk.Label label11;
+               private global::Gtk.Label label12;
+               private global::Gtk.Label label14;
+               private global::Gtk.Label label15;
+               private global::Gtk.Label label6;
+               private global::Gtk.Label label9;
                private global::Gtk.ComboBox sortmethodcombobox;
-               private global::Gtk.VBox vbox5;
-               private global::Gtk.HBox hbox1;
-               private global::Gtk.Frame frame5;
-               private global::Gtk.Alignment GtkAlignment7;
-               private global::Gtk.VBox vbox4;
-               private global::Gtk.CheckButton tagfieldcheckbutton;
-               private global::Gtk.CheckButton trajectorycheckbutton;
-               private global::Gtk.Label GtkLabel9;
-               private global::Gtk.Frame frame6;
-               private global::Gtk.Alignment GtkAlignment8;
-               private global::Gtk.VBox vbox6;
-               private global::Gtk.CheckButton taghalffieldcheckbutton;
-               private global::Gtk.CheckButton trajectoryhalfcheckbutton;
-               private global::Gtk.Label GtkLabel12;
-               private global::Gtk.Frame frame7;
-               private global::Gtk.Alignment GtkAlignment9;
-               private global::Gtk.CheckButton taggoalcheckbutton;
-               private global::Gtk.Label GtkLabel13;
-               private global::Gtk.Table table1;
-               private global::Gtk.Label GtkLabel6;
+               private global::Gtk.CheckButton tagscheckbutton;
+               private global::Gtk.SpinButton tprbutton;
+               private global::Gtk.Table cardtable;
+               private global::Gtk.Label label16;
+               private global::Gtk.ComboBox shapecombobox;
+               private global::Gtk.Table scoretable;
+               private global::Gtk.Label label17;
+               private global::Gtk.SpinButton pointsbutton;
 
                protected virtual void Build ()
                {
@@ -50,19 +49,11 @@ namespace LongoMatch.Gui.Component
                        global::Stetic.BinContainer.Attach (this);
                        this.Name = "LongoMatch.Gui.Component.CategoryProperties";
                        // Container child 
LongoMatch.Gui.Component.CategoryProperties.Gtk.Container+ContainerChild
-                       this.frame4 = new global::Gtk.Frame ();
-                       this.frame4.Name = "frame4";
-                       this.frame4.ShadowType = ((global::Gtk.ShadowType)(1));
-                       // Container child frame4.Gtk.Container+ContainerChild
-                       this.GtkAlignment1 = new global::Gtk.Alignment (0F, 0F, 1F, 1F);
-                       this.GtkAlignment1.Name = "GtkAlignment1";
-                       this.GtkAlignment1.LeftPadding = ((uint)(12));
-                       // Container child GtkAlignment1.Gtk.Container+ContainerChild
                        this.vbox3 = new global::Gtk.VBox ();
                        this.vbox3.Name = "vbox3";
                        this.vbox3.Spacing = 6;
                        // Container child vbox3.Gtk.Box+BoxChild
-                       this.table2 = new global::Gtk.Table (((uint)(3)), ((uint)(4)), false);
+                       this.table2 = new global::Gtk.Table (((uint)(6)), ((uint)(2)), true);
                        this.table2.Name = "table2";
                        this.table2.RowSpacing = ((uint)(6));
                        this.table2.ColumnSpacing = ((uint)(6));
@@ -73,43 +64,25 @@ namespace LongoMatch.Gui.Component
                        this.colorbutton1.Name = "colorbutton1";
                        this.table2.Add (this.colorbutton1);
                        global::Gtk.Table.TableChild w1 = ((global::Gtk.Table.TableChild)(this.table2 
[this.colorbutton1]));
-                       w1.LeftAttach = ((uint)(3));
-                       w1.RightAttach = ((uint)(4));
+                       w1.TopAttach = ((uint)(1));
+                       w1.BottomAttach = ((uint)(2));
+                       w1.LeftAttach = ((uint)(1));
+                       w1.RightAttach = ((uint)(2));
                        w1.XOptions = ((global::Gtk.AttachOptions)(4));
-                       w1.YOptions = ((global::Gtk.AttachOptions)(0));
+                       w1.YOptions = ((global::Gtk.AttachOptions)(4));
                        // Container child table2.Gtk.Table+TableChild
-                       this.hbox5 = new global::Gtk.HBox ();
-                       this.hbox5.Name = "hbox5";
-                       this.hbox5.Spacing = 6;
-                       // Container child hbox5.Gtk.Box+BoxChild
-                       this.hotKeyLabel = new global::Gtk.Label ();
-                       this.hotKeyLabel.Name = "hotKeyLabel";
-                       this.hotKeyLabel.LabelProp = global::Mono.Unix.Catalog.GetString ("none");
-                       this.hbox5.Add (this.hotKeyLabel);
-                       global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.hbox5 
[this.hotKeyLabel]));
-                       w2.Position = 0;
-                       w2.Expand = false;
-                       w2.Fill = false;
-                       // Container child hbox5.Gtk.Box+BoxChild
-                       this.changebuton = new global::Gtk.Button ();
-                       this.changebuton.Sensitive = false;
-                       this.changebuton.CanFocus = true;
-                       this.changebuton.Name = "changebuton";
-                       this.changebuton.UseUnderline = true;
-                       this.changebuton.Label = global::Mono.Unix.Catalog.GetString ("Change");
-                       this.hbox5.Add (this.changebuton);
-                       global::Gtk.Box.BoxChild w3 = ((global::Gtk.Box.BoxChild)(this.hbox5 
[this.changebuton]));
-                       w3.Position = 1;
-                       w3.Expand = false;
-                       w3.Fill = false;
-                       this.table2.Add (this.hbox5);
-                       global::Gtk.Table.TableChild w4 = ((global::Gtk.Table.TableChild)(this.table2 
[this.hbox5]));
-                       w4.TopAttach = ((uint)(2));
-                       w4.BottomAttach = ((uint)(3));
-                       w4.LeftAttach = ((uint)(1));
-                       w4.RightAttach = ((uint)(2));
-                       w4.XOptions = ((global::Gtk.AttachOptions)(4));
-                       w4.YOptions = ((global::Gtk.AttachOptions)(0));
+                       this.colorbutton2 = new global::Gtk.ColorButton ();
+                       this.colorbutton2.CanFocus = true;
+                       this.colorbutton2.Events = ((global::Gdk.EventMask)(784));
+                       this.colorbutton2.Name = "colorbutton2";
+                       this.table2.Add (this.colorbutton2);
+                       global::Gtk.Table.TableChild w2 = ((global::Gtk.Table.TableChild)(this.table2 
[this.colorbutton2]));
+                       w2.TopAttach = ((uint)(2));
+                       w2.BottomAttach = ((uint)(3));
+                       w2.LeftAttach = ((uint)(1));
+                       w2.RightAttach = ((uint)(2));
+                       w2.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w2.YOptions = ((global::Gtk.AttachOptions)(4));
                        // Container child table2.Gtk.Table+TableChild
                        this.label1 = new global::Gtk.Label ();
                        this.label1.Name = "label1";
@@ -117,9 +90,20 @@ namespace LongoMatch.Gui.Component
                        this.label1.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Name:</b>");
                        this.label1.UseMarkup = true;
                        this.table2.Add (this.label1);
-                       global::Gtk.Table.TableChild w5 = ((global::Gtk.Table.TableChild)(this.table2 
[this.label1]));
-                       w5.XOptions = ((global::Gtk.AttachOptions)(4));
-                       w5.YOptions = ((global::Gtk.AttachOptions)(4));
+                       global::Gtk.Table.TableChild w3 = ((global::Gtk.Table.TableChild)(this.table2 
[this.label1]));
+                       w3.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w3.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child table2.Gtk.Table+TableChild
+                       this.label13 = new global::Gtk.Label ();
+                       this.label13.Name = "label13";
+                       this.label13.Xalign = 0F;
+                       this.label13.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Text color:</b>    
");
+                       this.label13.UseMarkup = true;
+                       this.table2.Add (this.label13);
+                       global::Gtk.Table.TableChild w4 = ((global::Gtk.Table.TableChild)(this.table2 
[this.label13]));
+                       w4.TopAttach = ((uint)(2));
+                       w4.BottomAttach = ((uint)(3));
+                       w4.YOptions = ((global::Gtk.AttachOptions)(4));
                        // Container child table2.Gtk.Table+TableChild
                        this.label4 = new global::Gtk.Label ();
                        this.label4.Name = "label4";
@@ -127,63 +111,35 @@ namespace LongoMatch.Gui.Component
                        this.label4.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Color:</b>    ");
                        this.label4.UseMarkup = true;
                        this.table2.Add (this.label4);
-                       global::Gtk.Table.TableChild w6 = ((global::Gtk.Table.TableChild)(this.table2 
[this.label4]));
-                       w6.LeftAttach = ((uint)(2));
-                       w6.RightAttach = ((uint)(3));
-                       w6.XOptions = ((global::Gtk.AttachOptions)(4));
-                       w6.YOptions = ((global::Gtk.AttachOptions)(4));
-                       // Container child table2.Gtk.Table+TableChild
-                       this.label6 = new global::Gtk.Label ();
-                       this.label6.Name = "label6";
-                       this.label6.Xalign = 0F;
-                       this.label6.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>HotKey:</b>");
-                       this.label6.UseMarkup = true;
-                       this.table2.Add (this.label6);
-                       global::Gtk.Table.TableChild w7 = ((global::Gtk.Table.TableChild)(this.table2 
[this.label6]));
-                       w7.TopAttach = ((uint)(2));
-                       w7.BottomAttach = ((uint)(3));
-                       w7.XOptions = ((global::Gtk.AttachOptions)(4));
-                       w7.YOptions = ((global::Gtk.AttachOptions)(4));
+                       global::Gtk.Table.TableChild w5 = ((global::Gtk.Table.TableChild)(this.table2 
[this.label4]));
+                       w5.TopAttach = ((uint)(1));
+                       w5.BottomAttach = ((uint)(2));
+                       w5.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w5.YOptions = ((global::Gtk.AttachOptions)(4));
                        // Container child table2.Gtk.Table+TableChild
                        this.label7 = new global::Gtk.Label ();
                        this.label7.Name = "label7";
                        this.label7.Xalign = 0F;
-                       this.label7.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Lead time:</b>");
+                       this.label7.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Lead time (s):</b>");
                        this.label7.UseMarkup = true;
                        this.table2.Add (this.label7);
-                       global::Gtk.Table.TableChild w8 = ((global::Gtk.Table.TableChild)(this.table2 
[this.label7]));
-                       w8.TopAttach = ((uint)(1));
-                       w8.BottomAttach = ((uint)(2));
-                       w8.XOptions = ((global::Gtk.AttachOptions)(4));
-                       w8.YOptions = ((global::Gtk.AttachOptions)(4));
+                       global::Gtk.Table.TableChild w6 = ((global::Gtk.Table.TableChild)(this.table2 
[this.label7]));
+                       w6.TopAttach = ((uint)(4));
+                       w6.BottomAttach = ((uint)(5));
+                       w6.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w6.YOptions = ((global::Gtk.AttachOptions)(4));
                        // Container child table2.Gtk.Table+TableChild
                        this.label8 = new global::Gtk.Label ();
                        this.label8.Name = "label8";
                        this.label8.Xalign = 0F;
-                       this.label8.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Lag time:</b>");
+                       this.label8.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Lag time (s):</b>");
                        this.label8.UseMarkup = true;
                        this.table2.Add (this.label8);
-                       global::Gtk.Table.TableChild w9 = ((global::Gtk.Table.TableChild)(this.table2 
[this.label8]));
-                       w9.TopAttach = ((uint)(1));
-                       w9.BottomAttach = ((uint)(2));
-                       w9.LeftAttach = ((uint)(2));
-                       w9.RightAttach = ((uint)(3));
-                       w9.XOptions = ((global::Gtk.AttachOptions)(4));
-                       w9.YOptions = ((global::Gtk.AttachOptions)(4));
-                       // Container child table2.Gtk.Table+TableChild
-                       this.label9 = new global::Gtk.Label ();
-                       this.label9.Name = "label9";
-                       this.label9.Xalign = 0F;
-                       this.label9.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Sort Method</b>");
-                       this.label9.UseMarkup = true;
-                       this.table2.Add (this.label9);
-                       global::Gtk.Table.TableChild w10 = ((global::Gtk.Table.TableChild)(this.table2 
[this.label9]));
-                       w10.TopAttach = ((uint)(2));
-                       w10.BottomAttach = ((uint)(3));
-                       w10.LeftAttach = ((uint)(2));
-                       w10.RightAttach = ((uint)(3));
-                       w10.XOptions = ((global::Gtk.AttachOptions)(4));
-                       w10.YOptions = ((global::Gtk.AttachOptions)(4));
+                       global::Gtk.Table.TableChild w7 = ((global::Gtk.Table.TableChild)(this.table2 
[this.label8]));
+                       w7.TopAttach = ((uint)(5));
+                       w7.BottomAttach = ((uint)(6));
+                       w7.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w7.YOptions = ((global::Gtk.AttachOptions)(4));
                        // Container child table2.Gtk.Table+TableChild
                        this.lagtimebutton = new global::Gtk.SpinButton (0, 1000, 1);
                        this.lagtimebutton.CanFocus = true;
@@ -192,12 +148,13 @@ namespace LongoMatch.Gui.Component
                        this.lagtimebutton.ClimbRate = 1;
                        this.lagtimebutton.Numeric = true;
                        this.table2.Add (this.lagtimebutton);
-                       global::Gtk.Table.TableChild w11 = ((global::Gtk.Table.TableChild)(this.table2 
[this.lagtimebutton]));
-                       w11.TopAttach = ((uint)(1));
-                       w11.BottomAttach = ((uint)(2));
-                       w11.LeftAttach = ((uint)(3));
-                       w11.RightAttach = ((uint)(4));
-                       w11.YOptions = ((global::Gtk.AttachOptions)(4));
+                       global::Gtk.Table.TableChild w8 = ((global::Gtk.Table.TableChild)(this.table2 
[this.lagtimebutton]));
+                       w8.TopAttach = ((uint)(5));
+                       w8.BottomAttach = ((uint)(6));
+                       w8.LeftAttach = ((uint)(1));
+                       w8.RightAttach = ((uint)(2));
+                       w8.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w8.YOptions = ((global::Gtk.AttachOptions)(4));
                        // Container child table2.Gtk.Table+TableChild
                        this.leadtimebutton = new global::Gtk.SpinButton (0, 1000, 1);
                        this.leadtimebutton.CanFocus = true;
@@ -206,207 +163,335 @@ namespace LongoMatch.Gui.Component
                        this.leadtimebutton.ClimbRate = 1;
                        this.leadtimebutton.Numeric = true;
                        this.table2.Add (this.leadtimebutton);
-                       global::Gtk.Table.TableChild w12 = ((global::Gtk.Table.TableChild)(this.table2 
[this.leadtimebutton]));
-                       w12.TopAttach = ((uint)(1));
-                       w12.BottomAttach = ((uint)(2));
-                       w12.LeftAttach = ((uint)(1));
-                       w12.RightAttach = ((uint)(2));
-                       w12.XOptions = ((global::Gtk.AttachOptions)(4));
-                       w12.YOptions = ((global::Gtk.AttachOptions)(4));
+                       global::Gtk.Table.TableChild w9 = ((global::Gtk.Table.TableChild)(this.table2 
[this.leadtimebutton]));
+                       w9.TopAttach = ((uint)(4));
+                       w9.BottomAttach = ((uint)(5));
+                       w9.LeftAttach = ((uint)(1));
+                       w9.RightAttach = ((uint)(2));
+                       w9.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w9.YOptions = ((global::Gtk.AttachOptions)(4));
                        // Container child table2.Gtk.Table+TableChild
                        this.nameentry = new global::Gtk.Entry ();
+                       this.nameentry.WidthRequest = 76;
                        this.nameentry.CanFocus = true;
                        this.nameentry.Name = "nameentry";
                        this.nameentry.IsEditable = true;
                        this.nameentry.InvisibleChar = '●';
                        this.table2.Add (this.nameentry);
-                       global::Gtk.Table.TableChild w13 = ((global::Gtk.Table.TableChild)(this.table2 
[this.nameentry]));
-                       w13.LeftAttach = ((uint)(1));
-                       w13.RightAttach = ((uint)(2));
-                       w13.YOptions = ((global::Gtk.AttachOptions)(4));
+                       global::Gtk.Table.TableChild w10 = ((global::Gtk.Table.TableChild)(this.table2 
[this.nameentry]));
+                       w10.LeftAttach = ((uint)(1));
+                       w10.RightAttach = ((uint)(2));
+                       w10.YOptions = ((global::Gtk.AttachOptions)(4));
                        // Container child table2.Gtk.Table+TableChild
-                       this.sortmethodcombobox = global::Gtk.ComboBox.NewText ();
-                       this.sortmethodcombobox.AppendText (global::Mono.Unix.Catalog.GetString ("Sort by 
name"));
-                       this.sortmethodcombobox.AppendText (global::Mono.Unix.Catalog.GetString ("Sort by 
start time"));
-                       this.sortmethodcombobox.AppendText (global::Mono.Unix.Catalog.GetString ("Sort by 
stop time"));
-                       this.sortmethodcombobox.AppendText (global::Mono.Unix.Catalog.GetString ("Sort by 
duration"));
-                       this.sortmethodcombobox.Name = "sortmethodcombobox";
-                       this.sortmethodcombobox.Active = 3;
-                       this.table2.Add (this.sortmethodcombobox);
-                       global::Gtk.Table.TableChild w14 = ((global::Gtk.Table.TableChild)(this.table2 
[this.sortmethodcombobox]));
-                       w14.TopAttach = ((uint)(2));
-                       w14.BottomAttach = ((uint)(3));
-                       w14.LeftAttach = ((uint)(3));
-                       w14.RightAttach = ((uint)(4));
-                       w14.XOptions = ((global::Gtk.AttachOptions)(4));
-                       w14.YOptions = ((global::Gtk.AttachOptions)(0));
+                       this.taglabel = new global::Gtk.Label ();
+                       this.taglabel.Name = "taglabel";
+                       this.taglabel.Xalign = 0F;
+                       this.taglabel.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Tag mode:</b>    
");
+                       this.taglabel.UseMarkup = true;
+                       this.table2.Add (this.taglabel);
+                       global::Gtk.Table.TableChild w11 = ((global::Gtk.Table.TableChild)(this.table2 
[this.taglabel]));
+                       w11.TopAttach = ((uint)(3));
+                       w11.BottomAttach = ((uint)(4));
+                       w11.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w11.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child table2.Gtk.Table+TableChild
+                       this.tagmodecombobox = global::Gtk.ComboBox.NewText ();
+                       this.tagmodecombobox.AppendText (global::Mono.Unix.Catalog.GetString ("Automatic"));
+                       this.tagmodecombobox.AppendText (global::Mono.Unix.Catalog.GetString ("Manual"));
+                       this.tagmodecombobox.Name = "tagmodecombobox";
+                       this.tagmodecombobox.Active = 0;
+                       this.table2.Add (this.tagmodecombobox);
+                       global::Gtk.Table.TableChild w12 = ((global::Gtk.Table.TableChild)(this.table2 
[this.tagmodecombobox]));
+                       w12.TopAttach = ((uint)(3));
+                       w12.BottomAttach = ((uint)(4));
+                       w12.LeftAttach = ((uint)(1));
+                       w12.RightAttach = ((uint)(2));
+                       w12.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w12.YOptions = ((global::Gtk.AttachOptions)(4));
                        this.vbox3.Add (this.table2);
-                       global::Gtk.Box.BoxChild w15 = ((global::Gtk.Box.BoxChild)(this.vbox3 [this.table2]));
-                       w15.Position = 0;
-                       w15.Expand = false;
-                       w15.Fill = false;
+                       global::Gtk.Box.BoxChild w13 = ((global::Gtk.Box.BoxChild)(this.vbox3 [this.table2]));
+                       w13.Position = 0;
+                       w13.Expand = false;
+                       w13.Fill = false;
                        // Container child vbox3.Gtk.Box+BoxChild
-                       this.vbox5 = new global::Gtk.VBox ();
-                       this.vbox5.Name = "vbox5";
-                       this.vbox5.Spacing = 6;
-                       // Container child vbox5.Gtk.Box+BoxChild
-                       this.hbox1 = new global::Gtk.HBox ();
-                       this.hbox1.Name = "hbox1";
-                       this.hbox1.Spacing = 6;
-                       // Container child hbox1.Gtk.Box+BoxChild
-                       this.frame5 = new global::Gtk.Frame ();
-                       this.frame5.Name = "frame5";
-                       this.frame5.ShadowType = ((global::Gtk.ShadowType)(0));
-                       // Container child frame5.Gtk.Container+ContainerChild
-                       this.GtkAlignment7 = new global::Gtk.Alignment (0F, 0F, 1F, 1F);
-                       this.GtkAlignment7.Name = "GtkAlignment7";
-                       this.GtkAlignment7.LeftPadding = ((uint)(12));
-                       // Container child GtkAlignment7.Gtk.Container+ContainerChild
-                       this.vbox4 = new global::Gtk.VBox ();
-                       this.vbox4.Name = "vbox4";
-                       this.vbox4.Spacing = 6;
-                       // Container child vbox4.Gtk.Box+BoxChild
-                       this.tagfieldcheckbutton = new global::Gtk.CheckButton ();
-                       this.tagfieldcheckbutton.CanFocus = true;
-                       this.tagfieldcheckbutton.Name = "tagfieldcheckbutton";
-                       this.tagfieldcheckbutton.Label = global::Mono.Unix.Catalog.GetString ("Enable");
-                       this.tagfieldcheckbutton.DrawIndicator = true;
-                       this.tagfieldcheckbutton.UseUnderline = true;
-                       this.vbox4.Add (this.tagfieldcheckbutton);
-                       global::Gtk.Box.BoxChild w16 = ((global::Gtk.Box.BoxChild)(this.vbox4 
[this.tagfieldcheckbutton]));
+                       this.cattable = new global::Gtk.Table (((uint)(7)), ((uint)(2)), true);
+                       this.cattable.Name = "cattable";
+                       this.cattable.RowSpacing = ((uint)(6));
+                       this.cattable.ColumnSpacing = ((uint)(6));
+                       // Container child cattable.Gtk.Table+TableChild
+                       this.fieldcombobox = global::Gtk.ComboBox.NewText ();
+                       this.fieldcombobox.AppendText (global::Mono.Unix.Catalog.GetString ("Not tagged"));
+                       this.fieldcombobox.AppendText (global::Mono.Unix.Catalog.GetString ("Tag as point"));
+                       this.fieldcombobox.AppendText (global::Mono.Unix.Catalog.GetString ("Tag as 
trayectory"));
+                       this.fieldcombobox.Name = "fieldcombobox";
+                       this.fieldcombobox.Active = 0;
+                       this.cattable.Add (this.fieldcombobox);
+                       global::Gtk.Table.TableChild w14 = ((global::Gtk.Table.TableChild)(this.cattable 
[this.fieldcombobox]));
+                       w14.TopAttach = ((uint)(4));
+                       w14.BottomAttach = ((uint)(5));
+                       w14.LeftAttach = ((uint)(1));
+                       w14.RightAttach = ((uint)(2));
+                       w14.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w14.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child cattable.Gtk.Table+TableChild
+                       this.goalcombobox = global::Gtk.ComboBox.NewText ();
+                       this.goalcombobox.AppendText (global::Mono.Unix.Catalog.GetString ("Not tagged"));
+                       this.goalcombobox.AppendText (global::Mono.Unix.Catalog.GetString ("Tag as point"));
+                       this.goalcombobox.Name = "goalcombobox";
+                       this.goalcombobox.Active = 0;
+                       this.cattable.Add (this.goalcombobox);
+                       global::Gtk.Table.TableChild w15 = ((global::Gtk.Table.TableChild)(this.cattable 
[this.goalcombobox]));
+                       w15.TopAttach = ((uint)(6));
+                       w15.BottomAttach = ((uint)(7));
+                       w15.LeftAttach = ((uint)(1));
+                       w15.RightAttach = ((uint)(2));
+                       w15.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w15.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child cattable.Gtk.Table+TableChild
+                       this.hbox5 = new global::Gtk.HBox ();
+                       this.hbox5.Name = "hbox5";
+                       this.hbox5.Spacing = 6;
+                       // Container child hbox5.Gtk.Box+BoxChild
+                       this.hotKeyLabel = new global::Gtk.Label ();
+                       this.hotKeyLabel.Name = "hotKeyLabel";
+                       this.hotKeyLabel.LabelProp = global::Mono.Unix.Catalog.GetString ("none");
+                       this.hbox5.Add (this.hotKeyLabel);
+                       global::Gtk.Box.BoxChild w16 = ((global::Gtk.Box.BoxChild)(this.hbox5 
[this.hotKeyLabel]));
                        w16.Position = 0;
                        w16.Expand = false;
                        w16.Fill = false;
-                       // Container child vbox4.Gtk.Box+BoxChild
-                       this.trajectorycheckbutton = new global::Gtk.CheckButton ();
-                       this.trajectorycheckbutton.CanFocus = true;
-                       this.trajectorycheckbutton.Name = "trajectorycheckbutton";
-                       this.trajectorycheckbutton.Label = global::Mono.Unix.Catalog.GetString ("Trajectory");
-                       this.trajectorycheckbutton.DrawIndicator = true;
-                       this.trajectorycheckbutton.UseUnderline = true;
-                       this.vbox4.Add (this.trajectorycheckbutton);
-                       global::Gtk.Box.BoxChild w17 = ((global::Gtk.Box.BoxChild)(this.vbox4 
[this.trajectorycheckbutton]));
+                       // Container child hbox5.Gtk.Box+BoxChild
+                       this.changebuton = new global::Gtk.Button ();
+                       this.changebuton.Sensitive = false;
+                       this.changebuton.CanFocus = true;
+                       this.changebuton.Name = "changebuton";
+                       this.changebuton.UseUnderline = true;
+                       this.changebuton.Label = global::Mono.Unix.Catalog.GetString ("Change");
+                       this.hbox5.Add (this.changebuton);
+                       global::Gtk.Box.BoxChild w17 = ((global::Gtk.Box.BoxChild)(this.hbox5 
[this.changebuton]));
                        w17.Position = 1;
                        w17.Expand = false;
                        w17.Fill = false;
-                       this.GtkAlignment7.Add (this.vbox4);
-                       this.frame5.Add (this.GtkAlignment7);
-                       this.GtkLabel9 = new global::Gtk.Label ();
-                       this.GtkLabel9.Name = "GtkLabel9";
-                       this.GtkLabel9.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Field 
position</b>");
-                       this.GtkLabel9.UseMarkup = true;
-                       this.frame5.LabelWidget = this.GtkLabel9;
-                       this.hbox1.Add (this.frame5);
-                       global::Gtk.Box.BoxChild w20 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.frame5]));
-                       w20.Position = 0;
-                       // Container child hbox1.Gtk.Box+BoxChild
-                       this.frame6 = new global::Gtk.Frame ();
-                       this.frame6.Name = "frame6";
-                       this.frame6.ShadowType = ((global::Gtk.ShadowType)(0));
-                       // Container child frame6.Gtk.Container+ContainerChild
-                       this.GtkAlignment8 = new global::Gtk.Alignment (0F, 0F, 1F, 1F);
-                       this.GtkAlignment8.Name = "GtkAlignment8";
-                       this.GtkAlignment8.LeftPadding = ((uint)(12));
-                       // Container child GtkAlignment8.Gtk.Container+ContainerChild
-                       this.vbox6 = new global::Gtk.VBox ();
-                       this.vbox6.Name = "vbox6";
-                       this.vbox6.Spacing = 6;
-                       // Container child vbox6.Gtk.Box+BoxChild
-                       this.taghalffieldcheckbutton = new global::Gtk.CheckButton ();
-                       this.taghalffieldcheckbutton.CanFocus = true;
-                       this.taghalffieldcheckbutton.Name = "taghalffieldcheckbutton";
-                       this.taghalffieldcheckbutton.Label = global::Mono.Unix.Catalog.GetString ("Enable");
-                       this.taghalffieldcheckbutton.DrawIndicator = true;
-                       this.taghalffieldcheckbutton.UseUnderline = true;
-                       this.vbox6.Add (this.taghalffieldcheckbutton);
-                       global::Gtk.Box.BoxChild w21 = ((global::Gtk.Box.BoxChild)(this.vbox6 
[this.taghalffieldcheckbutton]));
-                       w21.Position = 0;
-                       w21.Expand = false;
-                       w21.Fill = false;
-                       // Container child vbox6.Gtk.Box+BoxChild
-                       this.trajectoryhalfcheckbutton = new global::Gtk.CheckButton ();
-                       this.trajectoryhalfcheckbutton.CanFocus = true;
-                       this.trajectoryhalfcheckbutton.Name = "trajectoryhalfcheckbutton";
-                       this.trajectoryhalfcheckbutton.Label = global::Mono.Unix.Catalog.GetString 
("Trajectory");
-                       this.trajectoryhalfcheckbutton.DrawIndicator = true;
-                       this.trajectoryhalfcheckbutton.UseUnderline = true;
-                       this.vbox6.Add (this.trajectoryhalfcheckbutton);
-                       global::Gtk.Box.BoxChild w22 = ((global::Gtk.Box.BoxChild)(this.vbox6 
[this.trajectoryhalfcheckbutton]));
-                       w22.Position = 1;
-                       w22.Expand = false;
-                       w22.Fill = false;
-                       this.GtkAlignment8.Add (this.vbox6);
-                       this.frame6.Add (this.GtkAlignment8);
-                       this.GtkLabel12 = new global::Gtk.Label ();
-                       this.GtkLabel12.Name = "GtkLabel12";
-                       this.GtkLabel12.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Half field 
position</b>");
-                       this.GtkLabel12.UseMarkup = true;
-                       this.frame6.LabelWidget = this.GtkLabel12;
-                       this.hbox1.Add (this.frame6);
-                       global::Gtk.Box.BoxChild w25 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.frame6]));
-                       w25.Position = 1;
-                       // Container child hbox1.Gtk.Box+BoxChild
-                       this.frame7 = new global::Gtk.Frame ();
-                       this.frame7.Name = "frame7";
-                       this.frame7.ShadowType = ((global::Gtk.ShadowType)(0));
-                       // Container child frame7.Gtk.Container+ContainerChild
-                       this.GtkAlignment9 = new global::Gtk.Alignment (0F, 0F, 1F, 1F);
-                       this.GtkAlignment9.Name = "GtkAlignment9";
-                       this.GtkAlignment9.LeftPadding = ((uint)(12));
-                       // Container child GtkAlignment9.Gtk.Container+ContainerChild
-                       this.taggoalcheckbutton = new global::Gtk.CheckButton ();
-                       this.taggoalcheckbutton.CanFocus = true;
-                       this.taggoalcheckbutton.Name = "taggoalcheckbutton";
-                       this.taggoalcheckbutton.Label = global::Mono.Unix.Catalog.GetString ("Enable");
-                       this.taggoalcheckbutton.DrawIndicator = true;
-                       this.taggoalcheckbutton.UseUnderline = true;
-                       this.GtkAlignment9.Add (this.taggoalcheckbutton);
-                       this.frame7.Add (this.GtkAlignment9);
-                       this.GtkLabel13 = new global::Gtk.Label ();
-                       this.GtkLabel13.Name = "GtkLabel13";
-                       this.GtkLabel13.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Goal 
Position</b>");
-                       this.GtkLabel13.UseMarkup = true;
-                       this.frame7.LabelWidget = this.GtkLabel13;
-                       this.hbox1.Add (this.frame7);
-                       global::Gtk.Box.BoxChild w28 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.frame7]));
-                       w28.Position = 2;
-                       this.vbox5.Add (this.hbox1);
-                       global::Gtk.Box.BoxChild w29 = ((global::Gtk.Box.BoxChild)(this.vbox5 [this.hbox1]));
-                       w29.Position = 0;
-                       w29.Expand = false;
-                       w29.Fill = false;
-                       // Container child vbox5.Gtk.Box+BoxChild
-                       this.table1 = new global::Gtk.Table (((uint)(1)), ((uint)(3)), false);
-                       this.table1.Name = "table1";
-                       this.table1.RowSpacing = ((uint)(6));
-                       this.table1.ColumnSpacing = ((uint)(6));
-                       this.vbox5.Add (this.table1);
-                       global::Gtk.Box.BoxChild w30 = ((global::Gtk.Box.BoxChild)(this.vbox5 [this.table1]));
+                       this.cattable.Add (this.hbox5);
+                       global::Gtk.Table.TableChild w18 = ((global::Gtk.Table.TableChild)(this.cattable 
[this.hbox5]));
+                       w18.TopAttach = ((uint)(2));
+                       w18.BottomAttach = ((uint)(3));
+                       w18.LeftAttach = ((uint)(1));
+                       w18.RightAttach = ((uint)(2));
+                       w18.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child cattable.Gtk.Table+TableChild
+                       this.hfieldcombobox = global::Gtk.ComboBox.NewText ();
+                       this.hfieldcombobox.AppendText (global::Mono.Unix.Catalog.GetString ("Not tagged"));
+                       this.hfieldcombobox.AppendText (global::Mono.Unix.Catalog.GetString ("Tag as point"));
+                       this.hfieldcombobox.AppendText (global::Mono.Unix.Catalog.GetString ("Tag as 
trayectory"));
+                       this.hfieldcombobox.Name = "hfieldcombobox";
+                       this.hfieldcombobox.Active = 0;
+                       this.cattable.Add (this.hfieldcombobox);
+                       global::Gtk.Table.TableChild w19 = ((global::Gtk.Table.TableChild)(this.cattable 
[this.hfieldcombobox]));
+                       w19.TopAttach = ((uint)(5));
+                       w19.BottomAttach = ((uint)(6));
+                       w19.LeftAttach = ((uint)(1));
+                       w19.RightAttach = ((uint)(2));
+                       w19.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w19.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child cattable.Gtk.Table+TableChild
+                       this.label10 = new global::Gtk.Label ();
+                       this.label10.Name = "label10";
+                       this.label10.Xalign = 0F;
+                       this.label10.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Field 
position:</b>");
+                       this.label10.UseMarkup = true;
+                       this.cattable.Add (this.label10);
+                       global::Gtk.Table.TableChild w20 = ((global::Gtk.Table.TableChild)(this.cattable 
[this.label10]));
+                       w20.TopAttach = ((uint)(4));
+                       w20.BottomAttach = ((uint)(5));
+                       w20.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w20.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child cattable.Gtk.Table+TableChild
+                       this.label11 = new global::Gtk.Label ();
+                       this.label11.Name = "label11";
+                       this.label11.Xalign = 0F;
+                       this.label11.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Half field 
position:</b>");
+                       this.label11.UseMarkup = true;
+                       this.cattable.Add (this.label11);
+                       global::Gtk.Table.TableChild w21 = ((global::Gtk.Table.TableChild)(this.cattable 
[this.label11]));
+                       w21.TopAttach = ((uint)(5));
+                       w21.BottomAttach = ((uint)(6));
+                       w21.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w21.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child cattable.Gtk.Table+TableChild
+                       this.label12 = new global::Gtk.Label ();
+                       this.label12.Name = "label12";
+                       this.label12.Xalign = 0F;
+                       this.label12.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Goal 
position:</b>");
+                       this.label12.UseMarkup = true;
+                       this.cattable.Add (this.label12);
+                       global::Gtk.Table.TableChild w22 = ((global::Gtk.Table.TableChild)(this.cattable 
[this.label12]));
+                       w22.TopAttach = ((uint)(6));
+                       w22.BottomAttach = ((uint)(7));
+                       w22.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w22.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child cattable.Gtk.Table+TableChild
+                       this.label14 = new global::Gtk.Label ();
+                       this.label14.Name = "label14";
+                       this.label14.Xalign = 0F;
+                       this.label14.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Show tags:</b>    
");
+                       this.label14.UseMarkup = true;
+                       this.cattable.Add (this.label14);
+                       global::Gtk.Table.TableChild w23 = ((global::Gtk.Table.TableChild)(this.cattable 
[this.label14]));
+                       w23.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w23.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child cattable.Gtk.Table+TableChild
+                       this.label15 = new global::Gtk.Label ();
+                       this.label15.Name = "label15";
+                       this.label15.Xalign = 0F;
+                       this.label15.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Tags per row:</b>   
 ");
+                       this.label15.UseMarkup = true;
+                       this.cattable.Add (this.label15);
+                       global::Gtk.Table.TableChild w24 = ((global::Gtk.Table.TableChild)(this.cattable 
[this.label15]));
+                       w24.TopAttach = ((uint)(1));
+                       w24.BottomAttach = ((uint)(2));
+                       w24.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child cattable.Gtk.Table+TableChild
+                       this.label6 = new global::Gtk.Label ();
+                       this.label6.Name = "label6";
+                       this.label6.Xalign = 0F;
+                       this.label6.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>HotKey:</b>");
+                       this.label6.UseMarkup = true;
+                       this.cattable.Add (this.label6);
+                       global::Gtk.Table.TableChild w25 = ((global::Gtk.Table.TableChild)(this.cattable 
[this.label6]));
+                       w25.TopAttach = ((uint)(2));
+                       w25.BottomAttach = ((uint)(3));
+                       w25.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w25.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child cattable.Gtk.Table+TableChild
+                       this.label9 = new global::Gtk.Label ();
+                       this.label9.Name = "label9";
+                       this.label9.Xalign = 0F;
+                       this.label9.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Sort Method</b>");
+                       this.label9.UseMarkup = true;
+                       this.cattable.Add (this.label9);
+                       global::Gtk.Table.TableChild w26 = ((global::Gtk.Table.TableChild)(this.cattable 
[this.label9]));
+                       w26.TopAttach = ((uint)(3));
+                       w26.BottomAttach = ((uint)(4));
+                       w26.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w26.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child cattable.Gtk.Table+TableChild
+                       this.sortmethodcombobox = global::Gtk.ComboBox.NewText ();
+                       this.sortmethodcombobox.AppendText (global::Mono.Unix.Catalog.GetString ("Sort by 
name"));
+                       this.sortmethodcombobox.AppendText (global::Mono.Unix.Catalog.GetString ("Sort by 
start time"));
+                       this.sortmethodcombobox.AppendText (global::Mono.Unix.Catalog.GetString ("Sort by 
stop time"));
+                       this.sortmethodcombobox.AppendText (global::Mono.Unix.Catalog.GetString ("Sort by 
duration"));
+                       this.sortmethodcombobox.Name = "sortmethodcombobox";
+                       this.sortmethodcombobox.Active = 0;
+                       this.cattable.Add (this.sortmethodcombobox);
+                       global::Gtk.Table.TableChild w27 = ((global::Gtk.Table.TableChild)(this.cattable 
[this.sortmethodcombobox]));
+                       w27.TopAttach = ((uint)(3));
+                       w27.BottomAttach = ((uint)(4));
+                       w27.LeftAttach = ((uint)(1));
+                       w27.RightAttach = ((uint)(2));
+                       w27.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w27.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child cattable.Gtk.Table+TableChild
+                       this.tagscheckbutton = new global::Gtk.CheckButton ();
+                       this.tagscheckbutton.CanFocus = true;
+                       this.tagscheckbutton.Name = "tagscheckbutton";
+                       this.tagscheckbutton.Label = "";
+                       this.tagscheckbutton.Active = true;
+                       this.tagscheckbutton.DrawIndicator = true;
+                       this.cattable.Add (this.tagscheckbutton);
+                       global::Gtk.Table.TableChild w28 = ((global::Gtk.Table.TableChild)(this.cattable 
[this.tagscheckbutton]));
+                       w28.LeftAttach = ((uint)(1));
+                       w28.RightAttach = ((uint)(2));
+                       w28.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w28.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child cattable.Gtk.Table+TableChild
+                       this.tprbutton = new global::Gtk.SpinButton (1, 10, 1);
+                       this.tprbutton.CanFocus = true;
+                       this.tprbutton.Name = "tprbutton";
+                       this.tprbutton.Adjustment.PageIncrement = 1;
+                       this.tprbutton.ClimbRate = 1;
+                       this.tprbutton.Numeric = true;
+                       this.tprbutton.Value = 2;
+                       this.cattable.Add (this.tprbutton);
+                       global::Gtk.Table.TableChild w29 = ((global::Gtk.Table.TableChild)(this.cattable 
[this.tprbutton]));
+                       w29.TopAttach = ((uint)(1));
+                       w29.BottomAttach = ((uint)(2));
+                       w29.LeftAttach = ((uint)(1));
+                       w29.RightAttach = ((uint)(2));
+                       w29.YOptions = ((global::Gtk.AttachOptions)(4));
+                       this.vbox3.Add (this.cattable);
+                       global::Gtk.Box.BoxChild w30 = ((global::Gtk.Box.BoxChild)(this.vbox3 
[this.cattable]));
                        w30.Position = 1;
-                       this.vbox3.Add (this.vbox5);
-                       global::Gtk.Box.BoxChild w31 = ((global::Gtk.Box.BoxChild)(this.vbox3 [this.vbox5]));
-                       w31.Position = 1;
-                       this.GtkAlignment1.Add (this.vbox3);
-                       this.frame4.Add (this.GtkAlignment1);
-                       this.GtkLabel6 = new global::Gtk.Label ();
-                       this.GtkLabel6.Name = "GtkLabel6";
-                       this.GtkLabel6.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Properties</b>");
-                       this.GtkLabel6.UseMarkup = true;
-                       this.frame4.LabelWidget = this.GtkLabel6;
-                       this.Add (this.frame4);
+                       w30.Expand = false;
+                       w30.Fill = false;
+                       // Container child vbox3.Gtk.Box+BoxChild
+                       this.cardtable = new global::Gtk.Table (((uint)(1)), ((uint)(2)), true);
+                       this.cardtable.Name = "cardtable";
+                       this.cardtable.RowSpacing = ((uint)(6));
+                       this.cardtable.ColumnSpacing = ((uint)(6));
+                       // Container child cardtable.Gtk.Table+TableChild
+                       this.label16 = new global::Gtk.Label ();
+                       this.label16.Name = "label16";
+                       this.label16.Xalign = 0F;
+                       this.label16.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Shape:</b>    ");
+                       this.label16.UseMarkup = true;
+                       this.cardtable.Add (this.label16);
+                       global::Gtk.Table.TableChild w31 = ((global::Gtk.Table.TableChild)(this.cardtable 
[this.label16]));
+                       w31.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child cardtable.Gtk.Table+TableChild
+                       this.shapecombobox = global::Gtk.ComboBox.NewText ();
+                       this.shapecombobox.AppendText (global::Mono.Unix.Catalog.GetString ("Rectangle"));
+                       this.shapecombobox.AppendText (global::Mono.Unix.Catalog.GetString ("Triangle"));
+                       this.shapecombobox.AppendText (global::Mono.Unix.Catalog.GetString ("Circle"));
+                       this.shapecombobox.Name = "shapecombobox";
+                       this.shapecombobox.Active = 0;
+                       this.cardtable.Add (this.shapecombobox);
+                       global::Gtk.Table.TableChild w32 = ((global::Gtk.Table.TableChild)(this.cardtable 
[this.shapecombobox]));
+                       w32.LeftAttach = ((uint)(1));
+                       w32.RightAttach = ((uint)(2));
+                       w32.YOptions = ((global::Gtk.AttachOptions)(4));
+                       this.vbox3.Add (this.cardtable);
+                       global::Gtk.Box.BoxChild w33 = ((global::Gtk.Box.BoxChild)(this.vbox3 
[this.cardtable]));
+                       w33.Position = 2;
+                       w33.Expand = false;
+                       w33.Fill = false;
+                       // Container child vbox3.Gtk.Box+BoxChild
+                       this.scoretable = new global::Gtk.Table (((uint)(1)), ((uint)(2)), true);
+                       this.scoretable.Name = "scoretable";
+                       this.scoretable.RowSpacing = ((uint)(6));
+                       this.scoretable.ColumnSpacing = ((uint)(6));
+                       // Container child scoretable.Gtk.Table+TableChild
+                       this.label17 = new global::Gtk.Label ();
+                       this.label17.Name = "label17";
+                       this.label17.Xalign = 0F;
+                       this.label17.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Points:</b>    ");
+                       this.label17.UseMarkup = true;
+                       this.scoretable.Add (this.label17);
+                       global::Gtk.Table.TableChild w34 = ((global::Gtk.Table.TableChild)(this.scoretable 
[this.label17]));
+                       w34.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child scoretable.Gtk.Table+TableChild
+                       this.pointsbutton = new global::Gtk.SpinButton (0, 1000, 1);
+                       this.pointsbutton.CanFocus = true;
+                       this.pointsbutton.Name = "pointsbutton";
+                       this.pointsbutton.Adjustment.PageIncrement = 1;
+                       this.pointsbutton.ClimbRate = 1;
+                       this.pointsbutton.Numeric = true;
+                       this.scoretable.Add (this.pointsbutton);
+                       global::Gtk.Table.TableChild w35 = ((global::Gtk.Table.TableChild)(this.scoretable 
[this.pointsbutton]));
+                       w35.LeftAttach = ((uint)(1));
+                       w35.RightAttach = ((uint)(2));
+                       w35.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w35.YOptions = ((global::Gtk.AttachOptions)(4));
+                       this.vbox3.Add (this.scoretable);
+                       global::Gtk.Box.BoxChild w36 = ((global::Gtk.Box.BoxChild)(this.vbox3 
[this.scoretable]));
+                       w36.Position = 3;
+                       w36.Expand = false;
+                       w36.Fill = false;
+                       this.Add (this.vbox3);
                        if ((this.Child != null)) {
                                this.Child.ShowAll ();
                        }
                        this.Show ();
-                       this.sortmethodcombobox.Changed += new global::System.EventHandler 
(this.OnSortmethodcomboboxChanged);
-                       this.nameentry.Changed += new global::System.EventHandler (this.OnNameentryChanged);
-                       this.changebuton.Clicked += new global::System.EventHandler 
(this.OnChangebutonClicked);
-                       this.colorbutton1.ColorSet += new global::System.EventHandler 
(this.OnColorbutton1ColorSet);
-                       this.tagfieldcheckbutton.Clicked += new global::System.EventHandler 
(this.OnTagfieldcheckbuttonClicked);
-                       this.trajectorycheckbutton.Clicked += new global::System.EventHandler 
(this.OnTrajectorycheckbuttonClicked);
-                       this.taghalffieldcheckbutton.Clicked += new global::System.EventHandler 
(this.OnTaghalffieldcheckbuttonClicked);
-                       this.trajectoryhalfcheckbutton.Clicked += new global::System.EventHandler 
(this.OnTrajectoryhalffieldcheckbuttonClicked);
-                       this.taggoalcheckbutton.Clicked += new global::System.EventHandler 
(this.OnTaggoalcheckbuttonClicked);
                }
        }
 }
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.CodingWidget.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.CodingWidget.cs
index 1943ce8..e4d9cdd 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.CodingWidget.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.CodingWidget.cs
@@ -10,14 +10,19 @@ namespace LongoMatch.Gui.Component
                private global::Gtk.RadioAction autoTaggingMode;
                private global::Gtk.Action zoomFitAction;
                private global::Gtk.RadioAction convertAction;
-               private global::Gtk.VBox vbox2;
+               private global::Gtk.VBox vbox;
                private global::Gtk.HBox hbox1;
                private global::Gtk.Toolbar codingtoolbar;
-               private global::Gtk.HBox hbox2;
-               private global::Gtk.DrawingArea drawingarea1;
+               private global::Gtk.Notebook notebook;
+               private global::Gtk.HPaned hpaned1;
+               private global::Gtk.DrawingArea teamsdrawingarea;
+               private global::Gtk.HBox hbox5;
                private global::LongoMatch.Gui.Component.ButtonsWidget buttonswidget;
+               private global::Gtk.Label label18;
                private global::LongoMatch.Gui.Component.Timeline timeline;
+               private global::Gtk.Label label21;
                private global::LongoMatch.Gui.Component.PlaysPositionViewer playspositionviewer1;
+               private global::Gtk.Label label19;
 
                protected virtual void Build ()
                {
@@ -45,10 +50,10 @@ namespace LongoMatch.Gui.Component
                        this.UIManager.InsertActionGroup (w3, 1);
                        this.Name = "LongoMatch.Gui.Component.CodingWidget";
                        // Container child LongoMatch.Gui.Component.CodingWidget.Gtk.Container+ContainerChild
-                       this.vbox2 = new global::Gtk.VBox ();
-                       this.vbox2.Name = "vbox2";
-                       this.vbox2.Spacing = 6;
-                       // Container child vbox2.Gtk.Box+BoxChild
+                       this.vbox = new global::Gtk.VBox ();
+                       this.vbox.Name = "vbox";
+                       this.vbox.Spacing = 6;
+                       // Container child vbox.Gtk.Box+BoxChild
                        this.hbox1 = new global::Gtk.HBox ();
                        this.hbox1.Name = "hbox1";
                        this.hbox1.Spacing = 6;
@@ -62,46 +67,77 @@ namespace LongoMatch.Gui.Component
                        w4.Position = 0;
                        w4.Expand = false;
                        w4.Fill = false;
-                       this.vbox2.Add (this.hbox1);
-                       global::Gtk.Box.BoxChild w5 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.hbox1]));
+                       this.vbox.Add (this.hbox1);
+                       global::Gtk.Box.BoxChild w5 = ((global::Gtk.Box.BoxChild)(this.vbox [this.hbox1]));
                        w5.Position = 0;
                        w5.Expand = false;
                        w5.Fill = false;
-                       // Container child vbox2.Gtk.Box+BoxChild
-                       this.hbox2 = new global::Gtk.HBox ();
-                       this.hbox2.Name = "hbox2";
-                       this.hbox2.Spacing = 6;
-                       // Container child hbox2.Gtk.Box+BoxChild
-                       this.drawingarea1 = new global::Gtk.DrawingArea ();
-                       this.drawingarea1.Name = "drawingarea1";
-                       this.hbox2.Add (this.drawingarea1);
-                       global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.hbox2 
[this.drawingarea1]));
-                       w6.Position = 0;
-                       // Container child hbox2.Gtk.Box+BoxChild
+                       // Container child vbox.Gtk.Box+BoxChild
+                       this.notebook = new global::Gtk.Notebook ();
+                       this.notebook.CanFocus = true;
+                       this.notebook.Name = "notebook";
+                       this.notebook.CurrentPage = 2;
+                       // Container child notebook.Gtk.Notebook+NotebookChild
+                       this.hpaned1 = new global::Gtk.HPaned ();
+                       this.hpaned1.CanFocus = true;
+                       this.hpaned1.Name = "hpaned1";
+                       this.hpaned1.Position = 276;
+                       // Container child hpaned1.Gtk.Paned+PanedChild
+                       this.teamsdrawingarea = new global::Gtk.DrawingArea ();
+                       this.teamsdrawingarea.Name = "teamsdrawingarea";
+                       this.hpaned1.Add (this.teamsdrawingarea);
+                       global::Gtk.Paned.PanedChild w6 = ((global::Gtk.Paned.PanedChild)(this.hpaned1 
[this.teamsdrawingarea]));
+                       w6.Resize = false;
+                       // Container child hpaned1.Gtk.Paned+PanedChild
+                       this.hbox5 = new global::Gtk.HBox ();
+                       this.hbox5.Name = "hbox5";
+                       this.hbox5.Spacing = 6;
+                       // Container child hbox5.Gtk.Box+BoxChild
                        this.buttonswidget = new global::LongoMatch.Gui.Component.ButtonsWidget ();
                        this.buttonswidget.Events = ((global::Gdk.EventMask)(256));
                        this.buttonswidget.Name = "buttonswidget";
-                       this.hbox2.Add (this.buttonswidget);
-                       global::Gtk.Box.BoxChild w7 = ((global::Gtk.Box.BoxChild)(this.hbox2 
[this.buttonswidget]));
-                       w7.Position = 1;
-                       // Container child hbox2.Gtk.Box+BoxChild
+                       this.buttonswidget.Edited = false;
+                       this.hbox5.Add (this.buttonswidget);
+                       global::Gtk.Box.BoxChild w7 = ((global::Gtk.Box.BoxChild)(this.hbox5 
[this.buttonswidget]));
+                       w7.Position = 0;
+                       this.hpaned1.Add (this.hbox5);
+                       this.notebook.Add (this.hpaned1);
+                       // Notebook tab
+                       this.label18 = new global::Gtk.Label ();
+                       this.label18.Name = "label18";
+                       this.label18.LabelProp = global::Mono.Unix.Catalog.GetString ("page2");
+                       this.notebook.SetTabLabel (this.hpaned1, this.label18);
+                       this.label18.ShowAll ();
+                       // Container child notebook.Gtk.Notebook+NotebookChild
                        this.timeline = new global::LongoMatch.Gui.Component.Timeline ();
                        this.timeline.Events = ((global::Gdk.EventMask)(256));
                        this.timeline.Name = "timeline";
-                       this.hbox2.Add (this.timeline);
-                       global::Gtk.Box.BoxChild w8 = ((global::Gtk.Box.BoxChild)(this.hbox2 
[this.timeline]));
-                       w8.Position = 2;
-                       // Container child hbox2.Gtk.Box+BoxChild
+                       this.notebook.Add (this.timeline);
+                       global::Gtk.Notebook.NotebookChild w10 = 
((global::Gtk.Notebook.NotebookChild)(this.notebook [this.timeline]));
+                       w10.Position = 1;
+                       // Notebook tab
+                       this.label21 = new global::Gtk.Label ();
+                       this.label21.Name = "label21";
+                       this.label21.LabelProp = global::Mono.Unix.Catalog.GetString ("page1");
+                       this.notebook.SetTabLabel (this.timeline, this.label21);
+                       this.label21.ShowAll ();
+                       // Container child notebook.Gtk.Notebook+NotebookChild
                        this.playspositionviewer1 = new global::LongoMatch.Gui.Component.PlaysPositionViewer 
();
                        this.playspositionviewer1.Events = ((global::Gdk.EventMask)(256));
                        this.playspositionviewer1.Name = "playspositionviewer1";
-                       this.hbox2.Add (this.playspositionviewer1);
-                       global::Gtk.Box.BoxChild w9 = ((global::Gtk.Box.BoxChild)(this.hbox2 
[this.playspositionviewer1]));
-                       w9.Position = 3;
-                       this.vbox2.Add (this.hbox2);
-                       global::Gtk.Box.BoxChild w10 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.hbox2]));
-                       w10.Position = 1;
-                       this.Add (this.vbox2);
+                       this.notebook.Add (this.playspositionviewer1);
+                       global::Gtk.Notebook.NotebookChild w11 = 
((global::Gtk.Notebook.NotebookChild)(this.notebook [this.playspositionviewer1]));
+                       w11.Position = 2;
+                       // Notebook tab
+                       this.label19 = new global::Gtk.Label ();
+                       this.label19.Name = "label19";
+                       this.label19.LabelProp = global::Mono.Unix.Catalog.GetString ("page3");
+                       this.notebook.SetTabLabel (this.playspositionviewer1, this.label19);
+                       this.label19.ShowAll ();
+                       this.vbox.Add (this.notebook);
+                       global::Gtk.Box.BoxChild w12 = ((global::Gtk.Box.BoxChild)(this.vbox 
[this.notebook]));
+                       w12.Position = 1;
+                       this.Add (this.vbox);
                        if ((this.Child != null)) {
                                this.Child.ShowAll ();
                        }
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Dialog.EditCategoryDialog.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Dialog.EditCategoryDialog.cs
index 9ac85bc..67db6f5 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Dialog.EditCategoryDialog.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Dialog.EditCategoryDialog.cs
@@ -24,6 +24,7 @@ namespace LongoMatch.Gui.Dialog
                        this.timenodeproperties2 = new global::LongoMatch.Gui.Component.CategoryProperties ();
                        this.timenodeproperties2.Events = ((global::Gdk.EventMask)(256));
                        this.timenodeproperties2.Name = "timenodeproperties2";
+                       this.timenodeproperties2.Edited = false;
                        w1.Add (this.timenodeproperties2);
                        global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(w1 
[this.timenodeproperties2]));
                        w2.Position = 0;
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.NewProjectPanel.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.NewProjectPanel.cs
index a1212e1..b5430ec 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.NewProjectPanel.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.NewProjectPanel.cs
@@ -113,7 +113,7 @@ namespace LongoMatch.Gui.Panel
                        this.notebook1 = new global::Gtk.Notebook ();
                        this.notebook1.CanFocus = true;
                        this.notebook1.Name = "notebook1";
-                       this.notebook1.CurrentPage = 1;
+                       this.notebook1.CurrentPage = 2;
                        this.notebook1.ShowBorder = false;
                        this.notebook1.Scrollable = true;
                        // Container child notebook1.Gtk.Notebook+NotebookChild
@@ -148,7 +148,6 @@ namespace LongoMatch.Gui.Panel
                        this.fromfileradiobutton = new global::Gtk.RadioButton 
(global::Mono.Unix.Catalog.GetString ("New project using a video file"));
                        this.fromfileradiobutton.CanFocus = true;
                        this.fromfileradiobutton.Name = "fromfileradiobutton";
-                       this.fromfileradiobutton.Active = true;
                        this.fromfileradiobutton.DrawIndicator = true;
                        this.fromfileradiobutton.UseUnderline = true;
                        this.fromfileradiobutton.FocusOnClick = false;
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.SportsTemplatesPanel.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.SportsTemplatesPanel.cs
index a157901..ed6cb56 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.SportsTemplatesPanel.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.SportsTemplatesPanel.cs
@@ -16,7 +16,10 @@ namespace LongoMatch.Gui.Panel
                private global::Gtk.Button newteam;
                private global::Gtk.Button deleteteambutton;
                private global::Gtk.VSeparator vseparator2;
-               private global::LongoMatch.Gui.Component.AnalysisTemplateEditor analysistemplateeditor;
+               private global::Gtk.VBox vbox4;
+               private global::LongoMatch.Gui.Component.ButtonsWidget buttonswidget;
+               private global::Gtk.HButtonBox hbuttonbox5;
+               private global::Gtk.Button savebutton;
                private global::Gtk.HSeparator hseparator1;
                private global::Gtk.HButtonBox hbuttonbox3;
                private global::Gtk.Button backbutton;
@@ -140,24 +143,65 @@ namespace LongoMatch.Gui.Panel
                        w25.Expand = false;
                        w25.Fill = false;
                        // Container child hbox1.Gtk.Box+BoxChild
-                       this.analysistemplateeditor = new 
global::LongoMatch.Gui.Component.AnalysisTemplateEditor ();
-                       this.analysistemplateeditor.Events = ((global::Gdk.EventMask)(256));
-                       this.analysistemplateeditor.Name = "analysistemplateeditor";
-                       this.analysistemplateeditor.Edited = false;
-                       this.hbox1.Add (this.analysistemplateeditor);
-                       global::Gtk.Box.BoxChild w26 = ((global::Gtk.Box.BoxChild)(this.hbox1 
[this.analysistemplateeditor]));
-                       w26.Position = 2;
+                       this.vbox4 = new global::Gtk.VBox ();
+                       this.vbox4.Name = "vbox4";
+                       this.vbox4.Spacing = 6;
+                       // Container child vbox4.Gtk.Box+BoxChild
+                       this.buttonswidget = new global::LongoMatch.Gui.Component.ButtonsWidget ();
+                       this.buttonswidget.Events = ((global::Gdk.EventMask)(256));
+                       this.buttonswidget.Name = "buttonswidget";
+                       this.buttonswidget.Edited = false;
+                       this.vbox4.Add (this.buttonswidget);
+                       global::Gtk.Box.BoxChild w26 = ((global::Gtk.Box.BoxChild)(this.vbox4 
[this.buttonswidget]));
+                       w26.Position = 0;
+                       // Container child vbox4.Gtk.Box+BoxChild
+                       this.hbuttonbox5 = new global::Gtk.HButtonBox ();
+                       this.hbuttonbox5.Name = "hbuttonbox5";
+                       this.hbuttonbox5.LayoutStyle = ((global::Gtk.ButtonBoxStyle)(1));
+                       // Container child hbuttonbox5.Gtk.ButtonBox+ButtonBoxChild
+                       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 w27 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       // Container child GtkAlignment.Gtk.Container+ContainerChild
+                       global::Gtk.HBox w28 = new global::Gtk.HBox ();
+                       w28.Spacing = 2;
+                       // Container child GtkHBox.Gtk.Container+ContainerChild
+                       global::Gtk.Image w29 = new global::Gtk.Image ();
+                       w29.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-save", 
global::Gtk.IconSize.Dialog);
+                       w28.Add (w29);
+                       // Container child GtkHBox.Gtk.Container+ContainerChild
+                       global::Gtk.Label w31 = new global::Gtk.Label ();
+                       w31.LabelProp = global::Mono.Unix.Catalog.GetString ("Save template");
+                       w31.UseUnderline = true;
+                       w28.Add (w31);
+                       w27.Add (w28);
+                       this.savebutton.Add (w27);
+                       this.hbuttonbox5.Add (this.savebutton);
+                       global::Gtk.ButtonBox.ButtonBoxChild w35 = 
((global::Gtk.ButtonBox.ButtonBoxChild)(this.hbuttonbox5 [this.savebutton]));
+                       w35.Expand = false;
+                       w35.Fill = false;
+                       this.vbox4.Add (this.hbuttonbox5);
+                       global::Gtk.Box.BoxChild w36 = ((global::Gtk.Box.BoxChild)(this.vbox4 
[this.hbuttonbox5]));
+                       w36.Position = 1;
+                       w36.Expand = false;
+                       w36.Fill = false;
+                       this.hbox1.Add (this.vbox4);
+                       global::Gtk.Box.BoxChild w37 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.vbox4]));
+                       w37.Position = 2;
                        this.vbox3.Add (this.hbox1);
-                       global::Gtk.Box.BoxChild w27 = ((global::Gtk.Box.BoxChild)(this.vbox3 [this.hbox1]));
-                       w27.Position = 0;
+                       global::Gtk.Box.BoxChild w38 = ((global::Gtk.Box.BoxChild)(this.vbox3 [this.hbox1]));
+                       w38.Position = 0;
                        // Container child vbox3.Gtk.Box+BoxChild
                        this.hseparator1 = new global::Gtk.HSeparator ();
                        this.hseparator1.Name = "hseparator1";
                        this.vbox3.Add (this.hseparator1);
-                       global::Gtk.Box.BoxChild w28 = ((global::Gtk.Box.BoxChild)(this.vbox3 
[this.hseparator1]));
-                       w28.Position = 1;
-                       w28.Expand = false;
-                       w28.Fill = false;
+                       global::Gtk.Box.BoxChild w39 = ((global::Gtk.Box.BoxChild)(this.vbox3 
[this.hseparator1]));
+                       w39.Position = 1;
+                       w39.Expand = false;
+                       w39.Fill = false;
                        // Container child vbox3.Gtk.Box+BoxChild
                        this.hbuttonbox3 = new global::Gtk.HButtonBox ();
                        this.hbuttonbox3.Name = "hbuttonbox3";
@@ -168,30 +212,30 @@ namespace LongoMatch.Gui.Panel
                        this.backbutton.Name = "backbutton";
                        this.backbutton.UseUnderline = true;
                        // Container child backbutton.Gtk.Container+ContainerChild
-                       global::Gtk.Alignment w29 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       global::Gtk.Alignment w40 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
                        // Container child GtkAlignment.Gtk.Container+ContainerChild
-                       global::Gtk.HBox w30 = new global::Gtk.HBox ();
-                       w30.Spacing = 2;
+                       global::Gtk.HBox w41 = new global::Gtk.HBox ();
+                       w41.Spacing = 2;
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Image w31 = new global::Gtk.Image ();
-                       w31.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-go-back", 
global::Gtk.IconSize.Dialog);
-                       w30.Add (w31);
+                       global::Gtk.Image w42 = new global::Gtk.Image ();
+                       w42.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-go-back", 
global::Gtk.IconSize.Dialog);
+                       w41.Add (w42);
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Label w33 = new global::Gtk.Label ();
-                       w33.LabelProp = global::Mono.Unix.Catalog.GetString ("_Back");
-                       w33.UseUnderline = true;
-                       w30.Add (w33);
-                       w29.Add (w30);
-                       this.backbutton.Add (w29);
+                       global::Gtk.Label w44 = new global::Gtk.Label ();
+                       w44.LabelProp = global::Mono.Unix.Catalog.GetString ("_Back");
+                       w44.UseUnderline = true;
+                       w41.Add (w44);
+                       w40.Add (w41);
+                       this.backbutton.Add (w40);
                        this.hbuttonbox3.Add (this.backbutton);
-                       global::Gtk.ButtonBox.ButtonBoxChild w37 = 
((global::Gtk.ButtonBox.ButtonBoxChild)(this.hbuttonbox3 [this.backbutton]));
-                       w37.Expand = false;
-                       w37.Fill = false;
+                       global::Gtk.ButtonBox.ButtonBoxChild w48 = 
((global::Gtk.ButtonBox.ButtonBoxChild)(this.hbuttonbox3 [this.backbutton]));
+                       w48.Expand = false;
+                       w48.Fill = false;
                        this.vbox3.Add (this.hbuttonbox3);
-                       global::Gtk.Box.BoxChild w38 = ((global::Gtk.Box.BoxChild)(this.vbox3 
[this.hbuttonbox3]));
-                       w38.Position = 2;
-                       w38.Expand = false;
-                       w38.Fill = false;
+                       global::Gtk.Box.BoxChild w49 = ((global::Gtk.Box.BoxChild)(this.vbox3 
[this.hbuttonbox3]));
+                       w49.Position = 2;
+                       w49.Expand = false;
+                       w49.Fill = false;
                        this.Add (this.vbox3);
                        if ((this.Child != null)) {
                                this.Child.ShowAll ();
diff --git a/LongoMatch.GUI/gtk-gui/gui.stetic b/LongoMatch.GUI/gtk-gui/gui.stetic
index 065015b..c5be4e2 100644
--- a/LongoMatch.GUI/gtk-gui/gui.stetic
+++ b/LongoMatch.GUI/gtk-gui/gui.stetic
@@ -95,83 +95,395 @@
       </widget>
     </child>
   </widget>
-  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.ButtonsWidget" design-size="532 149">
+  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.ButtonsWidget" design-size="1215 560">
     <property name="MemberName" />
     <child>
-      <widget class="Gtk.VBox" id="vbox1">
+      <widget class="Gtk.HBox" id="hbox2">
         <property name="MemberName" />
         <property name="Spacing">6</property>
         <child>
-          <widget class="Gtk.Table" id="table1">
+          <widget class="Gtk.VBox" id="vbox2">
             <property name="MemberName" />
-            <property name="NRows">5</property>
-            <property name="NColumns">4</property>
-            <property name="RowSpacing">1</property>
-            <property name="ColumnSpacing">1</property>
-            <child>
-              <placeholder />
-            </child>
-            <child>
-              <placeholder />
-            </child>
-            <child>
-              <placeholder />
-            </child>
-            <child>
-              <placeholder />
-            </child>
-            <child>
-              <placeholder />
-            </child>
-            <child>
-              <placeholder />
-            </child>
-            <child>
-              <placeholder />
-            </child>
-            <child>
-              <placeholder />
-            </child>
-            <child>
-              <placeholder />
-            </child>
-            <child>
-              <placeholder />
-            </child>
-            <child>
-              <placeholder />
-            </child>
-            <child>
-              <placeholder />
-            </child>
-            <child>
-              <placeholder />
-            </child>
-            <child>
-              <placeholder />
-            </child>
-            <child>
-              <placeholder />
-            </child>
-            <child>
-              <placeholder />
-            </child>
+            <property name="CanFocus">True</property>
+            <property name="Spacing">6</property>
             <child>
-              <placeholder />
+              <widget class="Gtk.HButtonBox" id="hbuttonbox2">
+                <property name="MemberName" />
+                <property name="Size">5</property>
+                <property name="LayoutStyle">Spread</property>
+                <child>
+                  <widget class="Gtk.Button" id="addcatbutton">
+                    <property name="MemberName" />
+                    <property name="CanFocus">True</property>
+                    <property name="Type">TextAndIcon</property>
+                    <property name="Icon">stock:gtk-add Menu</property>
+                    <property name="Label" translatable="yes">Add category</property>
+                    <property name="UseUnderline">True</property>
+                  </widget>
+                  <packing>
+                    <property name="Expand">False</property>
+                    <property name="Fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Button" id="addtimerbutton">
+                    <property name="MemberName" />
+                    <property name="CanFocus">True</property>
+                    <property name="Type">TextAndIcon</property>
+                    <property name="Icon">stock:stock_alarm Menu</property>
+                    <property name="Label" translatable="yes">Add timer</property>
+                    <property name="UseUnderline">True</property>
+                  </widget>
+                  <packing>
+                    <property name="Position">1</property>
+                    <property name="Expand">False</property>
+                    <property name="Fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Button" id="addscorebutton">
+                    <property name="MemberName" />
+                    <property name="CanFocus">True</property>
+                    <property name="Type">TextAndIcon</property>
+                    <property name="Icon">stock:gtk-zoom-100 Menu</property>
+                    <property name="Label" translatable="yes">Add score</property>
+                    <property name="UseUnderline">True</property>
+                  </widget>
+                  <packing>
+                    <property name="Position">2</property>
+                    <property name="Expand">False</property>
+                    <property name="Fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Button" id="addcardbutton">
+                    <property name="MemberName" />
+                    <property name="CanFocus">True</property>
+                    <property name="Type">TextAndIcon</property>
+                    <property name="Icon">stock:stock_media-stop Menu</property>
+                    <property name="Label" translatable="yes">Add penalty card</property>
+                    <property name="UseUnderline">True</property>
+                  </widget>
+                  <packing>
+                    <property name="Position">3</property>
+                    <property name="Expand">False</property>
+                    <property name="Fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Button" id="addtagbutton">
+                    <property name="MemberName" />
+                    <property name="CanFocus">True</property>
+                    <property name="Type">TextAndIcon</property>
+                    <property name="Icon">stock:stock_zoom-in Menu</property>
+                    <property name="Label" translatable="yes">Add tag</property>
+                    <property name="UseUnderline">True</property>
+                  </widget>
+                  <packing>
+                    <property name="Position">4</property>
+                    <property name="Expand">False</property>
+                    <property name="Fill">False</property>
+                  </packing>
+                </child>
+              </widget>
+              <packing>
+                <property name="Position">0</property>
+                <property name="AutoSize">False</property>
+                <property name="Expand">False</property>
+                <property name="Fill">False</property>
+              </packing>
             </child>
             <child>
-              <placeholder />
+              <widget class="Gtk.ScrolledWindow" id="scrolledwindow4">
+                <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <child>
+                  <widget class="Gtk.Viewport" id="GtkViewport">
+                    <property name="MemberName" />
+                    <property name="ShadowType">None</property>
+                    <child>
+                      <widget class="Gtk.DrawingArea" id="drawingarea1">
+                        <property name="MemberName" />
+                        <property name="CanFocus">True</property>
+                      </widget>
+                    </child>
+                  </widget>
+                </child>
+              </widget>
+              <packing>
+                <property name="Position">1</property>
+                <property name="AutoSize">True</property>
+              </packing>
             </child>
+          </widget>
+          <packing>
+            <property name="Position">0</property>
+            <property name="AutoSize">True</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.VBox" id="rightbox">
+            <property name="MemberName" />
+            <property name="Spacing">6</property>
             <child>
-              <placeholder />
+              <widget class="Gtk.HBox" id="positionsbox">
+                <property name="MemberName" />
+                <property name="Spacing">6</property>
+                <child>
+                  <widget class="Gtk.Frame" id="frame8">
+                    <property name="MemberName" />
+                    <property name="ShadowType">None</property>
+                    <child>
+                      <widget class="Gtk.Alignment" id="GtkAlignment13">
+                        <property name="MemberName" />
+                        <property name="Xalign">0</property>
+                        <property name="Yalign">0</property>
+                        <property name="LeftPadding">12</property>
+                        <child>
+                          <widget class="Gtk.HBox" id="hbox6">
+                            <property name="MemberName" />
+                            <property name="Spacing">6</property>
+                            <child>
+                              <widget class="Gtk.EventBox" id="fieldeventbox">
+                                <property name="MemberName" />
+                                <child>
+                                  <widget class="Gtk.Image" id="fieldimage">
+                                    <property name="MemberName" />
+                                  </widget>
+                                </child>
+                              </widget>
+                              <packing>
+                                <property name="Position">0</property>
+                                <property name="AutoSize">False</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <widget class="Gtk.Button" id="resetfieldbutton">
+                                <property name="MemberName" />
+                                <property name="CanFocus">True</property>
+                                <property name="Type">TextAndIcon</property>
+                                <property name="Icon">stock:gtk-refresh Menu</property>
+                                <property name="Label" translatable="yes" />
+                                <property name="UseUnderline">True</property>
+                              </widget>
+                              <packing>
+                                <property name="Position">1</property>
+                                <property name="AutoSize">True</property>
+                                <property name="Expand">False</property>
+                                <property name="Fill">False</property>
+                              </packing>
+                            </child>
+                          </widget>
+                        </child>
+                      </widget>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Label" id="GtkLabel17">
+                        <property name="MemberName" />
+                        <property name="LabelProp" translatable="yes">&lt;b&gt;Field&lt;/b&gt;</property>
+                        <property name="UseMarkup">True</property>
+                      </widget>
+                      <packing>
+                        <property name="type">label_item</property>
+                      </packing>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="Position">0</property>
+                    <property name="AutoSize">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Frame" id="frame9">
+                    <property name="MemberName" />
+                    <property name="ShadowType">None</property>
+                    <child>
+                      <widget class="Gtk.Alignment" id="GtkAlignment15">
+                        <property name="MemberName" />
+                        <property name="Xalign">0</property>
+                        <property name="Yalign">0</property>
+                        <property name="LeftPadding">12</property>
+                        <child>
+                          <widget class="Gtk.HBox" id="hbox7">
+                            <property name="MemberName" />
+                            <property name="Spacing">6</property>
+                            <child>
+                              <widget class="Gtk.EventBox" id="hfieldeventbox">
+                                <property name="MemberName" />
+                                <child>
+                                  <widget class="Gtk.Image" id="hfieldimage">
+                                    <property name="MemberName" />
+                                  </widget>
+                                </child>
+                              </widget>
+                              <packing>
+                                <property name="Position">0</property>
+                                <property name="AutoSize">False</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <widget class="Gtk.Button" id="resethfieldbutton">
+                                <property name="MemberName" />
+                                <property name="CanFocus">True</property>
+                                <property name="Type">TextAndIcon</property>
+                                <property name="Icon">stock:gtk-refresh Menu</property>
+                                <property name="Label" translatable="yes" />
+                                <property name="UseUnderline">True</property>
+                              </widget>
+                              <packing>
+                                <property name="Position">1</property>
+                                <property name="AutoSize">True</property>
+                                <property name="Expand">False</property>
+                                <property name="Fill">False</property>
+                              </packing>
+                            </child>
+                          </widget>
+                        </child>
+                      </widget>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Label" id="GtkLabel20">
+                        <property name="MemberName" />
+                        <property name="LabelProp" translatable="yes">&lt;b&gt;Half 
field&lt;/b&gt;</property>
+                        <property name="UseMarkup">True</property>
+                      </widget>
+                      <packing>
+                        <property name="type">label_item</property>
+                      </packing>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="Position">1</property>
+                    <property name="AutoSize">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Frame" id="frame10">
+                    <property name="MemberName" />
+                    <property name="ShadowType">None</property>
+                    <child>
+                      <widget class="Gtk.Alignment" id="GtkAlignment17">
+                        <property name="MemberName" />
+                        <property name="Xalign">0</property>
+                        <property name="Yalign">0</property>
+                        <property name="LeftPadding">12</property>
+                        <child>
+                          <widget class="Gtk.HBox" id="hbox8">
+                            <property name="MemberName" />
+                            <property name="Spacing">6</property>
+                            <child>
+                              <widget class="Gtk.EventBox" id="goaleventbox">
+                                <property name="MemberName" />
+                                <child>
+                                  <widget class="Gtk.Image" id="goalimage">
+                                    <property name="MemberName" />
+                                  </widget>
+                                </child>
+                              </widget>
+                              <packing>
+                                <property name="Position">0</property>
+                                <property name="AutoSize">False</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <widget class="Gtk.Button" id="resetfgoalbutton">
+                                <property name="MemberName" />
+                                <property name="CanFocus">True</property>
+                                <property name="Type">TextAndIcon</property>
+                                <property name="Icon">stock:gtk-refresh Menu</property>
+                                <property name="Label" translatable="yes" />
+                                <property name="UseUnderline">True</property>
+                              </widget>
+                              <packing>
+                                <property name="Position">1</property>
+                                <property name="AutoSize">True</property>
+                                <property name="Expand">False</property>
+                                <property name="Fill">False</property>
+                              </packing>
+                            </child>
+                          </widget>
+                        </child>
+                      </widget>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Label" id="GtkLabel22">
+                        <property name="MemberName" />
+                        <property name="LabelProp" translatable="yes">&lt;b&gt;Goal&lt;/b&gt;</property>
+                        <property name="UseMarkup">True</property>
+                      </widget>
+                      <packing>
+                        <property name="type">label_item</property>
+                      </packing>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="Position">2</property>
+                    <property name="AutoSize">False</property>
+                  </packing>
+                </child>
+              </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>
-              <placeholder />
+              <widget class="Gtk.Frame" id="propsframe">
+                <property name="MemberName" />
+                <property name="Visible">False</property>
+                <property name="Sensitive">False</property>
+                <child>
+                  <widget class="Gtk.Alignment" id="GtkAlignment7">
+                    <property name="MemberName" />
+                    <property name="Xalign">0</property>
+                    <property name="Yalign">0</property>
+                    <property name="LeftPadding">12</property>
+                    <child>
+                      <widget class="Gtk.ScrolledWindow" id="scrolledwindow5">
+                        <property name="MemberName" />
+                        <property name="CanFocus">True</property>
+                        <property name="HscrollbarPolicy">Never</property>
+                        <child>
+                          <widget class="Gtk.Viewport" id="GtkViewport1">
+                            <property name="MemberName" />
+                            <property name="ShadowType">None</property>
+                            <child>
+                              <widget class="LongoMatch.Gui.Component.CategoryProperties" 
id="categoryproperties1">
+                                <property name="MemberName" />
+                                <property name="Events">ButtonPressMask</property>
+                                <property name="Edited">False</property>
+                              </widget>
+                            </child>
+                          </widget>
+                        </child>
+                      </widget>
+                    </child>
+                  </widget>
+                </child>
+                <child>
+                  <widget class="Gtk.Label" id="GtkLabel10">
+                    <property name="MemberName" />
+                    <property name="LabelProp" translatable="yes">&lt;b&gt;Properties&lt;/b&gt;</property>
+                    <property name="UseMarkup">True</property>
+                  </widget>
+                  <packing>
+                    <property name="type">label_item</property>
+                  </packing>
+                </child>
+              </widget>
+              <packing>
+                <property name="Position">1</property>
+                <property name="AutoSize">True</property>
+              </packing>
             </child>
           </widget>
           <packing>
-            <property name="Position">0</property>
+            <property name="Position">1</property>
             <property name="AutoSize">True</property>
+            <property name="Expand">False</property>
+            <property name="Fill">False</property>
           </packing>
         </child>
       </widget>
@@ -467,328 +779,359 @@
       </widget>
     </child>
   </widget>
-  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.CategoryProperties" design-size="674 370">
+  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.CategoryProperties" design-size="318 557">
     <property name="MemberName" />
     <child>
-      <widget class="Gtk.Frame" id="frame4">
+      <widget class="Gtk.VBox" id="vbox3">
         <property name="MemberName" />
-        <property name="ShadowType">In</property>
+        <property name="Spacing">6</property>
         <child>
-          <widget class="Gtk.Alignment" id="GtkAlignment1">
+          <widget class="Gtk.Table" id="table2">
             <property name="MemberName" />
-            <property name="Xalign">0</property>
-            <property name="Yalign">0</property>
-            <property name="LeftPadding">12</property>
+            <property name="NRows">6</property>
+            <property name="NColumns">2</property>
+            <property name="Homogeneous">True</property>
+            <property name="RowSpacing">6</property>
+            <property name="ColumnSpacing">6</property>
+            <child>
+              <widget class="Gtk.ColorButton" id="colorbutton1">
+                <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <property name="Events">ButtonMotionMask, ButtonPressMask, ButtonReleaseMask</property>
+                <property name="Alpha">-1</property>
+              </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="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</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.ColorButton" id="colorbutton2">
+                <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <property name="Events">ButtonMotionMask, ButtonPressMask, ButtonReleaseMask</property>
+                <property name="Alpha">-1</property>
+              </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="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</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.VBox" id="vbox3">
+              <widget class="Gtk.Label" id="label1">
+                <property name="MemberName" />
+                <property name="Xalign">0</property>
+                <property name="LabelProp" translatable="yes">&lt;b&gt;Name:&lt;/b&gt;</property>
+                <property name="UseMarkup">True</property>
+              </widget>
+              <packing>
+                <property name="AutoSize">False</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</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.Label" id="label13">
+                <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="TopAttach">2</property>
+                <property name="BottomAttach">3</property>
+                <property name="AutoSize">False</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.Label" id="label4">
+                <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="TopAttach">1</property>
+                <property name="BottomAttach">2</property>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</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.Label" id="label7">
+                <property name="MemberName" />
+                <property name="Xalign">0</property>
+                <property name="LabelProp" translatable="yes">&lt;b&gt;Lead time (s):&lt;/b&gt;</property>
+                <property name="UseMarkup">True</property>
+              </widget>
+              <packing>
+                <property name="TopAttach">4</property>
+                <property name="BottomAttach">5</property>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</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.Label" id="label8">
+                <property name="MemberName" />
+                <property name="Xalign">0</property>
+                <property name="LabelProp" translatable="yes">&lt;b&gt;Lag time (s):&lt;/b&gt;</property>
+                <property name="UseMarkup">True</property>
+              </widget>
+              <packing>
+                <property name="TopAttach">5</property>
+                <property name="BottomAttach">6</property>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</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.SpinButton" id="lagtimebutton">
+                <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <property name="Upper">1000</property>
+                <property name="PageIncrement">1</property>
+                <property name="StepIncrement">1</property>
+                <property name="ClimbRate">1</property>
+                <property name="Numeric">True</property>
+              </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="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</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.SpinButton" id="leadtimebutton">
+                <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <property name="Upper">1000</property>
+                <property name="PageIncrement">1</property>
+                <property name="StepIncrement">1</property>
+                <property name="ClimbRate">1</property>
+                <property name="Numeric">True</property>
+              </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="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</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.Entry" id="nameentry">
+                <property name="MemberName" />
+                <property name="WidthRequest">76</property>
+                <property name="CanFocus">True</property>
+                <property name="IsEditable">True</property>
+                <property name="InvisibleChar">●</property>
+              </widget>
+              <packing>
+                <property name="LeftAttach">1</property>
+                <property name="RightAttach">2</property>
+                <property name="AutoSize">False</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.Label" id="taglabel">
+                <property name="MemberName" />
+                <property name="Xalign">0</property>
+                <property name="LabelProp" translatable="yes">&lt;b&gt;Tag mode:&lt;/b&gt;    </property>
+                <property name="UseMarkup">True</property>
+              </widget>
+              <packing>
+                <property name="TopAttach">3</property>
+                <property name="BottomAttach">4</property>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</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.ComboBox" id="tagmodecombobox">
+                <property name="MemberName" />
+                <property name="IsTextCombo">True</property>
+                <property name="Items" translatable="yes">Automatic
+Manual</property>
+                <property name="Active">0</property>
+              </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="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</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">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="cattable">
+            <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>
+              <widget class="Gtk.ComboBox" id="fieldcombobox">
+                <property name="MemberName" />
+                <property name="IsTextCombo">True</property>
+                <property name="Items" translatable="yes">Not tagged
+Tag as point
+Tag as trayectory</property>
+                <property name="Active">0</property>
+              </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="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</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.ComboBox" id="goalcombobox">
+                <property name="MemberName" />
+                <property name="IsTextCombo">True</property>
+                <property name="Items" translatable="yes">Not tagged
+Tag as point</property>
+                <property name="Active">0</property>
+              </widget>
+              <packing>
+                <property name="TopAttach">6</property>
+                <property name="BottomAttach">7</property>
+                <property name="LeftAttach">1</property>
+                <property name="RightAttach">2</property>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</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.HBox" id="hbox5">
                 <property name="MemberName" />
                 <property name="Spacing">6</property>
                 <child>
-                  <widget class="Gtk.Table" id="table2">
+                  <widget class="Gtk.Label" id="hotKeyLabel">
                     <property name="MemberName" />
-                    <property name="NRows">3</property>
-                    <property name="NColumns">4</property>
-                    <property name="RowSpacing">6</property>
-                    <property name="ColumnSpacing">6</property>
-                    <child>
-                      <widget class="Gtk.ColorButton" id="colorbutton1">
-                        <property name="MemberName" />
-                        <property name="CanFocus">True</property>
-                        <property name="Events">ButtonMotionMask, ButtonPressMask, 
ButtonReleaseMask</property>
-                        <property name="Alpha">-1</property>
-                        <signal name="ColorSet" handler="OnColorbutton1ColorSet" />
-                      </widget>
-                      <packing>
-                        <property name="LeftAttach">3</property>
-                        <property name="RightAttach">4</property>
-                        <property name="AutoSize">False</property>
-                        <property name="XOptions">Fill</property>
-                        <property name="YOptions">0</property>
-                        <property name="XExpand">False</property>
-                        <property name="XFill">True</property>
-                        <property name="XShrink">False</property>
-                        <property name="YExpand">False</property>
-                        <property name="YFill">False</property>
-                        <property name="YShrink">False</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <widget class="Gtk.HBox" id="hbox5">
-                        <property name="MemberName" />
-                        <property name="Spacing">6</property>
-                        <child>
-                          <widget class="Gtk.Label" id="hotKeyLabel">
-                            <property name="MemberName" />
-                            <property name="LabelProp" translatable="yes">none</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.Button" id="changebuton">
-                            <property name="MemberName" />
-                            <property name="Sensitive">False</property>
-                            <property name="CanFocus">True</property>
-                            <property name="Type">TextOnly</property>
-                            <property name="Label" translatable="yes">Change</property>
-                            <property name="UseUnderline">True</property>
-                            <signal name="Clicked" handler="OnChangebutonClicked" />
-                          </widget>
-                          <packing>
-                            <property name="Position">1</property>
-                            <property name="AutoSize">False</property>
-                            <property name="Expand">False</property>
-                            <property name="Fill">False</property>
-                          </packing>
-                        </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">False</property>
-                        <property name="XOptions">Fill</property>
-                        <property name="YOptions">0</property>
-                        <property name="XExpand">False</property>
-                        <property name="XFill">True</property>
-                        <property name="XShrink">False</property>
-                        <property name="YExpand">False</property>
-                        <property name="YFill">False</property>
-                        <property name="YShrink">False</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <widget class="Gtk.Label" id="label1">
-                        <property name="MemberName" />
-                        <property name="Xalign">0</property>
-                        <property name="LabelProp" translatable="yes">&lt;b&gt;Name:&lt;/b&gt;</property>
-                        <property name="UseMarkup">True</property>
-                      </widget>
-                      <packing>
-                        <property name="AutoSize">False</property>
-                        <property name="XOptions">Fill</property>
-                        <property name="YOptions">Fill</property>
-                        <property name="XExpand">False</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.Label" id="label4">
-                        <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="LeftAttach">2</property>
-                        <property name="RightAttach">3</property>
-                        <property name="AutoSize">True</property>
-                        <property name="XOptions">Fill</property>
-                        <property name="YOptions">Fill</property>
-                        <property name="XExpand">False</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.Label" id="label6">
-                        <property name="MemberName" />
-                        <property name="Xalign">0</property>
-                        <property name="LabelProp" translatable="yes">&lt;b&gt;HotKey:&lt;/b&gt;</property>
-                        <property name="UseMarkup">True</property>
-                      </widget>
-                      <packing>
-                        <property name="TopAttach">2</property>
-                        <property name="BottomAttach">3</property>
-                        <property name="AutoSize">False</property>
-                        <property name="XOptions">Fill</property>
-                        <property name="YOptions">Fill</property>
-                        <property name="XExpand">False</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.Label" id="label7">
-                        <property name="MemberName" />
-                        <property name="Xalign">0</property>
-                        <property name="LabelProp" translatable="yes">&lt;b&gt;Lead 
time:&lt;/b&gt;</property>
-                        <property name="UseMarkup">True</property>
-                      </widget>
-                      <packing>
-                        <property name="TopAttach">1</property>
-                        <property name="BottomAttach">2</property>
-                        <property name="AutoSize">False</property>
-                        <property name="XOptions">Fill</property>
-                        <property name="YOptions">Fill</property>
-                        <property name="XExpand">False</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.Label" id="label8">
-                        <property name="MemberName" />
-                        <property name="Xalign">0</property>
-                        <property name="LabelProp" translatable="yes">&lt;b&gt;Lag time:&lt;/b&gt;</property>
-                        <property name="UseMarkup">True</property>
-                      </widget>
-                      <packing>
-                        <property name="TopAttach">1</property>
-                        <property name="BottomAttach">2</property>
-                        <property name="LeftAttach">2</property>
-                        <property name="RightAttach">3</property>
-                        <property name="AutoSize">True</property>
-                        <property name="XOptions">Fill</property>
-                        <property name="YOptions">Fill</property>
-                        <property name="XExpand">False</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.Label" id="label9">
-                        <property name="MemberName" />
-                        <property name="Xalign">0</property>
-                        <property name="LabelProp" translatable="yes">&lt;b&gt;Sort 
Method&lt;/b&gt;</property>
-                        <property name="UseMarkup">True</property>
-                      </widget>
-                      <packing>
-                        <property name="TopAttach">2</property>
-                        <property name="BottomAttach">3</property>
-                        <property name="LeftAttach">2</property>
-                        <property name="RightAttach">3</property>
-                        <property name="AutoSize">True</property>
-                        <property name="XOptions">Fill</property>
-                        <property name="YOptions">Fill</property>
-                        <property name="XExpand">False</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.SpinButton" id="lagtimebutton">
-                        <property name="MemberName" />
-                        <property name="CanFocus">True</property>
-                        <property name="Upper">1000</property>
-                        <property name="PageIncrement">1</property>
-                        <property name="StepIncrement">1</property>
-                        <property name="ClimbRate">1</property>
-                        <property name="Numeric">True</property>
-                      </widget>
-                      <packing>
-                        <property name="TopAttach">1</property>
-                        <property name="BottomAttach">2</property>
-                        <property name="LeftAttach">3</property>
-                        <property name="RightAttach">4</property>
-                        <property name="AutoSize">False</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.SpinButton" id="leadtimebutton">
-                        <property name="MemberName" />
-                        <property name="CanFocus">True</property>
-                        <property name="Upper">1000</property>
-                        <property name="PageIncrement">1</property>
-                        <property name="StepIncrement">1</property>
-                        <property name="ClimbRate">1</property>
-                        <property name="Numeric">True</property>
-                      </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="XOptions">Fill</property>
-                        <property name="YOptions">Fill</property>
-                        <property name="XExpand">False</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.Entry" id="nameentry">
-                        <property name="MemberName" />
-                        <property name="CanFocus">True</property>
-                        <property name="IsEditable">True</property>
-                        <property name="InvisibleChar">●</property>
-                        <signal name="Changed" handler="OnNameentryChanged" />
-                      </widget>
-                      <packing>
-                        <property name="LeftAttach">1</property>
-                        <property name="RightAttach">2</property>
-                        <property name="AutoSize">False</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.ComboBox" id="sortmethodcombobox">
-                        <property name="MemberName" />
-                        <property name="IsTextCombo">True</property>
-                        <property name="Items" translatable="yes">Sort by name
-Sort by start time
-Sort by stop time
-Sort by duration</property>
-                        <property name="Active">3</property>
-                        <signal name="Changed" handler="OnSortmethodcomboboxChanged" />
-                      </widget>
-                      <packing>
-                        <property name="TopAttach">2</property>
-                        <property name="BottomAttach">3</property>
-                        <property name="LeftAttach">3</property>
-                        <property name="RightAttach">4</property>
-                        <property name="AutoSize">False</property>
-                        <property name="XOptions">Fill</property>
-                        <property name="YOptions">0</property>
-                        <property name="XExpand">False</property>
-                        <property name="XFill">True</property>
-                        <property name="XShrink">False</property>
-                        <property name="YExpand">False</property>
-                        <property name="YFill">False</property>
-                        <property name="YShrink">False</property>
-                      </packing>
-                    </child>
+                    <property name="LabelProp" translatable="yes">none</property>
                   </widget>
                   <packing>
                     <property name="Position">0</property>
@@ -798,235 +1141,400 @@ Sort by duration</property>
                   </packing>
                 </child>
                 <child>
-                  <widget class="Gtk.VBox" id="vbox5">
+                  <widget class="Gtk.Button" id="changebuton">
                     <property name="MemberName" />
-                    <property name="Spacing">6</property>
-                    <child>
-                      <widget class="Gtk.HBox" id="hbox1">
-                        <property name="MemberName" />
-                        <property name="Spacing">6</property>
-                        <child>
-                          <widget class="Gtk.Frame" id="frame5">
-                            <property name="MemberName" />
-                            <property name="ShadowType">None</property>
-                            <child>
-                              <widget class="Gtk.Alignment" id="GtkAlignment7">
-                                <property name="MemberName" />
-                                <property name="Xalign">0</property>
-                                <property name="Yalign">0</property>
-                                <property name="LeftPadding">12</property>
-                                <child>
-                                  <widget class="Gtk.VBox" id="vbox4">
-                                    <property name="MemberName" />
-                                    <property name="Spacing">6</property>
-                                    <child>
-                                      <widget class="Gtk.CheckButton" id="tagfieldcheckbutton">
-                                        <property name="MemberName" />
-                                        <property name="CanFocus">True</property>
-                                        <property name="Label" translatable="yes">Enable</property>
-                                        <property name="DrawIndicator">True</property>
-                                        <property name="HasLabel">True</property>
-                                        <property name="UseUnderline">True</property>
-                                        <signal name="Clicked" handler="OnTagfieldcheckbuttonClicked" />
-                                      </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.CheckButton" id="trajectorycheckbutton">
-                                        <property name="MemberName" />
-                                        <property name="CanFocus">True</property>
-                                        <property name="Label" translatable="yes">Trajectory</property>
-                                        <property name="DrawIndicator">True</property>
-                                        <property name="HasLabel">True</property>
-                                        <property name="UseUnderline">True</property>
-                                        <signal name="Clicked" handler="OnTrajectorycheckbuttonClicked" />
-                                      </widget>
-                                      <packing>
-                                        <property name="Position">1</property>
-                                        <property name="AutoSize">True</property>
-                                        <property name="Expand">False</property>
-                                        <property name="Fill">False</property>
-                                      </packing>
-                                    </child>
-                                  </widget>
-                                </child>
-                              </widget>
-                            </child>
-                            <child>
-                              <widget class="Gtk.Label" id="GtkLabel9">
-                                <property name="MemberName" />
-                                <property name="LabelProp" translatable="yes">&lt;b&gt;Field 
position&lt;/b&gt;</property>
-                                <property name="UseMarkup">True</property>
-                              </widget>
-                              <packing>
-                                <property name="type">label_item</property>
-                              </packing>
-                            </child>
-                          </widget>
-                          <packing>
-                            <property name="Position">0</property>
-                            <property name="AutoSize">False</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <widget class="Gtk.Frame" id="frame6">
-                            <property name="MemberName" />
-                            <property name="ShadowType">None</property>
-                            <child>
-                              <widget class="Gtk.Alignment" id="GtkAlignment8">
-                                <property name="MemberName" />
-                                <property name="Xalign">0</property>
-                                <property name="Yalign">0</property>
-                                <property name="LeftPadding">12</property>
-                                <child>
-                                  <widget class="Gtk.VBox" id="vbox6">
-                                    <property name="MemberName" />
-                                    <property name="Spacing">6</property>
-                                    <child>
-                                      <widget class="Gtk.CheckButton" id="taghalffieldcheckbutton">
-                                        <property name="MemberName" />
-                                        <property name="CanFocus">True</property>
-                                        <property name="Label" translatable="yes">Enable</property>
-                                        <property name="DrawIndicator">True</property>
-                                        <property name="HasLabel">True</property>
-                                        <property name="UseUnderline">True</property>
-                                        <signal name="Clicked" handler="OnTaghalffieldcheckbuttonClicked" />
-                                      </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.CheckButton" id="trajectoryhalfcheckbutton">
-                                        <property name="MemberName" />
-                                        <property name="CanFocus">True</property>
-                                        <property name="Label" translatable="yes">Trajectory</property>
-                                        <property name="DrawIndicator">True</property>
-                                        <property name="HasLabel">True</property>
-                                        <property name="UseUnderline">True</property>
-                                        <signal name="Clicked" 
handler="OnTrajectoryhalffieldcheckbuttonClicked" />
-                                      </widget>
-                                      <packing>
-                                        <property name="Position">1</property>
-                                        <property name="AutoSize">True</property>
-                                        <property name="Expand">False</property>
-                                        <property name="Fill">False</property>
-                                      </packing>
-                                    </child>
-                                  </widget>
-                                </child>
-                              </widget>
-                            </child>
-                            <child>
-                              <widget class="Gtk.Label" id="GtkLabel12">
-                                <property name="MemberName" />
-                                <property name="LabelProp" translatable="yes">&lt;b&gt;Half field 
position&lt;/b&gt;</property>
-                                <property name="UseMarkup">True</property>
-                              </widget>
-                              <packing>
-                                <property name="type">label_item</property>
-                              </packing>
-                            </child>
-                          </widget>
-                          <packing>
-                            <property name="Position">1</property>
-                            <property name="AutoSize">False</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <widget class="Gtk.Frame" id="frame7">
-                            <property name="MemberName" />
-                            <property name="ShadowType">None</property>
-                            <child>
-                              <widget class="Gtk.Alignment" id="GtkAlignment9">
-                                <property name="MemberName" />
-                                <property name="Xalign">0</property>
-                                <property name="Yalign">0</property>
-                                <property name="LeftPadding">12</property>
-                                <child>
-                                  <widget class="Gtk.CheckButton" id="taggoalcheckbutton">
-                                    <property name="MemberName" />
-                                    <property name="CanFocus">True</property>
-                                    <property name="Label" translatable="yes">Enable</property>
-                                    <property name="DrawIndicator">True</property>
-                                    <property name="HasLabel">True</property>
-                                    <property name="UseUnderline">True</property>
-                                    <signal name="Clicked" handler="OnTaggoalcheckbuttonClicked" />
-                                  </widget>
-                                </child>
-                              </widget>
-                            </child>
-                            <child>
-                              <widget class="Gtk.Label" id="GtkLabel13">
-                                <property name="MemberName" />
-                                <property name="LabelProp" translatable="yes">&lt;b&gt;Goal 
Position&lt;/b&gt;</property>
-                                <property name="UseMarkup">True</property>
-                              </widget>
-                              <packing>
-                                <property name="type">label_item</property>
-                              </packing>
-                            </child>
-                          </widget>
-                          <packing>
-                            <property name="Position">2</property>
-                            <property name="AutoSize">False</property>
-                          </packing>
-                        </child>
-                      </widget>
-                      <packing>
-                        <property name="Position">0</property>
-                        <property name="AutoSize">False</property>
-                        <property name="Expand">False</property>
-                        <property name="Fill">False</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <widget class="Gtk.Table" id="table1">
-                        <property name="MemberName" />
-                        <property name="NColumns">3</property>
-                        <property name="RowSpacing">6</property>
-                        <property name="ColumnSpacing">6</property>
-                        <child>
-                          <placeholder />
-                        </child>
-                        <child>
-                          <placeholder />
-                        </child>
-                        <child>
-                          <placeholder />
-                        </child>
-                      </widget>
-                      <packing>
-                        <property name="Position">1</property>
-                        <property name="AutoSize">True</property>
-                      </packing>
-                    </child>
+                    <property name="Sensitive">False</property>
+                    <property name="CanFocus">True</property>
+                    <property name="Type">TextOnly</property>
+                    <property name="Label" translatable="yes">Change</property>
+                    <property name="UseUnderline">True</property>
                   </widget>
                   <packing>
                     <property name="Position">1</property>
-                    <property name="AutoSize">True</property>
+                    <property name="AutoSize">False</property>
+                    <property name="Expand">False</property>
+                    <property name="Fill">False</property>
                   </packing>
                 </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">False</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.ComboBox" id="hfieldcombobox">
+                <property name="MemberName" />
+                <property name="IsTextCombo">True</property>
+                <property name="Items" translatable="yes">Not tagged
+Tag as point
+Tag as trayectory</property>
+                <property name="Active">0</property>
+              </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="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</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.Label" id="label10">
+                <property name="MemberName" />
+                <property name="Xalign">0</property>
+                <property name="LabelProp" translatable="yes">&lt;b&gt;Field position:&lt;/b&gt;</property>
+                <property name="UseMarkup">True</property>
+              </widget>
+              <packing>
+                <property name="TopAttach">4</property>
+                <property name="BottomAttach">5</property>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</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.Label" id="label11">
+                <property name="MemberName" />
+                <property name="Xalign">0</property>
+                <property name="LabelProp" translatable="yes">&lt;b&gt;Half field 
position:&lt;/b&gt;</property>
+                <property name="UseMarkup">True</property>
+              </widget>
+              <packing>
+                <property name="TopAttach">5</property>
+                <property name="BottomAttach">6</property>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</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.Label" id="label12">
+                <property name="MemberName" />
+                <property name="Xalign">0</property>
+                <property name="LabelProp" translatable="yes">&lt;b&gt;Goal position:&lt;/b&gt;</property>
+                <property name="UseMarkup">True</property>
+              </widget>
+              <packing>
+                <property name="TopAttach">6</property>
+                <property name="BottomAttach">7</property>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</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.Label" id="label14">
+                <property name="MemberName" />
+                <property name="Xalign">0</property>
+                <property name="LabelProp" translatable="yes">&lt;b&gt;Show tags:&lt;/b&gt;    </property>
+                <property name="UseMarkup">True</property>
+              </widget>
+              <packing>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</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.Label" id="label15">
+                <property name="MemberName" />
+                <property name="Xalign">0</property>
+                <property name="LabelProp" translatable="yes">&lt;b&gt;Tags per row:&lt;/b&gt;    </property>
+                <property name="UseMarkup">True</property>
+              </widget>
+              <packing>
+                <property name="TopAttach">1</property>
+                <property name="BottomAttach">2</property>
+                <property name="AutoSize">False</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.Label" id="label6">
+                <property name="MemberName" />
+                <property name="Xalign">0</property>
+                <property name="LabelProp" translatable="yes">&lt;b&gt;HotKey:&lt;/b&gt;</property>
+                <property name="UseMarkup">True</property>
+              </widget>
+              <packing>
+                <property name="TopAttach">2</property>
+                <property name="BottomAttach">3</property>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</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.Label" id="label9">
+                <property name="MemberName" />
+                <property name="Xalign">0</property>
+                <property name="LabelProp" translatable="yes">&lt;b&gt;Sort Method&lt;/b&gt;</property>
+                <property name="UseMarkup">True</property>
+              </widget>
+              <packing>
+                <property name="TopAttach">3</property>
+                <property name="BottomAttach">4</property>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</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.ComboBox" id="sortmethodcombobox">
+                <property name="MemberName" />
+                <property name="IsTextCombo">True</property>
+                <property name="Items" translatable="yes">Sort by name
+Sort by start time
+Sort by stop time
+Sort by duration</property>
+                <property name="Active">0</property>
+              </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="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</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.CheckButton" id="tagscheckbutton">
+                <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <property name="Label" translatable="yes" />
+                <property name="Active">True</property>
+                <property name="DrawIndicator">True</property>
+                <property name="HasLabel">True</property>
+              </widget>
+              <packing>
+                <property name="LeftAttach">1</property>
+                <property name="RightAttach">2</property>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</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.SpinButton" id="tprbutton">
+                <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <property name="Lower">1</property>
+                <property name="Upper">10</property>
+                <property name="PageIncrement">1</property>
+                <property name="StepIncrement">1</property>
+                <property name="ClimbRate">1</property>
+                <property name="Numeric">True</property>
+                <property name="Value">2</property>
+              </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">False</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">True</property>
+            <property name="Expand">False</property>
+            <property name="Fill">False</property>
+          </packing>
         </child>
         <child>
-          <widget class="Gtk.Label" id="GtkLabel6">
+          <widget class="Gtk.Table" id="cardtable">
             <property name="MemberName" />
-            <property name="LabelProp" translatable="yes">&lt;b&gt;Properties&lt;/b&gt;</property>
-            <property name="UseMarkup">True</property>
+            <property name="NColumns">2</property>
+            <property name="Homogeneous">True</property>
+            <property name="RowSpacing">6</property>
+            <property name="ColumnSpacing">6</property>
+            <child>
+              <widget class="Gtk.Label" id="label16">
+                <property name="MemberName" />
+                <property name="Xalign">0</property>
+                <property name="LabelProp" translatable="yes">&lt;b&gt;Shape:&lt;/b&gt;    </property>
+                <property name="UseMarkup">True</property>
+              </widget>
+              <packing>
+                <property name="AutoSize">False</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.ComboBox" id="shapecombobox">
+                <property name="MemberName" />
+                <property name="IsTextCombo">True</property>
+                <property name="Items" translatable="yes">Rectangle
+Triangle
+Circle</property>
+                <property name="Active">0</property>
+              </widget>
+              <packing>
+                <property name="LeftAttach">1</property>
+                <property name="RightAttach">2</property>
+                <property name="AutoSize">False</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="type">label_item</property>
+            <property name="Position">2</property>
+            <property name="AutoSize">False</property>
+            <property name="Expand">False</property>
+            <property name="Fill">False</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.Table" id="scoretable">
+            <property name="MemberName" />
+            <property name="NColumns">2</property>
+            <property name="Homogeneous">True</property>
+            <property name="RowSpacing">6</property>
+            <property name="ColumnSpacing">6</property>
+            <child>
+              <widget class="Gtk.Label" id="label17">
+                <property name="MemberName" />
+                <property name="Xalign">0</property>
+                <property name="LabelProp" translatable="yes">&lt;b&gt;Points:&lt;/b&gt;    </property>
+                <property name="UseMarkup">True</property>
+              </widget>
+              <packing>
+                <property name="AutoSize">False</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.SpinButton" id="pointsbutton">
+                <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <property name="Upper">1000</property>
+                <property name="PageIncrement">1</property>
+                <property name="StepIncrement">1</property>
+                <property name="ClimbRate">1</property>
+                <property name="Numeric">True</property>
+              </widget>
+              <packing>
+                <property name="LeftAttach">1</property>
+                <property name="RightAttach">2</property>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</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">3</property>
+            <property name="AutoSize">True</property>
+            <property name="Expand">False</property>
+            <property name="Fill">False</property>
           </packing>
         </child>
       </widget>
@@ -2324,6 +2832,7 @@ Hotkeys with a single key are also allowed with Ctrl+key.</property>
           <widget class="LongoMatch.Gui.Component.CategoryProperties" id="timenodeproperties2">
             <property name="MemberName" />
             <property name="Events">ButtonPressMask</property>
+            <property name="Edited">False</property>
           </widget>
           <packing>
             <property name="Position">0</property>
@@ -5086,6 +5595,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">Histogram</property>
+                <property name="Active">True</property>
                 <property name="DrawIndicator">True</property>
                 <property name="HasLabel">True</property>
                 <property name="UseUnderline">True</property>
@@ -5488,55 +5998,16 @@ You can continue with the current capture, cancel it or save your project.
       </widget>
     </child>
   </widget>
-  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.AnalysisComponent" design-size="1524 648">
+  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.AnalysisComponent" design-size="1524 875">
     <action-group name="Default" />
     <property name="MemberName" />
     <property name="Visible">False</property>
     <child>
-      <widget class="Gtk.VPaned" id="vpaned1">
+      <widget class="Gtk.HBox" id="hbox1">
         <property name="MemberName" />
-        <property name="CanFocus">True</property>
-        <property name="Position">438</property>
-        <child>
-          <widget class="Gtk.HPaned" id="hpaned">
-            <property name="MemberName" />
-            <property name="CanFocus">True</property>
-            <property name="Position">261</property>
-            <child>
-              <widget class="LongoMatch.Gui.Component.PlaysSelectionWidget" id="playsSelection">
-                <property name="MemberName" />
-                <property name="Events">ButtonPressMask</property>
-              </widget>
-              <packing>
-                <property name="Resize">False</property>
-              </packing>
-            </child>
-            <child>
-              <widget class="Gtk.HBox" id="videowidgetsbox">
-                <property name="MemberName" />
-                <property name="Spacing">6</property>
-                <child>
-                  <widget class="LongoMatch.Gui.PlayerCapturerBin" id="playercapturer">
-                    <property name="MemberName" />
-                    <property name="Events">ButtonPressMask</property>
-                  </widget>
-                  <packing>
-                    <property name="Position">0</property>
-                    <property name="AutoSize">False</property>
-                  </packing>
-                </child>
-              </widget>
-            </child>
-          </widget>
-          <packing>
-            <property name="Resize">False</property>
-          </packing>
-        </child>
+        <property name="Spacing">6</property>
         <child>
-          <widget class="LongoMatch.Gui.Component.CodingWidget" id="codingwidget">
-            <property name="MemberName" />
-            <property name="Events">ButtonPressMask</property>
-          </widget>
+          <placeholder />
         </child>
       </widget>
     </child>
@@ -5705,34 +6176,6 @@ You can continue with the current capture, cancel it or save your project.
       </widget>
     </child>
   </widget>
-  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.ButtonTagger" design-size="204 43">
-    <property name="MemberName" />
-    <property name="Visible">False</property>
-    <child>
-      <widget class="Gtk.HBox" id="buttonbox">
-        <property name="MemberName" />
-        <child>
-          <placeholder />
-        </child>
-        <child>
-          <widget class="Gtk.Button" id="cancelbutton">
-            <property name="MemberName" />
-            <property name="Type">TextAndIcon</property>
-            <property name="Icon">stock:gtk-cancel Menu</property>
-            <property name="Label" translatable="yes" />
-            <property name="UseUnderline">True</property>
-          </widget>
-          <packing>
-            <property name="PackType">End</property>
-            <property name="Position">1</property>
-            <property name="AutoSize">True</property>
-            <property name="Expand">False</property>
-            <property name="Fill">False</property>
-          </packing>
-        </child>
-      </widget>
-    </child>
-  </widget>
   <widget class="Gtk.Bin" id="LongoMatch.Gui.Panel.WelcomePanel" design-size="861 345">
     <property name="MemberName" />
     <property name="Visible">False</property>
@@ -5992,7 +6435,7 @@ You can continue with the current capture, cancel it or save your project.
               <widget class="Gtk.Notebook" id="notebook1">
                 <property name="MemberName" />
                 <property name="CanFocus">True</property>
-                <property name="CurrentPage">1</property>
+                <property name="CurrentPage">2</property>
                 <property name="ShowBorder">False</property>
                 <property name="Scrollable">True</property>
                 <child>
@@ -8798,7 +9241,7 @@ Click 2 players to swap them</property>
       </widget>
     </child>
   </widget>
-  <widget class="Gtk.Bin" id="LongoMatch.Gui.Panel.SportsTemplatesPanel" design-size="1087 586">
+  <widget class="Gtk.Bin" id="LongoMatch.Gui.Panel.SportsTemplatesPanel" design-size="1242 783">
     <property name="MemberName" />
     <property name="Visible">False</property>
     <child>
@@ -8916,10 +9359,47 @@ Click 2 players to swap them</property>
               </packing>
             </child>
             <child>
-              <widget class="LongoMatch.Gui.Component.AnalysisTemplateEditor" id="analysistemplateeditor">
+              <widget class="Gtk.VBox" id="vbox4">
                 <property name="MemberName" />
-                <property name="Events">ButtonPressMask</property>
-                <property name="Edited">False</property>
+                <property name="Spacing">6</property>
+                <child>
+                  <widget class="LongoMatch.Gui.Component.ButtonsWidget" id="buttonswidget">
+                    <property name="MemberName" />
+                    <property name="Events">ButtonPressMask</property>
+                    <property name="Edited">False</property>
+                  </widget>
+                  <packing>
+                    <property name="Position">0</property>
+                    <property name="AutoSize">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.HButtonBox" id="hbuttonbox5">
+                    <property name="MemberName" />
+                    <property name="Size">1</property>
+                    <property name="LayoutStyle">Spread</property>
+                    <child>
+                      <widget class="Gtk.Button" id="savebutton">
+                        <property name="MemberName" />
+                        <property name="CanFocus">True</property>
+                        <property name="Type">TextAndIcon</property>
+                        <property name="Icon">stock:gtk-save Dialog</property>
+                        <property name="Label" translatable="yes">Save template</property>
+                        <property name="UseUnderline">True</property>
+                      </widget>
+                      <packing>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="Position">1</property>
+                    <property name="AutoSize">True</property>
+                    <property name="Expand">False</property>
+                    <property name="Fill">False</property>
+                  </packing>
+                </child>
               </widget>
               <packing>
                 <property name="Position">2</property>
@@ -8973,318 +9453,6 @@ Click 2 players to swap them</property>
       </widget>
     </child>
   </widget>
-  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.AnalysisTemplateEditor" design-size="1300 540">
-    <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.HBox" id="hbox1">
-            <property name="MemberName" />
-            <property name="Spacing">6</property>
-            <child>
-              <widget class="LongoMatch.Gui.Component.ButtonsWidget" id="buttonswidget">
-                <property name="MemberName" />
-                <property name="Events">ButtonPressMask</property>
-              </widget>
-              <packing>
-                <property name="Position">0</property>
-                <property name="AutoSize">True</property>
-              </packing>
-            </child>
-            <child>
-              <widget class="Gtk.VBox" id="vbox3">
-                <property name="MemberName" />
-                <property name="Spacing">6</property>
-                <child>
-                  <widget class="Gtk.HBox" id="hbox4">
-                    <property name="MemberName" />
-                    <property name="Spacing">6</property>
-                    <child>
-                      <widget class="Gtk.Frame" id="frame8">
-                        <property name="MemberName" />
-                        <property name="ShadowType">None</property>
-                        <child>
-                          <widget class="Gtk.Alignment" id="GtkAlignment13">
-                            <property name="MemberName" />
-                            <property name="Xalign">0</property>
-                            <property name="Yalign">0</property>
-                            <property name="LeftPadding">12</property>
-                            <child>
-                              <widget class="Gtk.HBox" id="hbox6">
-                                <property name="MemberName" />
-                                <property name="Spacing">6</property>
-                                <child>
-                                  <widget class="Gtk.EventBox" id="fieldeventbox">
-                                    <property name="MemberName" />
-                                    <child>
-                                      <widget class="Gtk.Image" id="fieldimage">
-                                        <property name="MemberName" />
-                                      </widget>
-                                    </child>
-                                  </widget>
-                                  <packing>
-                                    <property name="Position">0</property>
-                                    <property name="AutoSize">False</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <widget class="Gtk.Button" id="resetfieldbutton">
-                                    <property name="MemberName" />
-                                    <property name="CanFocus">True</property>
-                                    <property name="Type">TextAndIcon</property>
-                                    <property name="Icon">stock:gtk-refresh Menu</property>
-                                    <property name="Label" translatable="yes" />
-                                    <property name="UseUnderline">True</property>
-                                  </widget>
-                                  <packing>
-                                    <property name="Position">1</property>
-                                    <property name="AutoSize">True</property>
-                                    <property name="Expand">False</property>
-                                    <property name="Fill">False</property>
-                                  </packing>
-                                </child>
-                              </widget>
-                            </child>
-                          </widget>
-                        </child>
-                        <child>
-                          <widget class="Gtk.Label" id="GtkLabel17">
-                            <property name="MemberName" />
-                            <property name="LabelProp" translatable="yes">&lt;b&gt;Field&lt;/b&gt;</property>
-                            <property name="UseMarkup">True</property>
-                          </widget>
-                          <packing>
-                            <property name="type">label_item</property>
-                          </packing>
-                        </child>
-                      </widget>
-                      <packing>
-                        <property name="Position">0</property>
-                        <property name="AutoSize">False</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <widget class="Gtk.Frame" id="frame9">
-                        <property name="MemberName" />
-                        <property name="ShadowType">None</property>
-                        <child>
-                          <widget class="Gtk.Alignment" id="GtkAlignment15">
-                            <property name="MemberName" />
-                            <property name="Xalign">0</property>
-                            <property name="Yalign">0</property>
-                            <property name="LeftPadding">12</property>
-                            <child>
-                              <widget class="Gtk.HBox" id="hbox7">
-                                <property name="MemberName" />
-                                <property name="Spacing">6</property>
-                                <child>
-                                  <widget class="Gtk.EventBox" id="hfieldeventbox">
-                                    <property name="MemberName" />
-                                    <child>
-                                      <widget class="Gtk.Image" id="hfieldimage">
-                                        <property name="MemberName" />
-                                      </widget>
-                                    </child>
-                                  </widget>
-                                  <packing>
-                                    <property name="Position">0</property>
-                                    <property name="AutoSize">False</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <widget class="Gtk.Button" id="resethfieldbutton">
-                                    <property name="MemberName" />
-                                    <property name="CanFocus">True</property>
-                                    <property name="Type">TextAndIcon</property>
-                                    <property name="Icon">stock:gtk-refresh Menu</property>
-                                    <property name="Label" translatable="yes" />
-                                    <property name="UseUnderline">True</property>
-                                  </widget>
-                                  <packing>
-                                    <property name="Position">1</property>
-                                    <property name="AutoSize">True</property>
-                                    <property name="Expand">False</property>
-                                    <property name="Fill">False</property>
-                                  </packing>
-                                </child>
-                              </widget>
-                            </child>
-                          </widget>
-                        </child>
-                        <child>
-                          <widget class="Gtk.Label" id="GtkLabel20">
-                            <property name="MemberName" />
-                            <property name="LabelProp" translatable="yes">&lt;b&gt;Half 
field&lt;/b&gt;</property>
-                            <property name="UseMarkup">True</property>
-                          </widget>
-                          <packing>
-                            <property name="type">label_item</property>
-                          </packing>
-                        </child>
-                      </widget>
-                      <packing>
-                        <property name="Position">1</property>
-                        <property name="AutoSize">False</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <widget class="Gtk.Frame" id="frame10">
-                        <property name="MemberName" />
-                        <property name="ShadowType">None</property>
-                        <child>
-                          <widget class="Gtk.Alignment" id="GtkAlignment17">
-                            <property name="MemberName" />
-                            <property name="Xalign">0</property>
-                            <property name="Yalign">0</property>
-                            <property name="LeftPadding">12</property>
-                            <child>
-                              <widget class="Gtk.HBox" id="hbox8">
-                                <property name="MemberName" />
-                                <property name="Spacing">6</property>
-                                <child>
-                                  <widget class="Gtk.EventBox" id="goaleventbox">
-                                    <property name="MemberName" />
-                                    <child>
-                                      <widget class="Gtk.Image" id="goalimage">
-                                        <property name="MemberName" />
-                                      </widget>
-                                    </child>
-                                  </widget>
-                                  <packing>
-                                    <property name="Position">0</property>
-                                    <property name="AutoSize">False</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <widget class="Gtk.Button" id="resetfgoalbutton">
-                                    <property name="MemberName" />
-                                    <property name="CanFocus">True</property>
-                                    <property name="Type">TextAndIcon</property>
-                                    <property name="Icon">stock:gtk-refresh Menu</property>
-                                    <property name="Label" translatable="yes" />
-                                    <property name="UseUnderline">True</property>
-                                  </widget>
-                                  <packing>
-                                    <property name="Position">1</property>
-                                    <property name="AutoSize">True</property>
-                                    <property name="Expand">False</property>
-                                    <property name="Fill">False</property>
-                                  </packing>
-                                </child>
-                              </widget>
-                            </child>
-                          </widget>
-                        </child>
-                        <child>
-                          <widget class="Gtk.Label" id="GtkLabel22">
-                            <property name="MemberName" />
-                            <property name="LabelProp" translatable="yes">&lt;b&gt;Goal&lt;/b&gt;</property>
-                            <property name="UseMarkup">True</property>
-                          </widget>
-                          <packing>
-                            <property name="type">label_item</property>
-                          </packing>
-                        </child>
-                      </widget>
-                      <packing>
-                        <property name="Position">2</property>
-                        <property name="AutoSize">False</property>
-                      </packing>
-                    </child>
-                  </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="LongoMatch.Gui.Component.CategoryProperties" id="categoryproperties">
-                    <property name="MemberName" />
-                    <property name="Events">ButtonPressMask</property>
-                  </widget>
-                  <packing>
-                    <property name="Position">1</property>
-                    <property name="AutoSize">True</property>
-                  </packing>
-                </child>
-              </widget>
-              <packing>
-                <property name="Position">1</property>
-                <property name="AutoSize">True</property>
-                <property name="Expand">False</property>
-                <property name="Fill">False</property>
-              </packing>
-            </child>
-          </widget>
-          <packing>
-            <property name="Position">0</property>
-            <property name="AutoSize">True</property>
-          </packing>
-        </child>
-        <child>
-          <widget class="Gtk.HButtonBox" id="hbuttonbox2">
-            <property name="MemberName" />
-            <property name="Size">3</property>
-            <property name="LayoutStyle">Spread</property>
-            <child>
-              <widget class="Gtk.Button" id="savebutton">
-                <property name="MemberName" />
-                <property name="CanFocus">True</property>
-                <property name="Type">TextAndIcon</property>
-                <property name="Icon">stock:gtk-save Dialog</property>
-                <property name="Label" translatable="yes">Save template</property>
-                <property name="UseUnderline">True</property>
-              </widget>
-              <packing>
-                <property name="Expand">False</property>
-                <property name="Fill">False</property>
-              </packing>
-            </child>
-            <child>
-              <widget class="Gtk.Button" id="newbutton">
-                <property name="MemberName" />
-                <property name="CanFocus">True</property>
-                <property name="Type">TextAndIcon</property>
-                <property name="Icon">stock:gtk-add Dialog</property>
-                <property name="Label" translatable="yes">New category</property>
-                <property name="UseUnderline">True</property>
-              </widget>
-              <packing>
-                <property name="Position">1</property>
-                <property name="Expand">False</property>
-                <property name="Fill">False</property>
-              </packing>
-            </child>
-            <child>
-              <widget class="Gtk.Button" id="deletebutton">
-                <property name="MemberName" />
-                <property name="CanFocus">True</property>
-                <property name="Type">TextAndIcon</property>
-                <property name="Icon">stock:gtk-delete Dialog</property>
-                <property name="Label" translatable="yes">Delete category</property>
-                <property name="UseUnderline">True</property>
-              </widget>
-              <packing>
-                <property name="Position">2</property>
-                <property name="Expand">False</property>
-                <property name="Fill">False</property>
-              </packing>
-            </child>
-          </widget>
-          <packing>
-            <property name="Position">1</property>
-            <property name="AutoSize">False</property>
-            <property name="Expand">False</property>
-          </packing>
-        </child>
-      </widget>
-    </child>
-  </widget>
   <widget class="Gtk.Bin" id="LongoMatch.Gui.Panel.PreferencesPanel" design-size="663 352">
     <property name="MemberName" />
     <property name="Visible">False</property>
@@ -9485,7 +9653,7 @@ Click 2 players to swap them</property>
       </widget>
     </child>
   </widget>
-  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.CodingWidget" design-size="673 300">
+  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.CodingWidget" design-size="1305 494">
     <action-group name="Timeline">
       <action id="positionMode">
         <property name="Type">Radio</property>
@@ -9536,7 +9704,7 @@ Click 2 players to swap them</property>
     <property name="MemberName" />
     <property name="Visible">False</property>
     <child>
-      <widget class="Gtk.VBox" id="vbox2">
+      <widget class="Gtk.VBox" id="vbox">
         <property name="MemberName" />
         <property name="Spacing">6</property>
         <child>
@@ -9575,36 +9743,67 @@ Click 2 players to swap them</property>
           </packing>
         </child>
         <child>
-          <widget class="Gtk.HBox" id="hbox2">
+          <widget class="Gtk.Notebook" id="notebook">
             <property name="MemberName" />
-            <property name="Spacing">6</property>
+            <property name="CanFocus">True</property>
+            <property name="CurrentPage">2</property>
             <child>
-              <widget class="Gtk.DrawingArea" id="drawingarea1">
+              <widget class="Gtk.HPaned" id="hpaned1">
                 <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <property name="Position">276</property>
+                <child>
+                  <widget class="Gtk.DrawingArea" id="teamsdrawingarea">
+                    <property name="MemberName" />
+                  </widget>
+                  <packing>
+                    <property name="Resize">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.HBox" id="hbox5">
+                    <property name="MemberName" />
+                    <property name="Spacing">6</property>
+                    <child>
+                      <widget class="LongoMatch.Gui.Component.ButtonsWidget" id="buttonswidget">
+                        <property name="MemberName" />
+                        <property name="Events">ButtonPressMask</property>
+                        <property name="Edited">False</property>
+                      </widget>
+                      <packing>
+                        <property name="Position">0</property>
+                        <property name="AutoSize">True</property>
+                      </packing>
+                    </child>
+                  </widget>
+                </child>
+              </widget>
+            </child>
+            <child>
+              <widget class="Gtk.Label" id="label18">
+                <property name="MemberName" />
+                <property name="LabelProp" translatable="yes">page2</property>
               </widget>
               <packing>
-                <property name="Position">0</property>
-                <property name="AutoSize">True</property>
+                <property name="type">tab</property>
               </packing>
             </child>
             <child>
-              <widget class="LongoMatch.Gui.Component.ButtonsWidget" id="buttonswidget">
+              <widget class="LongoMatch.Gui.Component.Timeline" id="timeline">
                 <property name="MemberName" />
                 <property name="Events">ButtonPressMask</property>
               </widget>
               <packing>
                 <property name="Position">1</property>
-                <property name="AutoSize">True</property>
               </packing>
             </child>
             <child>
-              <widget class="LongoMatch.Gui.Component.Timeline" id="timeline">
+              <widget class="Gtk.Label" id="label21">
                 <property name="MemberName" />
-                <property name="Events">ButtonPressMask</property>
+                <property name="LabelProp" translatable="yes">page1</property>
               </widget>
               <packing>
-                <property name="Position">2</property>
-                <property name="AutoSize">True</property>
+                <property name="type">tab</property>
               </packing>
             </child>
             <child>
@@ -9613,8 +9812,16 @@ Click 2 players to swap them</property>
                 <property name="Events">ButtonPressMask</property>
               </widget>
               <packing>
-                <property name="Position">3</property>
-                <property name="AutoSize">True</property>
+                <property name="Position">2</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.Label" id="label19">
+                <property name="MemberName" />
+                <property name="LabelProp" translatable="yes">page3</property>
+              </widget>
+              <packing>
+                <property name="type">tab</property>
               </packing>
             </child>
           </widget>
diff --git a/LongoMatch.GUI/gtk-gui/objects.xml b/LongoMatch.GUI/gtk-gui/objects.xml
index e87fe76..61a8a55 100644
--- a/LongoMatch.GUI/gtk-gui/objects.xml
+++ b/LongoMatch.GUI/gtk-gui/objects.xml
@@ -4,13 +4,14 @@
     <signals />
   </object>
   <object type="LongoMatch.Gui.Component.ButtonsWidget" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
-    <itemgroups />
+    <itemgroups>
+      <itemgroup label="ButtonsWidget Properties">
+        <property name="Edited" />
+      </itemgroup>
+    </itemgroups>
     <signals>
       <itemgroup label="ButtonsWidget Signals">
         <signal name="NewTagEvent" />
-        <signal name="NewTagStartEvent" />
-        <signal name="NewTagStopEvent" />
-        <signal name="NewTagCancelEvent" />
       </itemgroup>
     </signals>
   </object>
@@ -60,10 +61,15 @@
     </signals>
   </object>
   <object type="LongoMatch.Gui.Component.CategoryProperties" palette-category="General" 
allow-children="false" base-type="Gtk.Bin">
-    <itemgroups />
+    <itemgroups>
+      <itemgroup label="CategoryProperties Properties">
+        <property name="Edited" />
+      </itemgroup>
+    </itemgroups>
     <signals>
       <itemgroup label="CategoryProperties Signals">
         <signal name="HotKeyChanged" />
+        <signal name="EditedEvent" />
       </itemgroup>
     </signals>
   </object>
@@ -163,17 +169,6 @@
     <itemgroups />
     <signals />
   </object>
-  <object type="LongoMatch.Gui.Component.ButtonTagger" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
-    <itemgroups />
-    <signals>
-      <itemgroup label="ButtonTagger Signals">
-        <signal name="NewTag" />
-        <signal name="NewTagStart" />
-        <signal name="NewTagStop" />
-        <signal name="NewTagCancel" />
-      </itemgroup>
-    </signals>
-  </object>
   <object type="LongoMatch.Gui.Component.AnalysisComponent" palette-category="General" 
allow-children="false" base-type="Gtk.Bin">
     <itemgroups />
     <signals />
@@ -238,14 +233,6 @@
       </itemgroup>
     </signals>
   </object>
-  <object type="LongoMatch.Gui.Component.AnalysisTemplateEditor" palette-category="General" 
allow-children="false" base-type="Gtk.Bin">
-    <itemgroups>
-      <itemgroup label="AnalysisTemplateEditor Properties">
-        <property name="Edited" />
-      </itemgroup>
-    </itemgroups>
-    <signals />
-  </object>
   <object type="LongoMatch.Gui.Panel.PreferencesPanel" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
     <itemgroups />
     <signals>
@@ -296,10 +283,6 @@
     <itemgroups />
     <signals />
   </object>
-  <object type="LongoMatch.Gui.SubCategoriesTreeView" palette-category="General" allow-children="false" 
base-type="Gtk.TreeView">
-    <itemgroups />
-    <signals />
-  </object>
   <object type="LongoMatch.Gui.CapturerBin" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
     <itemgroups>
       <itemgroup label="CapturerBin Properties">
diff --git a/LongoMatch.Migration/Makefile.am b/LongoMatch.Migration/Makefile.am
index 617c0a1..b80b6fc 100644
--- a/LongoMatch.Migration/Makefile.am
+++ b/LongoMatch.Migration/Makefile.am
@@ -45,9 +45,15 @@ SOURCES = Common/Color.cs \
        MainWindow.cs \
        Program.cs \
        Properties/AssemblyInfo.cs \
+       Tests/CateogiresTest.cs \
+       Tests/TestProject.cs \
+       Tests/TestTeam.cs \
        gtk-gui/MainWindow.cs \
        gtk-gui/generated.cs
 
-RESOURCES = gtk-gui/gui.stetic
+RESOURCES = gtk-gui/gui.stetic \
+       Data/default.lct \
+       Data/default.ltt \
+       Data/project.lgm
 
 include $(top_srcdir)/build/build.mk
diff --git a/LongoMatch.Multimedia/LongoMatch.Multimedia.mdp b/LongoMatch.Multimedia/LongoMatch.Multimedia.mdp
index 099466a..4e9da09 100644
--- a/LongoMatch.Multimedia/LongoMatch.Multimedia.mdp
+++ b/LongoMatch.Multimedia/LongoMatch.Multimedia.mdp
@@ -65,4 +65,4 @@
     <ProjectReference type="Package" specificVersion="False" localcopy="False" refto="System.Core, 
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
     <ProjectReference type="Package" localcopy="False" refto="gdk-sharp, Version=2.12.0.0, Culture=neutral, 
PublicKeyToken=35e10195dab3c99f" />
   </References>
-</Project>
+</Project>
\ No newline at end of file
diff --git a/LongoMatch.Services/Services/EventsManager.cs b/LongoMatch.Services/Services/EventsManager.cs
index dba16c1..d8de06a 100644
--- a/LongoMatch.Services/Services/EventsManager.cs
+++ b/LongoMatch.Services/Services/EventsManager.cs
@@ -28,6 +28,7 @@ using LongoMatch.Store;
 using Mono.Unix;
 using System.IO;
 using LongoMatch.Stats;
+using LongoMatch.Interfaces.Multimedia;
 
 namespace LongoMatch.Services
 {
@@ -40,19 +41,19 @@ namespace LongoMatch.Services
                Project openedProject;
                ProjectType projectType;
                PlaysFilter filter;
-               Dictionary<Category, Time> catsTime;
                
                IGUIToolkit guiToolkit;
                IAnalysisWindow analysisWindow;
                IPlayerBin player;
                ICapturerBin capturer;
+               IFramesCapturer framesCapturer;
                IRenderingJobsManager renderer;
 
                public EventsManager(IGUIToolkit guiToolkit, IRenderingJobsManager renderer)
                {
                        this.guiToolkit = guiToolkit;
                        this.renderer = renderer;
-                       catsTime = new Dictionary<Category, Time>();
+                       framesCapturer = Config.MultimediaToolkit.GetFramesCapturer ();
                        ConnectSignals ();
                }
 
@@ -62,11 +63,11 @@ namespace LongoMatch.Services
                        this.openedProject = project;
                        this.projectType = projectType;
                        this.filter = filter;
-                       catsTime.Clear ();
                        
                        if (project == null)
                                return;
                                
+                       framesCapturer.Open (openedProject.Description.File.FilePath);
                        this.analysisWindow = analysisWindow;
                        player = analysisWindow.Player;
                        capturer = analysisWindow.Capturer;
@@ -80,10 +81,6 @@ namespace LongoMatch.Services
                
                private void ConnectSignals() {
                        Config.EventsBroker.NewTagEvent += OnNewTag;
-                       Config.EventsBroker.NewTagStartEvent += OnNewPlayStart;
-                       Config.EventsBroker.NewTagStopEvent += OnNewPlayStop;
-                       Config.EventsBroker.NewTagCancelEvent += OnNewPlayCancel;
-                       Config.EventsBroker.NewTagAtPosEvent += OnNewTagAtPos;
                        Config.EventsBroker.TimeNodeChanged += OnTimeNodeChanged;
                        Config.EventsBroker.PlaysDeleted += OnPlaysDeleted;
                        Config.EventsBroker.PlaySelected += OnPlaySelected;
@@ -156,57 +153,34 @@ namespace LongoMatch.Services
                        }
                }
                
-               private void ProcessNewTag(Category category,Time pos, List<Player> players) {
-                       Time length, startTime, stopTime, start, stop, fStart, fStop;
+               private Image CaptureFrame (Time tagtime) {
+                       Image frame = null;
 
-                       if(player == null || openedProject == null)
-                               return;
-
-                       /* Get the default lead and lag time for the category */
-                       startTime = category.Start;
-                       stopTime = category.Stop;
-                       /* Calculate boundaries of the segment */
-                       start = pos - startTime;
-                       stop = pos + stopTime;
-                       fStart = (start < new Time {MSeconds =0}) ? new Time {MSeconds = 0} : start;
-
-                       if(projectType == ProjectType.FakeCaptureProject ||
-                          projectType == ProjectType.CaptureProject ||
+                       /* Get the current frame and get a thumbnail from it */
+                       if(projectType == ProjectType.CaptureProject ||
                           projectType == ProjectType.URICaptureProject) {
-                               fStop = stop;
-                       } else {
-                               length = player.StreamLength;
-                               fStop = (stop > length) ? length: stop;
+                               frame = capturer.CurrentMiniatureFrame;
+                       } else if(projectType == ProjectType.FileProject) {
+                               framesCapturer.Seek (tagtime, true);
+                               frame = player.CurrentMiniatureFrame;
                        }
-                       AddNewPlay(fStart, fStop, category, players);
+                       return frame;
                }
-
-               private void AddNewPlay(Time start, Time stop, Category category, List<Player> players) {
-                       Image miniature;
-
+               
+               private void AddNewPlay (Category category, Time start, Time stop, List<Player> players,
+                                        List<Tag> tags, Image miniature) {
                        Log.Debug(String.Format("New play created start:{0} stop:{1} category:{2}",
                                                                        start, stop, category));
-                       /* Get the current frame and get a thumbnail from it */
-                       if(projectType == ProjectType.CaptureProject || projectType == 
ProjectType.URICaptureProject) {
-                               if(!capturer.Capturing) {
-                                       guiToolkit.InfoMessage(Catalog.GetString("You can't create a new play 
if the capturer "+
-                                               "is not recording."));
-                                       return;
-                               }
-                               miniature = capturer.CurrentMiniatureFrame;
-                       }
-                       else if(projectType == ProjectType.FileProject) {
-                               miniature = player.CurrentMiniatureFrame;
-                               player.Pause();
-                       }
-                       else
-                               miniature = null;
                        
                        /* Add the new created play to the project and update the GUI*/
-                       var play = openedProject.AddPlay(category, start, stop,miniature);
+                       var play = openedProject.AddPlay (category, start, stop,miniature);
                        if (players != null) {
                                play.Players = players;
                        }
+                       if (tags != null) {
+                               play.Tags = tags;
+                       }
+
                        /* Tag subcategories of the new play */
                        if (!Config.FastTagging)
                                guiToolkit.TagPlay (play, openedProject);
@@ -225,71 +199,28 @@ namespace LongoMatch.Services
                        }
                }
 
-               void OnNewTagAtPos (Category category, Time pos) {
-                       if (openedProject == null)
-                               return;
-
-                       player.CloseSegment();
-                       player.Seek (pos, true);
-                       ProcessNewTag(category,pos, null);
-               }
+               public void OnNewTag (TaggerButton tagger, List<Player> players, List<Tag> tags,
+                                     Time start, Time stop) {
+                       Image frame;
 
-               public void OnNewTag(Category category, List<Player> players) {
-                       Time pos;
-                       
-                       if (openedProject == null)
+                       if (player == null || openedProject == null)
                                return;
-
-                       if(projectType == ProjectType.FakeCaptureProject ||
-                          projectType == ProjectType.CaptureProject ||
-                          projectType == ProjectType.URICaptureProject) {
-                               pos =  capturer.CurrentTime;
-                       } else {
-                               pos = player.CurrentTime;
-                       }
-                       ProcessNewTag(category,pos, players);
-               }
-
-               void OnNewPlayStart (Category category) {
-                       Time startTime = player.CurrentTime;
-                       catsTime.Add (category, startTime);
-                       Log.Debug("New play start time: " + startTime);
-               }
-               
-               void OnNewPlayStop(Category category) {
-                       int diff;
-                       Time startTime, stopTime;
                        
-                       if (!catsTime.ContainsKey (category)) {
-                               Log.Error ("Can't add new play, no start time for this play");
-                               return;
-                       }
-                       startTime = catsTime[category];
-                       catsTime.Remove (category);
-                       stopTime = player.CurrentTime;
-
-                       Log.Debug("New play stop time: " + stopTime);
-                       diff = stopTime.MSeconds - startTime.MSeconds;
-
-                       if(diff < 0) {
-                               guiToolkit.WarningMessage(Catalog.GetString("The stop time is smaller than 
the start time. "+
-                                       "The play will not be added."));
-                               return;
+                       start.MSeconds = Math.Max (0, start.MSeconds);
+                       if (projectType == ProjectType.FileProject) {
+                               stop.MSeconds = Math.Min (player.StreamLength.MSeconds, stop.MSeconds);
                        }
-                       if(diff < 500) {
-                               int correction = 500 - diff;
-                               if(startTime.MSeconds - correction > 0)
-                                       startTime = startTime - correction;
-                               else
-                                       stopTime = stopTime + correction;
+                       
+                       if(projectType == ProjectType.CaptureProject ||
+                          projectType == ProjectType.URICaptureProject) {
+                               if(!capturer.Capturing) {
+                                       guiToolkit.WarningMessage (Catalog.GetString("Video capture is 
stopped"));
+                                       return;
+                               }
                        }
-                       AddNewPlay(startTime, stopTime, category, null);
-               }
-               
-               void OnNewPlayCancel (Category category) {
-                       try {
-                               catsTime.Remove (category);
-                       } catch {
+                       frame = CaptureFrame (start);
+                       if (tagger is Category) {
+                               AddNewPlay (tagger as Category, start, stop, players, tags, frame);
                        }
                }
 
diff --git a/LongoMatch.Services/Services/HotKeysManager.cs b/LongoMatch.Services/Services/HotKeysManager.cs
index b1a7ba3..e91fc4d 100644
--- a/LongoMatch.Services/Services/HotKeysManager.cs
+++ b/LongoMatch.Services/Services/HotKeysManager.cs
@@ -58,7 +58,7 @@ namespace LongoMatch.Services
                        
                        dic.Clear();
                        ignoreKeys = false;
-                       foreach(Category cat in project.Categories.List) {
+                       foreach(Category cat in project.Categories.CategoriesList) {
                                if(cat.HotKey.Defined &&
                                   !dic.ContainsKey(cat.HotKey))
                                        dic.Add(cat.HotKey, cat);
diff --git a/LongoMatch.Services/Services/TemplatesService.cs 
b/LongoMatch.Services/Services/TemplatesService.cs
index cdbdf4f..2df2ef7 100644
--- a/LongoMatch.Services/Services/TemplatesService.cs
+++ b/LongoMatch.Services/Services/TemplatesService.cs
@@ -194,7 +194,7 @@ namespace LongoMatch.Services
                 
        } 
        
-       public class CategoriesTemplatesProvider : TemplatesProvider<Categories, Category>, 
ICategoriesTemplatesProvider
+       public class CategoriesTemplatesProvider : TemplatesProvider<Categories, TaggerButton>, 
ICategoriesTemplatesProvider
        {
                public CategoriesTemplatesProvider (string basePath): base (basePath, 
Constants.CAT_TEMPLATE_EXT) {}
                 
diff --git a/LongoMatch.mds b/LongoMatch.mds
index b449cb2..230b42c 100644
--- a/LongoMatch.mds
+++ b/LongoMatch.mds
@@ -34,6 +34,7 @@
       <Entry build="True" name="LongoMatch.Drawing" configuration="Debug" />
       <Entry build="True" name="LongoMatch.Drawing.Cairo" configuration="Debug" />
       <Entry build="True" name="LongoMatch.Migration" configuration="Debug" />
+      <Entry build="True" name="OneplayLongomatch" configuration="Debug" />
     </Configuration>
     <Configuration name="Release" ctype="CombineConfiguration">
       <Entry build="True" name="LongoMatch.GUI" configuration="Release" />
@@ -51,6 +52,7 @@
       <Entry build="True" name="LongoMatch.Drawing" configuration="Release" />
       <Entry build="True" name="LongoMatch.Drawing.Cairo" configuration="Release" />
       <Entry build="True" name="LongoMatch.Migration" configuration="Release" />
+      <Entry build="True" name="OneplayLongomatch" configuration="Release" />
     </Configuration>
   </Configurations>
   <StartMode startupentry="LongoMatchGtk" single="True">
@@ -69,6 +71,7 @@
     <Execute type="None" entry="LongoMatch.Drawing" />
     <Execute type="None" entry="LongoMatch.Drawing.Cairo" />
     <Execute type="None" entry="LongoMatch.Migration" />
+    <Execute type="None" entry="OneplayLongomatch" />
   </StartMode>
   <Entries>
     <Entry filename="LongoMatch.GUI/LongoMatch.GUI.mdp" />
diff --git a/Tests/Core/TestCategoriesTemplate.cs b/Tests/Core/TestCategoriesTemplate.cs
index 72b4ecc..58f39e6 100644
--- a/Tests/Core/TestCategoriesTemplate.cs
+++ b/Tests/Core/TestCategoriesTemplate.cs
@@ -51,9 +51,9 @@ namespace Tests.Core
                        Assert.AreEqual (cat.GamePeriods[0], newcat.GamePeriods[0]);
                        Assert.AreEqual (cat.GamePeriods[1], newcat.GamePeriods[1]);
                        Assert.AreEqual (cat.List.Count, newcat.List.Count);
-                       Assert.AreEqual (cat.List[0].ID, newcat.List[0].ID);
-                       Assert.AreEqual (cat.List[1].ID, newcat.List[1].ID);
-                       Assert.AreEqual (cat.List[2].ID, newcat.List[2].ID);
+                       Assert.AreEqual (cat.CategoriesList[0].ID, newcat.CategoriesList[0].ID);
+                       Assert.AreEqual (cat.CategoriesList[1].ID, newcat.CategoriesList[1].ID);
+                       Assert.AreEqual (cat.CategoriesList[2].ID, newcat.CategoriesList[2].ID);
                }
        }
 }
diff --git a/Tests/Core/TestCategory.cs b/Tests/Core/TestCategory.cs
index 8e8bb1d..7886cf1 100644
--- a/Tests/Core/TestCategory.cs
+++ b/Tests/Core/TestCategory.cs
@@ -41,7 +41,6 @@ namespace Tests.Core
                        cat.Color = new Color (255, 0, 0);
                        cat.HotKey = new HotKey {Key=2, Modifier=4};
                        cat.Name = "test";
-                       cat.Position = 2;
                        cat.SortMethod = SortMethodType.SortByDuration;
                        cat.Start = new Time (3000);
                        cat.Stop = new Time (4000);
diff --git a/Tests/Core/TestPlaysFilter.cs b/Tests/Core/TestPlaysFilter.cs
index 61bfb1c..a20f6b1 100644
--- a/Tests/Core/TestPlaysFilter.cs
+++ b/Tests/Core/TestPlaysFilter.cs
@@ -40,15 +40,15 @@ namespace Tests.Core
                        p.Description = pd;
                        
                        /* No tags, no players */
-                       pl = new Play {Category = p.Categories.List[0]};
+                       pl = new Play {Category = p.Categories.CategoriesList[0]};
                        p.Timeline.Add (pl);
                        /* tags, but no players */
-                       pl = new Play {Category = p.Categories.List[1]};
-                       pl.Tags.Add (p.Categories.List[1].Tags[0]);
+                       pl = new Play {Category = p.Categories.CategoriesList[1]};
+                       pl.Tags.Add (p.Categories.CategoriesList[1].Tags[0]);
                        p.Timeline.Add (pl);
                        /* tags and players */
-                       pl = new Play {Category = p.Categories.List[2]};
-                       pl.Tags.Add (p.Categories.List[2].Tags[1]);
+                       pl = new Play {Category = p.Categories.CategoriesList[2]};
+                       pl.Tags.Add (p.Categories.CategoriesList[2].Tags[1]);
                        pl.Players.Add (p.LocalTeamTemplate.List[0]);
                        p.Timeline.Add (pl);
                        return p;
@@ -71,31 +71,31 @@ namespace Tests.Core
                        Project p = CreateProject ();
                        PlaysFilter filter = new PlaysFilter (p);
                        
-                       filter.FilterCategory (p.Categories.List[0], true);
+                       filter.FilterCategory (p.Categories.CategoriesList[0], true);
                        Assert.AreEqual (1, filter.VisibleCategories.Count);
                        Assert.AreEqual (1, filter.VisiblePlays.Count);
                        
-                       filter.FilterCategory (p.Categories.List[1], true);
+                       filter.FilterCategory (p.Categories.CategoriesList[1], true);
                        Assert.AreEqual (2, filter.VisibleCategories.Count);
                        Assert.AreEqual (2, filter.VisiblePlays.Count);
 
-                       filter.FilterCategory (p.Categories.List[2], true);
+                       filter.FilterCategory (p.Categories.CategoriesList[2], true);
                        Assert.AreEqual (3, filter.VisibleCategories.Count);
                        Assert.AreEqual (3, filter.VisiblePlays.Count);
                        
-                       filter.FilterCategory (p.Categories.List[0], true);
+                       filter.FilterCategory (p.Categories.CategoriesList[0], true);
                        Assert.AreEqual (3, filter.VisibleCategories.Count);
                        Assert.AreEqual (3, filter.VisiblePlays.Count);
                        
-                       filter.FilterCategory (p.Categories.List[0], false);
+                       filter.FilterCategory (p.Categories.CategoriesList[0], false);
                        Assert.AreEqual (2, filter.VisibleCategories.Count);
                        Assert.AreEqual (2, filter.VisiblePlays.Count);
 
-                       filter.FilterCategory (p.Categories.List[1], false);
+                       filter.FilterCategory (p.Categories.CategoriesList[1], false);
                        Assert.AreEqual (1, filter.VisibleCategories.Count);
                        Assert.AreEqual (1, filter.VisiblePlays.Count);
                        
-                       filter.FilterCategory (p.Categories.List[2], false);
+                       filter.FilterCategory (p.Categories.CategoriesList[2], false);
                        Assert.AreEqual (10, filter.VisibleCategories.Count);
                        Assert.AreEqual (3, filter.VisiblePlays.Count);
                }
@@ -108,36 +108,36 @@ namespace Tests.Core
                        
                        Assert.AreEqual (3, filter.VisiblePlays.Count);
                        
-                       filter.FilterCategoryTag (p.Categories.List[0], p.Categories.List[0].Tags[0], true);
+                       filter.FilterCategoryTag (p.Categories.CategoriesList[0], 
p.Categories.CategoriesList[0].Tags[0], true);
                        Assert.AreEqual (1, filter.VisibleCategories.Count);
                        Assert.AreEqual (0, filter.VisiblePlays.Count);
 
-                       filter.FilterCategoryTag (p.Categories.List[1], p.Categories.List[1].Tags[0], true);
+                       filter.FilterCategoryTag (p.Categories.CategoriesList[1], 
p.Categories.CategoriesList[1].Tags[0], true);
                        Assert.AreEqual (2, filter.VisibleCategories.Count);
                        Assert.AreEqual (1, filter.VisiblePlays.Count);
                        
-                       filter.FilterCategoryTag (p.Categories.List[2], p.Categories.List[2].Tags[0], true);
+                       filter.FilterCategoryTag (p.Categories.CategoriesList[2], 
p.Categories.CategoriesList[2].Tags[0], true);
                        Assert.AreEqual (3, filter.VisibleCategories.Count);
                        Assert.AreEqual (1, filter.VisiblePlays.Count);
 
-                       filter.FilterCategoryTag (p.Categories.List[2], p.Categories.List[2].Tags[1], true);
+                       filter.FilterCategoryTag (p.Categories.CategoriesList[2], 
p.Categories.CategoriesList[2].Tags[1], true);
                        Assert.AreEqual (2, filter.VisiblePlays.Count);
                        
-                       filter.FilterCategoryTag (p.Categories.List[0], p.Categories.List[0].Tags[0], false);
+                       filter.FilterCategoryTag (p.Categories.CategoriesList[0], 
p.Categories.CategoriesList[0].Tags[0], false);
                        Assert.AreEqual (3, filter.VisiblePlays.Count);
                        
-                       filter.FilterCategoryTag (p.Categories.List[1], p.Categories.List[1].Tags[0], false);
-                       filter.FilterCategoryTag (p.Categories.List[1], p.Categories.List[1].Tags[1], true);
+                       filter.FilterCategoryTag (p.Categories.CategoriesList[1], 
p.Categories.CategoriesList[1].Tags[0], false);
+                       filter.FilterCategoryTag (p.Categories.CategoriesList[1], 
p.Categories.CategoriesList[1].Tags[1], true);
                        Assert.AreEqual (2, filter.VisiblePlays.Count);
                        Assert.AreEqual (p.Timeline[0], filter.VisiblePlays[0]);
                        Assert.AreEqual (p.Timeline[2], filter.VisiblePlays[1]);
                        
                        /* One tag filtered now, but not the one of this play */
-                       filter.FilterCategoryTag (p.Categories.List[2], p.Categories.List[2].Tags[1], false);
+                       filter.FilterCategoryTag (p.Categories.CategoriesList[2], 
p.Categories.CategoriesList[2].Tags[1], false);
                        Assert.AreEqual (1, filter.VisiblePlays.Count);
                        Assert.AreEqual (p.Timeline[0], filter.VisiblePlays[0]);
                        /* No more tags filtered, if the category matches we are ok */
-                       filter.FilterCategoryTag (p.Categories.List[2], p.Categories.List[2].Tags[0], false);
+                       filter.FilterCategoryTag (p.Categories.CategoriesList[2], 
p.Categories.CategoriesList[2].Tags[0], false);
                        Assert.AreEqual (2, filter.VisiblePlays.Count);
                        Assert.AreEqual (p.Timeline[0], filter.VisiblePlays[0]);
                        Assert.AreEqual (p.Timeline[2], filter.VisiblePlays[1]);
@@ -184,14 +184,14 @@ namespace Tests.Core
                        Assert.AreEqual (3, filter.VisiblePlays.Count);
                        Assert.AreEqual (10, filter.VisiblePlayers.Count);
                        
-                       filter.FilterCategory (p.Categories.List[0], true);
+                       filter.FilterCategory (p.Categories.CategoriesList[0], true);
                        Assert.AreEqual (1, filter.VisiblePlays.Count);
                        Assert.AreEqual (1, filter.VisibleCategories.Count);
                        filter.ClearCategoriesFilter ();
                        Assert.AreEqual (3, filter.VisiblePlays.Count);
                        Assert.AreEqual (10, filter.VisibleCategories.Count);
                        
-                       filter.FilterCategoryTag (p.Categories.List[0], p.Categories.List[0].Tags[0], true);
+                       filter.FilterCategoryTag (p.Categories.CategoriesList[0], 
p.Categories.CategoriesList[0].Tags[0], true);
                        Assert.AreEqual (0, filter.VisiblePlays.Count);
                        Assert.AreEqual (1, filter.VisibleCategories.Count);
                        filter.ClearAll ();
diff --git a/Tests/Core/TestProject.cs b/Tests/Core/TestProject.cs
index 51040c9..3f0ecbf 100644
--- a/Tests/Core/TestProject.cs
+++ b/Tests/Core/TestProject.cs
@@ -64,30 +64,30 @@ namespace Tests.Core
                [Test ()]
                public void TestPlaysGrouping () {
                        Project p = CreateProject ();
-                       p.AddPlay (p.Categories.List[0], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories.List[0], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories.List[1], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories.List[2], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories.List[2], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories.List[2], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories.List[6], new Time (1000), new Time (2000), null);
+                       p.AddPlay (p.Categories.CategoriesList[0], new Time (1000), new Time (2000), null);
+                       p.AddPlay (p.Categories.CategoriesList[0], new Time (1000), new Time (2000), null);
+                       p.AddPlay (p.Categories.CategoriesList[1], new Time (1000), new Time (2000), null);
+                       p.AddPlay (p.Categories.CategoriesList[2], new Time (1000), new Time (2000), null);
+                       p.AddPlay (p.Categories.CategoriesList[2], new Time (1000), new Time (2000), null);
+                       p.AddPlay (p.Categories.CategoriesList[2], new Time (1000), new Time (2000), null);
+                       p.AddPlay (p.Categories.CategoriesList[6], new Time (1000), new Time (2000), null);
                        
                        IEnumerable<IGrouping<Category, Play>> g = p.PlaysGroupedByCategory;
                        Assert.AreEqual (g.Count(), 4);
                        IGrouping<Category, Play> gr = g.ElementAt (0);
-                       Assert.AreEqual (gr.Key, p.Categories.List[0]);
+                       Assert.AreEqual (gr.Key, p.Categories.CategoriesList[0]);
                        Assert.AreEqual (gr.Count(), 2);
                        
                        gr = g.ElementAt (1);
-                       Assert.AreEqual (gr.Key, p.Categories.List[1]);
+                       Assert.AreEqual (gr.Key, p.Categories.CategoriesList[1]);
                        Assert.AreEqual (gr.Count(), 1);
                        
                        gr = g.ElementAt (2);
-                       Assert.AreEqual (gr.Key, p.Categories.List[2]);
+                       Assert.AreEqual (gr.Key, p.Categories.CategoriesList[2]);
                        Assert.AreEqual (gr.Count(), 3);
                        
                        gr = g.ElementAt (3);
-                       Assert.AreEqual (gr.Key, p.Categories.List[6]);
+                       Assert.AreEqual (gr.Key, p.Categories.CategoriesList[6]);
                        Assert.AreEqual (gr.Count(), 1);
                }
                
@@ -99,9 +99,9 @@ namespace Tests.Core
                [Test ()]
                public void TestAddPlay () {
                        Project p = CreateProject ();
-                       p.AddPlay (p.Categories.List[0], new Time (1000), new Time (2000), null);
+                       p.AddPlay (p.Categories.CategoriesList[0], new Time (1000), new Time (2000), null);
                        Assert.AreEqual (p.Timeline.Count, 1);
-                       p.AddPlay (p.Categories.List[0], new Time (1000), new Time (2000), null);
+                       p.AddPlay (p.Categories.CategoriesList[0], new Time (1000), new Time (2000), null);
                        Assert.AreEqual (p.Timeline.Count, 2);
                        p.AddPlay (new Play());
                        Assert.AreEqual (p.Timeline.Count, 3);
@@ -131,24 +131,24 @@ namespace Tests.Core
                [Test ()] 
                public void TestRemoveCategory () {
                        Project p = CreateProject ();
-                       p.AddPlay (p.Categories.List[0], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories.List[0], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories.List[0], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories.List[2], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories.List[3], new Time (1000), new Time (2000), null);
-                       p.RemoveCategory(p.Categories.List[0]);
+                       p.AddPlay (p.Categories.CategoriesList[0], new Time (1000), new Time (2000), null);
+                       p.AddPlay (p.Categories.CategoriesList[0], new Time (1000), new Time (2000), null);
+                       p.AddPlay (p.Categories.CategoriesList[0], new Time (1000), new Time (2000), null);
+                       p.AddPlay (p.Categories.CategoriesList[2], new Time (1000), new Time (2000), null);
+                       p.AddPlay (p.Categories.CategoriesList[3], new Time (1000), new Time (2000), null);
+                       p.RemoveCategory(p.Categories.CategoriesList[0]);
                        Assert.AreEqual(p.Timeline.Count, 2);
-                       Assert.AreEqual(p.Categories.List.Count, 9);
-                       p.RemoveCategory(p.Categories.List[0]);
-                       p.RemoveCategory(p.Categories.List[0]);
-                       p.RemoveCategory(p.Categories.List[0]);
-                       p.RemoveCategory(p.Categories.List[0]);
-                       p.RemoveCategory(p.Categories.List[0]);
-                       p.RemoveCategory(p.Categories.List[0]);
-                       p.RemoveCategory(p.Categories.List[0]);
-                       p.RemoveCategory(p.Categories.List[0]);
+                       Assert.AreEqual(p.Categories.CategoriesList.Count, 9);
+                       p.RemoveCategory(p.Categories.CategoriesList[0]);
+                       p.RemoveCategory(p.Categories.CategoriesList[0]);
+                       p.RemoveCategory(p.Categories.CategoriesList[0]);
+                       p.RemoveCategory(p.Categories.CategoriesList[0]);
+                       p.RemoveCategory(p.Categories.CategoriesList[0]);
+                       p.RemoveCategory(p.Categories.CategoriesList[0]);
+                       p.RemoveCategory(p.Categories.CategoriesList[0]);
+                       p.RemoveCategory(p.Categories.CategoriesList[0]);
                        Assert.Throws<Exception>(
-                               delegate {p.RemoveCategory(p.Categories.List[0]);});
+                               delegate {p.RemoveCategory(p.Categories.CategoriesList[0]);});
                }
                
                [Test ()] 
@@ -171,15 +171,15 @@ namespace Tests.Core
                [Test ()] 
                public void TestPlaysInCategory () {
                        Project p = CreateProject ();
-                       p.AddPlay (p.Categories.List[0], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories.List[0], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories.List[0], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories.List[2], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories.List[3], new Time (1000), new Time (2000), null);
-                       Assert.AreEqual (p.PlaysInCategory (p.Categories.List[0]).Count, 3);
-                       Assert.AreEqual (p.PlaysInCategory (p.Categories.List[1]).Count, 0);
-                       Assert.AreEqual (p.PlaysInCategory (p.Categories.List[2]).Count, 1);
-                       Assert.AreEqual (p.PlaysInCategory (p.Categories.List[3]).Count, 1);
+                       p.AddPlay (p.Categories.CategoriesList[0], new Time (1000), new Time (2000), null);
+                       p.AddPlay (p.Categories.CategoriesList[0], new Time (1000), new Time (2000), null);
+                       p.AddPlay (p.Categories.CategoriesList[0], new Time (1000), new Time (2000), null);
+                       p.AddPlay (p.Categories.CategoriesList[2], new Time (1000), new Time (2000), null);
+                       p.AddPlay (p.Categories.CategoriesList[3], new Time (1000), new Time (2000), null);
+                       Assert.AreEqual (p.PlaysInCategory (p.Categories.CategoriesList[0]).Count, 3);
+                       Assert.AreEqual (p.PlaysInCategory (p.Categories.CategoriesList[1]).Count, 0);
+                       Assert.AreEqual (p.PlaysInCategory (p.Categories.CategoriesList[2]).Count, 1);
+                       Assert.AreEqual (p.PlaysInCategory (p.Categories.CategoriesList[3]).Count, 1);
                }
 
                [Test ()] 


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