[longomatch] Refactor data model and add a migration tool for the old db



commit 8cff0e503953b7e211ab5a9b42f403e9c9ead057
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date:   Tue Jun 10 11:20:11 2014 +0200

    Refactor data model and add a migration tool for the old db

 LongoMatch.Addins/LongoMatch.Addins.mdp            |    2 +-
 LongoMatch.Core/Common/Cloner.cs                   |    4 +-
 LongoMatch.Core/Common/Color.cs                    |    2 +
 LongoMatch.Core/Common/Image.cs                    |    4 +-
 LongoMatch.Core/Common/PlayList.cs                 |    4 +-
 LongoMatch.Core/Common/PlaysFilter.cs              |   24 +-
 LongoMatch.Core/Common/Serializer.cs               |  240 +
 LongoMatch.Core/Config.cs                          |   19 +-
 LongoMatch.Core/Handlers/Handlers.cs               |   12 +-
 .../{Store/GameUnit.cs => Interfaces/IIDObject.cs} |   34 +-
 LongoMatch.Core/Interfaces/ITag.cs                 |    2 +-
 LongoMatch.Core/Interfaces/ITemplates.cs           |   17 +-
 LongoMatch.Core/Interfaces/ITemplatesService.cs    |    6 -
 LongoMatch.Core/Interfaces/ITimelineNode.cs        |    6 -
 LongoMatch.Core/LongoMatch.Core.mdp                |   13 +-
 LongoMatch.Core/Stats/GameUnitStats.cs             |  121 -
 LongoMatch.Core/Stats/GameUnitsStats.cs            |   94 -
 LongoMatch.Core/Stats/ProjectStats.cs              |  113 +-
 LongoMatch.Core/Stats/SubCategoryStat.cs           |    6 +-
 LongoMatch.Core/Store/Category.cs                  |   82 +-
 LongoMatch.Core/Store/Coordinates.cs               |   23 +-
 LongoMatch.Core/Store/Drawing.cs                   |   31 +-
 LongoMatch.Core/Store/HotKey.cs                    |   56 +-
 LongoMatch.Core/Store/MediaFile.cs                 |  162 +-
 LongoMatch.Core/Store/Period.cs                    |    2 +
 LongoMatch.Core/Store/PixbufTimeNode.cs            |   24 +-
 LongoMatch.Core/Store/Play.cs                      |   92 +-
 LongoMatch.Core/Store/Player.cs                    |   37 +-
 LongoMatch.Core/Store/Point.cs                     |    2 +
 LongoMatch.Core/Store/Project.cs                   |   97 +-
 LongoMatch.Core/Store/ProjectDescription.cs        |   24 +-
 LongoMatch.Core/Store/SubCategory.cs               |  113 +-
 LongoMatch.Core/Store/Tag.cs                       |   78 +-
 LongoMatch.Core/Store/TagStore.cs                  |   65 +-
 .../Store/Templates/CategoriesTemplate.cs          |  107 +-
 LongoMatch.Core/Store/Templates/TeamTemplate.cs    |   54 +-
 LongoMatch.Core/Store/Time.cs                      |    2 +
 LongoMatch.Core/Utils.cs                           |    2 +-
 LongoMatch.Drawing/Widgets/CategoriesLabels.cs     |    2 +-
 LongoMatch.Drawing/Widgets/PlaysTimeline.cs        |    8 +-
 LongoMatch.Drawing/Widgets/TeamTagger.cs           |   18 +-
 LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs         |    6 +-
 .../gtk-gui/LongoMatch.Gui.CapturerBin.cs          |    2 +-
 .../gtk-gui/LongoMatch.Gui.PlayerBin.cs            |    3 +-
 .../gtk-gui/LongoMatch.Gui.PlayerCapturerBin.cs    |    2 +-
 .../gtk-gui/LongoMatch.Gui.VolumeWindow.cs         |    2 +-
 LongoMatch.GUI.Multimedia/gtk-gui/generated.cs     |   22 +-
 LongoMatch.GUI.Multimedia/gtk-gui/gui.stetic       |    2 +-
 LongoMatch.GUI/Gui/Component/ButtonsWidget.cs      |    4 +-
 LongoMatch.GUI/Gui/Component/CategoryProperties.cs |  104 +-
 LongoMatch.GUI/Gui/Component/CoordinatesTagger.cs  |   16 +-
 .../Gui/Component/PlayersListTreeWidget.cs         |    8 +-
 .../Gui/Component/PlaysCoordinatesTagger.cs        |   11 +-
 .../Gui/Component/PlaysListTreeWidget.cs           |    4 +-
 .../Gui/Component/PlaysSelectionWidget.cs          |    6 +-
 .../Gui/Component/Stats/PlayersViewer.cs           |    2 +-
 LongoMatch.GUI/Gui/Component/TaggerWidget.cs       |   13 +-
 LongoMatch.GUI/Gui/Component/TeamTemplateEditor.cs |    4 +-
 LongoMatch.GUI/Gui/Component/Timeline.cs           |    2 +-
 LongoMatch.GUI/Gui/Dialog/EditCategoryDialog.cs    |    2 +-
 LongoMatch.GUI/Gui/Dialog/SubCategoryTagsEditor.cs |    6 +-
 LongoMatch.GUI/Gui/Dialog/TaggerDialog.cs          |   24 +-
 LongoMatch.GUI/Gui/GUIToolkit.cs                   |    5 -
 LongoMatch.GUI/Gui/Panel/OpenProjectPanel.cs       |    2 +-
 LongoMatch.GUI/Gui/Panel/ProjectsManagerPanel.cs   |    6 +-
 .../Gui/TreeView/CategoriesFilterTreeView.cs       |   16 +-
 LongoMatch.GUI/Gui/TreeView/ListTreeViewBase.cs    |    2 +-
 .../Gui/TreeView/PlayersFilterTreeView.cs          |    2 +-
 .../Gui/TreeView/SubCategoriesTreeView.cs          |   12 +-
 LongoMatch.GUI/LongoMatch.GUI.mdp                  |   18 -
 .../LongoMatch.Gui.Component.GameUnitWidget.cs     |   52 -
 .../LongoMatch.Gui.Component.GameUnitsEditor.cs    |  126 -
 .../LongoMatch.Gui.Component.GameUnitsTagger.cs    |   26 -
 .../LongoMatch.Gui.Component.PlayersTagger.cs      |   51 -
 ...LongoMatch.Gui.Component.PlayersTaggerWidget.cs |   37 -
 .../LongoMatch.Gui.Component.StringTaggerWidget.cs |   43 -
 .../LongoMatch.Gui.Component.TaggerWidget.cs       |  126 -
 .../LongoMatch.Gui.Dialog.SubCategoryTagsEditor.cs |  217 -
 .../gtk-gui/LongoMatch.Gui.Dialog.TaggerDialog.cs  |  117 -
 .../LongoMatch.Gui.Panel.ProjectsManagerPanel.cs   |    1 +
 LongoMatch.GUI/gtk-gui/gui.stetic                  |  952 +---
 LongoMatch.GUI/gtk-gui/objects.xml                 |   72 +-
 LongoMatch.Migration/Common/Color.cs               |   90 +
 .../Common/Config.cs                               |   42 +-
 LongoMatch.Migration/Common/ConsoleCrayon.cs       |  280 +
 LongoMatch.Migration/Common/Constants.cs           |  114 +
 .../Common/Enums.cs                                |   57 +-
 LongoMatch.Migration/Common/Image.cs               |  191 +
 LongoMatch.Migration/Common/Log.cs                 |  443 ++
 .../Common/SerializableObject.cs                   |  100 +-
 LongoMatch.Migration/Converter.cs                  |  173 +
 LongoMatch.Migration/Core/Category.cs              |  251 +
 .../Core/Coordinates.cs                            |   63 +-
 LongoMatch.Migration/Core/Drawing.cs               |   89 +
 .../Core}/GameUnit.cs                              |    0
 .../Core}/GameUnitsList.cs                         |    0
 LongoMatch.Migration/Core/HotKey.cs                |  155 +
 .../Core/Interfaces/ISubCategory.cs                |   25 +-
 .../Core/Interfaces/ITag.cs                        |   24 +-
 LongoMatch.Migration/Core/Interfaces/ITemplates.cs |   68 +
 .../Core/Interfaces/ITimelineNode.cs               |   37 +-
 LongoMatch.Migration/Core/MediaFile.cs             |  226 +
 .../Core/Period.cs                                 |   46 +-
 LongoMatch.Migration/Core/PixbufTimeNode.cs        |   67 +
 LongoMatch.Migration/Core/Play.cs                  |  268 +
 LongoMatch.Migration/Core/PlayListPlay.cs          |   78 +
 LongoMatch.Migration/Core/Player.cs                |  162 +
 LongoMatch.Migration/Core/Point.cs                 |  110 +
 LongoMatch.Migration/Core/Project.cs               |  295 +
 LongoMatch.Migration/Core/ProjectDescription.cs    |  162 +
 LongoMatch.Migration/Core/SubCategory.cs           |  195 +
 LongoMatch.Migration/Core/Tag.cs                   |  140 +
 LongoMatch.Migration/Core/TagStore.cs              |  109 +
 .../Core/Templates/CategoriesTemplate.cs           |  231 +
 .../Core}/Templates/SubCategoryTemplate.cs         |    2 +
 .../Core/Templates/TeamTemplate.cs                 |  180 +
 LongoMatch.Migration/Core/Time.cs                  |  187 +
 LongoMatch.Migration/Core/TimeNode.cs              |   88 +
 LongoMatch.Migration/Core/TimelineNode.cs          |  127 +
 .../Core/Timer.cs                                  |   55 +-
 LongoMatch.Migration/Data/default.lct              |  Bin 0 -> 29655 bytes
 LongoMatch.Migration/Data/default.ltt              |  Bin 0 -> 19754 bytes
 LongoMatch.Migration/Data/project.lgm              |  Bin 0 -> 120659 bytes
 LongoMatch.Migration/DataBase.cs                   |  554 ++
 LongoMatch.Migration/LongoMatch.Migration.csproj   |   70 +
 LongoMatch.Migration/LongoMatch.Migration.mdp      |   89 +
 LongoMatch.Migration/MainWindow.cs                 |  182 +
 .../GameUnit.cs => LongoMatch.Migration/Program.cs |   38 +-
 LongoMatch.Migration/Properties/AssemblyInfo.cs    |   51 +
 .../Tests/CateogiresTest.cs                        |   44 +-
 .../Tests/TestProject.cs                           |   43 +-
 .../Tests/TestTeam.cs                              |   41 +-
 LongoMatch.Migration/gtk-gui/MainWindow.cs         |  120 +
 LongoMatch.Migration/gtk-gui/generated.cs          |   63 +
 LongoMatch.Migration/gtk-gui/gui.stetic            |  118 +
 ...LongoMatch.Migration.mdp-Release-2014-06-06.xml | 6219 ++++++++++++++++++++
 LongoMatch.Multimedia/LongoMatch.Multimedia.mdp    |   14 +-
 LongoMatch.Plugins/CSVExporter.cs                  |   40 +-
 LongoMatch.Plugins/LongoMatch.Plugins.mdp          |    6 +-
 LongoMatch.Services/LongoMatch.Services.mdp        |    1 -
 LongoMatch.Services/Services/Core.cs               |    7 +-
 LongoMatch.Services/Services/EventsManager.cs      |   29 +-
 LongoMatch.Services/Services/FileDB.cs             |   24 +-
 LongoMatch.Services/Services/HotKeysManager.cs     |    2 +-
 LongoMatch.Services/Services/MigrationsManager.cs  |  158 -
 LongoMatch.Services/Services/ProjectsManager.cs    |   10 +-
 .../Services/RenderingJobsManager.cs               |   12 +-
 LongoMatch.Services/Services/TemplatesService.cs   |   65 +-
 LongoMatch.Services/Services/ToolsManager.cs       |    2 +-
 LongoMatch.mds                                     |    8 +
 Tests/Core/TestCategoriesTemplate.cs               |   17 +-
 Tests/Core/TestCategory.cs                         |   19 +-
 Tests/Core/TestColor.cs                            |    2 +-
 Tests/Core/TestCoordinates.cs                      |   28 +-
 .../Store/GameUnit.cs => Tests/Core/TestImage.cs   |   39 +-
 Tests/Core/TestMediaFile.cs                        |    7 +-
 Tests/Core/TestPlay.cs                             |   61 +-
 Tests/Core/TestPlayer.cs                           |   17 +-
 Tests/Core/TestProject.cs                          |  101 +-
 Tests/Core/TestProjectDescription.cs               |    2 +-
 Tests/Core/TestSubCategory.cs                      |   51 +-
 Tests/Core/TestTagStore.cs                         |   42 +-
 Tests/Core/TestTeamTemplate.cs                     |   39 +-
 .../Store/GameUnit.cs => Tests/Core/TestTime.cs    |   38 +-
 Tests/Services/TestDatabase.cs                     |   14 +-
 Tests/Tests.mdp                                    |   16 +-
 Tests/Utils.cs                                     |   10 +-
 167 files changed, 13317 insertions(+), 4058 deletions(-)
---
diff --git a/LongoMatch.Addins/LongoMatch.Addins.mdp b/LongoMatch.Addins/LongoMatch.Addins.mdp
index 2ad0171..70f43f0 100644
--- a/LongoMatch.Addins/LongoMatch.Addins.mdp
+++ b/LongoMatch.Addins/LongoMatch.Addins.mdp
@@ -22,7 +22,7 @@
     <File subtype="Code" buildaction="Compile" name="ExtensionPoints/IMultimediaBackend.cs" />
   </Contents>
   <References>
-    <ProjectReference type="Gac" localcopy="True" refto="Mono.Addins, Version=0.6.0.0, Culture=neutral, 
PublicKeyToken=0738eb9f132ed756" />
+    <ProjectReference type="Package" localcopy="True" refto="Mono.Addins, Version=0.6.0.0, Culture=neutral, 
PublicKeyToken=0738eb9f132ed756" />
     <ProjectReference type="Project" localcopy="True" refto="LongoMatch.Core" />
   </References>
 </Project>
\ No newline at end of file
diff --git a/LongoMatch.Core/Common/Cloner.cs b/LongoMatch.Core/Common/Cloner.cs
index 72277c5..e2777e2 100644
--- a/LongoMatch.Core/Common/Cloner.cs
+++ b/LongoMatch.Core/Common/Cloner.cs
@@ -30,9 +30,9 @@ namespace LongoMatch.Common
                        
                        Stream s = new MemoryStream();
                        using (s) {
-                               SerializableObject.Save<T>(source, s, SerializationType.Binary);
+                               Serializer.Save<T>(source, s, SerializationType.Binary);
                                s.Seek(0, SeekOrigin.Begin);
-                               return SerializableObject.Load<T>(s, SerializationType.Binary);
+                               return Serializer.Load<T>(s, SerializationType.Binary);
                        }
                }
        }
diff --git a/LongoMatch.Core/Common/Color.cs b/LongoMatch.Core/Common/Color.cs
index d616103..03c77d5 100644
--- a/LongoMatch.Core/Common/Color.cs
+++ b/LongoMatch.Core/Common/Color.cs
@@ -16,9 +16,11 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 // 
 using System;
+using Newtonsoft.Json;
 
 namespace LongoMatch.Common
 {
+       [JsonConverter (typeof (LongoMatchConverter))]
        public class Color
        {
                public Color (byte r, byte g, byte b, byte a=byte.MaxValue)
diff --git a/LongoMatch.Core/Common/Image.cs b/LongoMatch.Core/Common/Image.cs
index 09352a0..245a79b 100644
--- a/LongoMatch.Core/Common/Image.cs
+++ b/LongoMatch.Core/Common/Image.cs
@@ -16,6 +16,7 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 // 
 using System.Runtime.Serialization;
+using Newtonsoft.Json;
 
 namespace LongoMatch.Common
 {
@@ -29,6 +30,7 @@ namespace LongoMatch.Common
 #endif
 
        [Serializable]
+       [JsonConverter (typeof(LongoMatchConverter))]
        public class Image: ISerializable, IDisposable
        {
                SImage image;
@@ -84,7 +86,7 @@ namespace LongoMatch.Common
                
                
 #if HAVE_GTK
-               public byte[] Serialize () {
+               public virtual byte[] Serialize () {
                        if (image == null)
                                return null;
                        return image.SaveToBuffer("png");
diff --git a/LongoMatch.Core/Common/PlayList.cs b/LongoMatch.Core/Common/PlayList.cs
index 4c48277..fbde01a 100644
--- a/LongoMatch.Core/Common/PlayList.cs
+++ b/LongoMatch.Core/Common/PlayList.cs
@@ -62,7 +62,7 @@ namespace LongoMatch.Common
                }
 
                public void Save(string filePath) {
-                       SerializableObject.Save(this, filePath);
+                       Serializer.Save(this, filePath);
                }
 
                public static PlayList Load(string filePath) {
@@ -73,7 +73,7 @@ namespace LongoMatch.Common
                        if(!System.IO.File.Exists(filePath))
                                pl = new PlayList();
                        else
-                               pl = SerializableObject.LoadSafe<PlayList>(filePath);
+                               pl = Serializer.LoadSafe<PlayList>(filePath);
                        pl.Filename = filename;
                        return pl; 
                }
diff --git a/LongoMatch.Core/Common/PlaysFilter.cs b/LongoMatch.Core/Common/PlaysFilter.cs
index ccc9388..8c6a243 100644
--- a/LongoMatch.Core/Common/PlaysFilter.cs
+++ b/LongoMatch.Core/Common/PlaysFilter.cs
@@ -75,25 +75,23 @@ namespace LongoMatch.Common
                
                public void ClearCategoriesFilter () {
                        categoriesFilter.Clear();
-                       foreach (var cat in project.Categories) {
+                       foreach (Category cat in project.Categories.List) {
                                List<SubCategoryTags> list = new List<SubCategoryTags>(); 
                                categoriesFilter.Add(cat, list);
-                               foreach (var subcat in cat.SubCategories) {
-                                       if (subcat is TagSubCategory) {
+                               foreach (SubCategory subcat in cat.SubCategories) {
                                        SubCategoryTags subcatTags = new SubCategoryTags{SubCategory = 
subcat};
                                        list.Add(subcatTags);
-                                       foreach (var option in subcat as TagSubCategory)
+                                       foreach (string option in subcat.Options)
                                                subcatTags.Add (option);
-                                       }
                                }
                        }
                }
                
                public void ClearPlayersFilter () {
                        playersFilter.Clear();
-                       foreach (var player in project.LocalTeamTemplate)
+                       foreach (var player in project.LocalTeamTemplate.List)
                                playersFilter.Add(player);
-                       foreach (var player in project.VisitorTeamTemplate)
+                       foreach (var player in project.VisitorTeamTemplate.List)
                                playersFilter.Add(player);
                }
 
@@ -111,7 +109,7 @@ namespace LongoMatch.Common
                                playersFilter.Add(player);
                }
                
-               public void FilterSubCategory (Category cat, ISubCategory subcat, string option, bool 
filtered) {
+               public void FilterSubCategory (Category cat, SubCategory subcat, string option, bool 
filtered) {
                        SubCategoryTags tsub = categoriesFilter[cat].Find(s => s.SubCategory == subcat);
                        if (filtered) {
                                tsub.Add(option);
@@ -149,7 +147,7 @@ namespace LongoMatch.Common
                
                void UpdateVisiblePlayers () {
                        visiblePlayers = new List<Player>();
-                       foreach (Player p in project.LocalTeamTemplate.Concat (project.VisitorTeamTemplate)) {
+                       foreach (Player p in project.LocalTeamTemplate.List.Concat 
(project.VisitorTeamTemplate.List)) {
                                if (PlayersFilterEnabled && ! playersFilter.Contains (p)) {
                                        continue;
                                }
@@ -178,13 +176,13 @@ namespace LongoMatch.Common
                        bool cat_match=true, player_match=true;
                        visiblePlays = new List<Play>();
                                
-                       foreach (Play play in project.AllPlays()) {
+                       foreach (Play play in project.Timeline) {
                                if (CategoriesFilterEnabled) {
                                        cat_match = false;
                                        foreach (var subcat in categoriesFilter[play.Category]) {
                                                bool match = false;
                                                foreach (var option in subcat) {
-                                                       StringTag tag = new 
StringTag{SubCategory=subcat.SubCategory, Value=option};
+                                                       Tag tag = new Tag{SubCategory=subcat.SubCategory, 
Value=option};
                                                        if (play.Tags.Contains(tag)) {
                                                                match = true;
                                                                break;
@@ -203,7 +201,7 @@ namespace LongoMatch.Common
                                }
                                
                                if (PlayersFilterEnabled)
-                                       player_match = 
VisiblePlayers.Intersect(play.Players.GetTagsValues()).Count() != 0;
+                                       player_match = VisiblePlayers.Intersect(play.Players).Count() != 0;
                                
                                if (player_match && cat_match) {
                                        visiblePlays.Add (play);
@@ -218,7 +216,7 @@ namespace LongoMatch.Common
        }
        
        class SubCategoryTags: List<string> {
-               public ISubCategory SubCategory {
+               public SubCategory SubCategory {
                        get;
                        set;
                }
diff --git a/LongoMatch.Core/Common/Serializer.cs b/LongoMatch.Core/Common/Serializer.cs
new file mode 100644
index 0000000..c780981
--- /dev/null
+++ b/LongoMatch.Core/Common/Serializer.cs
@@ -0,0 +1,240 @@
+//
+//  Copyright (C) 2010 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.IO;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Xml.Serialization;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Serialization;
+using LongoMatch.Interfaces;
+using System.Reflection;
+using LongoMatch.Store.Templates;
+using Newtonsoft.Json.Converters;
+using LongoMatch.Store;
+using System.Globalization;
+using System.Text;
+
+namespace LongoMatch.Common
+{
+       public class Serializer
+       {
+               public static void Save<T>(T obj, Stream stream,
+                                          SerializationType type=SerializationType.Json) {
+                       switch (type) {
+                       case SerializationType.Binary:
+                               BinaryFormatter formatter = new  BinaryFormatter();
+                               formatter.Serialize(stream, obj);
+                               break;
+                       case SerializationType.Xml:
+                               XmlSerializer xmlformatter = new XmlSerializer(typeof(T));
+                               xmlformatter.Serialize(stream, obj);
+                               break;
+                       case SerializationType.Json:
+                               StreamWriter sw = new StreamWriter (stream);
+                               sw.Write (JsonConvert.SerializeObject (obj, JsonSettings));
+                               sw.Flush();
+                               break;
+                       }
+               }
+               
+               public static void Save<T>(T obj, string filepath,
+                                          SerializationType type=SerializationType.Json) {
+                       Stream stream = new FileStream(filepath, FileMode.Create, FileAccess.Write, 
FileShare.None);
+                       using (stream) {
+                               Save<T> (obj, stream, type);
+                               stream.Close();
+                       }
+               }
+
+               public static T Load<T>(Stream stream,
+                                       SerializationType type=SerializationType.Json) {
+                       switch (type) {
+                       case SerializationType.Binary:
+                               BinaryFormatter formatter = new BinaryFormatter();
+                               return (T)formatter.Deserialize(stream);
+                       case SerializationType.Xml:
+                               XmlSerializer xmlformatter = new XmlSerializer(typeof(T));
+                               return (T) xmlformatter.Deserialize(stream);
+                       case SerializationType.Json:
+                               StreamReader sr = new StreamReader (stream);
+                               return JsonConvert.DeserializeObject<T> (sr.ReadToEnd(), JsonSettings);
+                       default:
+                               throw new Exception();
+                       }
+               }
+               
+               public static T Load<T>(string filepath,
+                                       SerializationType type=SerializationType.Json) {
+                       Stream stream = new FileStream(filepath, FileMode.Open, FileAccess.Read, 
FileShare.Read);
+                       using (stream) {
+                               return Load<T> (stream, type);
+                       }
+               }
+               
+               public static T LoadSafe<T>(string filepath) {
+               
+                       Stream stream = new FileStream (filepath, FileMode.Open,
+                                                      FileAccess.Read, FileShare.Read);
+                       using (stream) {
+                               try {
+                                       return Load<T> (stream, SerializationType.Json);
+                               } catch (Exception e) {
+                                       Log.Exception (e);
+                                       stream.Seek (0, SeekOrigin.Begin);
+                                       return Load<T> (stream, SerializationType.Binary);
+                               }
+                       }
+               }
+               
+               static JsonSerializerSettings JsonSettings {
+                       get{
+                               JsonSerializerSettings settings = new JsonSerializerSettings ();
+                               settings.Formatting = Formatting.Indented;
+                               settings.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
+                               settings.TypeNameHandling = TypeNameHandling.Objects;
+                               settings.Converters.Add (new VersionConverter ());
+                               //settings.ReferenceResolver = new IdReferenceResolver ();
+                               return settings;
+                       }
+               }
+       }
+       
+       public class LongoMatchConverter : JsonConverter
+       {
+               public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
+               {
+                       if (value is Time) {
+                               Time time = value as Time;
+                               if (time != null) {
+                                       writer.WriteValue(time.MSeconds);
+                               }
+                       } else if (value is Color) {
+                               Color color = value as Color;
+                               if (color != null) {
+                                       writer.WriteValue(String.Format ("#{0}{1}{2}{3}",
+                                                                        color.R.ToString ("X2"),
+                                                                        color.G.ToString ("X2"),
+                                                                        color.B.ToString ("X2"),
+                                                                        color.A.ToString ("X2")));
+                               }
+                       } else if (value is Image) {
+                               Image image = value as Image;
+                               if (image != null) {
+                                       writer.WriteValue(image.Serialize());
+                               }
+                       } else if (value is HotKey) {
+                               HotKey hotkey = value as HotKey;
+                               if (hotkey != null) {
+                                       writer.WriteValue(String.Format ("{0} {1}", hotkey.Key, 
hotkey.Modifier));
+                               }
+                       } else if (value is Point) {
+                               Point p = value as Point;
+                               if (p != null) {
+                                       writer.WriteValue(String.Format ("{0} {1}", p.X, p.Y));
+                               }
+                       }
+               }
+
+               public override object ReadJson(JsonReader reader, Type objectType, object existingValue, 
JsonSerializer serializer)
+               {
+                       if (reader.Value != null) {
+                               if (objectType == typeof (Time)) {
+                                       Int64 t = (Int64) reader.Value;
+                                       return new Time((int)t);
+                               } else if (objectType == typeof (Color)) {
+                                       string rgbStr = (string) reader.Value;
+                                       return new Color(Byte.Parse (rgbStr.Substring(1,2), 
NumberStyles.HexNumber),
+                                                        Byte.Parse (rgbStr.Substring(3,2), 
NumberStyles.HexNumber),
+                                                        Byte.Parse (rgbStr.Substring(5,2), 
NumberStyles.HexNumber),
+                                                        Byte.Parse (rgbStr.Substring(7,2), 
NumberStyles.HexNumber));
+                               } else if (objectType == typeof (Image)) {
+                                       byte[] buf = Convert.FromBase64String ((string)reader.Value); 
+                                       return Image.Deserialize (buf);
+                               } else if (objectType == typeof (HotKey)) {
+                                       string[] hk = ((string)reader.Value).Split (' '); 
+                                       return new HotKey {Key = int.Parse(hk[0]), Modifier = 
int.Parse(hk[1])};
+                               } else if (objectType == typeof (Point)) {
+                                       string[] ps = ((string)reader.Value).Split (' '); 
+                                       return new Point (double.Parse(ps[0]), double.Parse(ps[1]));
+                               }
+                       }
+                       return null;
+               }
+               
+               public override bool CanConvert(Type objectType)
+               {
+                       return (
+                               objectType == typeof(Time) ||
+                               objectType == typeof(Color) ||
+                               objectType == typeof(HotKey) ||
+                               objectType == typeof(Image));
+               }
+       }
+       
+    public class IdReferenceResolver : IReferenceResolver
+    {
+               private int _references;
+        private readonly Dictionary<string, object> _idtoobjects;
+        private readonly Dictionary<object, string> _objectstoid;
+
+               public IdReferenceResolver () {
+                       _references = 0;
+                       _idtoobjects = new Dictionary<string, object>();
+                       _objectstoid = new Dictionary<object, string>();
+               }
+               
+        public object ResolveReference(object context, string reference)
+        {
+                       object p;
+            _idtoobjects.TryGetValue(reference, out p);
+            return p;
+        }
+
+        public string GetReference(object context, object value)
+        {
+                       string referenceStr;
+                       if (value is IIDObject) {
+                               IIDObject p = (IIDObject)value;
+                               referenceStr = p.ID.ToString();
+                       } else {
+                               if (!_objectstoid.TryGetValue (value, out referenceStr)) {
+                                       _references++;
+                                       referenceStr = _references.ToString(CultureInfo.InvariantCulture); 
+                               }
+                       }
+                       _idtoobjects[referenceStr] = value;
+                       _objectstoid[value] = referenceStr;
+                       return referenceStr;
+        }
+
+        public bool IsReferenced(object context, object value)
+        {
+                       string reference;
+                       return _objectstoid.TryGetValue (value, out reference);
+        }
+
+        public void AddReference(object context, string reference, object value)
+        {
+                       _idtoobjects[reference] = value;
+                       _objectstoid[value] = reference;
+        }
+    }
+}
+
diff --git a/LongoMatch.Core/Config.cs b/LongoMatch.Core/Config.cs
index 4107850..757f537 100644
--- a/LongoMatch.Core/Config.cs
+++ b/LongoMatch.Core/Config.cs
@@ -37,7 +37,6 @@ namespace LongoMatch
                public static IDrawingToolkit DrawingToolkit;
                public static ITeamTemplatesProvider TeamTemplatesProvider;
                public static ICategoriesTemplatesProvider CategoriesTemplatesProvider;
-               public static ISubcategoriesTemplatesProvider SubcategoriesTemplatesProvider;
                public static EventsBroker EventsBroker;
 
                public static IDataBaseManager DatabaseManager;
@@ -49,7 +48,7 @@ namespace LongoMatch
                        if (File.Exists(Config.ConfigFile)) {
                                Log.Information ("Loading config from " + Config.ConfigFile);
                                try {
-                                       state = SerializableObject.LoadSafe<ConfigState>(Config.ConfigFile);
+                                       state = Serializer.LoadSafe<ConfigState>(Config.ConfigFile);
                                } catch (Exception ex) {
                                        Log.Error ("Error loading config");
                                        Log.Exception (ex);
@@ -65,7 +64,7 @@ namespace LongoMatch
                
                public static void Save () {
                        try {
-                               SerializableObject.Save(state, Config.ConfigFile); 
+                               Serializer.Save(state, Config.ConfigFile); 
                        } catch (Exception ex) {
                                Log.Error ("Errro saving config");
                                Log.Exception (ex);
@@ -152,7 +151,19 @@ namespace LongoMatch
 
                public static string DBDir {
                        get {
-                               return Path.Combine(configDirectory, "db");
+                               return Path.Combine(homeDirectory, "db");
+                       }
+               }
+
+               public static string AnalysisDir {
+                       get {
+                               return Path.Combine(DBDir, "analysis");
+                       }
+                       
+               }
+               public static string TeamsDir {
+                       get {
+                               return Path.Combine(DBDir, "teams");
                        }
                }
                
diff --git a/LongoMatch.Core/Handlers/Handlers.cs b/LongoMatch.Core/Handlers/Handlers.cs
index 52754de..ee312b3 100644
--- a/LongoMatch.Core/Handlers/Handlers.cs
+++ b/LongoMatch.Core/Handlers/Handlers.cs
@@ -126,8 +126,8 @@ namespace LongoMatch.Handlers
        public delegate void CategoriesHandler(List<Category> categoriesList);
        
        /* Edit Subcategory properties */
-       public delegate void SubCategoryHandler(ISubCategory subcat);
-       public delegate void SubCategoriesHandler(List<ISubCategory> subcat);
+       public delegate void SubCategoryHandler(SubCategory subcat);
+       public delegate void SubCategoriesHandler(List<SubCategory> subcat);
 
        /* Edit player properties */
        public delegate void PlayerPropertiesHandler(Player player);
@@ -137,14 +137,6 @@ namespace LongoMatch.Handlers
        public delegate void ProjectsSelectedHandler(List<ProjectDescription> projects);
        public delegate void ProjectSelectedHandler(ProjectDescription project);
        
-       /* Start/Stop/Cancel game units */
-       public delegate void GameUnitHandler(GameUnit gameUnit, GameUnitEventType eType);
-       
-       public delegate void UnitChangedHandler (GameUnit gameUnit, TimelineNode unit, Time time);
-       public delegate void UnitSelectedHandler (GameUnit gameUnit, TimelineNode unit);
-       public delegate void UnitAddedHandler (GameUnit gameUnit, int frame);
-       public delegate void UnitsDeletedHandler (GameUnit gameUnit, List<TimelineNode> unit);
-       
        public delegate void KeyHandler (object sender, int key, int modifier);
 
        /* The plays filter was updated */      
diff --git a/LongoMatch.Core/Store/GameUnit.cs b/LongoMatch.Core/Interfaces/IIDObject.cs
similarity index 66%
copy from LongoMatch.Core/Store/GameUnit.cs
copy to LongoMatch.Core/Interfaces/IIDObject.cs
index f9ce9b9..101e76f 100644
--- a/LongoMatch.Core/Store/GameUnit.cs
+++ b/LongoMatch.Core/Interfaces/IIDObject.cs
@@ -1,43 +1,27 @@
-// 
-//  Copyright (C) 2011 andoni
-// 
+//
+//  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.Collections.Generic;
 
-namespace LongoMatch.Store
+namespace LongoMatch.Interfaces
 {
-       [Serializable]
-       public class GameUnit: List<TimelineNode>
+       public interface IIDObject
        {
-               
-               public GameUnit (string name)
-               {
-                       Name=name;
-               }
-               
-               public string Name {
-                       get;
-                       set;
-               }
-               
-               public override string ToString ()
-               {
-                       return string.Format ("[GameUnit: Name={0}]", Name);
-               }       
+               Guid ID {get;set;}
        }
 }
 
diff --git a/LongoMatch.Core/Interfaces/ITag.cs b/LongoMatch.Core/Interfaces/ITag.cs
index 90c3e0a..825423c 100644
--- a/LongoMatch.Core/Interfaces/ITag.cs
+++ b/LongoMatch.Core/Interfaces/ITag.cs
@@ -22,7 +22,7 @@ namespace LongoMatch.Interfaces
 {
        public interface ITag<T>
        {
-               ISubCategory SubCategory {set;get;}
+               SubCategory SubCategory {set;get;}
                T Value {set;get;}
        }
 }
diff --git a/LongoMatch.Core/Interfaces/ITemplates.cs b/LongoMatch.Core/Interfaces/ITemplates.cs
index a6d17c9..fad1fca 100644
--- a/LongoMatch.Core/Interfaces/ITemplates.cs
+++ b/LongoMatch.Core/Interfaces/ITemplates.cs
@@ -22,13 +22,14 @@ using LongoMatch.Store.Templates;
        
 namespace LongoMatch.Interfaces
 {
-       public interface ITemplate
+       public interface ITemplate: IIDObject
        {
                void Save (string filename);
                string Name {get; set;}
        }
        
-       public interface ITemplate<T>: ITemplate, IList<T> {
+       public interface ITemplate<T>: ITemplate {
+               List<T> List {get;set;}
                T AddDefaultItem (int index);
        }
        
@@ -50,19 +51,7 @@ namespace LongoMatch.Interfaces
                void Update (ITemplate<U> template);
        }
        
-       public interface ITemplateWidget<T, U> where T: ITemplate<U>
-       {
-               T Template {get; set;}
-               bool Edited {get; set;}
-               bool CanExport {get; set;}
-               Project Project {get; set;}
-       }
-       
        public interface ICategoriesTemplatesProvider: ITemplateProvider<Categories, Category> {}
        public interface ITeamTemplatesProvider: ITemplateProvider<TeamTemplate, Player> {}
-       public interface ISubcategoriesTemplatesProvider: ITemplateProvider<SubCategoryTemplate, string> {} 
-       
-       public interface ICategoriesTemplatesEditor: ITemplateWidget<Categories, Category> {}
-       public interface ITeamTemplatesEditor: ITemplateWidget<TeamTemplate, Player> {}
 }
 
diff --git a/LongoMatch.Core/Interfaces/ITemplatesService.cs b/LongoMatch.Core/Interfaces/ITemplatesService.cs
index 0dbf170..1178f5e 100644
--- a/LongoMatch.Core/Interfaces/ITemplatesService.cs
+++ b/LongoMatch.Core/Interfaces/ITemplatesService.cs
@@ -26,15 +26,9 @@ namespace LongoMatch.Interfaces
        {
                ITemplateProvider<T, U> GetTemplateProvider<T, U>() where T: ITemplate<U>;
                
-               ISubcategoriesTemplatesProvider SubCategoriesTemplateProvider {get;}
-               
                ITeamTemplatesProvider TeamTemplateProvider {get;}
                
                ICategoriesTemplatesProvider CategoriesTemplateProvider {get;}
-               
-               List<PlayerSubCategory> PlayerSubcategories {get;}
-               
-               List<TeamSubCategory> TeamSubcategories {get;}
        }
 }
 
diff --git a/LongoMatch.Core/Interfaces/ITimelineNode.cs b/LongoMatch.Core/Interfaces/ITimelineNode.cs
index d0ff33d..b271fd9 100644
--- a/LongoMatch.Core/Interfaces/ITimelineNode.cs
+++ b/LongoMatch.Core/Interfaces/ITimelineNode.cs
@@ -25,14 +25,8 @@ namespace LongoMatch.Interfaces
                string Name {get;set;}
                Time Start {get;set;}
                Time Stop {get;set;}
-               uint StartFrame {get; set;}
-               uint StopFrame {get; set;}
                bool Selected {get; set;}
-               uint CentralFrame {get;}
-               uint TotalFrames {get;}
-               uint KeyFrame {get;}
                bool HasDrawings {get;}
-               bool HasFrame(int frame);
        }
 }
 
diff --git a/LongoMatch.Core/LongoMatch.Core.mdp b/LongoMatch.Core/LongoMatch.Core.mdp
index 2d75243..c5b047f 100644
--- a/LongoMatch.Core/LongoMatch.Core.mdp
+++ b/LongoMatch.Core/LongoMatch.Core.mdp
@@ -19,7 +19,6 @@
     <File subtype="Code" buildaction="Compile" name="Common/Constants.cs" />
     <File subtype="Code" buildaction="Compile" name="Common/Enums.cs" />
     <File subtype="Code" buildaction="Compile" name="Common/Log.cs" />
-    <File subtype="Code" buildaction="Compile" name="Common/SerializableObject.cs" />
     <File subtype="Code" buildaction="Compile" name="Store/Category.cs" />
     <File subtype="Code" buildaction="Compile" name="Store/Drawing.cs" />
     <File subtype="Code" buildaction="Compile" name="Store/HotKey.cs" />
@@ -35,10 +34,7 @@
     <File subtype="Code" buildaction="Compile" name="Store/Time.cs" />
     <File subtype="Code" buildaction="Compile" name="Store/TimeNode.cs" />
     <File subtype="Code" buildaction="Compile" name="Store/Templates/CategoriesTemplate.cs" />
-    <File subtype="Code" buildaction="Compile" name="Store/Templates/SubCategoryTemplate.cs" />
     <File subtype="Code" buildaction="Compile" name="Store/Templates/TeamTemplate.cs" />
-    <File subtype="Code" buildaction="Compile" name="Interfaces/ISubCategory.cs" />
-    <File subtype="Code" buildaction="Compile" name="Interfaces/ITag.cs" />
     <File subtype="Code" buildaction="Compile" name="Interfaces/ITemplates.cs" />
     <File subtype="Directory" buildaction="Compile" name="." />
     <File subtype="Directory" buildaction="Compile" name="Common" />
@@ -66,8 +62,6 @@
     <File subtype="Code" buildaction="Compile" name="Config.cs" />
     <File subtype="Code" buildaction="Compile" name="Interfaces/ITemplatesService.cs" />
     <File subtype="Code" buildaction="Compile" name="Interfaces/IDatabase.cs" />
-    <File subtype="Code" buildaction="Compile" name="Store/GameUnit.cs" />
-    <File subtype="Code" buildaction="Compile" name="Store/GameUnitsList.cs" />
     <File subtype="Code" buildaction="Compile" name="Store/TimelineNode.cs" />
     <File subtype="Code" buildaction="Compile" name="Interfaces/ITimelineNode.cs" />
     <File subtype="Directory" buildaction="Compile" name="Interfaces/GUI" />
@@ -96,8 +90,6 @@
     <File subtype="Code" buildaction="Compile" name="Stats/Stat.cs" />
     <File subtype="Code" buildaction="Compile" name="Stats/SubCategoryStat.cs" />
     <File subtype="Code" buildaction="Compile" name="Stats/PlayersStats.cs" />
-    <File subtype="Code" buildaction="Compile" name="Stats/GameUnitStats.cs" />
-    <File subtype="Code" buildaction="Compile" name="Stats/GameUnitsStats.cs" />
     <File subtype="Code" buildaction="Compile" name="Common/PlaysFilter.cs" />
     <File subtype="Code" buildaction="Compile" name="Interfaces/Multimedia/IRemuxer.cs" />
     <File subtype="Code" buildaction="Compile" name="Interfaces/Multimedia/IVideoConverter.cs" />
@@ -139,6 +131,11 @@
     <File subtype="Code" buildaction="Compile" name="Store/Timer.cs" />
     <File subtype="Code" buildaction="Compile" name="Store/Period.cs" />
     <File subtype="Code" buildaction="Compile" name="Common/EventsBroker.cs" />
+    <File subtype="Directory" buildaction="Compile" name="Store" />
+    <File subtype="Directory" buildaction="Compile" name="Store" />
+    <File subtype="Directory" buildaction="Compile" name="Store" />
+    <File subtype="Code" buildaction="Compile" name="Common/Serializer.cs" />
+    <File subtype="Code" buildaction="Compile" name="Interfaces/IIDObject.cs" />
   </Contents>
   <References>
     <ProjectReference type="Package" localcopy="True" refto="System, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b77a5c561934e089" />
diff --git a/LongoMatch.Core/Stats/ProjectStats.cs b/LongoMatch.Core/Stats/ProjectStats.cs
index 27d9252..4cc7655 100644
--- a/LongoMatch.Core/Stats/ProjectStats.cs
+++ b/LongoMatch.Core/Stats/ProjectStats.cs
@@ -29,7 +29,6 @@ namespace LongoMatch.Stats
        public class ProjectStats: IDisposable
        {
                List<CategoryStats> catStats;
-               GameUnitsStats guStats;
                PlaysFilter filter;
                Project project;
                
@@ -112,12 +111,6 @@ namespace LongoMatch.Stats
                        }
                }
                
-               public GameUnitsStats GameUnitsStats {
-                       get {
-                               return guStats;
-                       }
-               }
-               
                public PlaysFilter Filter {
                        set {
                                filter = value;
@@ -126,7 +119,6 @@ namespace LongoMatch.Stats
                }
                
                void UpdateGameUnitsStats () {
-                       guStats = new GameUnitsStats(project.GameUnits, (int)project.Description.File.Length);
                }
                
                void CountPlaysInTeam (List<Play> plays, out int localTeamCount, out int visitorTeamCount) {
@@ -141,7 +133,7 @@ namespace LongoMatch.Stats
                        HalfField = project.Categories.HalfFieldBackground;
                        Goal = project.Categories.GoalBackground;
                        
-                       foreach (Category cat in project.Categories) {
+                       foreach (Category cat in project.Categories.List) {
                                CategoryStats stats;
                                List<Play> plays, homePlays, awayPlays, untagged;
                                int localTeamCount, visitorTeamCount;
@@ -155,8 +147,8 @@ namespace LongoMatch.Stats
                                
                                /* Get the plays where the team is not tagged but we have at least one player 
from a team tagged */
                                untagged = plays.Where (p=> p.Team ==  Team.NONE).ToList();
-                               homePlays.AddRange (untagged.Where (p => p.Players.Tags.Where (pt => 
project.LocalTeamTemplate.Contains(pt.Value)).Count() != 0).ToList());
-                               awayPlays.AddRange (untagged.Where (p => p.Players.Tags.Where (pt => 
project.VisitorTeamTemplate.Contains(pt.Value)).Count() != 0).ToList());
+                               homePlays.AddRange (untagged.Where (p => p.Players.Where (pt => 
project.LocalTeamTemplate.List.Contains(pt)).Count() != 0).ToList());
+                               awayPlays.AddRange (untagged.Where (p => p.Players.Where (pt => 
project.VisitorTeamTemplate.List.Contains(pt)).Count() != 0).ToList());
                                
                                stats = new CategoryStats(cat, plays.Count, homePlays.Count(), 
awayPlays.Count());
                                
@@ -172,43 +164,22 @@ namespace LongoMatch.Stats
                                stats.AwayGoalCoordinates = awayPlays.Select (p => p.GoalPosition).Where(p 
=>p != null).ToList();
                                catStats.Add (stats);
                                
-                               foreach (ISubCategory subcat in cat.SubCategories) {
+                               foreach (SubCategory subcat in cat.SubCategories) {
                                        SubCategoryStat subcatStat;
                                        
-                                       if (subcat is PlayerSubCategory)
-                                               continue;
-                                               
                                        subcatStat = new SubCategoryStat(subcat);
                                        stats.AddSubcatStat(subcatStat);
                                        
-                                        if (subcat is TagSubCategory) {
-                                               foreach (string option in subcat.ElementsDesc()) {
-                                                       List<Play> subcatPlays;
-                                                       StringTag tag;
-                                                       
-                                                       tag = new StringTag{SubCategory=subcat, Value=option};
-                                                       subcatPlays = plays.Where(p => 
p.Tags.Tags.Contains(tag)).ToList();
-                                                       GetSubcategoryStats(subcatPlays, subcatStat, option,
-                                                               stats.TotalCount, out localTeamCount, out 
visitorTeamCount);
-                                                       GetPlayersStats(project, subcatPlays, option, 
subcatStat, cat);
-                                               }
-                                        } 
-                                        
-                                        if (subcat is TeamSubCategory) {
-                                               List<Team> teams = new List<Team>();
-                                               teams.Add(Team.LOCAL);
-                                               teams.Add(Team.VISITOR);
+                                       foreach (string option in  subcat.Options) {
+                                               List<Play> subcatPlays;
+                                               Tag tag;
                                                
-                                               foreach (Team team in teams) {
-                                                       List<Play> subcatPlays;
-                                                       TeamTag tag;
-                                                       
-                                                       tag = new TeamTag{SubCategory=subcat, Value=team};
-                                                       subcatPlays = plays.Where(p => 
p.Teams.Tags.Contains(tag)).ToList();
-                                                       GetSubcategoryStats(subcatPlays, subcatStat, 
team.ToString(),
-                                                               stats.TotalCount, out localTeamCount, out 
visitorTeamCount);
-                                               }
-                                        }
+                                               tag = new Tag{SubCategory=subcat, Value=option};
+                                               subcatPlays = plays.Where(p => 
p.TagsStore.Tags.Contains(tag)).ToList();
+                                               GetSubcategoryStats(subcatPlays, subcatStat, option,
+                                                                   stats.TotalCount, out localTeamCount, out 
visitorTeamCount);
+                                               GetPlayersStats(project, subcatPlays, option, subcatStat, 
cat);
+                                       }
                                }
                        }
                }
@@ -228,38 +199,34 @@ namespace LongoMatch.Stats
                void GetPlayersStats (Project project, List<Play> subcatPlays, string optionName,
                        SubCategoryStat subcatStat, Category cat)
                {
-                       foreach (ISubCategory subcat in cat.SubCategories) {
-                               PlayerSubCategory playerSubcat;
-                               Dictionary<Player, int> localPlayerCount = new Dictionary<Player, int>();
-                               Dictionary<Player, int> visitorPlayerCount = new Dictionary<Player, int>();
-                               
-                               if (!(subcat is PlayerSubCategory))
-                                       continue;
-                               
-                               playerSubcat = subcat as PlayerSubCategory;
-                               
-                               if (playerSubcat.Contains(Team.LOCAL) || playerSubcat.Contains(Team.BOTH)){
-                                       foreach (Player player in project.LocalTeamTemplate) {
-                                               localPlayerCount.Add(player, GetPlayerCount(subcatPlays, 
player, subcat as PlayerSubCategory));
-                                       }
-                                       subcatStat.AddPlayersStats(optionName, subcat.Name, Team.LOCAL, 
localPlayerCount);
-                               }
-                               
-                               if (playerSubcat.Contains(Team.VISITOR) || playerSubcat.Contains(Team.BOTH)){
-                                       foreach (Player player in project.VisitorTeamTemplate) {
-                                               visitorPlayerCount.Add(player, GetPlayerCount(subcatPlays, 
player, subcat as PlayerSubCategory));
-                                       }
-                                       subcatStat.AddPlayersStats(optionName, subcat.Name, Team.VISITOR, 
visitorPlayerCount);
-                               }
-                       }
-               }
-               
-               int GetPlayerCount(List<Play> plays, Player player, PlayerSubCategory subcat)
+//                     foreach (SubCategory subcat in cat.SubCategories) {
+//                             Dictionary<Player, int> localPlayerCount = new Dictionary<Player, int>();
+//                             Dictionary<Player, int> visitorPlayerCount = new Dictionary<Player, int>();
+//                             
+//                             if (!(subcat is PlayerSubCategory))
+//                                     continue;
+//                             
+//                             playerSubcat = subcat as PlayerSubCategory;
+//                             
+//                             if (playerSubcat.Contains(Team.LOCAL) || playerSubcat.Contains(Team.BOTH)){
+//                                     foreach (Player player in project.LocalTeamTemplate.List) {
+//                                             localPlayerCount.Add(player, GetPlayerCount(subcatPlays, 
player, subcat as PlayerSubCategory));
+//                                     }
+//                                     subcatStat.AddPlayersStats(optionName, subcat.Name, Team.LOCAL, 
localPlayerCount);
+//                             }
+//                             
+//                             if (playerSubcat.Contains(Team.VISITOR) || playerSubcat.Contains(Team.BOTH)){
+//                                     foreach (Player player in project.VisitorTeamTemplate.List) {
+//                                             visitorPlayerCount.Add(player, GetPlayerCount(subcatPlays, 
player, subcat as PlayerSubCategory));
+//                                     }
+//                                     subcatStat.AddPlayersStats(optionName, subcat.Name, Team.VISITOR, 
visitorPlayerCount);
+//                             }
+//                     }
+               }
+               
+               int GetPlayerCount(List<Play> plays, Player player)
                {
-                       PlayerTag tag;
-                       
-                       tag = new PlayerTag{SubCategory=subcat, Value=player};
-                       return plays.Where(p => p.Players.Contains(tag)).Count();
+                       return plays.Where(p => p.Players.Contains(player)).Count();
                }
        }
 }
diff --git a/LongoMatch.Core/Stats/SubCategoryStat.cs b/LongoMatch.Core/Stats/SubCategoryStat.cs
index 73a5cec..fce5530 100644
--- a/LongoMatch.Core/Stats/SubCategoryStat.cs
+++ b/LongoMatch.Core/Stats/SubCategoryStat.cs
@@ -30,9 +30,9 @@ namespace LongoMatch.Stats
                List<PercentualStat> optionStats;
                Dictionary<string, List<PlayersStats>> localPlayersStats;
                Dictionary<string, List<PlayersStats>> visitorPlayersStats;
-               ISubCategory subcat;
+               SubCategory subcat;
                
-               public SubCategoryStat (ISubCategory subcat)
+               public SubCategoryStat (SubCategory subcat)
                {
                        Name = subcat.Name;
                        this.subcat = subcat;
@@ -53,7 +53,7 @@ namespace LongoMatch.Stats
                        }
                }
                
-               public ISubCategory SubCategory {
+               public SubCategory SubCategory {
                        get {
                                return subcat;
                        }
diff --git a/LongoMatch.Core/Store/Category.cs b/LongoMatch.Core/Store/Category.cs
index bad6784..005ac58 100644
--- a/LongoMatch.Core/Store/Category.cs
+++ b/LongoMatch.Core/Store/Category.cs
@@ -36,31 +36,26 @@ namespace LongoMatch.Store
        /// tagged in this category
        /// </summary>
        [Serializable]
-       public class Category:TimeNode, ISerializable
+       public class Category:TimeNode, IIDObject
        {
 
-               [JsonProperty ("UUID")]
-               private Guid _UUID;
-
                #region Constructors
-               #endregion
                public Category() {
-                       _UUID = System.Guid.NewGuid();
-                       SubCategories = new List<ISubCategory>();
+                       ID = System.Guid.NewGuid();
+                       SubCategories = new List<SubCategory>();
                        TagGoalPosition = false;
                        TagFieldPosition = true;
                }
+               #endregion
 
                #region  Properties
 
                /// <summary>
                /// Unique ID for this category
                /// </summary>
-               [JsonIgnore]
-               public Guid UUID {
-                       get {
-                               return _UUID;
-                       }
+               public Guid ID {
+                       get;
+                       set;
                }
 
                /// <summary>
@@ -95,7 +90,7 @@ namespace LongoMatch.Store
                        set;
                }
 
-               public List<ISubCategory> SubCategories {
+               public List<SubCategory> SubCategories {
                        get;
                        set;
                }
@@ -155,67 +150,6 @@ namespace LongoMatch.Store
                                        SortMethod = SortMethodType.SortByName;
                        }
                }
-
-               // this constructor is automatically called during deserialization
-               public Category(SerializationInfo info, StreamingContext context) {
-                       _UUID = (Guid)info.GetValue("uuid", typeof(Guid));
-                       Name = (string) info.GetValue("name", typeof(string));
-                       Start = (Time)info.GetValue("start", typeof(Time));
-                       Stop = (Time)info.GetValue("stop", typeof(Time));
-                       HotKey = (HotKey)info.GetValue("hotkey", typeof(HotKey));
-                       SubCategories = (List<ISubCategory>)info.GetValue("subcategories", 
typeof(List<ISubCategory>));
-                       Position = (Int32) info.GetValue("position", typeof (Int32));
-                       SortMethod = (SortMethodType)info.GetValue("sort_method", typeof(SortMethodType));
-                       Color = Color.ColorFromUShort ((ushort)info.GetValue("red", typeof(ushort)),
-                                          (ushort)info.GetValue("green", typeof(ushort)),
-                                          (ushort)info.GetValue("blue", typeof(ushort)));
-                       try {
-                               TagFieldPosition = (bool) info.GetValue("tagfieldpos", typeof (bool));
-                       } catch {
-                               TagFieldPosition = true;
-                       }
-                       try {
-                               TagHalfFieldPosition =(bool) info.GetValue("taghalffieldpos", typeof (bool));
-                       } catch {
-                               TagHalfFieldPosition = false;
-                       }
-                       try {
-                               TagGoalPosition = (bool) info.GetValue("taggoalpos", typeof (bool));
-                       } catch {
-                               TagGoalPosition = false;
-                       }
-                       try {
-                               FieldPositionIsDistance =(bool) info.GetValue("fieldposisdist", typeof 
(bool));
-                       } catch {
-                               FieldPositionIsDistance = false;
-                       }
-                       try {
-                               HalfFieldPositionIsDistance =(bool) info.GetValue("halffieldposisdist", 
typeof (bool));
-                       } catch {
-                               HalfFieldPositionIsDistance = false;
-                       }
-               }
-
-               // this method is automatically called during serialization
-               public void GetObjectData(SerializationInfo info, StreamingContext context) {
-                       info.AddValue("uuid", UUID);
-                       info.AddValue("name", Name);
-                       info.AddValue("start", Start);
-                       info.AddValue("stop", Stop);
-                       info.AddValue("hotkey", HotKey);
-                       info.AddValue("position", Position);
-                       info.AddValue("subcategories", SubCategories);
-                       /* Convert to ushort for backward compatibility */
-                       info.AddValue("red", (ushort) Color.R);
-                       info.AddValue("green", (ushort) Color.G);
-                       info.AddValue("blue", (ushort) Color.B);
-                       info.AddValue("sort_method", SortMethod);
-                       info.AddValue("tagfieldpos", TagFieldPosition);
-                       info.AddValue("taghalffieldpos", TagHalfFieldPosition);
-                       info.AddValue("taggoalpos", TagGoalPosition);
-                       info.AddValue("fieldposisdist", FieldPositionIsDistance);
-                       info.AddValue("halffieldposisdist", HalfFieldPositionIsDistance);
-               }
                #endregion
                
        }
diff --git a/LongoMatch.Core/Store/Coordinates.cs b/LongoMatch.Core/Store/Coordinates.cs
index 46df10a..7b9f215 100644
--- a/LongoMatch.Core/Store/Coordinates.cs
+++ b/LongoMatch.Core/Store/Coordinates.cs
@@ -21,10 +21,17 @@ using System.Collections.Generic;
 namespace LongoMatch.Common
 {
        [Serializable]
-       public class Coordinates: List<Point>
+       public class Coordinates
        {
+               
                public Coordinates ()
                {
+                       Points = new List<Point> ();
+               }
+               
+               public List<Point> Points {
+                       get;
+                       set;
                }
                
                public override bool Equals (object obj)
@@ -33,11 +40,11 @@ namespace LongoMatch.Common
             if (c == null)
                                return false;
                                
-                       if (c.Count != Count)
+                       if (c.Points.Count != Points.Count)
                                return false;
                        
-                       for (int i=0; i<Count; i++) {
-                               if (c[i] != this[i])
+                       for (int i=0; i < Points.Count; i++) {
+                               if (!c.Points[i].Equals (Points[i]))
                                        return false;
                        }
                        return true;
@@ -47,8 +54,12 @@ namespace LongoMatch.Common
                {
                        string s = "";
                        
-                       for (int i=0; i<Count; i++) {
-                               s += this[i].X.ToString() +  this[i].Y.ToString();
+                       if (Points.Count == 0) {
+                               return base.GetHashCode ();
+                       }
+                       
+                       for (int i=0; i < Points.Count; i++) {
+                               s += this.Points[i].X.ToString() +  this.Points[i].Y.ToString();
                        }
                        
                        return int.Parse(s);
diff --git a/LongoMatch.Core/Store/Drawing.cs b/LongoMatch.Core/Store/Drawing.cs
index 047e69f..e30c9ff 100644
--- a/LongoMatch.Core/Store/Drawing.cs
+++ b/LongoMatch.Core/Store/Drawing.cs
@@ -27,7 +27,6 @@ namespace LongoMatch.Store
        [Serializable]
        public class Drawing
        {
-               private byte[] drawingBuf;
                private const int DEFAULT_PAUSE_TIME = 5000;
 
                /// <summary>
@@ -37,44 +36,21 @@ namespace LongoMatch.Store
                /// which stop time is stored in a int value
                /// </summary>
                public Drawing() {
-                       PauseTime = DEFAULT_PAUSE_TIME;
+                       Pause = new Time (DEFAULT_PAUSE_TIME);
                }
 
                /// <summary>
                /// Pixbuf with the drawing
                /// </summary>
                public Image Pixbuf {
-                       get {
-                               if(drawingBuf != null)
-                                       return Image.Deserialize(drawingBuf);
-                               else return null;
-                       }
-                       set {
-                               drawingBuf = value.Serialize();
-                       }
-               }
-
-               /// <summary>
-               /// Render time of the drawing
-               /// </summary>
-               public Time Render {
                        get;
                        set;
                }
 
                /// <summary>
-               /// Time to pause the playback and display the drawing
-               /// </summary>
-               public Time Pause {
-                       set;
-                       get;
-               }
-               
-               /// <summary>
                /// Render time of the drawing
                /// </summary>
-               [JsonIgnore]
-               public int RenderTime {
+               public Time Render {
                        get;
                        set;
                }
@@ -82,8 +58,7 @@ namespace LongoMatch.Store
                /// <summary>
                /// Time to pause the playback and display the drawing
                /// </summary>
-               [JsonIgnore]
-               public int PauseTime {
+               public Time Pause {
                        set;
                        get;
                }
diff --git a/LongoMatch.Core/Store/HotKey.cs b/LongoMatch.Core/Store/HotKey.cs
index fc6a4a3..44db021 100644
--- a/LongoMatch.Core/Store/HotKey.cs
+++ b/LongoMatch.Core/Store/HotKey.cs
@@ -24,6 +24,10 @@ using System;
 using System.Collections.Generic;
 using System.Runtime.Serialization;
 using Mono.Unix;
+using Newtonsoft.Json;
+using LongoMatch.Common;
+
+
 #if HAVE_GTK
 using Gdk;
 #endif
@@ -37,19 +41,17 @@ namespace LongoMatch.Store
        /// 'key' and 'modifier' are set to -1 when it's initialized
        /// </summary>
        [Serializable]
+       [JsonConverter (typeof (LongoMatchConverter))]
        public class HotKey : IEquatable<HotKey>
        {
-               private int key;
-               private int modifier;
-
                #region Constructors
                /// <summary>
                /// Creates a new undefined HotKey
                /// </summary>
                public HotKey()
                {
-                       this.key = -1;
-                       this.modifier = -1;
+                       Key = -1;
+                       Modifier = -1;
                }
                #endregion
 
@@ -58,49 +60,55 @@ namespace LongoMatch.Store
                /// Gdk Key
                /// </summary>
                public int Key {
-                       get {
-                               return key;
-                       }
-                       set {
-                               key = value;
-                       }
+                       get;
+                       set;
                }
 
                /// <summary>
                /// Key modifier. Only Alt and Shift can be used
                /// </summary>
                public int Modifier {
-                       get {
-                               return modifier;
-                       }
-                       set {
-                               modifier = value;
-                       }
+                       get;
+                       set;
                }
 
                /// <summary>
                /// Get whether the hotkey is defined or not
                /// </summary>
+               [JsonIgnore]
                public Boolean Defined {
                        get {
-                               return (key!=-1 && modifier != -1);
+                               return (Key!=-1 && Modifier != -1);
                        }
                }
                #endregion
 
                #region Public Methods
-               public bool Equals(HotKey hotkeyComp) {
+               public bool Equals (HotKey hotkeyComp) {
+                       if (hotkeyComp == null)
+                               return false;
                        return (this.Key == hotkeyComp.Key && this.Modifier == hotkeyComp.Modifier);
                }
                #endregion
 
                #region Operators
-               static public bool operator == (HotKey hk1, HotKey hk2) {
-                       return hk1.Equals(hk2);
+               static public bool operator == (HotKey a, HotKey b) {
+                       // If both are null, or both are same instance, return true.
+                       if (System.Object.ReferenceEquals(a, b))
+                       {
+                               return true;
+                       }
+
+                       // If one is null, but not both, return false.
+                       if (((object)a == null) || ((object)b == null))
+                       {
+                               return false;
+                       }
+                       return a.Equals(b);
                }
 
-               static public bool operator != (HotKey hk1, HotKey hk2) {
-                       return !hk1.Equals(hk2);
+               static public bool operator != (HotKey a, HotKey b) {
+                       return !(a == b);
                }
                #endregion
 
@@ -117,7 +125,7 @@ namespace LongoMatch.Store
 
                public override int GetHashCode()
                {
-                       return key ^ modifier;
+                       return Key ^ Modifier;
                }
 
                public override string ToString()
diff --git a/LongoMatch.Core/Store/MediaFile.cs b/LongoMatch.Core/Store/MediaFile.cs
index 0d05cef..5dc7734 100644
--- a/LongoMatch.Core/Store/MediaFile.cs
+++ b/LongoMatch.Core/Store/MediaFile.cs
@@ -30,21 +30,6 @@ namespace LongoMatch.Store
        [Serializable]
        public class MediaFile
        {
-
-               string filePath;
-               long length; // In MSeconds
-               ushort fps;
-               bool hasAudio;
-               bool hasVideo;
-               string container;
-               string videoCodec;
-               string audioCodec;
-               uint videoHeight;
-               uint videoWidth;
-               double par;
-               byte[] thumbnailBuf;
-
-
                public MediaFile() {}
 
                public MediaFile(string filePath,
@@ -60,147 +45,78 @@ namespace LongoMatch.Store
                                 double par,
                                 Image preview)
                {
-                       this.filePath = filePath;
-                       this.length = length;
-                       this.hasAudio = hasAudio;
-                       this.hasVideo = hasVideo;
-                       this.container = container;
-                       this.videoCodec = videoCodec;
-                       this.audioCodec = audioCodec;
-                       this.videoHeight = videoHeight;
-                       this.videoWidth = videoWidth;
-                       if(fps == 0)
-                               //For audio Files
-                               this.fps=25;
-                       else
-                               this.fps = fps;
-                       this.Preview = preview;
+                       FilePath = filePath;
+                       Duration = new Time ((int)length);
+                       HasAudio = hasAudio;
+                       HasVideo = hasVideo;
+                       Container = container;
+                       VideoCodec = videoCodec;
+                       AudioCodec = audioCodec;
+                       VideoHeight = videoHeight;
+                       VideoWidth = videoWidth;
+                       Fps = fps;
+                       Preview = preview;
                        Par = par;
                }
 
                public string FilePath {
-                       get {
-                               return this.filePath;
-                       }
-                       set {
-                               this.filePath = value;
-                       }
+                       get;
+                       set;
                }
 
                public Time Duration {
-                       get {
-                               return new Time ((int) length);
-                       }
-               }
-
-               public long Length {
-                       get {
-                               return this.length;
-                       }
-                       set {
-                               this.length = value;
-                       }
+                       get;
+                       set;
                }
 
                public bool HasVideo {
-                       get {
-                               return this.hasVideo;
-                       }
-                       set {
-                               this.hasVideo = value;
-                       }
+                       get;
+                       set;
                }
 
                public bool HasAudio {
-                       get {
-                               return this.hasAudio;
-                       }
-                       set {
-                               this.hasAudio = value;
-                       }
+                       get;
+                       set;
                }
                
                public string Container {
-                       get {
-                               return this.container;
-                       }
-                       set {
-                               this.container = value;
-                       }
+                       get;
+                       set;
                }
 
                public string VideoCodec {
-                       get {
-                               return this.videoCodec;
-                       }
-                       set {
-                               this.videoCodec = value;
-                       }
+                       get;
+                       set;
                }
 
                public string AudioCodec {
-                       get {
-                               return this.audioCodec;
-                       }
-                       set {
-                               this.audioCodec = value;
-                       }
+                       get;
+                       set;
                }
 
                public uint VideoWidth {
-                       get {
-                               return this.videoWidth;
-                       }
-                       set {
-                               this.videoWidth= value;
-                       }
+                       get;
+                       set;
                }
 
                public uint VideoHeight {
-                       get {
-                               return this.videoHeight;
-                       }
-                       set {
-                               this.videoHeight= value;
-                       }
+                       get;
+                       set;
                }
 
                public ushort Fps {
-                       get {
-                               return this.fps;
-                       }
-                       set {
-                               if(value == 0)
-                                       //For audio Files
-                                       this.fps=25;
-                               else
-                                       this.fps = value;
-                       }
+                       get;
+                       set;
                }
                
                public double Par {
-                       get {
-                               if (par == 0)
-                                       return 1;
-                               return par;
-                       }
-                       set {
-                               par = value;
-                       }
+                       get;
+                       set;
                }
                
                public Image Preview {
-                       get {
-                               if(thumbnailBuf != null)
-                                       return Image.Deserialize(thumbnailBuf);
-                               return null;
-                       }
-                       set {
-                               if(value != null) {
-                                       thumbnailBuf = value.Serialize();
-                               } else
-                                       thumbnailBuf = null;
-                       }
+                       get;
+                       set;
                }
                
                [JsonIgnore]
@@ -209,18 +125,12 @@ namespace LongoMatch.Store
                                string desc = String.Format ("<b>File path</b>: {0}\n", FilePath);
                                desc += String.Format ("<b>Format</b>: {0}x{1} @ {2}fps\n", VideoWidth,
                                                       VideoHeight, Fps);
-                               desc += String.Format ("<b>Duration</b>: {0}\n",
-                                                      new Time {MSeconds=(int)Length}.ToSecondsString());
+                               desc += String.Format ("<b>Duration</b>: {0}\n", Duration.ToSecondsString ());
                                desc += String.Format ("<b>Video Codec</b>: {0}\n", VideoCodec);
                                desc += String.Format ("<b>Audio Codec</b>: {0}\n", AudioCodec);
                                desc += String.Format ("<b>Container</b>: {0}\n", Container);
                                return desc;
                        }
                }
-               
-               public uint GetFrames() {
-                       return (uint)(Fps*Length/1000);
-               }
-               
        }
 }
diff --git a/LongoMatch.Core/Store/Period.cs b/LongoMatch.Core/Store/Period.cs
index 215f6cf..90d1b4d 100644
--- a/LongoMatch.Core/Store/Period.cs
+++ b/LongoMatch.Core/Store/Period.cs
@@ -18,6 +18,7 @@
 using System;
 using System.Linq;
 using System.Collections.Generic;
+using Newtonsoft.Json;
 
 namespace LongoMatch.Store
 {
@@ -28,6 +29,7 @@ namespace LongoMatch.Store
                {
                }
                
+               [JsonIgnore]
                public TimeNode PeriodNode {
                        get {
                                return new TimeNode {Name=Name,
diff --git a/LongoMatch.Core/Store/PixbufTimeNode.cs b/LongoMatch.Core/Store/PixbufTimeNode.cs
index 5902f3f..6faa2ad 100644
--- a/LongoMatch.Core/Store/PixbufTimeNode.cs
+++ b/LongoMatch.Core/Store/PixbufTimeNode.cs
@@ -33,35 +33,15 @@ namespace LongoMatch.Store
        [Serializable]
        public class PixbufTimeNode : TimeNode
        {
-               private byte[] thumbnailBuf;
-               
-               #region Contructors
                public PixbufTimeNode() {
                }
-               #endregion
 
-               #region Properties
                /// <summary>
                /// Segment thumbnail
                /// </summary>
                public Image Miniature {
-                       get {
-                               if(thumbnailBuf != null)
-                                       return Image.Deserialize(thumbnailBuf);
-                               else return null;
-                       } set {
-                               if (value == null)
-                                       thumbnailBuf = null;
-                               else {
-                                       if (value.Height > Constants.MAX_THUMBNAIL_SIZE ||
-                                           value.Width > Constants.MAX_THUMBNAIL_SIZE) {
-                                               value.Scale(Constants.MAX_THUMBNAIL_SIZE, 
Constants.MAX_THUMBNAIL_SIZE);
-                                       }
-                                       thumbnailBuf = value.Serialize();
-                               }
-                       }
+                       get;
+                       set;
                }
-               
-               #endregion
        }
 }
diff --git a/LongoMatch.Core/Store/Play.cs b/LongoMatch.Core/Store/Play.cs
index 1cbaaab..edf87c1 100644
--- a/LongoMatch.Core/Store/Play.cs
+++ b/LongoMatch.Core/Store/Play.cs
@@ -34,22 +34,27 @@ namespace LongoMatch.Store
        /// </summary>
 
        [Serializable]
-       public class  Play : PixbufTimeNode, ITimelineNode
+       public class  Play : PixbufTimeNode, ITimelineNode, IIDObject
        {
 
                #region Constructors
                public Play() {
                        Drawings = new List<Drawing>();
-                       Tags = new StringTagStore();
-                       Players = new PlayersTagStore(); 
-                       Teams = new TeamsTagStore();
+                       Players = new List<Player> ();
+                       Tags = new List<Tag>();
                        Fps = 25;
                        PlaybackRate = 1.0;
+                       ID = Guid.NewGuid ();
                }
                #endregion
 
                #region Properties
 
+               public Guid ID {
+                       get;
+                       set;
+               }
+               
                /// <summary>
                /// Category in which this play is tagged
                /// </summary>
@@ -90,31 +95,6 @@ namespace LongoMatch.Store
                }
 
                /// <summary>
-               /// Stop frame number
-               /// </summary>
-               [JsonIgnore]
-               public uint StopFrame {
-                       get {
-                               return (uint)(Stop.MSeconds * Fps / 1000);
-                       }
-                       set {
-                               Stop = new Time {MSeconds = (int)(1000 * value / Fps)};
-                       }
-               }
-
-               /// <summary>
-               /// Get the key frame number if this play as key frame drawing or 0
-               /// </summary>
-               [JsonIgnore]
-               public uint KeyFrame {
-                       get {
-                               if(HasDrawings)
-                                       return (uint) KeyFrameDrawing.RenderTime * Fps / 1000;
-                               else return 0;
-                       }
-               }
-
-               /// <summary>
                /// Get/Set wheter this play is actually loaded. Used in  <see 
cref="LongoMatch.Gui.Component.TimeScale">
                /// </summary>
                public bool Selected {
@@ -156,49 +136,26 @@ namespace LongoMatch.Store
                        }
                }
 
-               /// <summary>
-               /// Central frame number using (stopFrame-startFrame)/2
-               /// </summary>
-               [JsonIgnore]
-               public uint CentralFrame {
-                       get {
-                               return StopFrame-((TotalFrames)/2);
-                       }
-               }
-
-               /// <summary>
-               /// Number of frames inside the play's boundaries
-               /// </summary>
-               [JsonIgnore]
-               public uint TotalFrames {
-                       get {
-                               return StopFrame-StartFrame;
-                       }
-               }
-               
-               public Team Team {
-                       get;
-                       set;
-               }
-
-               public string GamePeriod {
+               public List<Player> Players {
                        get;
                        set;
                }
                
-               public StringTagStore Tags {
+               public Team Team {
                        get;
                        set;
                }
-               
-               public PlayersTagStore Players {
+
+               public List<Tag> Tags {
                        get;
                        set;
                }
                
-               public TeamsTagStore Teams {
-                       get;
-                       set;
+               [JsonIgnore]
+               public TagsStore TagsStore {
+                       get {
+                               return new TagsStore {Tags=Tags};
+                       }
                }
                
                public Coordinates FieldPosition {
@@ -224,19 +181,6 @@ namespace LongoMatch.Store
                #endregion
 
                #region Public methods
-               /// <summary>
-               /// Check if the frame number is inside the play boundaries
-               /// </summary>
-               /// <param name="frame">
-               /// A <see cref="System.Int32"/> with the frame number
-               /// </param>
-               /// <returns>
-               /// A <see cref="System.Boolean"/>
-               /// </returns>
-               public bool HasFrame(int frame) {
-                       return (frame>=StartFrame && frame<StopFrame);
-               }
-               
                public override string ToString()
                {
                        return Name + "\n" + Start.ToMSecondsString() + " - " + Stop.ToMSecondsString();
diff --git a/LongoMatch.Core/Store/Player.cs b/LongoMatch.Core/Store/Player.cs
index ee9a6b2..55d3b04 100644
--- a/LongoMatch.Core/Store/Player.cs
+++ b/LongoMatch.Core/Store/Player.cs
@@ -18,6 +18,8 @@
 
 using System;
 using LongoMatch.Common;
+using Newtonsoft.Json;
+using LongoMatch.Interfaces;
 
 namespace LongoMatch.Store
 {
@@ -25,17 +27,24 @@ namespace LongoMatch.Store
        /// Player of a team
        /// </summary>
        [Serializable]
-       public class Player
+       public class Player: IIDObject
        {
-               private byte[] photo;
 
                #region Constructors
                public Player()
                {
+                       ID = Guid.NewGuid ();
                }
+               
                #endregion
 
                #region Properties
+               
+               public Guid ID {
+                       get;
+                       set;
+               }
+               
                /// <summary>
                /// My name
                /// </summary>
@@ -43,6 +52,16 @@ namespace LongoMatch.Store
                        get;
                        set;
                }
+               
+               public string FirstName {
+                       get;
+                       set;
+               }
+               
+               public string NickName {
+                       get;
+                       set;
+               }
 
                /// <summary>
                /// My position in the field
@@ -64,18 +83,8 @@ namespace LongoMatch.Store
                /// My photo
                /// </summary>
                public Image Photo {
-                       get {
-                               if(photo != null)
-                                       return Image.Deserialize(photo);
-                               else
-                                       return null;
-                       }
-                       set {
-                               if(value != null)
-                                       photo = value.Serialize();
-                               else
-                                       photo = null;
-                       }
+                       get;
+                       set;
                }
 
                /// <summary>
diff --git a/LongoMatch.Core/Store/Point.cs b/LongoMatch.Core/Store/Point.cs
index b7ad06f..2e8c082 100644
--- a/LongoMatch.Core/Store/Point.cs
+++ b/LongoMatch.Core/Store/Point.cs
@@ -18,11 +18,13 @@
 
 using System;
 using System.Collections.Generic;
+using Newtonsoft.Json;
 
 namespace LongoMatch.Common
 {
        
        [Serializable]
+       [JsonConverter (typeof (LongoMatchConverter))]
        public class Point {
 
                public Point (double x, double y) {
diff --git a/LongoMatch.Core/Store/Project.cs b/LongoMatch.Core/Store/Project.cs
index dfa72f1..a795060 100644
--- a/LongoMatch.Core/Store/Project.cs
+++ b/LongoMatch.Core/Store/Project.cs
@@ -45,19 +45,14 @@ namespace LongoMatch.Store
        /// </summary>
        ///
        [Serializable]
-       public class Project : IComparable
+       public class Project : IComparable, IIDObject
        {
-
-               [JsonProperty ("UUID")]
-               readonly Guid _UUID;
                ProjectDescription description;
-               [JsonProperty ("Timeline")]
-               List<Play> timeline;
 
                #region Constructors
                public Project() {
-                       _UUID = System.Guid.NewGuid();
-                       timeline = new List<Play>();
+                       ID = System.Guid.NewGuid();
+                       Timeline = new List<Play>();
                        Categories = new Categories();
                        LocalTeamTemplate = new TeamTemplate();
                        VisitorTeamTemplate = new TeamTemplate();
@@ -71,11 +66,14 @@ namespace LongoMatch.Store
                /// <summary>
                /// Unique ID for the project
                /// </summary>
-               [JsonIgnore]
-               public Guid UUID {
-                       get {
-                               return _UUID;
-                       }
+               public Guid ID {
+                       get;
+                       set;
+               }
+               
+               public List<Play> Timeline {
+                       get;
+                       set;
                }
                
                public ProjectDescription Description {
@@ -84,7 +82,7 @@ namespace LongoMatch.Store
                        }
                        set {
                                if (value != null) {
-                                       value.UUID = UUID;
+                                       value.ID = ID;
                                }
                                description = value;
                        }
@@ -93,6 +91,7 @@ namespace LongoMatch.Store
                /// <value>
                /// Categories template
                /// </value>
+               [JsonProperty(Order = -10)]
                public Categories Categories {
                        get;
                        set;
@@ -101,6 +100,7 @@ namespace LongoMatch.Store
                /// <value>
                /// Local team template
                /// </value>
+               [JsonProperty(Order = -9)]
                public TeamTemplate LocalTeamTemplate {
                        get;
                        set;
@@ -109,6 +109,7 @@ namespace LongoMatch.Store
                /// <value>
                /// Visitor team template
                /// </value>
+               [JsonProperty(Order = -8)]
                public TeamTemplate VisitorTeamTemplate {
                        get;
                        set;
@@ -125,20 +126,9 @@ namespace LongoMatch.Store
                }
                
                [JsonIgnore]
-               [Obsolete("Game units have been replaced with timers")]
-               public GameUnitsList  GameUnits {
-                       set {
-                               Categories.GameUnits = value;
-                       }
-                       get {
-                               return Categories.GameUnits;
-                       }
-               }
-               
-               [JsonIgnore]
                public IEnumerable<IGrouping<Category, Play>> PlaysGroupedByCategory {
                        get {
-                               return timeline.GroupBy(play => play.Category);
+                               return Timeline.GroupBy(play => play.Category);
                        }
                }
                #endregion
@@ -148,10 +138,10 @@ namespace LongoMatch.Store
                /// Frees all the project's resources helping the GC
                /// </summary>
                public void Clear() {
-                       timeline.Clear();
-                       Categories.Clear();
-                       VisitorTeamTemplate.Clear();
-                       LocalTeamTemplate.Clear();
+                       Timeline.Clear();
+                       Categories.List.Clear();
+                       VisitorTeamTemplate.List.Clear();
+                       LocalTeamTemplate.List.Clear();
                        Periods.Clear();
                        Timers.Clear();
                }
@@ -188,12 +178,12 @@ namespace LongoMatch.Store
                                Miniature = miniature,
                                Fps = Description.File.Fps,
                        };
-                       timeline.Add(play);
+                       Timeline.Add(play);
                        return play;
                }
                
                public void AddPlay (Play play) {
-                       timeline.Add(play);
+                       Timeline.Add(play);
                }
                
                /// <summary>
@@ -207,7 +197,7 @@ namespace LongoMatch.Store
                /// </param>
                public void RemovePlays(List<Play> plays) {
                        foreach(Play play in plays)
-                               timeline.Remove(play);
+                               Timeline.Remove(play);
                }
 
                /// <summary>
@@ -217,56 +207,47 @@ namespace LongoMatch.Store
                /// A <see cref="System.Int32"/>: category index
                /// </param>
                public void RemoveCategory(Category category) {
-                       if(Categories.Count == 1)
+                       if(Categories.List.Count == 1)
                                throw new Exception("You can't remove the last Category");
-                       Categories.Remove(category);
+                       Categories.List.Remove(category);
 
-                       timeline.RemoveAll(p => p.Category.UUID == category.UUID);
+                       Timeline.RemoveAll(p => p.Category.ID == category.ID);
                }
                
                public void RemovePlayer(TeamTemplate template, Player player) {
-                       if(template.Count == 1)
+                       if(template.List.Count == 1)
                                throw new Exception("You can't remove the last Player");
-                       template.Remove(player);
-                       foreach (var play in timeline) {
-                               play.Players.RemoveByPlayer(player);
+                       template.List.Remove(player);
+                       foreach (var play in Timeline) {
+                               play.Players.RemoveAll (p => p == player);
                        }
                }
                
-               public void DeleteSubcategoryTags(Category cat, List<ISubCategory> subcategories) {
-                       foreach (var play in timeline.Where(p => p.Category == cat)) {
+               public void DeleteSubcategoryTags(Category cat, List<SubCategory> subcategories) {
+                       foreach (var play in Timeline.Where(p => p.Category == cat)) {
                                foreach (var subcat in subcategories) {
                                        Log.Error(play.Name);
-                                       if (subcat is TagSubCategory)
-                                               play.Tags.RemoveBySubcategory(subcat);
-                                       else if (subcat is TeamSubCategory)
-                                               play.Teams.RemoveBySubcategory(subcat);
-                                       else if (subcat is PlayerSubCategory)
-                                               play.Players.RemoveBySubcategory(subcat);
+                                       if (subcat is SubCategory)
+                                               play.TagsStore.RemoveBySubcategory(subcat);
                                }
                        }
                }
 
                public List<Play> PlaysInCategory(Category category) {
-                       return timeline.Where(p => p.Category.UUID == category.UUID).ToList();
+                       return Timeline.Where(p => p.Category.ID == category.ID).ToList();
                }
 
-               public List<Play> AllPlays() {
-                       return timeline;
-               }
-
-
                public bool Equals(Project project) {
                        if(project == null)
                                return false;
                        else
-                               return UUID == project.UUID;
+                               return ID == project.ID;
                }
 
                public int CompareTo(object obj) {
                        if(obj is Project) {
                                Project project = (Project) obj;
-                               return UUID.CompareTo(project.UUID);
+                               return ID.CompareTo(project.ID);
                        }
                        else
                                throw new ArgumentException("object is not a Project and cannot be compared");
@@ -274,12 +255,12 @@ namespace LongoMatch.Store
 
                public static void Export(Project project, string file) {
                        file = Path.ChangeExtension(file, Constants.PROJECT_EXT);
-                       SerializableObject.Save(project, file);
+                       Serializer.Save(project, file);
                }
 
                public static Project Import(string file) {
                        try {
-                               return SerializableObject.Load<Project>(file);
+                               return Serializer.Load<Project>(file);
                        }
                        catch  (Exception e){
                                Log.Exception (e);
diff --git a/LongoMatch.Core/Store/ProjectDescription.cs b/LongoMatch.Core/Store/ProjectDescription.cs
index 3d2ab5b..68f0deb 100644
--- a/LongoMatch.Core/Store/ProjectDescription.cs
+++ b/LongoMatch.Core/Store/ProjectDescription.cs
@@ -19,6 +19,7 @@
 using System;
 using Newtonsoft.Json;
 using LongoMatch.Store;
+using LongoMatch.Interfaces;
 
 namespace LongoMatch.Store
 {
@@ -27,12 +28,12 @@ namespace LongoMatch.Store
        /// Describes a project in LongoMatch.
        /// </summary>
        [Serializable]
-       public class ProjectDescription :  IComparable
+       public class ProjectDescription :  IComparable, IIDObject
        {
                /// <summary>
                /// Unique ID of the parent project
                /// </summary>
-               public Guid UUID {
+               public Guid ID {
                        get;
                        set;
                }
@@ -72,7 +73,22 @@ namespace LongoMatch.Store
                        get;
                        set;
                }
+               
+               public string Category {
+                       get;
+                       set;
+               }
 
+               public string Group {
+                       get;
+                       set;
+               }
+               
+               public string Phase {
+                       get;
+                       set;
+               }
+               
                /// <summary>
                /// Name of the local team
                /// </summary>
@@ -113,7 +129,7 @@ namespace LongoMatch.Store
                        get;
                        set;
                }
-
+               
                /// <summary>
                /// String representing the video format like "widhtxheight fps"
                /// </summary>
@@ -137,7 +153,7 @@ namespace LongoMatch.Store
                                ProjectDescription project = (ProjectDescription) obj;
                                
                                if (File == null || project.File == null)
-                                       return UUID.CompareTo(project.UUID);
+                                       return ID.CompareTo(project.ID);
                                return this.File.FilePath.CompareTo(project.File.FilePath);
                        }
                        else
diff --git a/LongoMatch.Core/Store/SubCategory.cs b/LongoMatch.Core/Store/SubCategory.cs
index f05f8e8..f97fcf5 100644
--- a/LongoMatch.Core/Store/SubCategory.cs
+++ b/LongoMatch.Core/Store/SubCategory.cs
@@ -41,18 +41,15 @@ namespace LongoMatch.Store
        /// Goal category to extends its tags.
        /// </summary>
        [Serializable]
-       [JsonObject]
-       public class SubCategory<T>: List<T>, ISubCategory
+       public class SubCategory
        {
 
                public SubCategory() {
                        Name = "";
                        AllowMultiple = true;
-                       FastTag = true;
+                       Options = new List<string>();
                }
 
-               public SubCategory(IEnumerable<T> list): base(list) {}
-
                /// <summary>
                /// Name of the subcategory
                /// </summary>
@@ -60,25 +57,25 @@ namespace LongoMatch.Store
                        get;
                        set;
                }
-
+               
                /// <summary>
-               /// Wheter this subcategory allow multiple options.
-               /// eg: Team will only allow one option, because a goal can't be scored by 2 teams
+               /// Gets or sets the list of available options.
                /// </summary>
-               public bool AllowMultiple {
+               /// <value>The options.</value>
+               public List<string> Options {
                        get;
                        set;
                }
 
                /// <summary>
-               /// Whether this SubCategory should be added to the tagging widget shown after
-               /// creating a new play.
+               /// Wheter this subcategory allow multiple options.
+               /// eg: Team will only allow one option, because a goal can't be scored by 2 teams
                /// </summary>
-               public bool FastTag {
+               public bool AllowMultiple {
                        get;
                        set;
                }
-               
+
                protected string RenderDesc(string type, string values) {
                        string str;
                        
@@ -89,98 +86,12 @@ namespace LongoMatch.Store
                }
                
                public virtual string ToMarkupString(){
-                       return this.ToString();
-               }
-               
-               public List<string> ElementsDesc () {
-                       return this.Select(e => e.ToString()).ToList();
-               }
-       }
-
-       [Serializable]
-       public class TagSubCategory: SubCategory<string> {
-       
-               public TagSubCategory () {}
-
-               public TagSubCategory (IEnumerable<string> tags): base(tags) {}
-               
-               public override string ToMarkupString(){
-                       string tags = "";
+                       string tags;
                        
-                       foreach (string tag in this) {
-                               if (tags == "")
-                                       tags += tag;
-                               else
-                                       tags += " - " + tag;
-                       }
+                       tags = String.Join (" - ", Options);
                        return RenderDesc (Catalog.GetString("Tags list"),
                                          Catalog.GetString("Tags:" + 
                                          String.Format(" <b>{0}</b>", tags)));
                }
-               
-       }
-
-       /// <summary>
-       /// SubCategory to tag Players
-       /// Stores a list of teams to be shown in the options.
-       /// The teams LOCAL, VISITOR will be then mapped to a list of players
-       /// for this team, so that a change in the team's templates will not
-       /// affect the list of available players.
-       /// </summary>
-       [Serializable]
-       public class PlayerSubCategory: SubCategory<Team> {
-       
-               public bool PositionFilter {get; set;}
-               
-               public override string ToMarkupString(){
-                       string teams = "";
-                       if (this.Contains(Team.LOCAL))
-                               teams += Catalog.GetString("Local ");
-                       if (this.Contains(Team.VISITOR))
-                               teams += Catalog.GetString("Visitor");
-                       
-                       return RenderDesc(Catalog.GetString("List of players"),
-                                         Catalog.GetString("Teams:" + 
-                                         String.Format(" <b>{0}</b>", teams)));
-               }
-       }
-
-       /// <summary>
-       /// SubCategory to tag teams
-       /// A list of options containing the teams to be shown in the options.
-       /// The teams LOCAL, VISITOR and NONE are then mapped to real team names
-       /// so that a change in the name doesn't affect the category.
-       /// </summary>
-       [Serializable]
-       public class TeamSubCategory: SubCategory<Team> {
-       
-               public TeamSubCategory() {
-                       Name = Catalog.GetString("Team");
-                       AllowMultiple=true;
-                       FastTag=true;
-                       Add(Team.LOCAL);
-                       Add(Team.VISITOR);
-               }
-               
-               public override string ToMarkupString(){
-                       return RenderDesc(Catalog.GetString("Team selection"), "");
-               }
-       }
-       
-       /// <summary>
-       /// SubCategory to tag locations or trajectories in the game field
-       /// </summary>
-       [Serializable]
-       public class CoordinatesSubCategory: SubCategory<Coordinates> {
-       
-               /* Use 1 for locations or 2 for trajectories */
-               public int NumCoordinates {
-                       get;
-                       set;
-               }
-               
-               public override string ToMarkupString(){
-                       return RenderDesc(Catalog.GetString("Coordinates"), "");
-               }
        }
 }
\ No newline at end of file
diff --git a/LongoMatch.Core/Store/Tag.cs b/LongoMatch.Core/Store/Tag.cs
index 0f87028..ec8b720 100644
--- a/LongoMatch.Core/Store/Tag.cs
+++ b/LongoMatch.Core/Store/Tag.cs
@@ -27,88 +27,24 @@ namespace LongoMatch.Store
 {
 
        [Serializable]
-       public class Tag<T>: ITag<T>
+       public class Tag
        {
                public Tag() {
                }
                
-               public ISubCategory SubCategory {
+               public SubCategory SubCategory {
                        set;
                        get;
                }
                
-               public T Value {
+               public string Value {
                        get;
                        set;
                }
                
-       }
-
-       [Serializable]
-       public class StringTag: Tag<string>
-       {
-               public StringTag() {}
-               
-               public override bool Equals (object obj)
-               {
-                       StringTag tag = obj as StringTag;
-            if (tag == null)
-                               return false;
-                       return Value.Equals (tag.Value) && SubCategory.Equals(tag.SubCategory);
-               }
-               
-               public override int GetHashCode ()
-               {
-                       return Value.GetHashCode ();
-               }
-       }
-
-       [Serializable]
-       public class PlayerTag: Tag<Player>
-       {
-               public PlayerTag() {}
-               
-               public override bool Equals (object obj)
-               {
-                       PlayerTag tag = obj as PlayerTag;
-            if (tag == null)
-                               return false;
-                       return Value.Equals (tag.Value) && SubCategory.Equals(tag.SubCategory) ;
-               }
-               
-               public override int GetHashCode ()
-               {
-                       return Value.GetHashCode ();
-               }
-       }
-
-       [Serializable]
-       public class TeamTag: Tag<Team>
-       {
-               public TeamTag() {}
-               
-               public override bool Equals (object obj)
-               {
-                       TeamTag tag = obj as TeamTag;
-            if (tag == null)
-                               return false;
-                       return Value.Equals (tag.Value) && SubCategory.Equals(tag.SubCategory);
-               }
-               
-               public override int GetHashCode ()
-               {
-                       return Value.GetHashCode ();
-               }
-       }
-       
-       [Serializable]
-       public class CoordinatesTag: Tag<Coordinates>
-       {
-               public CoordinatesTag() {}
-               
                public override bool Equals (object obj)
                {
-                       CoordinatesTag tag = obj as CoordinatesTag;
+                       Tag tag = obj as Tag;
             if (tag == null)
                                return false;
                        return Value.Equals (tag.Value) && SubCategory.Equals(tag.SubCategory);
@@ -116,7 +52,11 @@ namespace LongoMatch.Store
                
                public override int GetHashCode ()
                {
-                       return Value.GetHashCode ();
+                       if (Value != null) {
+                               return Value.GetHashCode ();
+                       } else {
+                               return base.GetHashCode ();
+                       }
                }
        }
 }
diff --git a/LongoMatch.Core/Store/TagStore.cs b/LongoMatch.Core/Store/TagStore.cs
index 92d8323..282ed0f 100644
--- a/LongoMatch.Core/Store/TagStore.cs
+++ b/LongoMatch.Core/Store/TagStore.cs
@@ -27,83 +27,58 @@ using LongoMatch.Store;
 namespace LongoMatch.Store
 {
        [Serializable]
-       [JsonObject (MemberSerialization = MemberSerialization.OptIn)]
-       public class TagsStore<T, W> where T:ITag<W>
+       public class TagsStore
        {
-               protected List<T> tagsList;
-               
                public TagsStore(){
-                       tagsList = new List<T>();
+                       Tags = new List<Tag>();
                }
                
-               [JsonProperty ("Tags")]
-               public List<T> Tags {
-                       get{
-                               return tagsList;
-                       }
-                       set {
-                               tagsList = value;
-                       }
+               public List<Tag> Tags {
+                       get;
+                       set;
                }
                
-               public void Add(T tag) {
+               public void Add(Tag tag) {
                        Log.Debug(String.Format("Adding tag {0} with subcategory{1}", tag, tag.SubCategory));
-                       tagsList.Add(tag);
+                       Tags.Add(tag);
                }
                
-               public void Remove(T tag) {
+               public void Remove(Tag tag) {
                        try {
-                               tagsList.Remove (tag);
+                               Tags.Remove (tag);
                        } catch (Exception e) {
                                Log.Warning("Error removing tag " + tag.ToString());
                                Log.Exception(e);
                        }
                }
                
-               public bool Contains(T tag) {
-                       return tagsList.Contains(tag);
+               public bool Contains(Tag tag) {
+                       return Tags.Contains(tag);
                }
                
-               public void RemoveBySubcategory(ISubCategory subcat) {
-                       tagsList.RemoveAll(t => t.SubCategory == subcat);
+               public void RemoveBySubcategory(SubCategory subcat) {
+                       Tags.RemoveAll(t => t.SubCategory == subcat);
                }
                
-               public List<T> AllUniqueElements {
+               [JsonIgnore]
+               public List<Tag> AllUniqueElements {
                        get {
-                               return (from tag in tagsList
+                               return (from tag in Tags
                                        group tag by tag into g
                                        select g.Key).ToList();
                        }
                }
                
-               public List<T> GetTags(ISubCategory subCategory) {
-                       return (from tag in tagsList
+               public List<Tag> GetTags(SubCategory subCategory) {
+                       return (from tag in Tags
                                where tag.SubCategory.Equals(subCategory)
                                select tag).ToList();
                }
                
-               public List<W> GetTagsValues() {
-                       return (from tag in tagsList
+               public List<string> GetTagsValues() {
+                       return (from tag in Tags
                                select tag.Value).ToList();
                }
        }
-       
-       [Serializable]
-       public class StringTagStore: TagsStore<StringTag, string> {}
-       
-       [Serializable]
-       public class PlayersTagStore: TagsStore<PlayerTag, Player> {
-               
-               public void RemoveByPlayer(Player player) {
-                       tagsList.RemoveAll(t => t.Value == player);
-               }
-               
-       }
-       
-       [Serializable]
-       public class TeamsTagStore: TagsStore<TeamTag, Team> {}
-       
-       [Serializable]
-       public class CoordinatesTagStore: TagsStore<CoordinatesTag, Coordinates> {}
 }
 
diff --git a/LongoMatch.Core/Store/Templates/CategoriesTemplate.cs 
b/LongoMatch.Core/Store/Templates/CategoriesTemplate.cs
index c04487f..21684a4 100644
--- a/LongoMatch.Core/Store/Templates/CategoriesTemplate.cs
+++ b/LongoMatch.Core/Store/Templates/CategoriesTemplate.cs
@@ -40,13 +40,8 @@ namespace LongoMatch.Store.Templates
        /// The <see cref="LongoMatch.DB.Project"/> must handle all the changes
        /// </summary>
        [Serializable]
-       [JsonObject]
-       public class Categories: List<Category>, ITemplate, ITemplate<Category>
+       public class Categories: ITemplate, ITemplate<Category>
        {
-               /* Database additions */
-               GameUnitsList gameUnits;
-               Version version;
-               byte[] fieldImage, halfFieldImage, goalImage ;
 
                /// <summary>
                /// Creates a new template
@@ -55,28 +50,23 @@ namespace LongoMatch.Store.Templates
                        FieldBackground = Config.FieldBackground;
                        HalfFieldBackground = Config.HalfFieldBackground;
                        GoalBackground = Config.GoalBackground;
+                       ID = Guid.NewGuid ();
+                       List = new List<Category>();
                }
-
-               public string Name {
+               
+               public Guid ID {
                        get;
                        set;
                }
                
-               public Version Version {
+               public List<Category> List {
                        get;
                        set;
                }
-               
-               public GameUnitsList GameUnits {
-                       set {
-                               gameUnits = value;
-                       }
-                       get {
-                               if (gameUnits == null) {
-                                       gameUnits = new GameUnitsList();
-                               }
-                               return gameUnits;
-                       }
+
+               public string Name {
+                       get;
+                       set;
                }
                
                public List<string> GamePeriods {
@@ -89,83 +79,34 @@ namespace LongoMatch.Store.Templates
                        set;
                }
                
-
-               
-               /* Keep this for backwards compatiblity with 0.18.11 */
-               [JsonIgnore]
-               public Image FieldBackgroundImage {get; set;}
-               [JsonIgnore]
-               public Image HalfFieldBackgroundImage {get; set;}
-               [JsonIgnore]
-               public Image GoalBackgroundImage {get; set;}
-
                public Image FieldBackground {
-                       get {
-                               if(fieldImage != null)
-                                       return Image.Deserialize(fieldImage);
-                               else return null;
-                       }
-                       set {
-                               if (value != null) {
-                                       if (value.Width > 500) {
-                                               value.Scale (500, 500);
-                                       }
-                                       fieldImage = value.Serialize();
-                               }
-                               else
-                                       fieldImage = null;
-                       }
+                       get;
+                       set;
                }
                
                public Image HalfFieldBackground {
-                       get {
-                               if(halfFieldImage != null)
-                                       return Image.Deserialize(halfFieldImage);
-                               else return null;
-                       }
-                       set {
-                               if (value != null) {
-                                       if (value.Width > 500) {
-                                               value.Scale (500, 500);
-                                       }
-                                       halfFieldImage = value.Serialize();
-                               }
-                               else
-                                       halfFieldImage = null;
-                       }
+                       get;
+                       set;
                }
                
                public Image GoalBackground {
-                       get {
-                               if(goalImage != null)
-                                       return Image.Deserialize(goalImage);
-                               else return null;
-                       }
-                       set {
-                               if (value != null) {
-                                       if (value.Width > 500) {
-                                               value.Scale (500, 500);
-                                       }
-                                       goalImage = value.Serialize();
-                               }
-                               else
-                                       goalImage = null;
-                       }
+                       get;
+                       set;
                }
                
                public void Save(string filePath) {
-                       SerializableObject.Save(this, filePath);
+                       Serializer.Save(this, filePath);
                }
        
                public void AddDefaultSubcategories (Category cat) {
-                       TagSubCategory resultsubcat;
+                       SubCategory resultsubcat;
                        
-                       resultsubcat = new TagSubCategory {
+                       resultsubcat = new SubCategory {
                                Name = Catalog.GetString ("Outcome"),
                                AllowMultiple = false,
                        };
-                       resultsubcat.Add (Catalog.GetString ("Success"));
-                       resultsubcat.Add (Catalog.GetString ("Failure"));
+                       resultsubcat.Options.Add (Catalog.GetString ("Success"));
+                       resultsubcat.Options.Add (Catalog.GetString ("Failure"));
                        cat.SubCategories.Add(resultsubcat);
                }       
                
@@ -173,7 +114,6 @@ namespace LongoMatch.Store.Templates
                        Color c = Color.Red;
                        HotKey h = new HotKey();
                        
-                       
                        Category cat =  new Category {
                                Name = "Category " + index,
                                Color = c,
@@ -184,12 +124,12 @@ namespace LongoMatch.Store.Templates
                                Position = index-1,
                        };
                        AddDefaultSubcategories(cat);
-                       Insert(index, cat);
+                       List.Insert(index, cat);
                        return cat;
                }
 
                public static Categories Load(string filePath) {
-                       Categories cat = SerializableObject.LoadSafe<Categories>(filePath);
+                       Categories cat = Serializer.LoadSafe<Categories>(filePath);
                        if (cat.GamePeriods == null) {
                                cat.GamePeriods = new List<string>();
                                cat.GamePeriods.Add ("1");
@@ -206,7 +146,6 @@ namespace LongoMatch.Store.Templates
                        periods.Add ("1");
                        periods.Add ("2");
                        defaultTemplate.GamePeriods = periods; 
-                       defaultTemplate.Version = new Version (Constants.DB_MAYOR_VERSION, 
Constants.DB_MINOR_VERSION);
                        return defaultTemplate;
                }
 
diff --git a/LongoMatch.Core/Store/Templates/TeamTemplate.cs b/LongoMatch.Core/Store/Templates/TeamTemplate.cs
index 5e8cbdf..239024e 100644
--- a/LongoMatch.Core/Store/Templates/TeamTemplate.cs
+++ b/LongoMatch.Core/Store/Templates/TeamTemplate.cs
@@ -28,21 +28,30 @@ using LongoMatch.Interfaces;
 namespace LongoMatch.Store.Templates
 {
        [Serializable]
-       [JsonObject]
-       public class TeamTemplate: List<Player>, ITemplate<Player>
+       public class TeamTemplate: ITemplate<Player>
        {
-               private byte[] thumbnailBuf;
                private const int MAX_WIDTH=100;
                private const int MAX_HEIGHT=100;
-               Version version;
                
-               public TeamTemplate() {
+               public TeamTemplate () {
                        TeamName = Catalog.GetString("Team");
                        if (Formation == null) {
                                FormationStr = "1-4-3-3";
                        }
+                       ID = Guid.NewGuid();
+                       List = new List<Player>();
                }
-
+               
+               public Guid ID {
+                       get;
+                       set;
+               }
+               
+               public List<Player> List {
+                       get;
+                       set;
+               }
+               
                public String Name {
                        get;
                        set;
@@ -53,27 +62,16 @@ namespace LongoMatch.Store.Templates
                        set;
                }
                
-               public Version Version {
+               public Image Shield {
                        get;
                        set;
                }
                
-               public Image Shield {
+               [JsonIgnore]
+               public int PlayingPlayers {
                        get {
-                               if(thumbnailBuf != null)
-                                       return Image.Deserialize(thumbnailBuf);
-                               else return null;
-                       } set {
-                               if (value == null)
-                                       thumbnailBuf = null;
-                               else
-                                       thumbnailBuf = value.Serialize();
+                               return Formation.Sum();
                        }
-               }
-               
-               public int PlayingPlayers {
-                       get;
-                       protected set;
                } 
                
                public int[] Formation {
@@ -95,7 +93,6 @@ namespace LongoMatch.Store.Templates
                                                throw new FormatException ();
                                        }
                                }
-                               PlayingPlayers = tactics.Sum();
                                Formation = tactics;
                        }
                        get {
@@ -106,12 +103,12 @@ namespace LongoMatch.Store.Templates
                [JsonIgnore]
                public List<Player> PlayingPlayersList {
                        get {
-                               return this.Where(p=>p.Playing).Select(p=>p).ToList();
+                               return List.Where(p=>p.Playing).Select(p=>p).ToList();
                        }
                }
 
                public void Save(string filePath) {
-                       SerializableObject.Save(this, filePath);
+                       Serializer.Save(this, filePath);
                }
                
                public Player AddDefaultItem (int i) {
@@ -124,12 +121,12 @@ namespace LongoMatch.Store.Templates
                                Position = "",
                                Photo = null,
                                Playing = true,};
-                       Insert (i, p);
+                       List.Insert (i, p);
                        return p;
                }
 
                public static TeamTemplate Load(string filePath) {
-                       TeamTemplate template = SerializableObject.LoadSafe<TeamTemplate>(filePath);
+                       TeamTemplate template = Serializer.LoadSafe<TeamTemplate>(filePath);
                        if (template.Formation == null) {
                                template.FormationStr = "1-4-3-3";
                        }
@@ -142,11 +139,10 @@ namespace LongoMatch.Store.Templates
                        return defaultTemplate;
                }
 
-               private void FillDefaultTemplate(int playersCount) {
-                       Clear();
+               void FillDefaultTemplate(int playersCount) {
+                       List.Clear();
                        for(int i=1; i<=playersCount; i++)
                                AddDefaultItem(i-1);
-                       version = new Version (Constants.DB_MAYOR_VERSION, Constants.DB_MINOR_VERSION);
                }
        }
 }
diff --git a/LongoMatch.Core/Store/Time.cs b/LongoMatch.Core/Store/Time.cs
index 2de8962..10d17dc 100644
--- a/LongoMatch.Core/Store/Time.cs
+++ b/LongoMatch.Core/Store/Time.cs
@@ -20,6 +20,7 @@
 
 using System;
 using Newtonsoft.Json;
+using LongoMatch.Common;
 
 namespace LongoMatch.Store
 {
@@ -29,6 +30,7 @@ namespace LongoMatch.Store
        /// It's expressed in miliseconds and provide some helper methods for time conversion and 
representation
        /// </summary>
        [Serializable]
+       [JsonConverter (typeof (LongoMatchConverter))]
        public class Time :  IComparable
        {
                private const int MS = 1000000 ;
diff --git a/LongoMatch.Core/Utils.cs b/LongoMatch.Core/Utils.cs
index 5186ecd..836d436 100644
--- a/LongoMatch.Core/Utils.cs
+++ b/LongoMatch.Core/Utils.cs
@@ -47,7 +47,7 @@ namespace LongoMatch.Utils
 
                                if(!mediaFile.HasVideo || mediaFile.VideoCodec == "")
                                        throw new Exception(Catalog.GetString("This file doesn't contain a 
video stream."));
-                               if(mediaFile.HasVideo && mediaFile.Length == 0)
+                               if(mediaFile.HasVideo && mediaFile.Duration.MSeconds == 0)
                                        throw new Exception(Catalog.GetString("This file contains a video 
stream but its length is 0."));
                                if (multimedia.FileNeedsRemux (mediaFile)) {
                                        string q = Catalog.GetString("The file you are trying to load is not 
properly supported. " +
diff --git a/LongoMatch.Drawing/Widgets/CategoriesLabels.cs b/LongoMatch.Drawing/Widgets/CategoriesLabels.cs
index ac96f99..535d961 100644
--- a/LongoMatch.Drawing/Widgets/CategoriesLabels.cs
+++ b/LongoMatch.Drawing/Widgets/CategoriesLabels.cs
@@ -61,7 +61,7 @@ namespace LongoMatch.Drawing.Widgets
                        widget.Width = Common.CATEGORY_WIDTH;
                        
                        /* Start from bottom to top  with categories */
-                       foreach (Category cat in project.Categories) {
+                       foreach (Category cat in project.Categories.List) {
                                CategoryLabel l;
                                
                                /* Add the category label */
diff --git a/LongoMatch.Drawing/Widgets/PlaysTimeline.cs b/LongoMatch.Drawing/Widgets/PlaysTimeline.cs
index 646b0a6..f8d961a 100644
--- a/LongoMatch.Drawing/Widgets/PlaysTimeline.cs
+++ b/LongoMatch.Drawing/Widgets/PlaysTimeline.cs
@@ -51,8 +51,8 @@ namespace LongoMatch.Drawing.Widgets
                        this.project = project;
                        Objects.Clear();
                        categories.Clear();
-                       duration= new Time ((int)project.Description.File.Length); 
-                       widget.Height = project.Categories.Count * Common.CATEGORY_HEIGHT;
+                       duration = project.Description.File.Duration;
+                       widget.Height = project.Categories.List.Count * Common.CATEGORY_HEIGHT;
                        playsFilter = filter;
                        FillCanvas ();
                        filter.FilterUpdated += UpdateVisibleCategories;
@@ -97,7 +97,7 @@ namespace LongoMatch.Drawing.Widgets
                }
                
                void FillCanvas () {
-                       for (int i=0; i<project.Categories.Count; i++) {
+                       for (int i=0; i<project.Categories.List.Count; i++) {
                                Category cat;
                                CategoryTimeline tl;
                                Color c;
@@ -108,7 +108,7 @@ namespace LongoMatch.Drawing.Widgets
                                        c = Color.Grey1;
                                }
                                
-                               cat = project.Categories[i];
+                               cat = project.Categories.List[i];
                                tl = new CategoryTimeline (project.PlaysInCategory (cat),
                                                           duration, i * Common.CATEGORY_HEIGHT, c);
                                categories[cat] = tl;
diff --git a/LongoMatch.Drawing/Widgets/TeamTagger.cs b/LongoMatch.Drawing/Widgets/TeamTagger.cs
index 1fd11f2..a746017 100644
--- a/LongoMatch.Drawing/Widgets/TeamTagger.cs
+++ b/LongoMatch.Drawing/Widgets/TeamTagger.cs
@@ -170,7 +170,7 @@ namespace LongoMatch.Drawing.Widgets
                        for (int col=0; col < template.Formation.Length; col ++) {
                                double colX, rowHeight;
                                
-                               if (template.Count == index)
+                               if (template.List.Count == index)
                                        break;
 
                                if (team == Team.LOCAL) {
@@ -182,18 +182,18 @@ namespace LongoMatch.Drawing.Widgets
 
                                for (int row=0; row < template.Formation[col]; row ++) {
                                        Point p = new Point (colX, rowHeight * row + rowHeight / 2);
-                                       PlayerObject po = new PlayerObject (template [index], p);
+                                       PlayerObject po = new PlayerObject (template.List [index], p);
                                        po.IconSize = size;
                                        po.UnSelectedColor = color;
                                        Objects.Add (po);
                                        index ++;
-                                       if (template.Count == index)
+                                       if (template.List.Count == index)
                                                break;
                                }
                        }
                        
                        /* Substitution players */
-                       for (int i = index; i < template.Count; i++) {
+                       for (int i = index; i < template.List.Count; i++) {
                                PlayerObject po;
                                double x, y;
                                int reli = i - index;
@@ -205,7 +205,7 @@ namespace LongoMatch.Drawing.Widgets
                                        x += BenchWidth + backgroundWidth;
                                }
                                                     
-                               po = new PlayerObject (template [i], new Point (x, y));
+                               po = new PlayerObject (template.List [i], new Point (x, y));
                                po.IconSize = PlayersIconSize.Small;
                                po.UnSelectedColor = color;
                                Objects.Add (po);
@@ -232,16 +232,16 @@ namespace LongoMatch.Drawing.Widgets
                        if (SubstitutionsMode) {
                                bool subsDone = false;
                                if (homeTeam != null) {
-                                       List<Player> hplayers = players.Where (p => homeTeam.Contains 
(p)).ToList();
+                                       List<Player> hplayers = players.Where (p => homeTeam.List.Contains 
(p)).ToList();
                                        if (hplayers.Count == 2) {
-                                               homeTeam.Swap (hplayers[0], hplayers[1]);
+                                               homeTeam.List.Swap (hplayers[0], hplayers[1]);
                                                subsDone = true;
                                        }
                                }
                                if (awayTeam != null) {
-                                       List<Player> aplayers = players.Where (p => awayTeam.Contains 
(p)).ToList();
+                                       List<Player> aplayers = players.Where (p => awayTeam.List.Contains 
(p)).ToList();
                                        if (aplayers.Count == 2) {
-                                               awayTeam.Swap (aplayers[0], aplayers[1]);
+                                               awayTeam.List.Swap (aplayers[0], aplayers[1]);
                                                subsDone = true;
                                        }
                                }
diff --git a/LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs b/LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs
index fe6765c..672b7cf 100644
--- a/LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs
+++ b/LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs
@@ -258,7 +258,7 @@ namespace LongoMatch.Gui
                public void StepBackward() {
                        Jump(-(int)jumpspinbutton.Value);
                }
-
+               
                public void FramerateUp() {
                        vscale1.Adjustment.Value += vscale1.Adjustment.StepIncrement;
                }
@@ -326,9 +326,9 @@ namespace LongoMatch.Gui
                        pausebutton.Clicked += OnPausebuttonClicked;
                        drawbutton.Clicked += OnDrawButtonClicked;
                        timescale.ValueChanged += OnTimescaleValueChanged;
-                       timescale.AdjustBounds += OnTimescaleAdjustBounds;
+                       timescale.AdjustBounds += OnTimescaleAdjustBounds;                      
                        vscale1.FormatValue += OnVscale1FormatValue;
-                       vscale1.ValueChanged += OnVscale1ValueChanged;
+            vscale1.ValueChanged += OnVscale1ValueChanged;
                        drawbutton.Clicked += OnDrawButtonClicked;
                        volumebutton.Clicked += OnVolumebuttonClicked;
 
diff --git a/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.CapturerBin.cs 
b/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.CapturerBin.cs
index 5df4fc9..37d8b05 100644
--- a/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.CapturerBin.cs
+++ b/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.CapturerBin.cs
@@ -12,7 +12,7 @@ namespace LongoMatch.Gui
                private global::Gtk.Button pausebutton;
                private global::Gtk.Button stopbutton;
                private global::Gtk.Label timelabel;
-               
+
                protected virtual void Build ()
                {
                        global::Stetic.Gui.Initialize (this);
diff --git a/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.PlayerBin.cs 
b/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.PlayerBin.cs
index 0d3d932..4ceac28 100644
--- a/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.PlayerBin.cs
+++ b/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.PlayerBin.cs
@@ -29,7 +29,7 @@ namespace LongoMatch.Gui
                private global::Gtk.Label timelabel;
                private global::Gtk.Button volumebutton;
                private global::Gtk.Button detachbutton;
-               
+
                protected virtual void Build ()
                {
                        global::Stetic.Gui.Initialize (this);
@@ -61,6 +61,7 @@ namespace LongoMatch.Gui
                        this.videoeventbox.Name = "videoeventbox";
                        // Container child videoeventbox.Gtk.Container+ContainerChild
                        this.videodrawingarea = new global::Gtk.DrawingArea ();
+                       this.videodrawingarea.CanFocus = true;
                        this.videodrawingarea.Name = "videodrawingarea";
                        this.videoeventbox.Add (this.videodrawingarea);
                        this.hbox2.Add (this.videoeventbox);
diff --git a/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.PlayerCapturerBin.cs 
b/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.PlayerCapturerBin.cs
index 7bc09bc..80dc178 100644
--- a/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.PlayerCapturerBin.cs
+++ b/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.PlayerCapturerBin.cs
@@ -9,7 +9,7 @@ namespace LongoMatch.Gui
                private global::LongoMatch.Gui.PlayerBin playerbin;
                private global::LongoMatch.Gui.CapturerBin capturerbin;
                private global::Gtk.Button backtolivebutton;
-               
+
                protected virtual void Build ()
                {
                        global::Stetic.Gui.Initialize (this);
diff --git a/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.VolumeWindow.cs 
b/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.VolumeWindow.cs
index f031c6c..efcfcfe 100644
--- a/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.VolumeWindow.cs
+++ b/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.VolumeWindow.cs
@@ -8,7 +8,7 @@ namespace LongoMatch.Gui
                private global::Gtk.Button morebutton;
                private global::Gtk.VScale volumescale;
                private global::Gtk.Button lessbutton;
-               
+
                protected virtual void Build ()
                {
                        global::Stetic.Gui.Initialize (this);
diff --git a/LongoMatch.GUI.Multimedia/gtk-gui/generated.cs b/LongoMatch.GUI.Multimedia/gtk-gui/generated.cs
index d23ef38..0ada9fc 100644
--- a/LongoMatch.GUI.Multimedia/gtk-gui/generated.cs
+++ b/LongoMatch.GUI.Multimedia/gtk-gui/generated.cs
@@ -5,7 +5,7 @@ namespace Stetic
        internal class Gui
        {
                private static bool initialized;
-               
+
                internal static void Initialize (Gtk.Widget iconRenderer)
                {
                        if ((Stetic.Gui.initialized == false)) {
@@ -13,12 +13,12 @@ namespace Stetic
                        }
                }
        }
-       
+
        internal class BinContainer
        {
                private Gtk.Widget child;
                private Gtk.UIManager uimanager;
-               
+
                public static BinContainer Attach (Gtk.Bin bin)
                {
                        BinContainer bc = new BinContainer ();
@@ -27,32 +27,32 @@ namespace Stetic
                        bin.Added += new Gtk.AddedHandler (bc.OnAdded);
                        return bc;
                }
-               
+
                private void OnSizeRequested (object sender, Gtk.SizeRequestedArgs args)
                {
                        if ((this.child != null)) {
                                args.Requisition = this.child.SizeRequest ();
                        }
                }
-               
+
                private void OnSizeAllocated (object sender, Gtk.SizeAllocatedArgs args)
                {
                        if ((this.child != null)) {
                                this.child.Allocation = args.Allocation;
                        }
                }
-               
+
                private void OnAdded (object sender, Gtk.AddedArgs args)
                {
                        this.child = args.Widget;
                }
-               
+
                public void SetUiManager (Gtk.UIManager uim)
                {
                        this.uimanager = uim;
                        this.child.Realized += new System.EventHandler (this.OnRealized);
                }
-               
+
                private void OnRealized (object sender, System.EventArgs args)
                {
                        if ((this.uimanager != null)) {
@@ -65,7 +65,7 @@ namespace Stetic
                        }
                }
        }
-       
+
        internal class IconLoader
        {
                public static Gdk.Pixbuf LoadIcon (Gtk.Widget widget, string name, Gtk.IconSize size)
@@ -99,14 +99,14 @@ namespace Stetic
                        }
                }
        }
-       
+
        internal class ActionGroups
        {
                public static Gtk.ActionGroup GetActionGroup (System.Type type)
                {
                        return Stetic.ActionGroups.GetActionGroup (type.FullName);
                }
-               
+
                public static Gtk.ActionGroup GetActionGroup (string name)
                {
                        return null;
diff --git a/LongoMatch.GUI.Multimedia/gtk-gui/gui.stetic b/LongoMatch.GUI.Multimedia/gtk-gui/gui.stetic
index ba98ed3..f55494a 100644
--- a/LongoMatch.GUI.Multimedia/gtk-gui/gui.stetic
+++ b/LongoMatch.GUI.Multimedia/gtk-gui/gui.stetic
@@ -6,7 +6,6 @@
   </configuration>
   <import>
     <widget-library name="../../bin/LongoMatch.Multimedia.dll" />
-    <widget-library name="../../bin/LongoMatch.dll" />
     <widget-library name="../../bin/LongoMatch.GUI.Helpers.dll" />
     <widget-library name="../../bin/LongoMatch.GUI.Multimedia.dll" internal="true" />
   </import>
@@ -103,6 +102,7 @@
                             <child>
                               <widget class="Gtk.DrawingArea" id="videodrawingarea">
                                 <property name="MemberName" />
+                                <property name="CanFocus">True</property>
                               </widget>
                             </child>
                           </widget>
diff --git a/LongoMatch.GUI/Gui/Component/ButtonsWidget.cs b/LongoMatch.GUI/Gui/Component/ButtonsWidget.cs
index 5761ce3..b322537 100644
--- a/LongoMatch.GUI/Gui/Component/ButtonsWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/ButtonsWidget.cs
@@ -79,13 +79,13 @@ namespace LongoMatch.Gui.Component
                                return;
 
                        buttonsDic.Clear();
-                       int sectionsCount = categories.Count;
+                       int sectionsCount = categories.List.Count;
                        
                        table1.NColumns =(uint) N_COLUMNS;
                        table1.NRows =(uint)(sectionsCount/N_COLUMNS);
                        
                        for(int i=0; i<sectionsCount; i++) {
-                               Category cat = categories[i];
+                               Category cat = categories.List[i];
                                ButtonTagger b = new ButtonTagger (cat);
                                        b.NewTag += (category) => {
                                        Config.EventsBroker.EmitNewTag (category);
diff --git a/LongoMatch.GUI/Gui/Component/CategoryProperties.cs 
b/LongoMatch.GUI/Gui/Component/CategoryProperties.cs
index 901efb6..92e3728 100644
--- a/LongoMatch.GUI/Gui/Component/CategoryProperties.cs
+++ b/LongoMatch.GUI/Gui/Component/CategoryProperties.cs
@@ -46,7 +46,6 @@ namespace LongoMatch.Gui.Component
                public event HotKeyChangeHandler HotKeyChanged;
 
                private Category cat;
-               private ISubcategoriesTemplatesProvider subcategoriesProvider;
                private ListStore model;
 
                public CategoryProperties()
@@ -68,39 +67,6 @@ namespace LongoMatch.Gui.Component
                        }
                }
                
-               public void LoadSubcategories() {
-                       subcategoriesProvider = Config.SubcategoriesTemplatesProvider;
-                       LoadSubcategories(null);
-               }
-               
-               private void LoadSubcategories(List<PlayerSubCategory> playerSubcategories) {
-                       model = new ListStore(typeof(string), typeof(ISubCategory));
-                       
-                       model.AppendValues(Catalog.GetString("Create new..."), "");
-                       foreach (TagSubCategory subcat in subcategoriesProvider.Templates) {
-                               Log.Debug("Adding tag subcategory: ", subcat.Name);
-                               model.AppendValues(String.Format("[{0}] {1}", 
-                                                                Catalog.GetString("Tags"),
-                                                                subcat.Name),
-                                                  subcat);
-                       }
-                       if (playerSubcategories != null) {
-                               foreach (PlayerSubCategory subcat in playerSubcategories) {
-                                       Log.Debug("Adding player subcategory: ", subcat.Name);
-                                       model.AppendValues(String.Format("[{0}] {1}", 
-                                                                        Catalog.GetString("Players"),
-                                                                        subcat.Name),
-                                                          subcat);
-                               }
-                       }
-                       
-                       subcatcombobox.Model = model;
-                       var cell = new CellRendererText();
-                       subcatcombobox.PackStart(cell, true);
-                       subcatcombobox.AddAttribute(cell, "text", 0);
-                       subcatcombobox.Active = 1;
-               }
-                       
                public Category Category {
                        set {
                                cat = value;
@@ -149,10 +115,10 @@ namespace LongoMatch.Gui.Component
                        fieldcoordinatestagger.Visible = cat.TagFieldPosition;
                        coords = new List<Coordinates>();
                        c = new Coordinates();
-                       c.Add (new Point (300, 300));
+                       c.Points.Add (new Point (300, 300));
                        coords.Add (c);
                        if (cat.FieldPositionIsDistance) {
-                               c.Add (new Point (400, 500));
+                               c.Points.Add (new Point (400, 500));
                        }
                        fieldcoordinatestagger.Coordinates = coords;
                        trajectorycheckbutton.Active = cat.FieldPositionIsDistance;
@@ -161,10 +127,10 @@ namespace LongoMatch.Gui.Component
                        halffieldcoordinatestagger.Visible = cat.TagHalfFieldPosition;
                        coords = new List<Coordinates>();
                        c = new Coordinates();
-                       c.Add (new Point (300, 300));
+                       c.Points.Add (new Point (300, 300));
                        coords.Add (c);
                        if (cat.FieldPositionIsDistance) {
-                               c.Add (new Point (400, 500));
+                               c.Points.Add (new Point (400, 500));
                        }
                        halffieldcoordinatestagger.Coordinates = coords;
                        trajectoryhalfcheckbutton.Active = cat.HalfFieldPositionIsDistance;
@@ -172,7 +138,7 @@ namespace LongoMatch.Gui.Component
                        taggoalcheckbutton.Active = cat.TagGoalPosition;
                        coords = new List<Coordinates>();
                        c = new Coordinates();
-                       c.Add (new Point (100, 100));
+                       c.Points.Add (new Point (100, 100));
                        coords.Add (c);
                        goalcoordinatestagger.Coordinates = coords;
                        goalcoordinatestagger.Visible = cat.TagGoalPosition;
@@ -183,7 +149,7 @@ namespace LongoMatch.Gui.Component
                        
                        list = subcategoriestreeview1.Model as ListStore;
                        list.Clear();
-                       foreach (ISubCategory subcat in cat.SubCategories)
+                       foreach (SubCategory subcat in cat.SubCategories)
                                list.AppendValues(subcat);
                }
                
@@ -192,18 +158,19 @@ namespace LongoMatch.Gui.Component
                        (cell as Gtk.CellRendererText).Markup =(string)model.GetValue(iter, 0);
                }
                
-               private TagSubCategory EditSubCategoryTags (TagSubCategory template, bool checkName){
-                       SubCategoryTagsEditor se =  new SubCategoryTagsEditor(template, 
subcategoriesProvider.TemplatesNames);
-                       
-                       se.CheckName = checkName;
-                       int ret = se.Run();
-                       
-                       var t = se.Template; 
-                       se.Destroy();
-                       
-                       if (ret != (int)ResponseType.Ok)
-                               return null;
-                       return t;
+               private SubCategory EditSubCategoryTags (SubCategory template, bool checkName){
+                       return null;
+//                     SubCategoryTagsEditor se =  new SubCategoryTagsEditor(template, 
subcategoriesProvider.TemplatesNames);
+//                     
+//                     se.CheckName = checkName;
+//                     int ret = se.Run();
+//                     
+//                     var t = se.Template; 
+//                     se.Destroy();
+//                     
+//                     if (ret != (int)ResponseType.Ok)
+//                             return null;
+//                     return t;
                }
 
                protected virtual void OnChangebutonClicked(object sender, System.EventArgs e)
@@ -246,11 +213,11 @@ namespace LongoMatch.Gui.Component
                        cat.SortMethodString = sortmethodcombobox.ActiveText;
                }
                
-               protected virtual void OnSubcategorySelected(ISubCategory subcat) {
-                       EditSubCategoryTags((TagSubCategory)subcat, false);
+               protected virtual void OnSubcategorySelected(SubCategory subcat) {
+                       EditSubCategoryTags((SubCategory)subcat, false);
                }
                
-               protected virtual void OnSubcategoriesDeleted (List<ISubCategory> subcats)
+               protected virtual void OnSubcategoriesDeleted (List<SubCategory> subcats)
                {
                        if (Project != null) {
                                var msg = Catalog.GetString("If you delete this subcategory you will loose" +
@@ -269,7 +236,7 @@ namespace LongoMatch.Gui.Component
                        
                        subcatcombobox.GetActiveIter(out iter);
                        ListStore list = subcategoriestreeview1.Model as ListStore;
-                       var subcat = Cloner.Clone((ISubCategory)model.GetValue(iter, 1));
+                       var subcat = Cloner.Clone((SubCategory)model.GetValue(iter, 1));
                        subcat.Name = subcatnameentry.Text;
                        Category.SubCategories.Add(subcat);
                        list.AppendValues(subcat);
@@ -277,23 +244,6 @@ namespace LongoMatch.Gui.Component
                
                protected virtual void OnSubcatcomboboxChanged (object sender, System.EventArgs e)
                {
-                       TreeIter iter;
-                       
-                       if (subcatcombobox.Active == 0) {
-                               var template = EditSubCategoryTags(new SubCategoryTemplate(), true) as 
SubCategoryTemplate;
-                               if (template == null || template.Count == 0)
-                                       return;
-                               
-                               model.AppendValues(String.Format("[{0}] {1}",Catalog.GetString("Tags"), 
template.Name),
-                                                  template);
-                               subcategoriesProvider.Save(template);
-                               subcatcombobox.Active = 1;
-                               return;
-                       }
-                       
-                       subcatcombobox.GetActiveIter(out iter);
-                       subcatnameentry.Text = (model.GetValue(iter, 1) as ISubCategory).Name;
-                       addbutton.Sensitive = true;
                }
                
                protected void OnTaggoalcheckbuttonClicked (object sender, EventArgs e)
@@ -323,10 +273,10 @@ namespace LongoMatch.Gui.Component
                        
                        coords = new List<Coordinates>();
                        c = new Coordinates();
-                       c.Add (new Point (300, 300));
+                       c.Points.Add (new Point (300, 300));
                        coords.Add (c);
                        if (cat.HalfFieldPositionIsDistance) {
-                               c.Add (new Point (400, 500));
+                               c.Points.Add (new Point (400, 500));
                        }
                        halffieldcoordinatestagger.Coordinates = coords;
                }
@@ -340,10 +290,10 @@ namespace LongoMatch.Gui.Component
                        
                        coords = new List<Coordinates>();
                        c = new Coordinates();
-                       c.Add (new Point (300, 300));
+                       c.Points.Add (new Point (300, 300));
                        coords.Add (c);
                        if (cat.FieldPositionIsDistance) {
-                               c.Add (new Point (400, 500));
+                               c.Points.Add (new Point (400, 500));
                        }
                        fieldcoordinatestagger.Coordinates = coords;
                }
diff --git a/LongoMatch.GUI/Gui/Component/CoordinatesTagger.cs 
b/LongoMatch.GUI/Gui/Component/CoordinatesTagger.cs
index 2f8ea75..a5b4244 100644
--- a/LongoMatch.GUI/Gui/Component/CoordinatesTagger.cs
+++ b/LongoMatch.GUI/Gui/Component/CoordinatesTagger.cs
@@ -111,7 +111,7 @@ namespace LongoMatch.Gui.Component
                        
                        TranslateToOriginCoords (cursor);
                        foreach (Coordinates c in Coordinates) {
-                               foreach (Point p in c) {
+                               foreach (Point p in c.Points) {
                                        double dist = Distance (cursor, p);
                                        if (dist < minDistance) {
                                                minDistance = dist;
@@ -166,16 +166,16 @@ namespace LongoMatch.Gui.Component
                
                void DrawCoordinates (Context context, Coordinates coords) {
                        SetContextProperties(context, coords == selectedCoords);
-                       for (int i=0; i < coords.Count; i++) {
-                               if (i != 0 && i == coords.Count - 1) {
-                                       DrawArrow (context, TranslateToDestCoords(coords[i -1]),
-                                                  TranslateToDestCoords (coords [i]));
+                       for (int i=0; i < coords.Points.Count; i++) {
+                               if (i != 0 && i == coords.Points.Count - 1) {
+                                       DrawArrow (context, TranslateToDestCoords(coords.Points[i -1]),
+                                                  TranslateToDestCoords (coords.Points [i]));
                                } else {
-                                       DrawPoint (context, TranslateToDestCoords (coords[i]));
+                                       DrawPoint (context, TranslateToDestCoords (coords.Points[i]));
                                }
                                if (i>0) {
-                                       DrawLine (context, TranslateToDestCoords(coords[i-1]),
-                                                 TranslateToDestCoords (coords[i]));
+                                       DrawLine (context, TranslateToDestCoords(coords.Points[i-1]),
+                                                 TranslateToDestCoords (coords.Points[i]));
                                }
                        } 
                }
diff --git a/LongoMatch.GUI/Gui/Component/PlayersListTreeWidget.cs 
b/LongoMatch.GUI/Gui/Component/PlayersListTreeWidget.cs
index 610b197..4340275 100644
--- a/LongoMatch.GUI/Gui/Component/PlayersListTreeWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/PlayersListTreeWidget.cs
@@ -69,7 +69,7 @@ namespace LongoMatch.Gui.Component
                        Log.Debug("Updating teams models with template:" + template);
                        team = new TreeStore(typeof(object));
 
-                       foreach(var player in template) {
+                       foreach(var player in template.List) {
                                /* Add a root in the tree with the option name */
                                var iter = team.AppendValues(player);
                                playersDict.Add(player, iter);
@@ -77,9 +77,9 @@ namespace LongoMatch.Gui.Component
                        }
                        
                        foreach (var play in plays) {
-                               foreach (var player in play.Players.AllUniqueElements) {
-                                       if (playersDict.ContainsKey(player.Value)) {
-                                               team.AppendValues(playersDict[player.Value], new object[1] 
{play});
+                               foreach (var player in play.Players) {
+                                       if (playersDict.ContainsKey(player)) {
+                                               team.AppendValues(playersDict[player], new object[1] {play});
                                                Log.Debug("Adding new play to player: " + player);
                                        }
                                }
diff --git a/LongoMatch.GUI/Gui/Component/PlaysCoordinatesTagger.cs 
b/LongoMatch.GUI/Gui/Component/PlaysCoordinatesTagger.cs
index a151378..b4b4f99 100644
--- a/LongoMatch.GUI/Gui/Component/PlaysCoordinatesTagger.cs
+++ b/LongoMatch.GUI/Gui/Component/PlaysCoordinatesTagger.cs
@@ -74,7 +74,6 @@ namespace LongoMatch.Gui.Component
                
                public void LoadPlay (Play play, bool horizontal=true) {
                        field.Visible = hfield.Visible = goal.Visible = false;
-                       
                        AddPlay (play, true);
                }
                
@@ -133,10 +132,10 @@ namespace LongoMatch.Gui.Component
                                coords.Add (play.FieldPosition);
                        } else if (fill) {
                                Coordinates c = new Coordinates ();
-                               c.Add (new Point((int) (fieldPixbuf.Width * 0.25),
+                               c.Points.Add (new Point((int) (fieldPixbuf.Width * 0.25),
                                                 (int) (fieldPixbuf.Height * 0.25)));
                                if (play.Category.FieldPositionIsDistance) {
-                                       c.Add (new Point((int) (fieldPixbuf.Width * 0.75),
+                                       c.Points.Add (new Point((int) (fieldPixbuf.Width * 0.75),
                                                         (int) (fieldPixbuf.Height * 0.75)));
                                }
                                coords.Add (c);
@@ -155,10 +154,10 @@ namespace LongoMatch.Gui.Component
                                coords.Add (play.HalfFieldPosition);
                        } else  if (fill) {
                                Coordinates c = new Coordinates ();
-                               c.Add (new Point((int) (hFieldPixbuf.Width * 0.25),
+                               c.Points.Add (new Point((int) (hFieldPixbuf.Width * 0.25),
                                                 (int) (hFieldPixbuf.Height * 0.25)));
                                if (play.Category.HalfFieldPositionIsDistance) {
-                                       c.Add (new Point((int) (hFieldPixbuf.Width * 0.75),
+                                       c.Points.Add (new Point((int) (hFieldPixbuf.Width * 0.75),
                                                         (int) (hFieldPixbuf.Height * 0.75)));
                                }
                                coords.Add (c);
@@ -177,7 +176,7 @@ namespace LongoMatch.Gui.Component
                                coords.Add (play.GoalPosition);
                        } else if (fill) {
                                Coordinates c = new Coordinates ();
-                               c.Add (new Point((int) (goalPixbuf.Width * 0.25),
+                               c.Points.Add (new Point((int) (goalPixbuf.Width * 0.25),
                                                 (int) (goalPixbuf.Height * 0.25)));
                                coords.Add (c);
                                play.GoalPosition = c;
diff --git a/LongoMatch.GUI/Gui/Component/PlaysListTreeWidget.cs 
b/LongoMatch.GUI/Gui/Component/PlaysListTreeWidget.cs
index 06bddb3..5790af7 100644
--- a/LongoMatch.GUI/Gui/Component/PlaysListTreeWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/PlaysListTreeWidget.cs
@@ -133,7 +133,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) {
+                       foreach(Category cat in project.Categories.List) {
                                Gtk.TreeIter iter = dataFileListStore.AppendValues(cat);
                                itersDic.Add(cat, iter);
                        }
@@ -151,7 +151,7 @@ namespace LongoMatch.Gui.Component
                }
 
                private string CategoryPath(Category cat) {
-                       return project.Categories.IndexOf(cat).ToString();
+                       return project.Categories.List.IndexOf(cat).ToString();
                }
                
                protected virtual void OnEditProperties(TimeNode tNode, object val) {
diff --git a/LongoMatch.GUI/Gui/Component/PlaysSelectionWidget.cs 
b/LongoMatch.GUI/Gui/Component/PlaysSelectionWidget.cs
index 3be419b..d74aaf5 100644
--- a/LongoMatch.GUI/Gui/Component/PlaysSelectionWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/PlaysSelectionWidget.cs
@@ -120,8 +120,10 @@ namespace LongoMatch.Gui.Component
                }
                
                private void UpdateTeamsModels() {
-                       localPlayersList.SetTeam(project.LocalTeamTemplate, project.AllPlays());
-                       visitorPlayersList.SetTeam(project.VisitorTeamTemplate, project.AllPlays());
+                       if (project == null)
+                               return;
+                       localPlayersList.SetTeam(project.LocalTeamTemplate, project.Timeline);
+                       visitorPlayersList.SetTeam(project.VisitorTeamTemplate, project.Timeline);
                }
                
                protected void OnCategoriesFiltersbuttonClicked (object sender, System.EventArgs e)
diff --git a/LongoMatch.GUI/Gui/Component/Stats/PlayersViewer.cs 
b/LongoMatch.GUI/Gui/Component/Stats/PlayersViewer.cs
index f645c05..49068c4 100644
--- a/LongoMatch.GUI/Gui/Component/Stats/PlayersViewer.cs
+++ b/LongoMatch.GUI/Gui/Component/Stats/PlayersViewer.cs
@@ -66,7 +66,7 @@ namespace LongoMatch.Gui.Component.Stats
                        TreeIter teamIter;
                        
                        teamIter = store.AppendValues (tpl.TeamName, null);
-                       foreach (Player p in tpl) {
+                       foreach (Player p in tpl.List) {
                                store.AppendValues (teamIter, p.Name, p);
                                filter.FilterPlayer (p);
                        }
diff --git a/LongoMatch.GUI/Gui/Component/TaggerWidget.cs b/LongoMatch.GUI/Gui/Component/TaggerWidget.cs
index e482b3b..24bf145 100644
--- a/LongoMatch.GUI/Gui/Component/TaggerWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/TaggerWidget.cs
@@ -46,8 +46,8 @@ namespace LongoMatch.Gui.Component
                        SetPeriod(categories.GamePeriods);
                }
                
-               public void AddSubCategory(TagSubCategory subcat, StringTagStore tags){
-                       if (subcat.Count == 0)
+               public void AddSubCategory(SubCategory subcat, TagsStore tags){
+                       if (subcat.Options.Count == 0)
                                return;
                        StringTaggerWidget tagger = new StringTaggerWidget(subcat, tags);
                        table1.Attach(tagger,0, 1, table1.NRows-1, table1.NRows);
@@ -55,15 +55,6 @@ namespace LongoMatch.Gui.Component
                        tagger.Show();
                }
                
-               public void AddTeamSubCategory(TeamSubCategory subcat, TeamsTagStore tags,
-                                              string localTeam, string visitorTeam){
-//                     TeamTaggerWidget tagger = new TeamTaggerWidget(subcat, tags,
-//                                                                    localTeam, visitorTeam);
-//                     table1.Attach(tagger,0, 1, table1.NRows-1, table1.NRows);
-//                     table1.NRows ++;
-//                     tagger.Show();
-               }
-               
                void SetTeams (Play play, string localTeam, string visitorTeam) {
                        localcheckbutton.Label = localTeam;
                        visitorcheckbutton.Label = visitorTeam;
diff --git a/LongoMatch.GUI/Gui/Component/TeamTemplateEditor.cs 
b/LongoMatch.GUI/Gui/Component/TeamTemplateEditor.cs
index b67d526..6aee0ca 100644
--- a/LongoMatch.GUI/Gui/Component/TeamTemplateEditor.cs
+++ b/LongoMatch.GUI/Gui/Component/TeamTemplateEditor.cs
@@ -196,7 +196,7 @@ namespace LongoMatch.Gui.Component
                        foreach (Player p in selectedPlayers) {
                                string msg = Catalog.GetString ("Do you want to delete player: ") + p.Name;
                                if (Config.GUIToolkit.QuestionMessage (msg, null, this)) {
-                                       template.Remove (p);
+                                       template.List.Remove (p);
                                        Edited = true;
                                }
                        }
@@ -226,7 +226,7 @@ namespace LongoMatch.Gui.Component
 
                void HandleNewPlayerClicked (object sender, EventArgs e)
                {
-                       Player p = template.AddDefaultItem (template.Count);
+                       Player p = template.AddDefaultItem (template.List.Count);
                        teamtagger.Reload ();
                        teamtagger.Select (p);
                        Edited = true;
diff --git a/LongoMatch.GUI/Gui/Component/Timeline.cs b/LongoMatch.GUI/Gui/Component/Timeline.cs
index e2b0341..1431403 100644
--- a/LongoMatch.GUI/Gui/Component/Timeline.cs
+++ b/LongoMatch.GUI/Gui/Component/Timeline.cs
@@ -93,7 +93,7 @@ namespace LongoMatch.Gui.Component
                        }
                        focusscale.Value = 6;
                        projectFile = project.Description.File;
-                       timerule.Duration = new Time ((int)project.Description.File.Length);
+                       timerule.Duration = project.Description.File.Duration;
                        timeline.ShowMenuEvent += HandleShowMenu;
                        QueueDraw ();
                }
diff --git a/LongoMatch.GUI/Gui/Dialog/EditCategoryDialog.cs b/LongoMatch.GUI/Gui/Dialog/EditCategoryDialog.cs
index a291e28..38fe706 100644
--- a/LongoMatch.GUI/Gui/Dialog/EditCategoryDialog.cs
+++ b/LongoMatch.GUI/Gui/Dialog/EditCategoryDialog.cs
@@ -41,7 +41,7 @@ namespace LongoMatch.Gui.Dialog
                {
                        this.Build();
                        timenodeproperties2.HotKeyChanged += OnHotKeyChanged;
-                       timenodeproperties2.LoadSubcategories();
+//                     timenodeproperties2.LoadSubcategories();
                }
 
                public Category Category {
diff --git a/LongoMatch.GUI/Gui/Dialog/SubCategoryTagsEditor.cs 
b/LongoMatch.GUI/Gui/Dialog/SubCategoryTagsEditor.cs
index e4391d6..5416853 100644
--- a/LongoMatch.GUI/Gui/Dialog/SubCategoryTagsEditor.cs
+++ b/LongoMatch.GUI/Gui/Dialog/SubCategoryTagsEditor.cs
@@ -26,12 +26,12 @@ namespace LongoMatch.Gui.Dialog
 {
        public partial class SubCategoryTagsEditor : Gtk.Dialog
        {
-               private TagSubCategory template;
+               private SubCategory template;
                private Dictionary<string, Widget>  tagsDict;
                private List<string> templates;
                private Color templateExistsColor;
                
-               public SubCategoryTagsEditor (TagSubCategory template, List<string> templates)
+               public SubCategoryTagsEditor (SubCategory template, List<string> templates)
                {
                        this.Build ();
                        Gdk.Color.Parse("red", ref templateExistsColor);
@@ -45,7 +45,7 @@ namespace LongoMatch.Gui.Dialog
                        Template = template;
                }
                
-               public TagSubCategory Template {
+               public SubCategory Template {
                        set{
                                template = value;
                                nameentry.Text = template.Name;
diff --git a/LongoMatch.GUI/Gui/Dialog/TaggerDialog.cs b/LongoMatch.GUI/Gui/Dialog/TaggerDialog.cs
index 482c936..85400dd 100644
--- a/LongoMatch.GUI/Gui/Dialog/TaggerDialog.cs
+++ b/LongoMatch.GUI/Gui/Dialog/TaggerDialog.cs
@@ -92,34 +92,12 @@ namespace LongoMatch.Gui.Dialog
                        }
                }
                
-               public void AddTeamSubcategory (TeamSubCategory subcat, TeamsTagStore tags,
-                                               string localTeam, string visitorTeam){
-                       /* the notebook starts invisible */
-                       tagsnotebook.Visible = true;
-                       taggerwidget1.AddTeamSubCategory(subcat, tags, localTeam, visitorTeam);
-               }
-               
-               public void AddTagSubcategory (TagSubCategory subcat, StringTagStore tags){
+               public void AddTagSubcategory (SubCategory subcat, TagsStore tags){
                        /* the notebook starts invisible */
                        taggerwidget1.AddSubCategory(subcat, tags);
                        subcategoryAdded = true;
                }
                
-               public void AddPlayerSubcategory (PlayerSubCategory subcat, PlayersTagStore tags){
-                       TeamTemplate local=null, visitor=null;
-                       
-                       /* the notebook starts invisible */
-                       playersnotebook.Visible = true;
-                       if (subcat.Contains(Team.LOCAL))
-                               local = localTeamTemplate;
-                       if (subcat.Contains(Team.VISITOR))
-                               visitor = visitorTeamTemplate;
-                       
-                       PlayersTaggerWidget widget = new PlayersTaggerWidget(subcat, local, visitor, tags);
-                       widget.Show();
-                       playersbox.PackStart(widget, true, true, 0);
-               }
-               
                protected override bool OnExposeEvent (EventExpose evnt)
                {
                        bool ret = base.OnExposeEvent (evnt);
diff --git a/LongoMatch.GUI/Gui/GUIToolkit.cs b/LongoMatch.GUI/Gui/GUIToolkit.cs
index fbd22aa..609706e 100644
--- a/LongoMatch.GUI/Gui/GUIToolkit.cs
+++ b/LongoMatch.GUI/Gui/GUIToolkit.cs
@@ -203,11 +203,6 @@ namespace LongoMatch.Gui
                }
                
                public void TagPlay (Play play, Categories categories, TeamTemplate local, TeamTemplate 
visitor, bool showAllTags) {
-                       TaggerDialog tg = new TaggerDialog(play, categories, local, visitor, showAllTags);
-                       Log.Information ("Tag play");
-                       tg.TransientFor = mainWindow as Gtk.Window;
-                       tg.Run();
-                       tg.Destroy();
                }
 
                public void DrawingTool (Image image, Play play, Time stopTime) {
diff --git a/LongoMatch.GUI/Gui/Panel/OpenProjectPanel.cs b/LongoMatch.GUI/Gui/Panel/OpenProjectPanel.cs
index 466f75e..705b377 100644
--- a/LongoMatch.GUI/Gui/Panel/OpenProjectPanel.cs
+++ b/LongoMatch.GUI/Gui/Panel/OpenProjectPanel.cs
@@ -53,7 +53,7 @@ namespace LongoMatch.Gui.Panel
 
                void HandleProjectSelected (ProjectDescription project)
                {
-                       Config.EventsBroker.EmitOpenProjectID  (project.UUID);
+                       Config.EventsBroker.EmitOpenProjectID  (project.ID);
                }
        }
 }
diff --git a/LongoMatch.GUI/Gui/Panel/ProjectsManagerPanel.cs 
b/LongoMatch.GUI/Gui/Panel/ProjectsManagerPanel.cs
index 2608e01..f60827a 100644
--- a/LongoMatch.GUI/Gui/Panel/ProjectsManagerPanel.cs
+++ b/LongoMatch.GUI/Gui/Panel/ProjectsManagerPanel.cs
@@ -147,7 +147,7 @@ namespace LongoMatch.Gui.Panel
                        
                        selectedProjects = projects;
                        if (projects.Count == 1) {
-                               LoadProject (DB.GetProject (projects[0].UUID));
+                               LoadProject (DB.GetProject (projects[0].ID));
                        }
                }
                
@@ -165,7 +165,7 @@ namespace LongoMatch.Gui.Panel
                                        Catalog.GetString("Export project"),
                                        null, Config.HomeDir, Constants.PROJECT_NAME,
                                        new string[] {Constants.PROJECT_EXT});
-                               SerializableObject.Save(loadedProject, filename);
+                               Serializer.Save(loadedProject, filename);
                        }                       
                }
 
@@ -199,7 +199,7 @@ namespace LongoMatch.Gui.Panel
                                }
                                string msg = Catalog.GetString ("Do you really want to delete:") + "\n" + 
selectedProject.Title;
                                if (MessagesHelpers.QuestionMessage (this, msg)) {
-                                       DB.RemoveProject (selectedProject.UUID);
+                                       DB.RemoveProject (selectedProject.ID);
                                        deletedProjects.Add (selectedProject);
                                }
                        }
diff --git a/LongoMatch.GUI/Gui/TreeView/CategoriesFilterTreeView.cs 
b/LongoMatch.GUI/Gui/TreeView/CategoriesFilterTreeView.cs
index ae5816a..2fc3780 100644
--- a/LongoMatch.GUI/Gui/TreeView/CategoriesFilterTreeView.cs
+++ b/LongoMatch.GUI/Gui/TreeView/CategoriesFilterTreeView.cs
@@ -47,17 +47,15 @@ namespace LongoMatch.Gui.Component
                protected override void FillTree () {
                        store = new TreeStore (typeof (object), typeof (bool));
                        
-                       foreach (Category cat in  categories) {
+                       foreach (Category cat in  categories.List) {
                                TreeIter catIter;
                                
                                catIter = store.AppendValues(cat, filter.VisibleCategories.Contains(cat));
                                foreach (var subcat in cat.SubCategories) {
                                        TreeIter subcatIter;
-                                       if (subcat is TagSubCategory) {
-                                               subcatIter = store.AppendValues(catIter, subcat, true);
-                                               foreach (string desc in subcat.ElementsDesc()) {
-                                                       store.AppendValues(subcatIter, new 
StringObject{Value=desc, SubCategory=subcat, Category=cat}, true);
-                                               }
+                                       subcatIter = store.AppendValues(catIter, subcat, true);
+                                       foreach (string desc in subcat.Options) {
+                                               store.AppendValues(subcatIter, new StringObject{Value=desc, 
SubCategory=subcat, Category=cat}, true);
                                        }
                                }
                        }
@@ -111,8 +109,8 @@ namespace LongoMatch.Gui.Component
                                Category cat = obj as Category;
                                text = cat.Name;
                        }
-                       else if (obj is ISubCategory) {
-                               ISubCategory subCat = obj as ISubCategory;
+                       else if (obj is SubCategory) {
+                               SubCategory subCat = obj as SubCategory;
                                text = subCat.Name;
                        }
                        else if (obj is StringObject){
@@ -136,7 +134,7 @@ namespace LongoMatch.Gui.Component
        class StringObject
        {
                public string Value {get;set;}
-               public ISubCategory SubCategory {get;set;}
+               public SubCategory SubCategory {get;set;}
                public Category Category {get;set;}
        }
 }
diff --git a/LongoMatch.GUI/Gui/TreeView/ListTreeViewBase.cs b/LongoMatch.GUI/Gui/TreeView/ListTreeViewBase.cs
index 0f36576..ca418a4 100644
--- a/LongoMatch.GUI/Gui/TreeView/ListTreeViewBase.cs
+++ b/LongoMatch.GUI/Gui/TreeView/ListTreeViewBase.cs
@@ -119,7 +119,7 @@ namespace LongoMatch.Gui.Component
                                        return;
                                catsDict = new Dictionary<MenuItem, Category>();
                                catMenu = new Menu();
-                               foreach (Category cat in value.Categories) {
+                               foreach (Category cat in value.Categories.List) {
                                        var item = new MenuItem (cat.Name);
                                        catMenu.Append (item);
                                        catsDict.Add(item, cat);
diff --git a/LongoMatch.GUI/Gui/TreeView/PlayersFilterTreeView.cs 
b/LongoMatch.GUI/Gui/TreeView/PlayersFilterTreeView.cs
index 9694852..c3fc78b 100644
--- a/LongoMatch.GUI/Gui/TreeView/PlayersFilterTreeView.cs
+++ b/LongoMatch.GUI/Gui/TreeView/PlayersFilterTreeView.cs
@@ -94,7 +94,7 @@ namespace LongoMatch.Gui.Component
                                        TreeIter team;
                                        filter.FilterPlayer(player);
                                        /* Uncheck the team check button */
-                                       if (local.Contains(player))
+                                       if (local.List.Contains(player))
                                                team = localIter;
                                        else
                                                team = visitorIter;
diff --git a/LongoMatch.GUI/Gui/TreeView/SubCategoriesTreeView.cs 
b/LongoMatch.GUI/Gui/TreeView/SubCategoriesTreeView.cs
index e66ca42..9440a60 100644
--- a/LongoMatch.GUI/Gui/TreeView/SubCategoriesTreeView.cs
+++ b/LongoMatch.GUI/Gui/TreeView/SubCategoriesTreeView.cs
@@ -38,13 +38,13 @@ namespace LongoMatch.Gui
                private Menu menu;
                private Gtk.Action edit;
                private TreeIter selectedIter;
-               private ISubCategory selectedSubcat;
+               private SubCategory selectedSubcat;
                
                public SubCategoriesTreeView ()
                {       
                        this.HeadersVisible = false;
 
-                       ListStore ls = new ListStore(typeof(ISubCategory));
+                       ListStore ls = new ListStore(typeof(SubCategory));
                        this.Model = ls;
 
                        TreeViewColumn subcatColumn = new Gtk.TreeViewColumn();
@@ -64,7 +64,7 @@ namespace LongoMatch.Gui
 
                protected void OnRemove(object obj, EventArgs args) {
                        /* FIXME: Support multiselection for multideletion */
-                       List<ISubCategory> l = new List<ISubCategory>();
+                       List<SubCategory> l = new List<SubCategory>();
                                
                        if (this.SubCategoriesDeleted != null) {
                                l.Add(selectedSubcat);
@@ -75,7 +75,7 @@ namespace LongoMatch.Gui
                
                private void RenderSubcat(Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel 
model, Gtk.TreeIter iter)
                {
-                       var subcat = (ISubCategory)model.GetValue(iter, 0);
+                       var subcat = (SubCategory)model.GetValue(iter, 0);
                        (cell as Gtk.CellRendererText).Markup = GLib.Markup.EscapeText 
(subcat.ToMarkupString());
                }
                
@@ -121,8 +121,8 @@ namespace LongoMatch.Gui
                                GetPathAtPos((int)evnt.X,(int)evnt.Y,out path);
                                if(path!=null) {
                                        Model.GetIter(out selectedIter,path);
-                                       selectedSubcat = (ISubCategory) Model.GetValue(selectedIter, 0);
-                                       edit.Sensitive = selectedSubcat is TagSubCategory;
+                                       selectedSubcat = (SubCategory) Model.GetValue(selectedIter, 0);
+                                       edit.Sensitive = selectedSubcat is SubCategory;
                                        menu.Popup();
                                }
                        }
diff --git a/LongoMatch.GUI/LongoMatch.GUI.mdp b/LongoMatch.GUI/LongoMatch.GUI.mdp
index 24103aa..f55a22b 100644
--- a/LongoMatch.GUI/LongoMatch.GUI.mdp
+++ b/LongoMatch.GUI/LongoMatch.GUI.mdp
@@ -43,8 +43,6 @@
     <File subtype="Code" buildaction="Compile" name="Gui/Component/PlaysListTreeWidget.cs" />
     <File subtype="Code" buildaction="Compile" name="Gui/Component/DrawingWidget.cs" />
     <File subtype="Code" buildaction="Compile" name="Gui/Dialog/DrawingTool.cs" />
-    <File subtype="Code" buildaction="Compile" name="Gui/Component/TaggerWidget.cs" />
-    <File subtype="Code" buildaction="Compile" name="Gui/Dialog/TaggerDialog.cs" />
     <File subtype="Code" buildaction="Compile" name="Gui/Dialog/EndCaptureDialog.cs" />
     <File subtype="Code" buildaction="Compile" name="Gui/Dialog/BusyDialog.cs" />
     <File subtype="Code" buildaction="EmbedAsResource" name="gtk-gui/gui.stetic" />
@@ -68,18 +66,10 @@
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Dialog.EditCategoryDialog.cs" />
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Component.DrawingWidget.cs" />
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Dialog.DrawingTool.cs" />
-    <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Component.TaggerWidget.cs" />
-    <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Dialog.TaggerDialog.cs" />
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Dialog.EndCaptureDialog.cs" />
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Dialog.BusyDialog.cs" />
     <File subtype="Code" buildaction="Compile" name="Gui/TreeView/ListTreeViewBase.cs" />
     <File subtype="Code" buildaction="Compile" name="Gui/TreeView/SubCategoriesTreeView.cs" />
-    <File subtype="Code" buildaction="Compile" name="Gui/Dialog/SubCategoryTagsEditor.cs" />
-    <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Dialog.SubCategoryTagsEditor.cs" 
/>
-    <File subtype="Code" buildaction="Compile" name="Gui/Component/PlayersTaggerWidget.cs" />
-    <File subtype="Code" buildaction="Compile" 
name="gtk-gui/LongoMatch.Gui.Component.PlayersTaggerWidget.cs" />
-    <File subtype="Code" buildaction="Compile" name="Gui/Component/StringTaggerWidget.cs" />
-    <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Component.StringTaggerWidget.cs" 
/>
     <File subtype="Code" buildaction="Compile" name="Gui/Component/RenderingStateBar.cs" />
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Component.RenderingStateBar.cs" 
/>
     <File subtype="Code" buildaction="Compile" name="Gui/TreeView/RenderingJobsTreeView.cs" />
@@ -96,20 +86,12 @@
     <File subtype="Code" buildaction="EmbedAsResource" name="../images/stock_draw-rectangle-unfilled.png" />
     <File subtype="Code" buildaction="EmbedAsResource" name="../images/video.png" />
     <File subtype="Code" buildaction="EmbedAsResource" name="../images/camera-video.png" />
-    <File subtype="Code" buildaction="Compile" name="Gui/Component/GameUnitsEditor.cs" />
-    <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Component.GameUnitsEditor.cs" />
-    <File subtype="Code" buildaction="Compile" name="Gui/Component/GameUnitWidget.cs" />
-    <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Component.GameUnitWidget.cs" />
-    <File subtype="Code" buildaction="Compile" name="Gui/Component/GameUnitsTagger.cs" />
-    <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Component.GameUnitsTagger.cs" />
     <File subtype="Directory" buildaction="Compile" name="Gui/Component" />
     <File subtype="Code" buildaction="Compile" name="Gui/GUIToolkit.cs" />
     <File subtype="Directory" buildaction="Compile" name="." />
     <File subtype="Directory" buildaction="Compile" name=".." />
     <File subtype="Directory" buildaction="Compile" name="Gui" />
     <File subtype="Code" buildaction="Compile" name="Gui/Cairo.cs" />
-    <File subtype="Code" buildaction="Compile" name="Gui/Component/PlayersTagger.cs" />
-    <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Component.PlayersTagger.cs" />
     <File subtype="Code" buildaction="Compile" 
name="gtk-gui/LongoMatch.Gui.Component.PlaysSelectionWidget.cs" />
     <File subtype="Code" buildaction="Compile" name="Gui/Component/PlaysSelectionWidget.cs" />
     <File subtype="Code" buildaction="Compile" name="Gui/TreeView/PlayersFilterTreeView.cs" />
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.ProjectsManagerPanel.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.ProjectsManagerPanel.cs
index b6fbbb2..dc0a441 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.ProjectsManagerPanel.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.ProjectsManagerPanel.cs
@@ -463,6 +463,7 @@ namespace LongoMatch.Gui.Panel
                        w61.Position = 0;
                        // Container child rbox.Gtk.Box+BoxChild
                        this.hbuttonbox1 = new global::Gtk.HButtonBox ();
+                       this.hbuttonbox1.Name = "hbuttonbox1";
                        // Container child hbuttonbox1.Gtk.ButtonBox+ButtonBoxChild
                        this.savebutton = new global::Gtk.Button ();
                        this.savebutton.Sensitive = false;
diff --git a/LongoMatch.GUI/gtk-gui/gui.stetic b/LongoMatch.GUI/gtk-gui/gui.stetic
index a8965d2..2577b36 100644
--- a/LongoMatch.GUI/gtk-gui/gui.stetic
+++ b/LongoMatch.GUI/gtk-gui/gui.stetic
@@ -3093,314 +3093,6 @@ Show-&gt;&lt;b&gt; S&lt;/b&gt;
       </widget>
     </child>
   </widget>
-  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.TaggerWidget" design-size="486 183">
-    <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.VBox" id="vbox3">
-            <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="frame1">
-                    <property name="MemberName" />
-                    <property name="ShadowType">None</property>
-                    <child>
-                      <widget class="Gtk.Alignment" id="GtkAlignment">
-                        <property name="MemberName" />
-                        <property name="Xalign">0</property>
-                        <property name="Yalign">0</property>
-                        <property name="LeftPadding">12</property>
-                        <child>
-                          <widget class="Gtk.HBox" id="hbox2">
-                            <property name="MemberName" />
-                            <property name="Spacing">6</property>
-                            <child>
-                              <widget class="Gtk.CheckButton" id="localcheckbutton">
-                                <property name="MemberName" />
-                                <property name="CanFocus">True</property>
-                                <property name="Label" translatable="yes" />
-                                <property name="DrawIndicator">True</property>
-                                <property name="HasLabel">True</property>
-                                <property name="UseUnderline">True</property>
-                              </widget>
-                              <packing>
-                                <property name="Position">0</property>
-                                <property name="AutoSize">True</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="Gtk.CheckButton" id="visitorcheckbutton">
-                                <property name="MemberName" />
-                                <property name="CanFocus">True</property>
-                                <property name="Label" translatable="yes" />
-                                <property name="DrawIndicator">True</property>
-                                <property name="HasLabel">True</property>
-                                <property name="UseUnderline">True</property>
-                              </widget>
-                              <packing>
-                                <property name="Position">1</property>
-                                <property name="AutoSize">True</property>
-                              </packing>
-                            </child>
-                          </widget>
-                        </child>
-                      </widget>
-                    </child>
-                    <child>
-                      <widget class="Gtk.Label" id="GtkLabel2">
-                        <property name="MemberName" />
-                        <property name="LabelProp" translatable="yes">&lt;b&gt;Team&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="periodframe">
-                    <property name="MemberName" />
-                    <property name="ShadowType">None</property>
-                    <child>
-                      <widget class="Gtk.Alignment" id="GtkAlignment1">
-                        <property name="MemberName" />
-                        <property name="Xalign">0</property>
-                        <property name="Yalign">0</property>
-                        <property name="LeftPadding">12</property>
-                        <child>
-                          <widget class="Gtk.HBox" id="periodhbox">
-                            <property name="MemberName" />
-                            <property name="Spacing">6</property>
-                            <child>
-                              <placeholder />
-                            </child>
-                            <child>
-                              <placeholder />
-                            </child>
-                            <child>
-                              <placeholder />
-                            </child>
-                          </widget>
-                        </child>
-                      </widget>
-                    </child>
-                    <child>
-                      <widget class="Gtk.Label" id="PeriodLabel">
-                        <property name="MemberName" />
-                        <property name="LabelProp" translatable="yes">&lt;b&gt;Period&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>
-              </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="table1">
-                <property name="MemberName" />
-                <property name="NRows">3</property>
-                <property name="NColumns">3</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>
-              </widget>
-              <packing>
-                <property name="Position">1</property>
-                <property name="AutoSize">False</property>
-                <property name="Expand">False</property>
-              </packing>
-            </child>
-          </widget>
-          <packing>
-            <property name="Position">0</property>
-            <property name="AutoSize">True</property>
-          </packing>
-        </child>
-      </widget>
-    </child>
-  </widget>
-  <widget class="Gtk.Dialog" id="LongoMatch.Gui.Dialog.TaggerDialog" design-size="644 569">
-    <property name="MemberName" />
-    <property name="Title" translatable="yes">Tag play</property>
-    <property name="Icon">stock:longomatch Menu</property>
-    <property name="WindowPosition">CenterOnParent</property>
-    <property name="Modal">True</property>
-    <property name="Gravity">Center</property>
-    <property name="Buttons">1</property>
-    <property name="HelpButton">False</property>
-    <child internal-child="VBox">
-      <widget class="Gtk.VBox" id="dialog1_VBox">
-        <property name="MemberName" />
-        <property name="BorderWidth">2</property>
-        <child>
-          <widget class="Gtk.VBox" id="mainvbox">
-            <property name="MemberName" />
-            <child>
-              <widget class="Gtk.HBox" id="hbox">
-                <property name="MemberName" />
-                <property name="Spacing">6</property>
-                <child>
-                  <widget class="Gtk.Notebook" id="tagsnotebook">
-                    <property name="MemberName" />
-                    <property name="CanFocus">True</property>
-                    <property name="CurrentPage">0</property>
-                    <child>
-                      <widget class="LongoMatch.Gui.Component.TaggerWidget" id="taggerwidget1">
-                        <property name="MemberName" />
-                        <property name="Events">ButtonPressMask</property>
-                      </widget>
-                    </child>
-                    <child>
-                      <widget class="Gtk.Label" id="label1">
-                        <property name="MemberName" />
-                        <property name="LabelProp" translatable="yes">Tags</property>
-                      </widget>
-                      <packing>
-                        <property name="type">tab</property>
-                      </packing>
-                    </child>
-                  </widget>
-                  <packing>
-                    <property name="Position">0</property>
-                    <property name="AutoSize">False</property>
-                  </packing>
-                </child>
-                <child>
-                  <widget class="Gtk.Notebook" id="playersnotebook">
-                    <property name="MemberName" />
-                    <property name="CanFocus">True</property>
-                    <property name="CurrentPage">0</property>
-                    <child>
-                      <widget class="Gtk.VBox" id="playersbox">
-                        <property name="MemberName" />
-                        <property name="Spacing">6</property>
-                        <child>
-                          <placeholder />
-                        </child>
-                        <child>
-                          <placeholder />
-                        </child>
-                        <child>
-                          <placeholder />
-                        </child>
-                      </widget>
-                    </child>
-                    <child>
-                      <widget class="Gtk.Label" id="label2">
-                        <property name="MemberName" />
-                        <property name="LabelProp" translatable="yes">Players</property>
-                      </widget>
-                      <packing>
-                        <property name="type">tab</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="AutoSize">False</property>
-                <property name="Expand">False</property>
-              </packing>
-            </child>
-            <child>
-              <widget class="LongoMatch.Gui.Component.PlaysCoordinatesTagger" id="coordstagger">
-                <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">0</property>
-            <property name="AutoSize">True</property>
-          </packing>
-        </child>
-      </widget>
-    </child>
-    <child internal-child="ActionArea">
-      <widget class="Gtk.HButtonBox" id="dialog1_ActionArea">
-        <property name="MemberName" />
-        <property name="Spacing">6</property>
-        <property name="BorderWidth">5</property>
-        <property name="Size">1</property>
-        <property name="LayoutStyle">End</property>
-        <child>
-          <widget class="Gtk.Button" id="buttonOk">
-            <property name="MemberName" />
-            <property name="CanDefault">True</property>
-            <property name="CanFocus">True</property>
-            <property name="UseStock">True</property>
-            <property name="Type">StockItem</property>
-            <property name="StockId">gtk-ok</property>
-            <property name="ResponseId">-5</property>
-            <property name="label">gtk-ok</property>
-          </widget>
-          <packing>
-            <property name="Expand">False</property>
-            <property name="Fill">False</property>
-          </packing>
-        </child>
-      </widget>
-    </child>
-  </widget>
   <widget class="Gtk.Dialog" id="LongoMatch.Gui.Dialog.EndCaptureDialog" design-size="566 178">
     <property name="MemberName" />
     <property name="Title" translatable="yes" />
@@ -3589,364 +3281,6 @@ You can continue with the current capture, cancel it or save your project.
       </widget>
     </child>
   </widget>
-  <widget class="Gtk.Dialog" id="LongoMatch.Gui.Dialog.SubCategoryTagsEditor" design-size="326 304">
-    <property name="MemberName" />
-    <property name="Title" translatable="yes">Edit subcategory tags</property>
-    <property name="Icon">resource:logo.svg</property>
-    <property name="WindowPosition">Center</property>
-    <property name="Modal">True</property>
-    <property name="Gravity">Center</property>
-    <property name="SkipPagerHint">True</property>
-    <property name="SkipTaskbarHint">True</property>
-    <property name="Buttons">1</property>
-    <property name="HelpButton">False</property>
-    <child internal-child="VBox">
-      <widget class="Gtk.VBox" id="dialog1_VBox">
-        <property name="MemberName" />
-        <property name="BorderWidth">2</property>
-        <child>
-          <widget class="Gtk.VBox" id="vbox2">
-            <property name="MemberName" />
-            <property name="Spacing">6</property>
-            <child>
-              <widget class="Gtk.Table" id="table1">
-                <property name="MemberName" />
-                <property name="NRows">2</property>
-                <property name="NColumns">2</property>
-                <property name="RowSpacing">6</property>
-                <property name="ColumnSpacing">6</property>
-                <child>
-                  <widget class="Gtk.CheckButton" id="fastcheckbutton">
-                    <property name="MemberName" />
-                    <property name="Tooltip" translatable="yes">When this option is selected, the 
subcategory can be tagged right after creating a new play</property>
-                    <property name="CanFocus">True</property>
-                    <property name="Label" translatable="yes">Quick tag</property>
-                    <property name="Active">True</property>
-                    <property name="DrawIndicator">True</property>
-                    <property name="HasLabel">True</property>
-                    <property name="UseUnderline">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.Label" id="label1">
-                    <property name="MemberName" />
-                    <property name="LabelProp" translatable="yes">Subcategory name:</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.CheckButton" id="multicheckbutton">
-                    <property name="MemberName" />
-                    <property name="Tooltip" translatable="yes">This options allows you to select multiple 
tags instead of just one</property>
-                    <property name="CanFocus">True</property>
-                    <property name="Label" translatable="yes">Allow multiple selections</property>
-                    <property name="Active">True</property>
-                    <property name="DrawIndicator">True</property>
-                    <property name="HasLabel">True</property>
-                    <property name="UseUnderline">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.Entry" id="nameentry">
-                    <property name="MemberName" />
-                    <property name="CanFocus">True</property>
-                    <property name="Text" translatable="yes">Goal type</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>
-              </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.Frame" id="frame1">
-                <property name="MemberName" />
-                <property name="ShadowType">In</property>
-                <child>
-                  <widget class="Gtk.Alignment" id="GtkAlignment2">
-                    <property name="MemberName" />
-                    <property name="Xalign">0</property>
-                    <property name="Yalign">0</property>
-                    <property name="LeftPadding">12</property>
-                    <child>
-                      <widget class="Gtk.VBox" id="vbox3">
-                        <property name="MemberName" />
-                        <property name="Spacing">6</property>
-                        <child>
-                          <widget class="Gtk.ScrolledWindow" id="scrolledwindow1">
-                            <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.VBox" id="tagsbox">
-                                    <property name="MemberName" />
-                                    <property name="Spacing">6</property>
-                                    <child>
-                                      <placeholder />
-                                    </child>
-                                    <child>
-                                      <placeholder />
-                                    </child>
-                                    <child>
-                                      <placeholder />
-                                    </child>
-                                    <child>
-                                      <placeholder />
-                                    </child>
-                                  </widget>
-                                </child>
-                              </widget>
-                            </child>
-                          </widget>
-                          <packing>
-                            <property name="Position">0</property>
-                            <property name="AutoSize">True</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <widget class="Gtk.HBox" id="hbox1">
-                            <property name="MemberName" />
-                            <property name="Spacing">6</property>
-                            <child>
-                              <widget class="Gtk.Entry" id="tagentry">
-                                <property name="MemberName" />
-                                <property name="CanFocus">True</property>
-                                <property name="Text" translatable="yes">Penalty</property>
-                                <property name="IsEditable">True</property>
-                                <property name="InvisibleChar">•</property>
-                              </widget>
-                              <packing>
-                                <property name="Position">0</property>
-                                <property name="AutoSize">True</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:gtk-add Menu</property>
-                                <property name="Label" translatable="yes">Add tag</property>
-                                <property name="UseUnderline">True</property>
-                              </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="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="GtkLabel4">
-                    <property name="MemberName" />
-                    <property name="LabelProp" translatable="yes">&lt;b&gt;Tags&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="AutoSize">True</property>
-          </packing>
-        </child>
-      </widget>
-    </child>
-    <child internal-child="ActionArea">
-      <widget class="Gtk.HButtonBox" id="dialog1_ActionArea">
-        <property name="MemberName" />
-        <property name="Spacing">10</property>
-        <property name="BorderWidth">5</property>
-        <property name="Size">1</property>
-        <property name="LayoutStyle">End</property>
-        <child>
-          <widget class="Gtk.Button" id="buttonOk">
-            <property name="MemberName" />
-            <property name="CanDefault">True</property>
-            <property name="CanFocus">True</property>
-            <property name="UseStock">True</property>
-            <property name="Type">StockItem</property>
-            <property name="StockId">gtk-ok</property>
-            <property name="ResponseId">-5</property>
-            <property name="label">gtk-ok</property>
-          </widget>
-          <packing>
-            <property name="Expand">False</property>
-            <property name="Fill">False</property>
-          </packing>
-        </child>
-      </widget>
-    </child>
-  </widget>
-  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.PlayersTaggerWidget" design-size="300 48">
-    <property name="MemberName" />
-    <property name="Visible">False</property>
-    <child>
-      <widget class="Gtk.Frame" id="frame1">
-        <property name="MemberName" />
-        <property name="ShadowType">Out</property>
-        <child>
-          <widget class="Gtk.Alignment" id="GtkAlignment">
-            <property name="MemberName" />
-            <property name="Xalign">0</property>
-            <property name="Yalign">0</property>
-            <property name="LeftPadding">12</property>
-            <child>
-              <placeholder />
-            </child>
-          </widget>
-        </child>
-        <child>
-          <widget class="Gtk.Label" id="CategoryLabel">
-            <property name="MemberName" />
-            <property name="UseMarkup">True</property>
-          </widget>
-          <packing>
-            <property name="type">label_item</property>
-          </packing>
-        </child>
-      </widget>
-    </child>
-  </widget>
-  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.StringTaggerWidget" design-size="300 61">
-    <property name="MemberName" />
-    <property name="Visible">False</property>
-    <child>
-      <widget class="Gtk.Frame" id="frame">
-        <property name="MemberName" />
-        <property name="ShadowType">Out</property>
-        <child>
-          <widget class="Gtk.Alignment" id="GtkAlignment">
-            <property name="MemberName" />
-            <property name="Xalign">0</property>
-            <property name="Yalign">0</property>
-            <property name="LeftPadding">12</property>
-            <child>
-              <widget class="Gtk.Table" id="table">
-                <property name="MemberName" />
-                <property name="NRows">3</property>
-                <property name="NColumns">3</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>
-              </widget>
-            </child>
-          </widget>
-        </child>
-        <child>
-          <widget class="Gtk.Label" id="titlelabel">
-            <property name="MemberName" />
-            <property name="LabelProp" translatable="yes">&lt;b&gt;GtkFrame&lt;/b&gt;</property>
-            <property name="UseMarkup">True</property>
-          </widget>
-          <packing>
-            <property name="type">label_item</property>
-          </packing>
-        </child>
-      </widget>
-    </child>
-  </widget>
   <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.RenderingStateBar" design-size="204 28">
     <property name="MemberName" />
     <property name="Visible">False</property>
@@ -4127,288 +3461,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.GameUnitsEditor" design-size="561 299">
-    <property name="MemberName" />
-    <property name="Visible">False</property>
-    <child>
-      <widget class="Gtk.VBox" id="vbox2">
-        <property name="MemberName" />
-        <property name="Visible">False</property>
-        <property name="Spacing">6</property>
-        <child>
-          <widget class="Gtk.Label" id="label1">
-            <property name="MemberName" />
-            <property name="LabelProp" translatable="yes">&lt;b&gt;Game Units&lt;/b&gt;: Games are usually 
divided in time by units. In sports like field hockey the game is divided in 2 halves but other sports like 
tenis have several types of units that are anidated, e.g. Set-&gt;Game-&gt;Point.
-
-Defining &lt;b&gt; Game Units &lt;/b&gt; will help you during the analysis to indentify the tagged plays in 
the the phases of the game.</property>
-            <property name="UseMarkup">True</property>
-            <property name="Wrap">True</property>
-            <property name="WidthChars">70</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.ScrolledWindow" id="scrolledwindow2">
-            <property name="MemberName" />
-            <property name="CanFocus">True</property>
-            <property name="ShadowType">In</property>
-            <child>
-              <widget class="Gtk.Viewport" id="GtkViewport">
-                <property name="MemberName" />
-                <property name="ShadowType">None</property>
-                <child>
-                  <widget class="Gtk.VBox" id="outerbox">
-                    <property name="MemberName" />
-                    <property name="Visible">False</property>
-                    <property name="Spacing">6</property>
-                    <child>
-                      <widget class="Gtk.VBox" id="phasesbox">
-                        <property name="MemberName" />
-                        <property name="Spacing">6</property>
-                        <child>
-                          <placeholder />
-                        </child>
-                        <child>
-                          <placeholder />
-                        </child>
-                        <child>
-                          <placeholder />
-                        </child>
-                      </widget>
-                      <packing>
-                        <property name="Position">0</property>
-                        <property name="AutoSize">False</property>
-                        <property name="Expand">False</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <widget class="Gtk.VBox" id="fillerbox">
-                        <property name="MemberName" />
-                        <property name="Spacing">6</property>
-                        <child>
-                          <placeholder />
-                        </child>
-                        <child>
-                          <placeholder />
-                        </child>
-                        <child>
-                          <placeholder />
-                        </child>
-                      </widget>
-                      <packing>
-                        <property name="Position">1</property>
-                        <property name="AutoSize">False</property>
-                      </packing>
-                    </child>
-                  </widget>
-                </child>
-              </widget>
-            </child>
-          </widget>
-          <packing>
-            <property name="Position">1</property>
-            <property name="AutoSize">True</property>
-          </packing>
-        </child>
-        <child>
-          <widget class="Gtk.HBox" id="hbox1">
-            <property name="MemberName" />
-            <property name="Spacing">6</property>
-            <child>
-              <widget class="Gtk.Entry" id="entry1">
-                <property name="MemberName" />
-                <property name="CanFocus">True</property>
-                <property name="IsEditable">True</property>
-                <property name="InvisibleChar">•</property>
-              </widget>
-              <packing>
-                <property name="Position">0</property>
-                <property name="AutoSize">True</property>
-              </packing>
-            </child>
-            <child>
-              <widget class="Gtk.Button" id="addbutton">
-                <property name="MemberName" />
-                <property name="Sensitive">False</property>
-                <property name="CanFocus">True</property>
-                <property name="Type">TextAndIcon</property>
-                <property name="Icon">stock:gtk-add Dialog</property>
-                <property name="Label" translatable="yes">Add game unit</property>
-                <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>
-          <packing>
-            <property name="PackType">End</property>
-            <property name="Position">2</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.Component.GameUnitWidget" design-size="644 57">
-    <property name="MemberName" />
-    <property name="Visible">False</property>
-    <child>
-      <widget class="Gtk.HBox" id="gameunitsbox">
-        <property name="MemberName" />
-        <property name="Spacing">6</property>
-        <child>
-          <placeholder />
-        </child>
-        <child>
-          <placeholder />
-        </child>
-        <child>
-          <widget class="Gtk.Button" id="button1">
-            <property name="MemberName" />
-            <property name="CanFocus">True</property>
-            <property name="Type">TextAndIcon</property>
-            <property name="Label" translatable="yes">GtkButton</property>
-            <property name="UseUnderline">True</property>
-          </widget>
-          <packing>
-            <property name="Position">2</property>
-            <property name="AutoSize">True</property>
-            <property name="Expand">False</property>
-            <property name="Fill">False</property>
-          </packing>
-        </child>
-      </widget>
-    </child>
-  </widget>
-  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.GameUnitsTagger" design-size="727 74">
-    <property name="MemberName" />
-    <property name="Visible">False</property>
-    <child>
-      <widget class="Gtk.HBox" id="gameunitsbox1">
-        <property name="MemberName" />
-        <property name="Spacing">6</property>
-        <child>
-          <placeholder />
-        </child>
-        <child>
-          <placeholder />
-        </child>
-        <child>
-          <placeholder />
-        </child>
-      </widget>
-    </child>
-  </widget>
-  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.PlayersTagger" design-size="331 191">
-    <property name="MemberName" />
-    <property name="Visible">False</property>
-    <child>
-      <widget class="Gtk.VBox" id="vbox4">
-        <property name="MemberName" />
-        <property name="Spacing">6</property>
-        <child>
-          <widget class="Gtk.Table" id="localtable">
-            <property name="MemberName" />
-            <property name="NRows">3</property>
-            <property name="NColumns">3</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>
-          </widget>
-          <packing>
-            <property name="Position">0</property>
-            <property name="AutoSize">False</property>
-            <property name="Expand">False</property>
-          </packing>
-        </child>
-        <child>
-          <widget class="Gtk.HSeparator" id="hseparator1">
-            <property name="MemberName" />
-          </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.Table" id="visitortable">
-            <property name="MemberName" />
-            <property name="NRows">3</property>
-            <property name="NColumns">3</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>
-          </widget>
-          <packing>
-            <property name="Position">2</property>
-            <property name="AutoSize">False</property>
-            <property name="Expand">False</property>
-          </packing>
-        </child>
-      </widget>
-    </child>
-  </widget>
   <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.PlaysSelectionWidget" design-size="568 495">
     <property name="MemberName" />
     <property name="Visible">False</property>
@@ -9749,7 +8801,7 @@ Click 2 players to swap them</property>
       </widget>
     </child>
   </widget>
-  <widget class="Gtk.Bin" id="LongoMatch.Gui.Panel.SportsTemplatesPanel" design-size="1087 501">
+  <widget class="Gtk.Bin" id="LongoMatch.Gui.Panel.SportsTemplatesPanel" design-size="1087 503">
     <property name="MemberName" />
     <property name="Visible">False</property>
     <child>
@@ -10192,6 +9244,7 @@ Click 2 players to swap them</property>
     </child>
   </widget>
   <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.CodingWidget" design-size="673 300">
+    <action-group name="Timeline" />
     <action-group name="Default">
       <action id="timelineMode">
         <property name="Type">Radio</property>
@@ -10219,7 +9272,6 @@ Click 2 players to swap them</property>
         <property name="StockId">gtk-zoom-fit</property>
       </action>
     </action-group>
-    <action-group name="Timeline" />
     <property name="MemberName" />
     <property name="Visible">False</property>
     <child>
diff --git a/LongoMatch.GUI/gtk-gui/objects.xml b/LongoMatch.GUI/gtk-gui/objects.xml
index 0da491b..adc065c 100644
--- a/LongoMatch.GUI/gtk-gui/objects.xml
+++ b/LongoMatch.GUI/gtk-gui/objects.xml
@@ -99,10 +99,6 @@
     <itemgroups />
     <signals />
   </object>
-  <object type="LongoMatch.Gui.Component.TaggerWidget" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
-    <itemgroups />
-    <signals />
-  </object>
   <object type="LongoMatch.Gui.Component.BackgroundWidget" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
     <itemgroups />
     <signals />
@@ -116,14 +112,6 @@
       </itemgroup>
     </signals>
   </object>
-  <object type="LongoMatch.Gui.Component.PlayersTaggerWidget" palette-category="General" 
allow-children="false" base-type="Gtk.Bin">
-    <itemgroups />
-    <signals />
-  </object>
-  <object type="LongoMatch.Gui.Component.StringTaggerWidget" palette-category="General" 
allow-children="false" base-type="Gtk.Bin">
-    <itemgroups />
-    <signals />
-  </object>
   <object type="LongoMatch.Gui.Component.RenderingStateBar" palette-category="General" 
allow-children="false" base-type="Gtk.Bin">
     <itemgroups>
       <itemgroup label="IRenderingStateBar Properties">
@@ -141,30 +129,6 @@
     <itemgroups />
     <signals />
   </object>
-  <object type="LongoMatch.Gui.Component.GameUnitsEditor" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
-    <itemgroups />
-    <signals />
-  </object>
-  <object type="LongoMatch.Gui.Component.GameUnitWidget" palette-category="General" allow-children="false" 
base-type="Gtk.Frame">
-    <itemgroups />
-    <signals>
-      <itemgroup label="GameUnitWidget Signals">
-        <signal name="GameUnitEvent" />
-      </itemgroup>
-    </signals>
-  </object>
-  <object type="LongoMatch.Gui.Component.GameUnitsTagger" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
-    <itemgroups />
-    <signals>
-      <itemgroup label="GameUnitsTagger Signals">
-        <signal name="GameUnitEvent" />
-      </itemgroup>
-    </signals>
-  </object>
-  <object type="LongoMatch.Gui.Component.PlayersTagger" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
-    <itemgroups />
-    <signals />
-  </object>
   <object type="LongoMatch.Gui.Component.PlaysSelectionWidget" palette-category="General" 
allow-children="false" base-type="Gtk.Bin">
     <itemgroups />
     <signals />
@@ -405,4 +369,40 @@
       </itemgroup>
     </signals>
   </object>
+  <object type="LongoMatch.Gui.Component.PlayersTaggerWidget" palette-category="General" 
allow-children="false" base-type="Gtk.Bin">
+    <itemgroups />
+    <signals />
+  </object>
+  <object type="LongoMatch.Gui.Component.StringTaggerWidget" palette-category="General" 
allow-children="false" base-type="Gtk.Bin">
+    <itemgroups />
+    <signals />
+  </object>
+  <object type="LongoMatch.Gui.Component.GameUnitsEditor" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
+    <itemgroups />
+    <signals />
+  </object>
+  <object type="LongoMatch.Gui.Component.GameUnitsTagger" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
+    <itemgroups />
+    <signals>
+      <itemgroup label="GameUnitsTagger Signals">
+        <signal name="GameUnitEvent" />
+      </itemgroup>
+    </signals>
+  </object>
+  <object type="LongoMatch.Gui.Component.GameUnitWidget" palette-category="General" allow-children="false" 
base-type="Gtk.Frame">
+    <itemgroups />
+    <signals>
+      <itemgroup label="GameUnitWidget Signals">
+        <signal name="GameUnitEvent" />
+      </itemgroup>
+    </signals>
+  </object>
+  <object type="LongoMatch.Gui.Component.PlayersTagger" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
+    <itemgroups />
+    <signals />
+  </object>
+  <object type="LongoMatch.Gui.Component.TaggerWidget" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
+    <itemgroups />
+    <signals />
+  </object>
 </objects>
\ No newline at end of file
diff --git a/LongoMatch.Migration/Common/Color.cs b/LongoMatch.Migration/Common/Color.cs
new file mode 100644
index 0000000..009cbc8
--- /dev/null
+++ b/LongoMatch.Migration/Common/Color.cs
@@ -0,0 +1,90 @@
+// 
+//  Copyright (C) 2011 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 Newtonsoft.Json;
+
+namespace LongoMatch.Common
+{
+
+       [JsonConverter (typeof (LongoMatchConverter))]
+       public class Color
+       {
+               public Color (byte r, byte g, byte b, byte a=byte.MaxValue)
+               {
+                       R = r;
+                       G = g;
+                       B = b;
+                       A = a;
+               }
+               
+               public byte R {
+                       get;
+                       set;
+               }
+               
+               public byte G {
+                       get;
+                       set;
+               }
+               
+               public byte B {
+                       get;
+                       set;
+               }
+               
+               public byte A {
+                       get;
+                       set;
+               }
+               
+               public override bool Equals (object obj)
+               {
+                       Color c = obj as Color;
+                       if (c == null) {
+                               return false;
+                       }
+                       return c.R == R && c.G == G && c.B == B && c.A == A;
+               }
+               
+               public override int GetHashCode ()
+               {
+                       return (Int32)R<<24 | (Int32)G<<16 | (Int32)B<<8 | (Int32)A;
+               }
+               
+               static public byte UShortToByte (ushort val) {
+                       return (byte) (((float)val) / ushort.MaxValue * byte.MaxValue);
+               }
+               
+               static public Color ColorFromUShort (ushort r, ushort g, ushort b, ushort a = 
ushort.MaxValue) {
+                       return new Color (UShortToByte (r), UShortToByte (g),
+                                         UShortToByte (b), UShortToByte (a));
+               }
+               
+               static public Color Black = new Color (0, 0, 0);
+               static public Color White = new Color (255, 255, 255);
+               static public Color Red = new Color (255, 0, 0);
+               static public Color Green = new Color (0, 255, 0);
+               static public Color Blue = new Color (0, 0, 255);
+               static public Color Grey1 = new Color (190, 190, 190);
+               static public Color Grey2 = new Color (32, 32, 32);
+               static public Color Green1 = new Color (99,192,56);
+               static public Color Red1 = new Color (255, 51, 0);
+               static public Color Blue1 = new Color (0, 153, 255);
+       }
+}
+
diff --git a/LongoMatch.Core/Store/GameUnit.cs b/LongoMatch.Migration/Common/Config.cs
similarity index 58%
copy from LongoMatch.Core/Store/GameUnit.cs
copy to LongoMatch.Migration/Common/Config.cs
index f9ce9b9..01d3805 100644
--- a/LongoMatch.Core/Store/GameUnit.cs
+++ b/LongoMatch.Migration/Common/Config.cs
@@ -1,43 +1,43 @@
-// 
-//  Copyright (C) 2011 andoni
-// 
+//
+//  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.Collections.Generic;
 
-namespace LongoMatch.Store
+namespace LongoMatch.Common
 {
-       [Serializable]
-       public class GameUnit: List<TimelineNode>
+       public class Config
        {
-               
-               public GameUnit (string name)
-               {
-                       Name=name;
+               static public Image FieldBackground {
+                       get {
+                               return new Image (Gdk.Pixbuf.LoadFromResource (Constants.FIELD_BACKGROUND));
+                       }
                }
                
-               public string Name {
-                       get;
-                       set;
+               static public Image HalfFieldBackground {
+                       get {
+                               return new Image (Gdk.Pixbuf.LoadFromResource 
(Constants.HALF_FIELD_BACKGROUND));
+                       }
                }
                
-               public override string ToString ()
-               {
-                       return string.Format ("[GameUnit: Name={0}]", Name);
-               }       
+               static public Image GoalBackground {
+                       get {
+                               return new Image (Gdk.Pixbuf.LoadFromResource (Constants.GOAL_BACKGROUND));
+                       }
+               }
        }
 }
 
diff --git a/LongoMatch.Migration/Common/ConsoleCrayon.cs b/LongoMatch.Migration/Common/ConsoleCrayon.cs
new file mode 100644
index 0000000..44d06e4
--- /dev/null
+++ b/LongoMatch.Migration/Common/ConsoleCrayon.cs
@@ -0,0 +1,280 @@
+//
+// ConsoleCrayon.cs
+//
+// Author:
+//   Aaron Bockover <abockover novell com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace LongoMatch
+{
+       public static class ConsoleCrayon
+       {
+
+               #region Public API
+
+               private static ConsoleColor foreground_color;
+               public static ConsoleColor ForegroundColor {
+                       get {
+                               return foreground_color;
+                       }
+                       set {
+                               foreground_color = value;
+                               SetColor(foreground_color, true);
+                       }
+               }
+
+               private static ConsoleColor background_color;
+               public static ConsoleColor BackgroundColor {
+                       get {
+                               return background_color;
+                       }
+                       set {
+                               background_color = value;
+                               SetColor(background_color, false);
+                       }
+               }
+
+               public static void ResetColor()
+               {
+                       if(XtermColors) {
+                               Console.Write(GetAnsiResetControlCode());
+                       } else if(Environment.OSVersion.Platform != PlatformID.Unix && !RuntimeIsMono) {
+                               Console.ResetColor();
+                       }
+               }
+
+               private static void SetColor(ConsoleColor color, bool isForeground)
+               {
+                       if(color < ConsoleColor.Black || color > ConsoleColor.White) {
+                               throw new ArgumentOutOfRangeException("color", "Not a ConsoleColor value.");
+                       }
+
+                       if(XtermColors) {
+                               Console.Write(GetAnsiColorControlCode(color, isForeground));
+                       } else if(Environment.OSVersion.Platform != PlatformID.Unix && !RuntimeIsMono) {
+                               if(isForeground) {
+                                       Console.ForegroundColor = color;
+                               } else {
+                                       Console.BackgroundColor = color;
+                               }
+                       }
+               }
+
+               #endregion
+
+               #region Ansi/VT Code Calculation
+
+               // Modified from Mono's System.TermInfoDriver
+               // License: MIT/X11
+               // Authors: Gonzalo Paniagua Javier <gonzalo ximian com>
+               // (C) 2005-2006 Novell, Inc <http://www.novell.com>
+
+               private static int TranslateColor(ConsoleColor desired, out bool light)
+               {
+                       light = false;
+                       switch(desired) {
+                               // Dark colors
+                       case ConsoleColor.Black:
+                               return 0;
+                       case ConsoleColor.DarkRed:
+                               return 1;
+                       case ConsoleColor.DarkGreen:
+                               return 2;
+                       case ConsoleColor.DarkYellow:
+                               return 3;
+                       case ConsoleColor.DarkBlue:
+                               return 4;
+                       case ConsoleColor.DarkMagenta:
+                               return 5;
+                       case ConsoleColor.DarkCyan:
+                               return 6;
+                       case ConsoleColor.Gray:
+                               return 7;
+
+                               // Light colors
+                       case ConsoleColor.DarkGray:
+                               light = true;
+                               return 0;
+                       case ConsoleColor.Red:
+                               light = true;
+                               return 1;
+                       case ConsoleColor.Green:
+                               light = true;
+                               return 2;
+                       case ConsoleColor.Yellow:
+                               light = true;
+                               return 3;
+                       case ConsoleColor.Blue:
+                               light = true;
+                               return 4;
+                       case ConsoleColor.Magenta:
+                               light = true;
+                               return 5;
+                       case ConsoleColor.Cyan:
+                               light = true;
+                               return 6;
+                       case ConsoleColor.White:
+                       default:
+                               light = true;
+                               return 7;
+                       }
+               }
+
+               private static string GetAnsiColorControlCode(ConsoleColor color, bool isForeground)
+               {
+                       // lighter fg colours are 90 -> 97 rather than 30 -> 37
+                       // lighter bg colours are 100 -> 107 rather than 40 -> 47
+                       bool light;
+                       int code = TranslateColor(color, out light) + (isForeground ? 30 : 40) + (light ? 60 
: 0);
+                       return String.Format("\x001b[{0}m", code);
+               }
+
+               private static string GetAnsiResetControlCode()
+               {
+                       return "\x001b[0m";
+               }
+
+               #endregion
+
+               #region xterm Detection
+
+               private static bool? xterm_colors = null;
+               public static bool XtermColors {
+                       get {
+                               if(xterm_colors == null) {
+                                       DetectXtermColors();
+                               }
+
+                               return xterm_colors.Value;
+                       }
+               }
+
+               [System.Runtime.InteropServices.DllImport("libc", EntryPoint="isatty")]
+               private extern static int _isatty(int fd);
+
+               private static bool isatty(int fd)
+               {
+                       try {
+                               return _isatty(fd) == 1;
+                       } catch {
+                               return false;
+                       }
+               }
+
+               private static void DetectXtermColors()
+               {
+                       bool _xterm_colors = false;
+
+                       switch(Environment.GetEnvironmentVariable("TERM")) {
+                       case "xterm":
+                       case "rxvt":
+                       case "rxvt-unicode":
+                               if(Environment.GetEnvironmentVariable("COLORTERM") != null) {
+                                       _xterm_colors = true;
+                               }
+                               break;
+                       case "xterm-color":
+                               _xterm_colors = true;
+                               break;
+                       }
+
+                       xterm_colors = _xterm_colors && isatty(1) && isatty(2);
+               }
+
+               #endregion
+
+               #region Runtime Detection
+
+               private static bool? runtime_is_mono;
+               public static bool RuntimeIsMono {
+                       get {
+                               if(runtime_is_mono == null) {
+                                       runtime_is_mono = Type.GetType("System.MonoType") != null;
+                               }
+
+                               return runtime_is_mono.Value;
+                       }
+               }
+
+               #endregion
+
+               #region Tests
+
+               public static void Test()
+               {
+                       TestSelf();
+                       Console.WriteLine();
+                       TestAnsi();
+                       Console.WriteLine();
+                       TestRuntime();
+               }
+
+               private static void TestSelf()
+               {
+                       Console.WriteLine("==SELF TEST==");
+                       foreach(ConsoleColor color in Enum.GetValues(typeof(ConsoleColor))) {
+                               ForegroundColor = color;
+                               Console.Write(color);
+                               ResetColor();
+                               Console.Write(" :: ");
+                               BackgroundColor = color;
+                               Console.Write(color);
+                               ResetColor();
+                               Console.WriteLine();
+                       }
+               }
+
+               private static void TestAnsi()
+               {
+                       Console.WriteLine("==ANSI TEST==");
+                       foreach(ConsoleColor color in Enum.GetValues(typeof(ConsoleColor))) {
+                               string color_code_fg = GetAnsiColorControlCode(color, true);
+                               string color_code_bg = GetAnsiColorControlCode(color, false);
+                               Console.Write("{0}{1}: {2}{3} :: {4}{1}: {5}{3}", color_code_fg, color, 
color_code_fg.Substring(2),
+                                             GetAnsiResetControlCode(), color_code_bg, 
color_code_bg.Substring(2));
+                               Console.WriteLine();
+                       }
+               }
+
+               private static void TestRuntime()
+               {
+                       Console.WriteLine("==RUNTIME TEST==");
+                       foreach(ConsoleColor color in Enum.GetValues(typeof(ConsoleColor))) {
+                               Console.ForegroundColor = color;
+                               Console.Write(color);
+                               Console.ResetColor();
+                               Console.Write(" :: ");
+                               Console.BackgroundColor = color;
+                               Console.Write(color);
+                               Console.ResetColor();
+                               Console.WriteLine();
+                       }
+               }
+
+               #endregion
+
+       }
+}
diff --git a/LongoMatch.Migration/Common/Constants.cs b/LongoMatch.Migration/Common/Constants.cs
new file mode 100644
index 0000000..f51aa74
--- /dev/null
+++ b/LongoMatch.Migration/Common/Constants.cs
@@ -0,0 +1,114 @@
+//
+//  Copyright (C) 2007-2010 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+using System;
+#if HAVE_GTK
+using Gdk;
+#endif
+
+
+namespace LongoMatch.Common
+{
+       public class Constants {
+               public const string SOFTWARE_NAME = "LongoMatch";
+
+               public const string PROJECT_NAME = SOFTWARE_NAME + " project";
+
+               public const string DEFAULT_DB_NAME = "longomatch";
+               
+               public const string COPYRIGHT =  "Copyright ©2007-2010 Andoni Morales Alastruey";
+               
+               public const string FAKE_PROJECT = "@Fake Project@";
+               
+               public const string PORTABLE_FILE = "longomatch.portable";
+               
+               public const string LICENSE =
+                       @"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.";
+
+               public const string TRANSLATORS =
+                       @"Andoni Morales Alastruey (es)
+Aron Xu (cn_ZH)
+Barkın Tanmann (tr)
+Bruno Brouard (fr)
+Daniel Nylander (sv)
+G. Baylard (fr)
+Joan Charmant (fr)
+João Paulo Azevedo (pt)
+Joe Hansen (da)
+Jorge González (es)
+Kenneth Nielsen (da)
+Kjartan Maraas (nb)
+Peter Strikwerda (nl)
+Laurent Coudeur (fr)
+Marek Cernocky (cs)
+Mario Blättermann (de)
+Matej Urbančič (sl)
+Maurizio Napolitano (it)
+Pavel Bárta (cs)
+Petr Kovar (cs)
+Xavier Queralt Mateu (ca)";
+
+               public const string WEBSITE = "http://www.longomatch.ylatuya.es";;
+
+               public const string MANUAL = "http://www.longomatch.ylatuya.es/documentation/manual.html";;
+
+#if HAVE_GTK
+               public const int STEP = (int) Gdk.ModifierType.ShiftMask;
+
+               public const int SEEK_BACKWARD = (int) Gdk.Key.Left;
+
+               public const int SEEK_FORWARD = (int) Gdk.Key.Right;
+
+               public const int FRAMERATE_UP = (int) Gdk.Key.Up;
+
+               public const int FRAMERATE_DOWN = (int) Gdk.Key.Down;
+
+               public const int TOGGLE_PLAY = (int) Gdk.Key.space;
+#endif
+
+               public const string TEMPLATES_DIR = "templates";
+               public const string TEAMS_TEMPLATE_EXT = ".ltt";
+               public const string CAT_TEMPLATE_EXT = ".lct";
+               public const string SUBCAT_TEMPLATE_EXT = ".lst";
+               public const string PLAYLIST_EXT = ".lpl";
+               public const string PROJECT_EXT = ".lgm";
+               
+               public const string BACKGROUND = "background.png";
+               public const string FIELD_BACKGROUND = "field_background.svg";
+               public const string HALF_FIELD_BACKGROUND = "half_field_background.svg";
+               public const string GOAL_BACKGROUND = "goal_background.svg";
+               
+               public const int DB_MAYOR_VERSION = 3;
+               public const int DB_MINOR_VERSION = 1;
+               
+               public const int MAX_PLAYER_ICON_SIZE = 100;
+               public const int MAX_SHIELD_ICON_SIZE = 100;
+               public const int MAX_THUMBNAIL_SIZE = 100;
+               
+               public static Color HOME_COLOR = Color.Red1;
+               public static Color AWAY_COLOR = Color.Blue1;
+       }
+}
diff --git a/LongoMatch.Core/Store/GameUnit.cs b/LongoMatch.Migration/Common/Enums.cs
similarity index 66%
copy from LongoMatch.Core/Store/GameUnit.cs
copy to LongoMatch.Migration/Common/Enums.cs
index f9ce9b9..ae62c2b 100644
--- a/LongoMatch.Core/Store/GameUnit.cs
+++ b/LongoMatch.Migration/Common/Enums.cs
@@ -1,43 +1,48 @@
-// 
-//  Copyright (C) 2011 andoni
-// 
+//
+//  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.Collections.Generic;
 
-namespace LongoMatch.Store
+namespace LongoMatch.Common
 {
-       [Serializable]
-       public class GameUnit: List<TimelineNode>
-       {
-               
-               public GameUnit (string name)
-               {
-                       Name=name;
-               }
-               
-               public string Name {
-                       get;
-                       set;
-               }
-               
-               public override string ToString ()
-               {
-                       return string.Format ("[GameUnit: Name={0}]", Name);
-               }       
+       public enum Team {
+               NONE = 0,
+               LOCAL = 1,
+               VISITOR = 2,
+               BOTH = 3,
+       }
+       
+       public enum SortMethodType {
+               SortByName = 0,
+               SortByStartTime = 1,
+               SortByStopTime = 2,
+               SortByDuration = 3
+       }
+       
+       public enum SerializationType {
+               Binary,
+               Xml,
+               Json
        }
+               
+
+
+
+       
+
 }
 
diff --git a/LongoMatch.Migration/Common/Image.cs b/LongoMatch.Migration/Common/Image.cs
new file mode 100644
index 0000000..483c2a1
--- /dev/null
+++ b/LongoMatch.Migration/Common/Image.cs
@@ -0,0 +1,191 @@
+// 
+//  Copyright (C) 2011 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.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace LongoMatch.Common
+{
+       using System;
+       using System.IO;
+#if HAVE_GTK
+       using SImage = Gdk.Pixbuf;
+#else
+       using System.Drawing.Imaging;
+       using SImage = System.Drawing.Image;
+#endif
+
+       [Serializable]
+       [JsonConverter (typeof(LongoMatchConverter))]
+       public class Image: ISerializable, IDisposable
+       {
+               SImage image;
+               
+               public Image (SImage image)
+               {
+                       this.image = image;
+               }
+               
+               public SImage Value {
+                       get {
+                               return image;
+                       }
+               }
+               
+               public void Dispose() {
+                       image.Dispose();
+               }
+               
+               public void Scale() {
+                       Scale (Constants.MAX_THUMBNAIL_SIZE, Constants.MAX_THUMBNAIL_SIZE);
+               }
+               
+               public void ScaleFactor (int destWidth, int destHeight,
+                                        out double scaleX, out double scaleY,
+                                        out Point offset) {
+                       int oWidth = 0;
+                       int oHeight = 0;
+                       
+                       ComputeScale (Width, Height, destWidth, destHeight, out oWidth, out oHeight);
+                       scaleX = (double) oWidth / Width;
+                       scaleY = (double) oHeight / Height;
+                       offset = new Point ((destWidth - oWidth) / 2, (destHeight - oHeight) / 2);
+               }
+               
+               // this constructor is automatically called during deserialization
+               public Image (SerializationInfo info, StreamingContext context) {
+                       try {
+                               image = Deserialize ((byte[]) info.GetValue ("pngbuf", typeof 
(byte[]))).Value;
+                       } catch {
+                               image = null;
+                       }
+               }
+
+               // this method is automatically called during serialization
+               public void GetObjectData(SerializationInfo info, StreamingContext context) {
+                       try {
+                               info.AddValue("pngbuf", Serialize());
+                       } catch  {
+                               info.AddValue("pngbuf", null);
+                       }
+               }
+               
+               
+#if HAVE_GTK
+               public byte[] Serialize () {
+                       if (image == null)
+                               return null;
+                       return image.SaveToBuffer("png");
+               }
+               
+               public static Image Deserialize (byte[] ser) {
+                       return new Image(new SImage(ser));
+               }
+               
+               public void Scale(int maxWidth, int maxHeight) {
+                       SImage scalled;
+                       int width, height;
+                       
+                       ComputeScale(image.Width, image.Height, maxWidth, maxHeight, out width, out height);
+                       scalled= image.ScaleSimple(width, height, Gdk.InterpType.Bilinear);     
+                       image.Dispose();
+                       image = scalled;
+               }
+               
+               public void Save (string filename) {
+                       image.Save(filename, "png");
+               }
+               
+               public int Width {
+                       get {
+                               return image.Width;
+                       }
+               }
+               
+               public int Height {
+                       get {
+                               return image.Height;
+                       }
+               }
+               
+               public static Image Composite(Image image1, Image image2) {
+                       SImage dest = new SImage(image1.Value.Colorspace, true, image1.Value.BitsPerSample,
+                                                image1.Width, image1.Height);
+                       image1.Value.Composite(dest, 0, 0, image2.Width, image2.Height, 0, 0, 1, 1,
+                                              Gdk.InterpType.Bilinear, 255);
+                       image2.Value.Composite(dest, 0, 0, image2.Width, image2.Height, 0, 0, 1, 1,
+                                              Gdk.InterpType.Bilinear, 255);
+                       return new Image(dest);
+               }
+               
+#else
+               public byte[] Serialize () {
+                       if (image == null)
+                               return null;
+                       using (MemoryStream stream = new MemoryStream()) {
+                               image.Save(stream, ImageFormat.Png);
+                               byte[] buf = new byte[stream.Length - 1];
+                               stream.Position = 0;
+                               stream.Read(buf, 0, buf.Length);
+                               return buf;
+                       }
+               }
+               
+               public void Scale(int maxWidth, int maxHeight) {
+                       SImage scalled;
+                       int width, height;
+                       
+                       ComputeScale(image.Width, image.Height, maxWidth, maxHeight, out width, out height);
+                       scalled = image.GetThumbnailImage(width, height, new 
SImage.GetThumbnailImageAbort(ThumbnailAbort), IntPtr.Zero);
+                       image.Dispose();
+                       image = scalled;
+               }
+               
+               public static Image Deserialize (byte[] ser) {
+                       Image img = null;
+                       using (MemoryStream stream = new MemoryStream(ser)) {
+                               img = new Image(System.Drawing.Image.FromStream(stream));
+                       }
+                       return img;
+               }
+               
+               public void Save (string filename) {
+                       image.Save(filename, ImageFormat.Png);
+               }
+               
+               bool ThumbnailAbort () {
+                       return false;
+               }
+#endif
+
+               private void ComputeScale (int inWidth, int inHeight, int maxOutWidth, int maxOutHeight, out 
int outWidth, out int outHeight)
+               {
+                       outWidth = maxOutWidth;
+                       outHeight = maxOutHeight;
+
+                       double par = (double)inWidth /(double)inHeight;
+                       double outPar = (double)maxOutWidth /(double)maxOutHeight;
+                               
+                       if (outPar > par) {
+                               outWidth = Math.Min (maxOutWidth, (int)(outHeight * par));
+                       } else {
+                               outHeight = Math.Min (maxOutHeight, (int)(outWidth / par));
+                       }
+               } 
+       }
+}
+
diff --git a/LongoMatch.Migration/Common/Log.cs b/LongoMatch.Migration/Common/Log.cs
new file mode 100644
index 0000000..0c0aadd
--- /dev/null
+++ b/LongoMatch.Migration/Common/Log.cs
@@ -0,0 +1,443 @@
+//
+// Log.cs
+//
+// Author:
+//   Aaron Bockover <abockover novell com>
+//
+// Copyright (C) 2005-2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Text;
+using System.Collections.Generic;
+using System.Threading;
+
+namespace LongoMatch
+{
+       public delegate void LogNotifyHandler(LogNotifyArgs args);
+
+       public class LogNotifyArgs : EventArgs
+       {
+               private LogEntry entry;
+
+               public LogNotifyArgs(LogEntry entry)
+               {
+                       this.entry = entry;
+               }
+
+               public LogEntry Entry {
+                       get {
+                               return entry;
+                       }
+               }
+       }
+
+       public enum LogEntryType
+       {
+               Debug,
+               Warning,
+               Error,
+               Information
+       }
+
+       public class LogEntry
+       {
+               private LogEntryType type;
+               private string message;
+               private string details;
+               private DateTime timestamp;
+
+               internal LogEntry(LogEntryType type, string message, string details)
+               {
+                       this.type = type;
+                       this.message = message;
+                       this.details = details;
+                       this.timestamp = DateTime.Now;
+               }
+
+               public LogEntryType Type {
+                       get {
+                               return type;
+                       }
+               }
+
+               public string Message {
+                       get {
+                               return message;
+                       }
+               }
+
+               public string Details {
+                       get {
+                               return details;
+                       }
+               }
+
+               public DateTime TimeStamp {
+                       get {
+                               return timestamp;
+                       }
+               }
+       }
+
+       public static class Log
+       {
+               public static event LogNotifyHandler Notify;
+
+               private static Dictionary<uint, DateTime> timers = new Dictionary<uint, DateTime> ();
+               private static uint next_timer_id = 1;
+
+               private static bool debugging = false;
+               public static bool Debugging {
+                       get {
+                               return debugging;
+                       }
+                       set {
+                               debugging = value;
+                       }
+               }
+
+               public static void Commit(LogEntryType type, string message, string details, bool showUser)
+               {
+                       if(type == LogEntryType.Debug && !Debugging) {
+                               return;
+                       }
+
+                       if(type != LogEntryType.Information || (type == LogEntryType.Information && 
!showUser)) {
+                               switch(type) {
+                               case LogEntryType.Error:
+                                       ConsoleCrayon.ForegroundColor = ConsoleColor.Red;
+                                       break;
+                               case LogEntryType.Warning:
+                                       ConsoleCrayon.ForegroundColor = ConsoleColor.DarkYellow;
+                                       break;
+                               case LogEntryType.Information:
+                                       ConsoleCrayon.ForegroundColor = ConsoleColor.Green;
+                                       break;
+                               case LogEntryType.Debug:
+                                       ConsoleCrayon.ForegroundColor = ConsoleColor.Blue;
+                                       break;
+                               }
+
+                               var thread_name = String.Empty;
+                               if(Debugging) {
+                                       var thread = Thread.CurrentThread;
+                                       thread_name = String.Format("{0} ", thread.ManagedThreadId);
+                               }
+
+                               Console.Write("[{5}{0} {1:00}:{2:00}:{3:00}.{4:000}]", TypeString(type), 
DateTime.Now.Hour,
+                                             DateTime.Now.Minute, DateTime.Now.Second, 
DateTime.Now.Millisecond, thread_name);
+
+                               ConsoleCrayon.ResetColor();
+
+                               if(details != null) {
+                                       Console.WriteLine(" {0} - {1}", message, details);
+                               } else {
+                                       Console.WriteLine(" {0}", message);
+                               }
+                       }
+
+                       if(showUser) {
+                               OnNotify(new LogEntry(type, message, details));
+                       }
+               }
+
+               private static string TypeString(LogEntryType type)
+               {
+                       switch(type) {
+                       case LogEntryType.Debug:
+                               return "Debug";
+                       case LogEntryType.Warning:
+                               return "Warn ";
+                       case LogEntryType.Error:
+                               return "Error";
+                       case LogEntryType.Information:
+                               return "Info ";
+                       }
+                       return null;
+               }
+
+               private static void OnNotify(LogEntry entry)
+               {
+                       LogNotifyHandler handler = Notify;
+                       if(handler != null) {
+                               handler(new LogNotifyArgs(entry));
+                       }
+               }
+
+               #region Timer Methods
+
+               public static uint DebugTimerStart(string message)
+               {
+                       return TimerStart(message, false);
+               }
+
+               public static uint InformationTimerStart(string message)
+               {
+                       return TimerStart(message, true);
+               }
+
+               private static uint TimerStart(string message, bool isInfo)
+               {
+                       if(!Debugging && !isInfo) {
+                               return 0;
+                       }
+
+                       if(isInfo) {
+                               Information(message);
+                       } else {
+                               Debug(message);
+                       }
+
+                       return TimerStart(isInfo);
+               }
+
+               public static uint DebugTimerStart()
+               {
+                       return TimerStart(false);
+               }
+
+               public static uint InformationTimerStart()
+               {
+                       return TimerStart(true);
+               }
+
+               private static uint TimerStart(bool isInfo)
+               {
+                       if(!Debugging && !isInfo) {
+                               return 0;
+                       }
+
+                       uint timer_id = next_timer_id++;
+                       timers.Add(timer_id, DateTime.Now);
+                       return timer_id;
+               }
+
+               public static void DebugTimerPrint(uint id)
+               {
+                       if(!Debugging) {
+                               return;
+                       }
+
+                       TimerPrint(id, "Operation duration: {0}", false);
+               }
+
+               public static void DebugTimerPrint(uint id, string message)
+               {
+                       if(!Debugging) {
+                               return;
+                       }
+
+                       TimerPrint(id, message, false);
+               }
+
+               public static void InformationTimerPrint(uint id)
+               {
+                       TimerPrint(id, "Operation duration: {0}", true);
+               }
+
+               public static void InformationTimerPrint(uint id, string message)
+               {
+                       TimerPrint(id, message, true);
+               }
+
+               private static void TimerPrint(uint id, string message, bool isInfo)
+               {
+                       if(!Debugging && !isInfo) {
+                               return;
+                       }
+
+                       DateTime finish = DateTime.Now;
+
+                       if(!timers.ContainsKey(id)) {
+                               return;
+                       }
+
+                       TimeSpan duration = finish - timers[id];
+                       string d_message;
+                       if(duration.TotalSeconds < 60) {
+                               d_message = duration.TotalSeconds.ToString();
+                       } else {
+                               d_message = duration.ToString();
+                       }
+
+                       if(isInfo) {
+                               InformationFormat(message, d_message);
+                       } else {
+                               DebugFormat(message, d_message);
+                       }
+               }
+
+               #endregion
+
+               #region Public Debug Methods
+
+               public static void Debug(string message, string details)
+               {
+                       if(Debugging) {
+                               Commit(LogEntryType.Debug, message, details, false);
+                       }
+               }
+
+               public static void Debug(string message)
+               {
+                       if(Debugging) {
+                               Debug(message, null);
+                       }
+               }
+
+               public static void DebugFormat(string format, params object [] args)
+               {
+                       if(Debugging) {
+                               Debug(String.Format(format, args));
+                       }
+               }
+
+               #endregion
+
+               #region Public Information Methods
+
+               public static void Information(string message)
+               {
+                       Information(message, null);
+               }
+
+               public static void Information(string message, string details)
+               {
+                       Information(message, details, false);
+               }
+
+               public static void Information(string message, string details, bool showUser)
+               {
+                       Commit(LogEntryType.Information, message, details, showUser);
+               }
+
+               public static void Information(string message, bool showUser)
+               {
+                       Information(message, null, showUser);
+               }
+
+               public static void InformationFormat(string format, params object [] args)
+               {
+                       Information(String.Format(format, args));
+               }
+
+               #endregion
+
+               #region Public Warning Methods
+
+               public static void Warning(string message)
+               {
+                       Warning(message, null);
+               }
+
+               public static void Warning(string message, string details)
+               {
+                       Warning(message, details, false);
+               }
+
+               public static void Warning(string message, string details, bool showUser)
+               {
+                       Commit(LogEntryType.Warning, message, details, showUser);
+               }
+
+               public static void Warning(string message, bool showUser)
+               {
+                       Warning(message, null, showUser);
+               }
+
+               public static void WarningFormat(string format, params object [] args)
+               {
+                       Warning(String.Format(format, args));
+               }
+
+               #endregion
+
+               #region Public Error Methods
+
+               public static void Error(string message)
+               {
+                       Error(message, null);
+               }
+
+               public static void Error(string message, string details)
+               {
+                       Error(message, details, false);
+               }
+
+               public static void Error(string message, string details, bool showUser)
+               {
+                       Commit(LogEntryType.Error, message, details, showUser);
+               }
+
+               public static void Error(string message, bool showUser)
+               {
+                       Error(message, null, showUser);
+               }
+
+               public static void ErrorFormat(string format, params object [] args)
+               {
+                       Error(String.Format(format, args));
+               }
+
+               #endregion
+
+               #region Public Exception Methods
+
+               public static void DebugException(Exception e)
+               {
+                       if(Debugging) {
+                               Exception(e);
+                       }
+               }
+
+               public static void Exception(Exception e)
+               {
+                       Exception(null, e);
+               }
+
+               public static void Exception(string message, Exception e)
+               {
+                       Stack<Exception> exception_chain = new Stack<Exception> ();
+                       StringBuilder builder = new StringBuilder();
+
+                       while(e != null) {
+                               exception_chain.Push(e);
+                               e = e.InnerException;
+                       }
+
+                       while(exception_chain.Count > 0) {
+                               e = exception_chain.Pop();
+                               builder.AppendFormat("{0}: {1} (in `{2}')", e.GetType(), e.Message, 
e.Source).AppendLine();
+                               builder.Append(e.StackTrace);
+                               if(exception_chain.Count > 0) {
+                                       builder.AppendLine();
+                               }
+                       }
+
+                       // FIXME: We should save these to an actual log file
+                       Log.Warning(message ?? "Caught an exception", builder.ToString(), false);
+               }
+
+               #endregion
+       }
+}
diff --git a/LongoMatch.Core/Common/SerializableObject.cs b/LongoMatch.Migration/Common/SerializableObject.cs
similarity index 59%
rename from LongoMatch.Core/Common/SerializableObject.cs
rename to LongoMatch.Migration/Common/SerializableObject.cs
index fccb9d7..c7060be 100644
--- a/LongoMatch.Core/Common/SerializableObject.cs
+++ b/LongoMatch.Migration/Common/SerializableObject.cs
@@ -27,6 +27,8 @@ using LongoMatch.Interfaces;
 using System.Reflection;
 using LongoMatch.Store.Templates;
 using Newtonsoft.Json.Converters;
+using LongoMatch.Store;
+using System.Globalization;
 
 namespace LongoMatch.Common
 {
@@ -106,54 +108,84 @@ namespace LongoMatch.Common
                                settings.Formatting = Formatting.Indented;
                                settings.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
                                settings.TypeNameHandling = TypeNameHandling.Objects;
-                               settings.ContractResolver = new ListObjectContractResolver ();
+                               //settings.ContractResolver = new ListObjectContractResolver ();
                                settings.Converters.Add (new VersionConverter ());
                                return settings;
                        }
                }
        }
        
-       public class ListObjectContractResolver : DefaultContractResolver
+       public class LongoMatchConverter : JsonConverter
        {
-               /* To serialize/desarialize List objects by including private fields
-                * _size and _items */
-               public ListObjectContractResolver()
+               public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
                {
+                       if (value is Time) {
+                               Time time = value as Time;
+                               if (time != null) {
+                                       writer.WriteValue(time.MSeconds);
+                               }
+                       } else if (value is Color) {
+                               Color color = value as Color;
+                               if (color != null) {
+                                       writer.WriteValue(String.Format ("#{0}{1}{2}{3}",
+                                                                        color.R.ToString ("X2"),
+                                                                        color.G.ToString ("X2"),
+                                                                        color.B.ToString ("X2"),
+                                                                        color.A.ToString ("X2")));
+                               }
+                       } else if (value is Image) {
+                               Image image = value as Image;
+                               if (image != null) {
+                                       writer.WriteValue(image.Serialize());
+                               }
+                       } else if (value is HotKey) {
+                               HotKey hotkey = value as HotKey;
+                               if (hotkey != null) {
+                                       writer.WriteValue(String.Format ("{0} {1}", hotkey.Key, 
hotkey.Modifier));
+                               }
+                       } else if (value is Point) {
+                               Point p = value as Point;
+                               if (p != null) {
+                                       writer.WriteValue(String.Format ("{0} {1}", p.DX, p.DY));
+                               }
+                       }
                }
-               
-               protected override IList<JsonProperty> CreateProperties (Type type, MemberSerialization 
memberSerialization)
+
+               public override object ReadJson(JsonReader reader, Type objectType, object existingValue, 
JsonSerializer serializer)
                {
-                       IList<JsonProperty> props = new List<JsonProperty>();
-                       
-                       props = base.CreateProperties (type, memberSerialization);
-                       if (typeof(ISubCategory).IsAssignableFrom (type) ||
-                           type == typeof(Categories) ||
-                           type == typeof(TeamTemplate) ||
-                           type == typeof(SubCategoryTemplate))
-                       {
-                               JsonProperty itprop;
-                               BindingFlags flags;
-                               
-                               props = props.Where (p => p.PropertyName != "Count").ToList();
-                               flags =  base.DefaultMembersSearchFlags;
-                               IList<JsonProperty> allprops = new List<JsonProperty>();
-                               base.DefaultMembersSearchFlags = flags | 
System.Reflection.BindingFlags.NonPublic;
-                               allprops = base.CreateProperties (type, MemberSerialization.Fields);
-                               base.DefaultMembersSearchFlags = flags;
-                               itprop = allprops.FirstOrDefault (p => p.PropertyName == "_items");
-                               if (itprop != null) {
-                                       props.Add (itprop);
-                               }
-                               itprop = allprops.FirstOrDefault (p => p.PropertyName == "_size");
-                               if (itprop != null) {
-                                       props.Add (itprop);
+                       if (reader.Value != null) {
+                               if (objectType == typeof (Time)) {
+                                       Int64 t = (Int64) reader.Value;
+                                       return new Time((int)t);
+                               } else if (objectType == typeof (Color)) {
+                                       string rgbStr = (string) reader.Value;
+                                       return new Color(Byte.Parse (rgbStr.Substring(1,2), 
NumberStyles.HexNumber),
+                                                        Byte.Parse (rgbStr.Substring(3,2), 
NumberStyles.HexNumber),
+                                                        Byte.Parse (rgbStr.Substring(5,2), 
NumberStyles.HexNumber),
+                                                        Byte.Parse (rgbStr.Substring(7,2), 
NumberStyles.HexNumber));
+                               } else if (objectType == typeof (Image)) {
+                                       byte[] buf = Convert.FromBase64String ((string)reader.Value); 
+                                       return Image.Deserialize (buf);
+                               } else if (objectType == typeof (HotKey)) {
+                                       string[] hk = ((string)reader.Value).Split (' '); 
+                                       return new HotKey {Key = int.Parse(hk[0]), Modifier = 
int.Parse(hk[1])};
+                               } else if (objectType == typeof (Point)) {
+                                       string[] ps = ((string)reader.Value).Split (' '); 
+                                       return new Point (double.Parse(ps[0]), double.Parse(ps[1]));
                                }
                        }
-                       
-                       return props;
+                       return null;
+               }
+               
+               public override bool CanConvert(Type objectType)
+               {
+                       return (
+                               objectType == typeof(Time) ||
+                               objectType == typeof(Color) ||
+                               objectType == typeof(HotKey) ||
+                               objectType == typeof(Image));
                }
        }
 
-
 }
 
diff --git a/LongoMatch.Migration/Converter.cs b/LongoMatch.Migration/Converter.cs
new file mode 100644
index 0000000..591efb8
--- /dev/null
+++ b/LongoMatch.Migration/Converter.cs
@@ -0,0 +1,173 @@
+//
+//  Copyright (C) 2014 Andoni Morales Alastruey
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU General Public License as published by
+//  the Free Software Foundation; either version 2 of the License, or
+//  (at your option) any later version.
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU General Public License
+//  along with this program; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+using System;
+using System.Linq;
+using System.IO;
+using LongoMatch.Common;
+using LongoMatch.Store.Templates;
+using LongoMatch.Store;
+using System.Collections.Generic;
+using LongoMatch.DB;
+using LongoMatch.Interfaces;
+
+namespace LongoMatch.Migration
+{
+       public class Converter
+       {
+               
+               public static void ConvertCategories (string inputPath, string outputPath) {
+                       Categories cats = SerializableObject.Load<Categories> (inputPath,
+                                                                              SerializationType.Binary);
+                       foreach (Category cat in cats) {
+                               cat.UUID = Guid.NewGuid ();
+                               List<SubCategory> l = new List<SubCategory>();
+                               foreach (ISubCategory subcat in cat.SubCategories) {
+                                       if (subcat is TagSubCategory) {
+                                               SubCategory s = new SubCategory ();
+                                               s.Name = subcat.Name;
+                                               s.AllowMultiple = subcat.AllowMultiple;
+                                               s.Options = (subcat as TagSubCategory).ToList();
+                                               l.Add (s);
+                                       }
+                               }
+                               cat.SubCategoriesList = l;
+                       }
+                       cats.ID = Guid.NewGuid ();
+                       SerializableObject.Save (cats, outputPath);                     
+               }
+               
+               public static void ConvertTeamTemplate (string inputPath, string outputPath) {
+                       TeamTemplate team = SerializableObject.Load<TeamTemplate> (inputPath,
+                                                                                  SerializationType.Binary);
+                       foreach (Player p in team) {
+                               p.ID = Guid.NewGuid ();
+                       }
+                       team.UUID = Guid.NewGuid ();
+                       team.FormationStr = "1-4-3-3";
+                       SerializableObject.Save (team, outputPath);                     
+               }
+               
+               public static void ConvertProject (Project project, string outputDir) {
+                       Dictionary <TagSubCategory, SubCategory> dict = new Dictionary<TagSubCategory, 
SubCategory>();
+                       
+                       project.Timers = new List<Timer>();
+                       project.Periods = new List<Period>();
+                       for (int i=0; i < project.Categories.GamePeriods.Count; i++) {
+                               int duration = project.Description.File.Duration.MSeconds;
+                               int periodDuration = duration / project.Categories.GamePeriods.Count;
+                               string period = project.Categories.GamePeriods[i];
+
+                               Period p = new Period {Name = period};
+                               p.Start (new Time (i * periodDuration));
+                               p.Stop (new Time (i * periodDuration + periodDuration));
+                               project.Periods.Add (p);
+                       }
+                       
+                       foreach (Player p in project.LocalTeamTemplate) {
+                               p.ID = Guid.NewGuid ();
+                       }
+                       project.LocalTeamTemplate.UUID = Guid.NewGuid ();
+                       foreach (Player p in project.VisitorTeamTemplate) {
+                               p.ID = Guid.NewGuid ();
+                       }
+                       project.LocalTeamTemplate.UUID = Guid.NewGuid ();
+                       foreach (Category cat in project.Categories) {
+                               cat.UUID = Guid.NewGuid ();
+                               List<SubCategory> l = new List<SubCategory>();
+                               foreach (ISubCategory subcat in cat.SubCategories) {
+                                       if (subcat is TagSubCategory) {
+                                               SubCategory s = new SubCategory ();
+                                               s.Name = subcat.Name;
+                                               s.AllowMultiple = subcat.AllowMultiple;
+                                               s.Options = (subcat as TagSubCategory).ToList();
+                                               l.Add (s);
+                                               dict.Add (subcat as TagSubCategory, s);
+                                       }
+                               }
+                               cat.SubCategoriesList = l;
+                       }
+                       project.Categories.ID = Guid.NewGuid ();
+                       
+                       foreach (Play play in project.AllPlays ()) {
+                               Coordinates c;
+                               
+                               List<Tag> tags = new List<Tag> ();
+                               foreach (StringTag t in play.Tags.Tags) {
+                                       tags.Add (new Tag {SubCategory = dict[t.SubCategory as 
TagSubCategory], Value = t.Value});
+                               }
+                               play.TagsList = tags;
+
+                               play.ID = Guid.NewGuid ();
+                               foreach (Player player in play.Players.GetTagsValues()) {
+                                       play.PlayersList.Add (player);
+                               }
+                               
+                               if (play.FieldPosition != null) {
+                                       c = new Coordinates ();
+                                       foreach (Point p in play.FieldPosition) {
+                                               Point newp = p.Normalize 
(project.Categories.FieldBackground.Width,
+                                                                         
project.Categories.FieldBackground.Height);
+                                               c.Add (newp);
+                                       }
+                                       play.FieldPosition = c;
+                               }
+                               
+                               if (play.HalfFieldPosition != null) {
+                                       c = new Coordinates ();
+                                       foreach (Point p in play.HalfFieldPosition) {
+                                               Point newp = p.Normalize 
(project.Categories.HalfFieldBackground.Width,
+                                                                         
project.Categories.HalfFieldBackground.Height);
+                                               c.Add (newp);
+                                       }
+                                       play.HalfFieldPosition = c;
+                               }
+                               
+                               if (play.GoalPosition != null) {
+                                       c = new Coordinates ();
+                                       foreach (Point p in play.GoalPosition) {
+                                               Point newp = p.Normalize 
(project.Categories.GoalBackground.Width,
+                                                                         
project.Categories.GoalBackground.Height);
+                                               c.Add (newp);
+                                       }
+                                       play.GoalPosition = c;
+                               }
+                       }
+                       SerializableObject.Save (project, Path.Combine (outputDir, project.UUID.ToString())); 
                  
+               }
+               
+               public static void ConvertDB (string dbfile, string outputdir) {
+                       string dboutputdir;
+                       string dbname;
+                       DataBase db;
+                       
+                       dbname = Path.GetFileName (dbfile).Split('.')[0] + ".ldb";
+                       
+                       dboutputdir = Path.Combine (outputdir, Path.Combine (outputdir, dbname));
+                       if (!Directory.Exists (dboutputdir)) {
+                               Directory.CreateDirectory (dboutputdir);
+                       }
+                       
+                       db = new DataBase (dbfile);
+                       foreach (ProjectDescription pd in db.GetAllProjects ()) {
+                                       Project p = db.GetProject (pd.UUID);
+                                       LongoMatch.Migration.Converter.ConvertProject (p, dboutputdir);
+                       }
+               }
+       }
+}
+
diff --git a/LongoMatch.Migration/Core/Category.cs b/LongoMatch.Migration/Core/Category.cs
new file mode 100644
index 0000000..aeac71c
--- /dev/null
+++ b/LongoMatch.Migration/Core/Category.cs
@@ -0,0 +1,251 @@
+// SectionsTimeNode.cs
+//
+//  Copyright (C) 2007-2009 Andoni Morales Alastruey
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+//
+
+using System;
+using System.Linq;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Mono.Unix;
+using Newtonsoft.Json;
+
+using LongoMatch.Common;
+using LongoMatch.Interfaces;
+using Image = LongoMatch.Common.Image;
+
+namespace LongoMatch.Store
+{
+
+       /// <summary>
+       /// Tag category for the analysis. Contains the default values to creates plays
+       /// tagged in this category
+       /// </summary>
+       [Serializable]
+       public class Category:TimeNode, ISerializable
+       {
+
+               [JsonProperty ("ID")]
+               private Guid _UUID;
+
+               #region Constructors
+               #endregion
+               public Category() {
+                       _UUID = System.Guid.NewGuid();
+                       SubCategories = new List<ISubCategory>();
+                       TagGoalPosition = false;
+                       TagFieldPosition = true;
+               }
+
+               #region  Properties
+
+               /// <summary>
+               /// Unique ID for this category
+               /// </summary>
+               [JsonIgnore]
+               public Guid UUID {
+                       get {
+                               return _UUID;
+                       } set {
+                               _UUID = value;
+                       }
+               }
+
+               /// <summary>
+               /// A key combination to create plays in this category
+               /// </summary>
+               public HotKey HotKey {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// A color to identify plays in this category
+               /// </summary>
+               [JsonProperty ("Color")]
+               public  Color LColor {
+                       get {
+                               return new Color(this.Color.R, this.Color.G,
+                                                this.Color.B, this.Color.A);
+                       } set {
+                       }
+               }
+               
+               [JsonIgnore]
+               public System.Drawing.Color Color {
+                       get;
+                       set;
+               }
+
+               //// <summary>
+               /// Sort method used to sort plays for this category
+               /// </summary>
+               public SortMethodType SortMethod {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// Position of the category in the list of categories
+               /// </summary>
+               public int Position {
+                       get;
+                       set;
+               }
+
+               public List<SubCategory> SubCategoriesList {
+                       get;
+                       set;
+               }
+               
+               public List<ISubCategory> SubCategories {
+                       get;
+                       set;
+               }
+               
+               public bool TagGoalPosition {
+                       get;
+                       set;
+               }
+               
+               public bool TagFieldPosition {
+                       get;
+                       set;
+               }
+               
+               public bool TagHalfFieldPosition {
+                       get;
+                       set;
+               }
+               
+               public bool FieldPositionIsDistance {
+                       get;
+                       set;
+               }
+               
+               public bool HalfFieldPositionIsDistance {
+                       get;
+                       set;
+               }
+               
+               /// <summary>
+               /// Sort method string used for the UI
+               /// </summary>
+               [JsonIgnore]
+               public string SortMethodString {
+                       get {
+                               switch(SortMethod) {
+                               case SortMethodType.SortByName:
+                                       return Catalog.GetString("Sort by name");
+                               case SortMethodType.SortByStartTime:
+                                       return Catalog.GetString("Sort by start time");
+                               case SortMethodType.SortByStopTime:
+                                       return Catalog.GetString("Sort by stop time");
+                               case SortMethodType.SortByDuration:
+                                       return Catalog.GetString("Sort by duration");
+                               default:
+                                       return Catalog.GetString("Sort by name");
+                               }
+                       }
+                       set {
+                               if(value == Catalog.GetString("Sort by start time"))
+                                       SortMethod = SortMethodType.SortByStartTime;
+                               else if(value == Catalog.GetString("Sort by stop time"))
+                                       SortMethod = SortMethodType.SortByStopTime;
+                               else if(value == Catalog.GetString("Sort by duration"))
+                                       SortMethod = SortMethodType.SortByDuration;
+                               else
+                                       SortMethod = SortMethodType.SortByName;
+                       }
+               }
+
+               // this constructor is automatically called during deserialization
+               public Category(SerializationInfo info, StreamingContext context) {
+                       _UUID = (Guid)info.GetValue("uuid", typeof(Guid));
+                       Name = (string) info.GetValue("name", typeof(string));
+                       Start = (Time)info.GetValue("start", typeof(Time));
+                       Stop = (Time)info.GetValue("stop", typeof(Time));
+                       HotKey = (HotKey)info.GetValue("hotkey", typeof(HotKey));
+                       SubCategories = (List<ISubCategory>)info.GetValue("subcategories", 
typeof(List<ISubCategory>));
+                       Position = (Int32) info.GetValue("position", typeof (Int32));
+                       SortMethod = (SortMethodType)info.GetValue("sort_method", typeof(SortMethodType));
+                       Color = System.Drawing.Color.FromArgb(
+                               LongoMatch.Common.Color.UShortToByte((ushort)info.GetValue("red", 
typeof(ushort))),
+                               LongoMatch.Common.Color.UShortToByte((ushort)info.GetValue("green", 
typeof(ushort))),
+                               LongoMatch.Common.Color.UShortToByte((ushort)info.GetValue("blue", 
typeof(ushort))));
+                       LColor = LongoMatch.Common.Color.ColorFromUShort ((ushort)info.GetValue("red", 
typeof(ushort)),
+                                                                         (ushort)info.GetValue("green", 
typeof(ushort)),
+                                                                         (ushort)info.GetValue("blue", 
typeof(ushort)));
+                       try {
+                               TagFieldPosition = (bool) info.GetValue("tagfieldpos", typeof (bool));
+                       } catch {
+                               TagFieldPosition = true;
+                       }
+                       try {
+                               TagHalfFieldPosition =(bool) info.GetValue("taghalffieldpos", typeof (bool));
+                       } catch {
+                               TagHalfFieldPosition = false;
+                       }
+                       try {
+                               TagGoalPosition = (bool) info.GetValue("taggoalpos", typeof (bool));
+                       } catch {
+                               TagGoalPosition = false;
+                       }
+                       try {
+                               FieldPositionIsDistance =(bool) info.GetValue("fieldposisdist", typeof 
(bool));
+                       } catch {
+                               FieldPositionIsDistance = false;
+                       }
+                       try {
+                               HalfFieldPositionIsDistance =(bool) info.GetValue("halffieldposisdist", 
typeof (bool));
+                       } catch {
+                               HalfFieldPositionIsDistance = false;
+                       }
+               }
+
+               // this method is automatically called during serialization
+               public void GetObjectData(SerializationInfo info, StreamingContext context) {
+                       info.AddValue("ID", UUID);
+                       info.AddValue("Name", Name);
+                       info.AddValue("Start", Start);
+                       info.AddValue("Stop", Stop);
+                       info.AddValue("Hotkey", HotKey);
+                       info.AddValue("Position", Position);
+                       info.AddValue("SubCategories", SubCategoriesList);
+                       /* Convert to ushort for backward compatibility */
+                       info.AddValue("Color", LColor);
+                       info.AddValue("red", ByteToUShort(Color.R));
+                       info.AddValue("green", ByteToUShort(Color.G));
+                       info.AddValue("blue", ByteToUShort(Color.B));
+                       info.AddValue("SortMethod", SortMethod);
+                       info.AddValue("TagFieldPosition", TagFieldPosition);
+                       info.AddValue("TagHalfFieldPosition", TagHalfFieldPosition);
+                       info.AddValue("TagGoalPosistion", TagGoalPosition);
+                       info.AddValue("FieldPositionIsDistance", FieldPositionIsDistance);
+                       info.AddValue("HalfFieldPositionIsDistance", HalfFieldPositionIsDistance);
+               }
+
+           ushort ByteToUShort (Byte val) {
+                       var ret = (ushort) (((float)val) / byte.MaxValue * ushort.MaxValue);
+                       return ret;
+               }
+               
+               #endregion
+               
+       }
+}
diff --git a/LongoMatch.Core/Store/GameUnitsList.cs b/LongoMatch.Migration/Core/Coordinates.cs
similarity index 53%
copy from LongoMatch.Core/Store/GameUnitsList.cs
copy to LongoMatch.Migration/Core/Coordinates.cs
index 4cb7c4a..dfd8422 100644
--- a/LongoMatch.Core/Store/GameUnitsList.cs
+++ b/LongoMatch.Migration/Core/Coordinates.cs
@@ -1,5 +1,5 @@
 // 
-//  Copyright (C) 2011 andoni
+//  Copyright (C) 2013 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
@@ -16,50 +16,53 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 // 
 using System;
+using System.Linq;
 using System.Collections.Generic;
+using Newtonsoft.Json;
 
-using LongoMatch.Store;
-
-namespace LongoMatch.Store
+namespace LongoMatch.Common
 {
        [Serializable]
-       public class GameUnitsList: List<GameUnit>
+       [JsonObject]
+       public class Coordinates: List<Point>
        {
-               public GameUnitsList ()
+               public Coordinates ()
                {
                }
                
-               public int GameUnitDepth(GameUnit gameUnit) {
-                       return this.IndexOf(gameUnit);
+               public List<Point> Points {
+                       get {
+                               return this.ToList();
+                       }
                }
                
-               public GameUnit GetParent(GameUnit gameUnit) {
-                       int index;
-                       
-                       if (!this.Contains(gameUnit))
-                               return null;
+               public override bool Equals (object obj)
+               {
+                       Coordinates c = obj as Coordinates;
+            if (c == null)
+                               return false;
+                               
+                       if (c.Count != Count)
+                               return false;
                        
-                       index = this.IndexOf(gameUnit);
-                       if (index == 0)
-                               return null;
-                       return this[index-1];
+                       for (int i=0; i<Count; i++) {
+                               if (c[i] != this[i])
+                                       return false;
+                       }
+                       return true;
                }
-
-               public GameUnit GetChild(GameUnit gameUnit) {
-                       int index;
+               
+               public override int GetHashCode ()
+               {
+                       string s = "";
                        
-                       if (!this.Contains(gameUnit))
-                               return null;
+                       for (int i=0; i<Count; i++) {
+                               s += this[i].X.ToString() +  this[i].Y.ToString();
+                       }
                        
-                       index = this.IndexOf(gameUnit);
-                       if (index == this.Count - 1)
-                               return null;
-                       return this[index+1];
-               }
-               
-               public GameUnit GetLast() {
-                       return this[this.Count-1];
+                       return int.Parse(s);
                }
        }
+       
 }
 
diff --git a/LongoMatch.Migration/Core/Drawing.cs b/LongoMatch.Migration/Core/Drawing.cs
new file mode 100644
index 0000000..96bcb0d
--- /dev/null
+++ b/LongoMatch.Migration/Core/Drawing.cs
@@ -0,0 +1,89 @@
+//
+//  Copyright (C) 2009 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+using System;
+using Newtonsoft.Json;
+
+using LongoMatch.Common;
+
+namespace LongoMatch.Store
+{
+
+       [Serializable]
+       public class Drawing
+       {
+               private byte[] drawingBuf;
+               private const int DEFAULT_PAUSE_TIME = 5000;
+
+               /// <summary>
+               /// Represent a drawing in the database using a { Gdk Pixbuf} stored
+               /// in a bytes array in PNG format for serialization. { Drawings}
+               /// are used by { MediaTimeNodes} to store the key frame drawing
+               /// which stop time is stored in a int value
+               /// </summary>
+               public Drawing() {
+                       PauseTime = DEFAULT_PAUSE_TIME;
+               }
+
+               /// <summary>
+               /// Pixbuf with the drawing
+               /// </summary>
+               public Image Pixbuf {
+                       get {
+                               if(drawingBuf != null)
+                                       return Image.Deserialize(drawingBuf);
+                               else return null;
+                       }
+                       set {
+                               drawingBuf = value.Serialize();
+                       }
+               }
+
+               /// <summary>
+               /// Render time of the drawing
+               /// </summary>
+               public Time Render {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// Time to pause the playback and display the drawing
+               /// </summary>
+               public Time Pause {
+                       set;
+                       get;
+               }
+               
+               /// <summary>
+               /// Render time of the drawing
+               /// </summary>
+               public int RenderTime {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// Time to pause the playback and display the drawing
+               /// </summary>
+               public int PauseTime {
+                       set;
+                       get;
+               }
+       }
+}
diff --git a/LongoMatch.Core/Store/GameUnit.cs b/LongoMatch.Migration/Core/GameUnit.cs
similarity index 100%
copy from LongoMatch.Core/Store/GameUnit.cs
copy to LongoMatch.Migration/Core/GameUnit.cs
diff --git a/LongoMatch.Core/Store/GameUnitsList.cs b/LongoMatch.Migration/Core/GameUnitsList.cs
similarity index 100%
rename from LongoMatch.Core/Store/GameUnitsList.cs
rename to LongoMatch.Migration/Core/GameUnitsList.cs
diff --git a/LongoMatch.Migration/Core/HotKey.cs b/LongoMatch.Migration/Core/HotKey.cs
new file mode 100644
index 0000000..3f88f70
--- /dev/null
+++ b/LongoMatch.Migration/Core/HotKey.cs
@@ -0,0 +1,155 @@
+// HotKey.cs
+//
+//  Copyright (C) 2007-2009 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.Collections.Generic;
+using System.Runtime.Serialization;
+using Mono.Unix;
+using LongoMatch.Common;
+using Newtonsoft.Json;
+
+
+#if HAVE_GTK
+using Gdk;
+#endif
+
+namespace LongoMatch.Store
+{
+
+       /// <summary>
+       /// A key combination used to tag plays using the keyboard. <see 
cref="LongoMatch.Store.SectionsTimeNodes"/>
+       /// It can only be used with the Shith and Alt modifiers to avoid interfering with ohter shortcuts.
+       /// 'key' and 'modifier' are set to -1 when it's initialized
+       /// </summary>
+       [Serializable]
+       [JsonConverter (typeof(LongoMatchConverter))]
+       public class HotKey : IEquatable<HotKey>
+       {
+               private int key;
+               private int modifier;
+
+               #region Constructors
+               /// <summary>
+               /// Creates a new undefined HotKey
+               /// </summary>
+               public HotKey()
+               {
+                       this.key = -1;
+                       this.modifier = -1;
+               }
+               #endregion
+
+               #region Properties
+               /// <summary>
+               /// Gdk Key
+               /// </summary>
+               public int Key {
+                       get {
+                               return key;
+                       }
+                       set {
+                               key = value;
+                       }
+               }
+
+               /// <summary>
+               /// Key modifier. Only Alt and Shift can be used
+               /// </summary>
+               public int Modifier {
+                       get {
+                               return modifier;
+                       }
+                       set {
+                               modifier = value;
+                       }
+               }
+
+               /// <summary>
+               /// Get whether the hotkey is defined or not
+               /// </summary>
+               public Boolean Defined {
+                       get {
+                               return (key!=-1 && modifier != -1);
+                       }
+               }
+               #endregion
+
+               #region Public Methods
+               public bool Equals (HotKey hotkeyComp) {
+                       if (hotkeyComp == null)
+                               return false;
+                       return (this.Key == hotkeyComp.Key && this.Modifier == hotkeyComp.Modifier);
+               }
+               #endregion
+
+               static public bool operator == (HotKey a, HotKey b) {
+                       // If both are null, or both are same instance, return true.
+                       if (System.Object.ReferenceEquals(a, b))
+                       {
+                               return true;
+                       }
+
+                       // If one is null, but not both, return false.
+                       if (((object)a == null) || ((object)b == null))
+                       {
+                               return false;
+                       }
+                       return a.Equals(b);
+               }
+
+               static public bool operator != (HotKey a, HotKey b) {
+                       return !(a == b);
+               }
+               public override bool Equals(object obj)
+               {
+                       if(obj is HotKey) {
+                               HotKey hotkey= obj as HotKey;
+                               return Equals(hotkey);
+                       }
+                       else
+                               return false;
+               }
+
+               public override int GetHashCode()
+               {
+                       return key ^ modifier;
+               }
+
+               public override string ToString()
+               {
+                       string modifierS = "";
+                               
+                       if(!Defined)
+                               return Catalog.GetString("Not defined");
+
+#if HAVE_GTK
+                       if(Modifier == (int)ModifierType.Mod1Mask)
+                               modifierS = "<Alt>+";
+                       else if(Modifier == (int)ModifierType.ShiftMask)
+                               modifierS = "<Shift>+";
+                       return string.Format("{0}{1}", modifierS,((Gdk.Key)Key).ToString().ToLower());
+#else
+                       return string.Format("{0}{1}", modifierS,(Key.ToString()).ToLower());
+#endif
+               }
+       }
+}
diff --git a/LongoMatch.Core/Store/GameUnit.cs b/LongoMatch.Migration/Core/Interfaces/ISubCategory.cs
similarity index 71%
copy from LongoMatch.Core/Store/GameUnit.cs
copy to LongoMatch.Migration/Core/Interfaces/ISubCategory.cs
index f9ce9b9..15ffd16 100644
--- a/LongoMatch.Core/Store/GameUnit.cs
+++ b/LongoMatch.Migration/Core/Interfaces/ISubCategory.cs
@@ -1,5 +1,5 @@
 // 
-//  Copyright (C) 2011 andoni
+//  Copyright (C) 2011 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
@@ -18,26 +18,19 @@
 using System;
 using System.Collections.Generic;
 
-namespace LongoMatch.Store
+namespace LongoMatch.Interfaces
 {
-       [Serializable]
-       public class GameUnit: List<TimelineNode>
+       public interface ISubCategory
        {
+               string Name {get; set;}
                
-               public GameUnit (string name)
-               {
-                       Name=name;
-               }
+               bool AllowMultiple {get; set;}
                
-               public string Name {
-                       get;
-                       set;
-               }
+               bool FastTag {get; set;}
                
-               public override string ToString ()
-               {
-                       return string.Format ("[GameUnit: Name={0}]", Name);
-               }       
+               string ToMarkupString();
+               
+               List<string> ElementsDesc ();
        }
 }
 
diff --git a/LongoMatch.Core/Store/GameUnit.cs b/LongoMatch.Migration/Core/Interfaces/ITag.cs
similarity index 70%
copy from LongoMatch.Core/Store/GameUnit.cs
copy to LongoMatch.Migration/Core/Interfaces/ITag.cs
index f9ce9b9..90c3e0a 100644
--- a/LongoMatch.Core/Store/GameUnit.cs
+++ b/LongoMatch.Migration/Core/Interfaces/ITag.cs
@@ -16,28 +16,14 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 // 
 using System;
-using System.Collections.Generic;
+using LongoMatch.Store;
 
-namespace LongoMatch.Store
+namespace LongoMatch.Interfaces
 {
-       [Serializable]
-       public class GameUnit: List<TimelineNode>
+       public interface ITag<T>
        {
-               
-               public GameUnit (string name)
-               {
-                       Name=name;
-               }
-               
-               public string Name {
-                       get;
-                       set;
-               }
-               
-               public override string ToString ()
-               {
-                       return string.Format ("[GameUnit: Name={0}]", Name);
-               }       
+               ISubCategory SubCategory {set;get;}
+               T Value {set;get;}
        }
 }
 
diff --git a/LongoMatch.Migration/Core/Interfaces/ITemplates.cs 
b/LongoMatch.Migration/Core/Interfaces/ITemplates.cs
new file mode 100644
index 0000000..a6d17c9
--- /dev/null
+++ b/LongoMatch.Migration/Core/Interfaces/ITemplates.cs
@@ -0,0 +1,68 @@
+// 
+//  Copyright (C) 2011 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.Collections.Generic;
+using LongoMatch.Store;
+using LongoMatch.Store.Templates;
+       
+namespace LongoMatch.Interfaces
+{
+       public interface ITemplate
+       {
+               void Save (string filename);
+               string Name {get; set;}
+       }
+       
+       public interface ITemplate<T>: ITemplate, IList<T> {
+               T AddDefaultItem (int index);
+       }
+       
+       public interface ITemplateProvider
+       {
+               void CheckDefaultTemplate();
+               List<string> TemplatesNames {get;}
+               bool Exists(string name);
+               void Copy (string orig, string copy);
+               void Delete (string templateName);
+               void Create (string templateName, params object [] list);
+       }
+       
+       public interface ITemplateProvider<T, U>: ITemplateProvider where T: ITemplate<U>
+       {
+               List<T> Templates {get;}
+               T Load (string name);
+               void Save (ITemplate<U> template);
+               void Update (ITemplate<U> template);
+       }
+       
+       public interface ITemplateWidget<T, U> where T: ITemplate<U>
+       {
+               T Template {get; set;}
+               bool Edited {get; set;}
+               bool CanExport {get; set;}
+               Project Project {get; set;}
+       }
+       
+       public interface ICategoriesTemplatesProvider: ITemplateProvider<Categories, Category> {}
+       public interface ITeamTemplatesProvider: ITemplateProvider<TeamTemplate, Player> {}
+       public interface ISubcategoriesTemplatesProvider: ITemplateProvider<SubCategoryTemplate, string> {} 
+       
+       public interface ICategoriesTemplatesEditor: ITemplateWidget<Categories, Category> {}
+       public interface ITeamTemplatesEditor: ITemplateWidget<TeamTemplate, Player> {}
+}
+
diff --git a/LongoMatch.Core/Store/GameUnit.cs b/LongoMatch.Migration/Core/Interfaces/ITimelineNode.cs
similarity index 63%
copy from LongoMatch.Core/Store/GameUnit.cs
copy to LongoMatch.Migration/Core/Interfaces/ITimelineNode.cs
index f9ce9b9..d0ff33d 100644
--- a/LongoMatch.Core/Store/GameUnit.cs
+++ b/LongoMatch.Migration/Core/Interfaces/ITimelineNode.cs
@@ -1,5 +1,5 @@
 // 
-//  Copyright (C) 2011 andoni
+//  Copyright (C) 2011 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
@@ -16,28 +16,23 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 // 
 using System;
-using System.Collections.Generic;
+using LongoMatch.Store;
 
-namespace LongoMatch.Store
+namespace LongoMatch.Interfaces
 {
-       [Serializable]
-       public class GameUnit: List<TimelineNode>
-       {
-               
-               public GameUnit (string name)
-               {
-                       Name=name;
-               }
-               
-               public string Name {
-                       get;
-                       set;
-               }
-               
-               public override string ToString ()
-               {
-                       return string.Format ("[GameUnit: Name={0}]", Name);
-               }       
+       public interface ITimelineNode
+       {       
+               string Name {get;set;}
+               Time Start {get;set;}
+               Time Stop {get;set;}
+               uint StartFrame {get; set;}
+               uint StopFrame {get; set;}
+               bool Selected {get; set;}
+               uint CentralFrame {get;}
+               uint TotalFrames {get;}
+               uint KeyFrame {get;}
+               bool HasDrawings {get;}
+               bool HasFrame(int frame);
        }
 }
 
diff --git a/LongoMatch.Migration/Core/MediaFile.cs b/LongoMatch.Migration/Core/MediaFile.cs
new file mode 100644
index 0000000..0d05cef
--- /dev/null
+++ b/LongoMatch.Migration/Core/MediaFile.cs
@@ -0,0 +1,226 @@
+// MediaFile.cs
+//
+//  Copyright (C) 2007-2009 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 Mono.Unix;
+
+using LongoMatch.Common;
+using Newtonsoft.Json;
+
+namespace LongoMatch.Store
+{
+
+       [Serializable]
+       public class MediaFile
+       {
+
+               string filePath;
+               long length; // In MSeconds
+               ushort fps;
+               bool hasAudio;
+               bool hasVideo;
+               string container;
+               string videoCodec;
+               string audioCodec;
+               uint videoHeight;
+               uint videoWidth;
+               double par;
+               byte[] thumbnailBuf;
+
+
+               public MediaFile() {}
+
+               public MediaFile(string filePath,
+                                long length,
+                                ushort fps,
+                                bool hasAudio,
+                                bool hasVideo,
+                                string container,
+                                string videoCodec,
+                                string audioCodec,
+                                uint videoWidth,
+                                uint videoHeight, 
+                                double par,
+                                Image preview)
+               {
+                       this.filePath = filePath;
+                       this.length = length;
+                       this.hasAudio = hasAudio;
+                       this.hasVideo = hasVideo;
+                       this.container = container;
+                       this.videoCodec = videoCodec;
+                       this.audioCodec = audioCodec;
+                       this.videoHeight = videoHeight;
+                       this.videoWidth = videoWidth;
+                       if(fps == 0)
+                               //For audio Files
+                               this.fps=25;
+                       else
+                               this.fps = fps;
+                       this.Preview = preview;
+                       Par = par;
+               }
+
+               public string FilePath {
+                       get {
+                               return this.filePath;
+                       }
+                       set {
+                               this.filePath = value;
+                       }
+               }
+
+               public Time Duration {
+                       get {
+                               return new Time ((int) length);
+                       }
+               }
+
+               public long Length {
+                       get {
+                               return this.length;
+                       }
+                       set {
+                               this.length = value;
+                       }
+               }
+
+               public bool HasVideo {
+                       get {
+                               return this.hasVideo;
+                       }
+                       set {
+                               this.hasVideo = value;
+                       }
+               }
+
+               public bool HasAudio {
+                       get {
+                               return this.hasAudio;
+                       }
+                       set {
+                               this.hasAudio = value;
+                       }
+               }
+               
+               public string Container {
+                       get {
+                               return this.container;
+                       }
+                       set {
+                               this.container = value;
+                       }
+               }
+
+               public string VideoCodec {
+                       get {
+                               return this.videoCodec;
+                       }
+                       set {
+                               this.videoCodec = value;
+                       }
+               }
+
+               public string AudioCodec {
+                       get {
+                               return this.audioCodec;
+                       }
+                       set {
+                               this.audioCodec = value;
+                       }
+               }
+
+               public uint VideoWidth {
+                       get {
+                               return this.videoWidth;
+                       }
+                       set {
+                               this.videoWidth= value;
+                       }
+               }
+
+               public uint VideoHeight {
+                       get {
+                               return this.videoHeight;
+                       }
+                       set {
+                               this.videoHeight= value;
+                       }
+               }
+
+               public ushort Fps {
+                       get {
+                               return this.fps;
+                       }
+                       set {
+                               if(value == 0)
+                                       //For audio Files
+                                       this.fps=25;
+                               else
+                                       this.fps = value;
+                       }
+               }
+               
+               public double Par {
+                       get {
+                               if (par == 0)
+                                       return 1;
+                               return par;
+                       }
+                       set {
+                               par = value;
+                       }
+               }
+               
+               public Image Preview {
+                       get {
+                               if(thumbnailBuf != null)
+                                       return Image.Deserialize(thumbnailBuf);
+                               return null;
+                       }
+                       set {
+                               if(value != null) {
+                                       thumbnailBuf = value.Serialize();
+                               } else
+                                       thumbnailBuf = null;
+                       }
+               }
+               
+               [JsonIgnore]
+               public string Description {
+                       get {
+                               string desc = String.Format ("<b>File path</b>: {0}\n", FilePath);
+                               desc += String.Format ("<b>Format</b>: {0}x{1} @ {2}fps\n", VideoWidth,
+                                                      VideoHeight, Fps);
+                               desc += String.Format ("<b>Duration</b>: {0}\n",
+                                                      new Time {MSeconds=(int)Length}.ToSecondsString());
+                               desc += String.Format ("<b>Video Codec</b>: {0}\n", VideoCodec);
+                               desc += String.Format ("<b>Audio Codec</b>: {0}\n", AudioCodec);
+                               desc += String.Format ("<b>Container</b>: {0}\n", Container);
+                               return desc;
+                       }
+               }
+               
+               public uint GetFrames() {
+                       return (uint)(Fps*Length/1000);
+               }
+               
+       }
+}
diff --git a/LongoMatch.Core/Store/GameUnit.cs b/LongoMatch.Migration/Core/Period.cs
similarity index 60%
copy from LongoMatch.Core/Store/GameUnit.cs
copy to LongoMatch.Migration/Core/Period.cs
index f9ce9b9..215f6cf 100644
--- a/LongoMatch.Core/Store/GameUnit.cs
+++ b/LongoMatch.Migration/Core/Period.cs
@@ -1,43 +1,51 @@
-// 
-//  Copyright (C) 2011 andoni
-// 
+//
+//  Copyright (C) 2014 Andoni Morales Alastruey
+//
 //  This program is free software; you can redistribute it and/or modify
 //  it under the terms of the GNU General Public License as published by
 //  the Free Software Foundation; either version 2 of the License, or
 //  (at your option) any later version.
-// 
+//
 //  This program is distributed in the hope that it will be useful,
 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 //  GNU General Public License for more details.
-//  
+//
 //  You should have received a copy of the GNU General Public License
 //  along with this program; if not, write to the Free Software
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-// 
+//
 using System;
+using System.Linq;
 using System.Collections.Generic;
 
 namespace LongoMatch.Store
 {
-       [Serializable]
-       public class GameUnit: List<TimelineNode>
+       public class Period: Timer
        {
-               
-               public GameUnit (string name)
+
+               public Period ()
                {
-                       Name=name;
                }
                
-               public string Name {
-                       get;
-                       set;
+               public TimeNode PeriodNode {
+                       get {
+                               return new TimeNode {Name=Name,
+                                       Start = new Time (Nodes.Min (tn => tn.Start.MSeconds)),
+                                       Stop = new Time (Nodes.Max (tn => tn.Stop.MSeconds)),
+                               };
+                       }
+                       set {
+                               foreach (TimeNode tn in Nodes) {
+                                       if (tn.Start < value.Start) {
+                                               tn.Start = value.Start;
+                                       }
+                                       if (tn.Stop > value.Stop) {
+                                               tn.Stop = value.Stop;
+                                       }
+                               }
+                       }
                }
-               
-               public override string ToString ()
-               {
-                       return string.Format ("[GameUnit: Name={0}]", Name);
-               }       
        }
 }
 
diff --git a/LongoMatch.Migration/Core/PixbufTimeNode.cs b/LongoMatch.Migration/Core/PixbufTimeNode.cs
new file mode 100644
index 0000000..5902f3f
--- /dev/null
+++ b/LongoMatch.Migration/Core/PixbufTimeNode.cs
@@ -0,0 +1,67 @@
+// PixbufTimeNode.cs
+//
+//  Copyright (C) 2007-2009 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.IO;
+
+using LongoMatch.Common;
+
+namespace LongoMatch.Store
+{
+
+       /// <summary>
+       /// Base class for all the video segments containing a snapshot
+       /// It has a <see cref="Gdk.Pixbuf"/> with a thumbnail of the video segment.
+       /// </summary>
+       [Serializable]
+       public class PixbufTimeNode : TimeNode
+       {
+               private byte[] thumbnailBuf;
+               
+               #region Contructors
+               public PixbufTimeNode() {
+               }
+               #endregion
+
+               #region Properties
+               /// <summary>
+               /// Segment thumbnail
+               /// </summary>
+               public Image Miniature {
+                       get {
+                               if(thumbnailBuf != null)
+                                       return Image.Deserialize(thumbnailBuf);
+                               else return null;
+                       } set {
+                               if (value == null)
+                                       thumbnailBuf = null;
+                               else {
+                                       if (value.Height > Constants.MAX_THUMBNAIL_SIZE ||
+                                           value.Width > Constants.MAX_THUMBNAIL_SIZE) {
+                                               value.Scale(Constants.MAX_THUMBNAIL_SIZE, 
Constants.MAX_THUMBNAIL_SIZE);
+                                       }
+                                       thumbnailBuf = value.Serialize();
+                               }
+                       }
+               }
+               
+               #endregion
+       }
+}
diff --git a/LongoMatch.Migration/Core/Play.cs b/LongoMatch.Migration/Core/Play.cs
new file mode 100644
index 0000000..74a603c
--- /dev/null
+++ b/LongoMatch.Migration/Core/Play.cs
@@ -0,0 +1,268 @@
+// MediaTimeNode.cs
+//
+//  Copyright (C) 2007-2009 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.Collections.Generic;
+using System.Linq;
+using Mono.Unix;
+using LongoMatch.Common;
+using LongoMatch.Interfaces;
+using Newtonsoft.Json;
+
+namespace LongoMatch.Store
+{
+
+       /// <summary>
+       /// Represents a Play in the game.
+       /// </summary>
+
+       [Serializable]
+       public class  Play : PixbufTimeNode, ITimelineNode
+       {
+
+               #region Constructors
+               public Play() {
+                       Drawings = new List<Drawing>();
+                       Tags = new StringTagStore();
+                       Players = new PlayersTagStore(); 
+                       Teams = new TeamsTagStore();
+                       Fps = 25;
+                       PlaybackRate = 1.0;
+               }
+               #endregion
+
+               #region Properties
+               
+               public Guid ID {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// Category in which this play is tagged
+               /// </summary>
+               public Category Category {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// A string with the play's notes
+               /// </summary>
+               public string Notes {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// Video framerate in frames per second. This value is taken from the
+               /// video file properties and used to translate from seconds
+               /// to frames: second 100 is equivalent to frame 100*fps
+               /// </summary>
+               public uint Fps {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// Start frame number
+               /// </summary>
+               [JsonIgnore]
+               public uint StartFrame {
+                       get {
+                               return (uint)(Start.MSeconds * Fps / 1000);
+                       }
+                       set {
+                               Start = new Time {MSeconds = (int)(1000 * value / Fps)};
+                       }
+               }
+
+               /// <summary>
+               /// Stop frame number
+               /// </summary>
+               [JsonIgnore]
+               public uint StopFrame {
+                       get {
+                               return (uint)(Stop.MSeconds * Fps / 1000);
+                       }
+                       set {
+                               Stop = new Time {MSeconds = (int)(1000 * value / Fps)};
+                       }
+               }
+
+               /// <summary>
+               /// Get the key frame number if this play as key frame drawing or 0
+               /// </summary>
+               [JsonIgnore]
+               public uint KeyFrame {
+                       get {
+                               if(HasDrawings)
+                                       return (uint) KeyFrameDrawing.RenderTime * Fps / 1000;
+                               else return 0;
+                       }
+               }
+
+               /// <summary>
+               /// Get/Set wheter this play is actually loaded. Used in  <see 
cref="LongoMatch.Gui.Component.TimeScale">
+               /// </summary>
+               public bool Selected {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// List of drawings for this play
+               /// </summary>
+               public List<Drawing> Drawings {
+                       get;
+                       set;
+               }
+
+               /* FIXME: Keep this until we support multiple drawings */
+               [JsonIgnore]
+               public Drawing KeyFrameDrawing {
+                       get {
+                               if(Drawings.Count > 0)
+                                       return Drawings.First();
+                               else
+                                       return null;
+                       } set {
+                               if (Drawings.Count == 0)
+                                       Drawings.Add (value);
+                               else
+                                       Drawings[0] = value;
+                       }
+               }
+
+               /// <summary>
+               /// Get wether the play has at least a frame drawing
+               /// </summary>
+               [JsonIgnore]
+               public bool HasDrawings {
+                       get {
+                               return Drawings.Count > 0;
+                       }
+               }
+
+               /// <summary>
+               /// Central frame number using (stopFrame-startFrame)/2
+               /// </summary>
+               [JsonIgnore]
+               public uint CentralFrame {
+                       get {
+                               return StopFrame-((TotalFrames)/2);
+                       }
+               }
+
+               /// <summary>
+               /// Number of frames inside the play's boundaries
+               /// </summary>
+               [JsonIgnore]
+               public uint TotalFrames {
+                       get {
+                               return StopFrame-StartFrame;
+                       }
+               }
+               
+               [JsonIgnore]
+               public Team Team {
+                       get;
+                       set;
+               }
+               
+               [JsonProperty ("Players")]
+               public List<Player> PlayersList {
+                       get {
+                               return Players.GetTagsValues();
+                       }
+               }
+
+               public string GamePeriod {
+                       get;
+                       set;
+               }
+               
+               [JsonProperty ("Tags")]
+               public List<Tag> TagsList {
+                       get;
+                       set;
+               }
+               
+               [JsonIgnore]
+               public StringTagStore Tags {
+                       get;
+                       set;
+               }
+               
+               [JsonIgnore]
+               public PlayersTagStore Players {
+                       get;
+                       set;
+               }
+               
+               [JsonIgnore]
+               public TeamsTagStore Teams {
+                       get;
+                       set;
+               }
+               
+               public Coordinates FieldPosition {
+                       get;
+                       set;
+               }
+
+               public Coordinates HalfFieldPosition {
+                       get;
+                       set;
+               }
+               
+               public Coordinates GoalPosition {
+                       get;
+                       set;
+               }
+               
+               public double PlaybackRate {
+                       get;
+                       set;
+               }
+               
+               #endregion
+
+               #region Public methods
+               /// <summary>
+               /// Check if the frame number is inside the play boundaries
+               /// </summary>
+               /// <param name="frame">
+               /// A <see cref="System.Int32"/> with the frame number
+               /// </param>
+               /// <returns>
+               /// A <see cref="System.Boolean"/>
+               /// </returns>
+               public bool HasFrame(int frame) {
+                       return (frame>=StartFrame && frame<StopFrame);
+               }
+               
+               public override string ToString()
+               {
+                       return Name + "\n" + Start.ToMSecondsString() + " - " + Stop.ToMSecondsString();
+               }
+               #endregion
+       }
+}
diff --git a/LongoMatch.Migration/Core/PlayListPlay.cs b/LongoMatch.Migration/Core/PlayListPlay.cs
new file mode 100644
index 0000000..eca7f57
--- /dev/null
+++ b/LongoMatch.Migration/Core/PlayListPlay.cs
@@ -0,0 +1,78 @@
+// PlayListTimeNode.cs
+//
+//  Copyright (C) 2007-2009 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.Collections.Generic;
+
+namespace LongoMatch.Store
+{
+       /// <summary>
+       /// Represents a video segment used by <see cref="LongoMatch.Playlist.Playlist"/>.
+       /// It stores the information of the video file so that it can be used outside a project.
+       /// </summary>
+       [Serializable]
+       public class PlayListPlay : PixbufTimeNode
+       {
+               #region Constructors
+               public PlayListPlay()
+               {
+                       Valid = true;
+               }
+               
+               public PlayListPlay(Play play, MediaFile mediaFile, bool valid)
+               {
+                       Name = play.Name;
+                       Start = play.Start;
+                       Stop = play.Stop;
+                       Miniature = play.Miniature;
+                       Drawings = play.Drawings;
+                       Rate = play.Rate;
+                       MediaFile = mediaFile;
+                       Valid = valid;
+               }
+               #endregion
+
+               #region Properties
+               /// <summary>
+               /// Media File
+               /// </summary>
+               public MediaFile MediaFile {
+                       get;
+                       set;
+               }
+
+               //// <summary>
+               /// Defines it the file exists and thus, it can be used in the playlist
+               /// </summary>
+               public bool Valid {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// List of drawings to be displayed
+               /// </summary>
+               public List<Drawing> Drawings {
+                       get;
+                       set;
+               }
+               #endregion
+       }
+}
diff --git a/LongoMatch.Migration/Core/Player.cs b/LongoMatch.Migration/Core/Player.cs
new file mode 100644
index 0000000..5a1704a
--- /dev/null
+++ b/LongoMatch.Migration/Core/Player.cs
@@ -0,0 +1,162 @@
+//
+//  Copyright (C) 2007-2009 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
+{
+       /// <summary>
+       /// Player of a team
+       /// </summary>
+       [Serializable]
+       public class Player
+       {
+               private byte[] photo;
+
+               [JsonProperty ("ID")]
+               private Guid _UUID;
+
+               #region Constructors
+               public Player()
+               {
+                       _UUID = Guid.NewGuid ();
+               }
+               
+               public Player(Guid uuid)
+               {
+                       _UUID = uuid;
+               }
+               
+               #endregion
+
+               #region Properties
+               
+               [JsonIgnore]
+               public Guid ID {
+                       get {
+                               return _UUID;
+                       } 
+                       set {
+                               _UUID = value;
+                       }
+               }
+               
+               /// <summary>
+               /// My name
+               /// </summary>
+               public string Name {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// My position in the field
+               /// </summary>
+               public string Position {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// My shirt number
+               /// </summary>
+               public int Number {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// My photo
+               /// </summary>
+               public Image Photo {
+                       get {
+                               if(photo != null)
+                                       return Image.Deserialize(photo);
+                               else
+                                       return null;
+                       }
+                       set {
+                               if(value != null)
+                                       photo = value.Serialize();
+                               else
+                                       photo = null;
+                       }
+               }
+
+               /// <summary>
+               /// Date of birth
+               /// </summary>
+               public DateTime Birthday {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// Nationality
+               /// </summary>
+               public String Nationality {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// Height
+               /// </summary>
+               public float Height {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// Weight
+               /// </summary>
+               public int Weight {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// Whether this player is playing or not and shouldn't be added the
+               /// list of taggable players
+               /// </summary>
+               public bool Playing {
+                       get;
+                       set;
+               }
+               
+               /// <summary>
+               /// Gets or sets the player e-mail.
+               /// </summary>
+               /// <value>
+               /// The e-mail.
+               /// </value>
+               public string Mail {
+                       get;
+                       set;
+               }
+               
+               public override string ToString ()
+               {
+                       return String.Format("{0} - {1}", Number, Name);
+               }
+
+               #endregion
+       }
+}
diff --git a/LongoMatch.Migration/Core/Point.cs b/LongoMatch.Migration/Core/Point.cs
new file mode 100644
index 0000000..45447b6
--- /dev/null
+++ b/LongoMatch.Migration/Core/Point.cs
@@ -0,0 +1,110 @@
+//
+//  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.Collections.Generic;
+using Newtonsoft.Json;
+
+namespace LongoMatch.Common
+{
+       
+       [Serializable]
+       [JsonConverter (typeof (LongoMatchConverter))]
+       public class Point {
+
+               public Point (int x, int y) {
+                       X = x;
+                       Y = y;
+               }
+               
+               public Point (double x, double y) {
+                       DX = x;
+                       DY = y;
+               }
+               [JsonProperty ("X")]
+               public double DX {
+                       get;
+                       set;
+               }
+               
+               [JsonProperty ("Y")]
+               public double DY {
+                       get;
+                       set;
+               }
+               [JsonIgnore]
+               public int X {
+                       get;
+                       set;
+               }
+               
+               [JsonIgnore]
+               public int Y {
+                       get;
+                       set;
+               }
+               
+               public double Distance (Point p) {
+                       return Math.Sqrt (Math.Pow (X - p.X, 2) + Math.Pow (Y - p.Y, 2));
+               }
+               
+               public Point Normalize (int width, int height) {
+                       return new Point ((double) Math.Min(X, width) / width,
+                                         (double) Math.Min (Y, height) / height);
+               }
+               
+               public Point Denormalize (int width, int height) {
+                       return new Point (X * width, Y * height);
+               }
+
+               public override string ToString ()
+               {
+                       return string.Format ("[Point: X={0}, Y={1}]", X, Y);
+               }
+               
+               public override bool Equals (object obj)
+               {
+                       Point p = obj as Point;
+                       if (p == null)
+                               return false;
+                               
+                       return p.X == X && p.Y == Y;
+               }
+               
+               public override int GetHashCode ()
+               {
+                       return (X.ToString() + "-" + Y.ToString()).GetHashCode();
+               }
+               
+               public static bool operator < (Point p1, Point p2) {
+                       return p1.X < p2.X && p1.Y < p2.Y;
+               }
+               
+               public static bool operator > (Point p1, Point p2) {
+                       return p1.X > p2.X && p1.Y > p2.Y;
+               }
+               
+               public static Point operator + (Point p1, Point p2) {
+                       return new Point (p1.X + p2.X, p1.Y + p2.Y);
+               }
+               
+               public static Point operator - (Point p1, Point p2) {
+                       return new Point (p1.X - p2.X, p1.Y - p2.Y);
+               }
+       }
+}
diff --git a/LongoMatch.Migration/Core/Project.cs b/LongoMatch.Migration/Core/Project.cs
new file mode 100644
index 0000000..98d671b
--- /dev/null
+++ b/LongoMatch.Migration/Core/Project.cs
@@ -0,0 +1,295 @@
+// Project.cs
+//
+//  Copyright (C) 2007-2009 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.Collections.Generic;
+using System.IO;
+using System.Linq;
+using Newtonsoft.Json;
+using Mono.Unix;
+
+using LongoMatch.Common;
+using LongoMatch.Interfaces;
+using LongoMatch.Store;
+using LongoMatch.Store.Templates;
+
+namespace LongoMatch.Store
+{
+
+       /// <summary>
+       /// I hold the information needed by a project and provide persistency using
+       /// the db4o database.
+       /// I'm structured in the following way:
+       /// -Project Description (<see cref="LongoMatch.Utils.PreviewMediaFile"/>
+       /// -1 Categories Template
+       /// -1 Local Team Template
+       /// -1 Visitor Team Template
+       /// -1 list of <see cref="LongoMatch.Store.MediaTimeNode"/> for each category
+       /// </summary>
+       ///
+       [Serializable]
+       public class Project : IComparable
+       {
+
+               [JsonProperty ("ID")]
+               readonly Guid _UUID;
+               ProjectDescription description;
+               [JsonProperty ("Timeline")]
+               List<Play> timeline;
+
+               #region Constructors
+               public Project() {
+                       _UUID = System.Guid.NewGuid();
+                       timeline = new List<Play>();
+                       Categories = new Categories();
+                       LocalTeamTemplate = new TeamTemplate();
+                       VisitorTeamTemplate = new TeamTemplate();
+                       Timers = new List<Timer> ();
+                       Periods = new List<Period> ();
+               }
+               #endregion
+
+               #region Properties
+
+               /// <summary>
+               /// Unique ID for the project
+               /// </summary>
+               [JsonIgnore]
+               public Guid UUID {
+                       get {
+                               return _UUID;
+                       }
+               }
+               
+               public ProjectDescription Description {
+                       get{
+                               return description;
+                       }
+                       set {
+                               if (value != null) {
+                                       value.UUID = UUID;
+                               }
+                               description = value;
+                       }
+               }
+
+               /// <value>
+               /// Categories template
+               /// </value>
+               [JsonProperty(Order = -10)]
+               public Categories Categories {
+                       get;
+                       set;
+               }
+
+               /// <value>
+               /// Local team template
+               /// </value>
+               [JsonProperty(Order = -9)]
+               public TeamTemplate LocalTeamTemplate {
+                       get;
+                       set;
+               }
+
+               /// <value>
+               /// Visitor team template
+               /// </value>
+               [JsonProperty(Order = -8)]
+               public TeamTemplate VisitorTeamTemplate {
+                       get;
+                       set;
+               }
+               
+               public List<Period> Periods {
+                       get;
+                       set;
+               }
+               
+               public List<Timer> Timers {
+                       get;
+                       set;
+               }
+               
+               [JsonIgnore]
+               [Obsolete("Game units have been replaced with timers")]
+               public GameUnitsList  GameUnits {
+                       set {
+                               Categories.GameUnits = value;
+                       }
+                       get {
+                               return Categories.GameUnits;
+                       }
+               }
+               
+               [JsonIgnore]
+               public IEnumerable<IGrouping<Category, Play>> PlaysGroupedByCategory {
+                       get {
+                               return timeline.GroupBy(play => play.Category);
+                       }
+               }
+               #endregion
+
+               #region Public Methods
+               /// <summary>
+               /// Frees all the project's resources helping the GC
+               /// </summary>
+               public void Clear() {
+                       timeline.Clear();
+                       Categories.Clear();
+                       VisitorTeamTemplate.Clear();
+                       LocalTeamTemplate.Clear();
+                       Periods.Clear();
+                       Timers.Clear();
+               }
+
+
+               /// <summary>
+               /// Adds a new play to a given category
+               /// </summary>
+               /// <param name="dataSection">
+               /// A <see cref="System.Int32"/>: category index
+               /// </param>
+               /// <param name="start">
+               /// A <see cref="Time"/>: start time of the play
+               /// </param>
+               /// <param name="stop">
+               /// A <see cref="Time"/>: stop time of the play
+               /// </param>
+               /// <param name="thumbnail">
+               /// A <see cref="Pixbuf"/>: snapshot of the play
+               /// </param>
+               /// <returns>
+               /// A <see cref="MediaTimeNode"/>: created play
+               /// </returns>
+               public Play AddPlay(Category category, Time start, Time stop, Image miniature) {
+                       string count= String.Format("{0:000}", PlaysInCategory (category).Count + 1);
+                       string name = String.Format("{0} {1}",category.Name, count);
+
+                       var play = new Play {
+                               Name = name,
+                               Start = start,
+                               Stop = stop,
+                               Category = category,
+                               Notes = "",
+                               Miniature = miniature,
+                               Fps = Description.File.Fps,
+                       };
+                       timeline.Add(play);
+                       return play;
+               }
+               
+               public void AddPlay (Play play) {
+                       timeline.Add(play);
+               }
+               
+               /// <summary>
+               /// Delete a play from the project
+               /// </summary>
+               /// <param name="tNode">
+               /// A <see cref="MediaTimeNode"/>: play to be deleted
+               /// </param>
+               /// <param name="section">
+               /// A <see cref="System.Int32"/>: category the play belongs to
+               /// </param>
+               public void RemovePlays(List<Play> plays) {
+                       foreach(Play play in plays)
+                               timeline.Remove(play);
+               }
+
+               /// <summary>
+               /// Delete a category
+               /// </summary>
+               /// <param name="sectionIndex">
+               /// A <see cref="System.Int32"/>: category index
+               /// </param>
+               public void RemoveCategory(Category category) {
+                       if(Categories.Count == 1)
+                               throw new Exception("You can't remove the last Category");
+                       Categories.Remove(category);
+
+                       timeline.RemoveAll(p => p.Category.UUID == category.UUID);
+               }
+               
+               public void RemovePlayer(TeamTemplate template, Player player) {
+                       if(template.Count == 1)
+                               throw new Exception("You can't remove the last Player");
+                       template.Remove(player);
+                       foreach (var play in timeline) {
+                               play.Players.RemoveByPlayer(player);
+                       }
+               }
+               
+               public void DeleteSubcategoryTags(Category cat, List<ISubCategory> subcategories) {
+                       foreach (var play in timeline.Where(p => p.Category == cat)) {
+                               foreach (var subcat in subcategories) {
+                                       Log.Error(play.Name);
+                                       if (subcat is TagSubCategory)
+                                               play.Tags.RemoveBySubcategory(subcat);
+                                       else if (subcat is TeamSubCategory)
+                                               play.Teams.RemoveBySubcategory(subcat);
+                                       else if (subcat is PlayerSubCategory)
+                                               play.Players.RemoveBySubcategory(subcat);
+                               }
+                       }
+               }
+
+               public List<Play> PlaysInCategory(Category category) {
+                       return timeline.Where(p => p.Category.UUID == category.UUID).ToList();
+               }
+
+               public List<Play> AllPlays() {
+                       return timeline;
+               }
+
+
+               public bool Equals(Project project) {
+                       if(project == null)
+                               return false;
+                       else
+                               return UUID == project.UUID;
+               }
+
+               public int CompareTo(object obj) {
+                       if(obj is Project) {
+                               Project project = (Project) obj;
+                               return UUID.CompareTo(project.UUID);
+                       }
+                       else
+                               throw new ArgumentException("object is not a Project and cannot be compared");
+               }
+
+               public static void Export(Project project, string file) {
+                       file = Path.ChangeExtension(file, Constants.PROJECT_EXT);
+                       SerializableObject.Save(project, file);
+               }
+
+               public static Project Import(string file) {
+                       try {
+                               return SerializableObject.Load<Project>(file);
+                       }
+                       catch  (Exception e){
+                               Log.Exception (e);
+                               throw new Exception(Catalog.GetString("The file you are trying to load " +
+                                                                     "is not a valid project"));
+                       }
+               }
+               #endregion
+       }
+}
diff --git a/LongoMatch.Migration/Core/ProjectDescription.cs b/LongoMatch.Migration/Core/ProjectDescription.cs
new file mode 100644
index 0000000..1a6dd9f
--- /dev/null
+++ b/LongoMatch.Migration/Core/ProjectDescription.cs
@@ -0,0 +1,162 @@
+//
+//  Copyright (C) 2009 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+using System;
+using Newtonsoft.Json;
+using LongoMatch.Store;
+
+namespace LongoMatch.Store
+{
+
+       /// <summary>
+       /// Describes a project in LongoMatch.
+       /// </summary>
+       [Serializable]
+       public class ProjectDescription :  IComparable
+       {
+               /// <summary>
+               /// Unique ID of the parent project
+               /// </summary>
+               public Guid UUID {
+                       get;
+                       set;
+               }
+               
+               /// <summary>
+               /// Title of the project
+               /// </summary>
+               [JsonIgnore]
+               public String Title {
+                       get {
+                               if (File == null)
+                                       return "";
+                               return System.IO.Path.GetFileNameWithoutExtension(File.FilePath);
+                       }
+               }
+
+               /// <summary>
+               /// Media file asigned to this project
+               /// </summary>
+               public MediaFile File {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// Season of the game
+               /// </summary>
+               public String Season {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// Comptetition of the game
+               /// </summary>
+               public String Competition {
+                       get;
+                       set;
+               }
+               
+               /// <summary>
+               /// Name of the local team
+               /// </summary>
+               public String LocalName {
+                       get;
+                       set;
+               }
+
+
+               /// <summary>
+               /// Name of the visitor team
+               /// </summary>
+               public String VisitorName {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// Goals of the local team
+               /// </summary>
+               public int LocalGoals {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// Goals of the visitor team
+               /// </summary>
+               public int VisitorGoals {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// Date of the game
+               /// </summary>
+               public DateTime MatchDate {
+                       get;
+                       set;
+               }
+               
+               public string Category {
+                       get;
+                       set;
+               }
+
+               public string Group {
+                       get;
+                       set;
+               }
+               
+               public string Phase {
+                       get;
+                       set;
+               }
+               
+               /// <summary>
+               /// String representing the video format like "widhtxheight fps"
+               /// </summary>
+               [JsonIgnore]
+               public String Format {
+                       get {
+                               if (File == null)
+                                       return "";
+                               return String.Format("{0}x{1} {2}fps",
+                                                    File.VideoWidth, File.VideoHeight, File.Fps);
+                       }
+               }
+               
+               public DateTime LastModified {
+                       get;
+                       set;
+               }
+
+               public int CompareTo(object obj) {
+                       if(obj is ProjectDescription) {
+                               ProjectDescription project = (ProjectDescription) obj;
+                               
+                               if (File == null || project.File == null)
+                                       return UUID.CompareTo(project.UUID);
+                               return this.File.FilePath.CompareTo(project.File.FilePath);
+                       }
+                       else
+                               throw new ArgumentException("object is not a ProjectDescription and cannot be 
compared");
+               }
+       }
+}
diff --git a/LongoMatch.Migration/Core/SubCategory.cs b/LongoMatch.Migration/Core/SubCategory.cs
new file mode 100644
index 0000000..2a712c3
--- /dev/null
+++ b/LongoMatch.Migration/Core/SubCategory.cs
@@ -0,0 +1,195 @@
+//
+//  Copyright (C) 2011 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.Collections.Generic;
+using System.Linq;
+using Mono.Unix;
+using Newtonsoft.Json;
+
+using LongoMatch.Common;
+using LongoMatch.Interfaces;
+
+namespace LongoMatch.Store
+{
+       /// <summary>
+       /// A sub category is used to extend the tags of a category.
+       /// In a complex analysis scenario, a category is not enough to tag
+       /// a play and we need to use subcategories. For example we might want to
+       /// tag the type of goal, who scored, who did the passs and for which team.
+       ///   * Goal
+       ///     - Type: [Short Corner, Corner, Penalty, Penalty Corner, Field Goal]
+       ///     - Scorer: Players List
+       ///     - Assister: Players List
+       ///     - Team: [Local Team, Visitor Team]
+       ///
+       /// A sub category with name Type and a list of options will be added to the
+       /// Goal category to extends its tags.
+       /// </summary>
+       [Serializable]
+       public class SubCategory<T>: List<T>, ISubCategory
+       {
+
+               public SubCategory() {
+                       Name = "";
+                       AllowMultiple = true;
+                       FastTag = true;
+               }
+
+               public SubCategory(IEnumerable<T> list): base(list) {}
+
+               /// <summary>
+               /// Name of the subcategory
+               /// </summary>
+               public String Name {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// Wheter this subcategory allow multiple options.
+               /// eg: Team will only allow one option, because a goal can't be scored by 2 teams
+               /// </summary>
+               public bool AllowMultiple {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// Whether this SubCategory should be added to the tagging widget shown after
+               /// creating a new play.
+               /// </summary>
+               public bool FastTag {
+                       get;
+                       set;
+               }
+               
+               protected string RenderDesc(string type, string values) {
+                       string str;
+                       
+                       str = String.Format("{0}: {1} [{2}]\n", 
+                                           Catalog.GetString("Name"), Name, type);
+                       str += values;
+                       return str;
+               }
+               
+               public virtual string ToMarkupString(){
+                       return this.ToString();
+               }
+               
+               public List<string> ElementsDesc () {
+                       return this.Select(e => e.ToString()).ToList();
+               }
+       }
+
+       [Serializable]
+       public class SubCategory {
+               public SubCategory() {
+               }
+
+               public String Name {get;set;}
+               public List<string> Options {get;set;}
+               public bool AllowMultiple {get;set;}
+       }
+       
+       [Serializable]
+       public class TagSubCategory: SubCategory<string> {
+       
+               public TagSubCategory () {}
+
+               public TagSubCategory (IEnumerable<string> tags): base(tags) {}
+               
+               public override string ToMarkupString(){
+                       string tags = "";
+                       
+                       foreach (string tag in this) {
+                               if (tags == "")
+                                       tags += tag;
+                               else
+                                       tags += " - " + tag;
+                       }
+                       return RenderDesc (Catalog.GetString("Tags list"),
+                                         Catalog.GetString("Tags:" + 
+                                         String.Format(" <b>{0}</b>", tags)));
+               }
+               
+       }
+
+       /// <summary>
+       /// SubCategory to tag Players
+       /// Stores a list of teams to be shown in the options.
+       /// The teams LOCAL, VISITOR will be then mapped to a list of players
+       /// for this team, so that a change in the team's templates will not
+       /// affect the list of available players.
+       /// </summary>
+       [Serializable]
+       public class PlayerSubCategory: SubCategory<Team> {
+       
+               public bool PositionFilter {get; set;}
+               
+               public override string ToMarkupString(){
+                       string teams = "";
+                       if (this.Contains(Team.LOCAL))
+                               teams += Catalog.GetString("Local ");
+                       if (this.Contains(Team.VISITOR))
+                               teams += Catalog.GetString("Visitor");
+                       
+                       return RenderDesc(Catalog.GetString("List of players"),
+                                         Catalog.GetString("Teams:" + 
+                                         String.Format(" <b>{0}</b>", teams)));
+               }
+       }
+
+       /// <summary>
+       /// SubCategory to tag teams
+       /// A list of options containing the teams to be shown in the options.
+       /// The teams LOCAL, VISITOR and NONE are then mapped to real team names
+       /// so that a change in the name doesn't affect the category.
+       /// </summary>
+       [Serializable]
+       public class TeamSubCategory: SubCategory<Team> {
+       
+               public TeamSubCategory() {
+                       Name = Catalog.GetString("Team");
+                       AllowMultiple=true;
+                       FastTag=true;
+                       Add(Team.LOCAL);
+                       Add(Team.VISITOR);
+               }
+               
+               public override string ToMarkupString(){
+                       return RenderDesc(Catalog.GetString("Team selection"), "");
+               }
+       }
+       
+       /// <summary>
+       /// SubCategory to tag locations or trajectories in the game field
+       /// </summary>
+       [Serializable]
+       public class CoordinatesSubCategory: SubCategory<Coordinates> {
+       
+               /* Use 1 for locations or 2 for trajectories */
+               public int NumCoordinates {
+                       get;
+                       set;
+               }
+               
+               public override string ToMarkupString(){
+                       return RenderDesc(Catalog.GetString("Coordinates"), "");
+               }
+       }
+}
\ No newline at end of file
diff --git a/LongoMatch.Migration/Core/Tag.cs b/LongoMatch.Migration/Core/Tag.cs
new file mode 100644
index 0000000..e33f344
--- /dev/null
+++ b/LongoMatch.Migration/Core/Tag.cs
@@ -0,0 +1,140 @@
+//
+//  Copyright (C) 2007-2009 Andoni Morales Alastruey
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU General Public License as published by
+//  the Free Software Foundation; either version 2 of the License, or
+//  (at your option) any later version.
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU General Public License
+//  along with this program; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+
+using System;
+using System.Linq;
+using System.Collections.Generic;
+
+using LongoMatch.Common;
+using LongoMatch.Interfaces;
+
+namespace LongoMatch.Store
+{
+[Serializable]
+       
+       
+       public class Tag
+       {
+               public Tag() {
+               }
+               
+               public SubCategory SubCategory {
+                       set;
+                       get;
+               }
+               
+               public string Value {
+                       get;
+                       set;
+               }
+       }
+       
+       [Serializable]
+       public class Tag<T>: ITag<T>
+       {
+               public Tag() {
+               }
+               
+               public ISubCategory SubCategory {
+                       set;
+                       get;
+               }
+               
+               public T Value {
+                       get;
+                       set;
+               }
+               
+       }
+
+       [Serializable]
+       public class StringTag: Tag<string>
+       {
+               public StringTag() {}
+               
+               public override bool Equals (object obj)
+               {
+                       StringTag tag = obj as StringTag;
+            if (tag == null)
+                               return false;
+                       return Value.Equals (tag.Value) && SubCategory.Equals(tag.SubCategory);
+               }
+               
+               public override int GetHashCode ()
+               {
+                       return Value.GetHashCode ();
+               }
+       }
+
+       [Serializable]
+       public class PlayerTag: Tag<Player>
+       {
+               public PlayerTag() {}
+               
+               public override bool Equals (object obj)
+               {
+                       PlayerTag tag = obj as PlayerTag;
+            if (tag == null)
+                               return false;
+                       return Value.Equals (tag.Value) && SubCategory.Equals(tag.SubCategory) ;
+               }
+               
+               public override int GetHashCode ()
+               {
+                       return Value.GetHashCode ();
+               }
+       }
+
+       [Serializable]
+       public class TeamTag: Tag<Team>
+       {
+               public TeamTag() {}
+               
+               public override bool Equals (object obj)
+               {
+                       TeamTag tag = obj as TeamTag;
+            if (tag == null)
+                               return false;
+                       return Value.Equals (tag.Value) && SubCategory.Equals(tag.SubCategory);
+               }
+               
+               public override int GetHashCode ()
+               {
+                       return Value.GetHashCode ();
+               }
+       }
+       
+       [Serializable]
+       public class CoordinatesTag: Tag<Coordinates>
+       {
+               public CoordinatesTag() {}
+               
+               public override bool Equals (object obj)
+               {
+                       CoordinatesTag tag = obj as CoordinatesTag;
+            if (tag == null)
+                               return false;
+                       return Value.Equals (tag.Value) && SubCategory.Equals(tag.SubCategory);
+               }
+               
+               public override int GetHashCode ()
+               {
+                       return Value.GetHashCode ();
+               }
+       }
+}
diff --git a/LongoMatch.Migration/Core/TagStore.cs b/LongoMatch.Migration/Core/TagStore.cs
new file mode 100644
index 0000000..92d8323
--- /dev/null
+++ b/LongoMatch.Migration/Core/TagStore.cs
@@ -0,0 +1,109 @@
+// 
+//  Copyright (C) 2011 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.Collections.Generic;
+using System.Linq;
+using Newtonsoft.Json;
+
+using LongoMatch.Common;
+using LongoMatch.Interfaces;
+using LongoMatch.Store;
+
+namespace LongoMatch.Store
+{
+       [Serializable]
+       [JsonObject (MemberSerialization = MemberSerialization.OptIn)]
+       public class TagsStore<T, W> where T:ITag<W>
+       {
+               protected List<T> tagsList;
+               
+               public TagsStore(){
+                       tagsList = new List<T>();
+               }
+               
+               [JsonProperty ("Tags")]
+               public List<T> Tags {
+                       get{
+                               return tagsList;
+                       }
+                       set {
+                               tagsList = value;
+                       }
+               }
+               
+               public void Add(T tag) {
+                       Log.Debug(String.Format("Adding tag {0} with subcategory{1}", tag, tag.SubCategory));
+                       tagsList.Add(tag);
+               }
+               
+               public void Remove(T tag) {
+                       try {
+                               tagsList.Remove (tag);
+                       } catch (Exception e) {
+                               Log.Warning("Error removing tag " + tag.ToString());
+                               Log.Exception(e);
+                       }
+               }
+               
+               public bool Contains(T tag) {
+                       return tagsList.Contains(tag);
+               }
+               
+               public void RemoveBySubcategory(ISubCategory subcat) {
+                       tagsList.RemoveAll(t => t.SubCategory == subcat);
+               }
+               
+               public List<T> AllUniqueElements {
+                       get {
+                               return (from tag in tagsList
+                                       group tag by tag into g
+                                       select g.Key).ToList();
+                       }
+               }
+               
+               public List<T> GetTags(ISubCategory subCategory) {
+                       return (from tag in tagsList
+                               where tag.SubCategory.Equals(subCategory)
+                               select tag).ToList();
+               }
+               
+               public List<W> GetTagsValues() {
+                       return (from tag in tagsList
+                               select tag.Value).ToList();
+               }
+       }
+       
+       [Serializable]
+       public class StringTagStore: TagsStore<StringTag, string> {}
+       
+       [Serializable]
+       public class PlayersTagStore: TagsStore<PlayerTag, Player> {
+               
+               public void RemoveByPlayer(Player player) {
+                       tagsList.RemoveAll(t => t.Value == player);
+               }
+               
+       }
+       
+       [Serializable]
+       public class TeamsTagStore: TagsStore<TeamTag, Team> {}
+       
+       [Serializable]
+       public class CoordinatesTagStore: TagsStore<CoordinatesTag, Coordinates> {}
+}
+
diff --git a/LongoMatch.Migration/Core/Templates/CategoriesTemplate.cs 
b/LongoMatch.Migration/Core/Templates/CategoriesTemplate.cs
new file mode 100644
index 0000000..682e5d5
--- /dev/null
+++ b/LongoMatch.Migration/Core/Templates/CategoriesTemplate.cs
@@ -0,0 +1,231 @@
+// Sections.cs
+//
+//  Copyright (C) 2007-2009 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.Collections.Generic;
+using System.Linq;
+using Newtonsoft.Json;
+
+using Mono.Unix;
+using LongoMatch.Common;
+using LongoMatch.Interfaces;
+
+using Image = LongoMatch.Common.Image;
+
+namespace LongoMatch.Store.Templates
+{
+
+       /// <summary>
+       /// I am a template for the analysis categories used in a project.
+       /// I describe each one of the categories and provide the default values
+       /// to use to create plys in a specific category.
+       /// The position of the category in the index is very important and should
+       /// respect the same index used in the plays list inside a project.
+       /// The <see cref="LongoMatch.DB.Project"/> must handle all the changes
+       /// </summary>
+       [Serializable]
+       [JsonObject]
+       public class Categories: List<Category>, ITemplate, ITemplate<Category>
+       {
+               /* Database additions */
+               GameUnitsList gameUnits;
+               Version version;
+               byte[] fieldImage, halfFieldImage, goalImage ;
+
+               /// <summary>
+               /// Creates a new template
+               /// </summary>
+               public Categories() {
+               }
+
+               public Guid ID {
+                       get;
+                       set;
+               }
+               
+               public string Name {
+                       get;
+                       set;
+               }
+               
+               [JsonIgnore]
+               public Version Version {
+                       get;
+                       set;
+               }
+               
+               [JsonIgnore]
+               public GameUnitsList GameUnits {
+                       set {
+                               gameUnits = value;
+                       }
+                       get {
+                               if (gameUnits == null) {
+                                       gameUnits = new GameUnitsList();
+                               }
+                               return gameUnits;
+                       }
+               }
+               
+               public List<string> GamePeriods {
+                       get;
+                       set;
+               }
+               
+               public Image Image {
+                       get;
+                       set;
+               }
+               
+               public List<Category> List {
+                       get {
+                               return this.ToList();
+                       }
+               }
+               
+
+               
+               /* Keep this for backwards compatiblity with 0.18.11 */
+               [JsonIgnore]
+               [Obsolete]
+               public Image FieldBackgroundImage {get; set;}
+               [JsonIgnore]
+               [Obsolete]
+               public Image HalfFieldBackgroundImage {get; set;}
+               [JsonIgnore]
+               [Obsolete]
+               public Image GoalBackgroundImage {get; set;}
+
+               public Image FieldBackground {
+                       get {
+                               if(fieldImage != null)
+                                       return Image.Deserialize(fieldImage);
+                               else return null;
+                       }
+                       set {
+                               if (value != null) {
+                                       if (value.Width > 500) {
+                                               value.Scale (500, 500);
+                                       }
+                                       fieldImage = value.Serialize();
+                               }
+                               else
+                                       fieldImage = null;
+                       }
+               }
+               
+               public Image HalfFieldBackground {
+                       get {
+                               if(halfFieldImage != null)
+                                       return Image.Deserialize(halfFieldImage);
+                               else return null;
+                       }
+                       set {
+                               if (value != null) {
+                                       if (value.Width > 500) {
+                                               value.Scale (500, 500);
+                                       }
+                                       halfFieldImage = value.Serialize();
+                               }
+                               else
+                                       halfFieldImage = null;
+                       }
+               }
+               
+               public Image GoalBackground {
+                       get {
+                               if(goalImage != null)
+                                       return Image.Deserialize(goalImage);
+                               else return null;
+                       }
+                       set {
+                               if (value != null) {
+                                       if (value.Width > 500) {
+                                               value.Scale (500, 500);
+                                       }
+                                       goalImage = value.Serialize();
+                               }
+                               else
+                                       goalImage = null;
+                       }
+               }
+               
+               public void Save(string filePath) {
+                       SerializableObject.Save(this, filePath);
+               }
+       
+               public void AddDefaultSubcategories (Category cat) {
+                       TagSubCategory resultsubcat;
+                       
+                       resultsubcat = new TagSubCategory {
+                               Name = Catalog.GetString ("Outcome"),
+                               AllowMultiple = false,
+                       };
+                       resultsubcat.Add (Catalog.GetString ("Success"));
+                       resultsubcat.Add (Catalog.GetString ("Failure"));
+                       cat.SubCategories.Add(resultsubcat);
+               }       
+               
+               public Category AddDefaultItem (int index) {
+                       Color c = Color.Red;
+                       HotKey h = new HotKey();
+                       
+                       
+                       Category cat =  new Category {
+                               Name = "Category " + index,
+                               LColor = c,
+                               Start = new Time{Seconds = 10},
+                               Stop = new Time {Seconds = 10},
+                               SortMethod = SortMethodType.SortByStartTime,
+                               HotKey = h,
+                               Position = index-1,
+                       };
+                       AddDefaultSubcategories(cat);
+                       Insert(index, cat);
+                       return cat;
+               }
+
+               public static Categories Load(string filePath) {
+                       Categories cat = SerializableObject.LoadSafe<Categories>(filePath);
+                       if (cat.GamePeriods == null) {
+                               cat.GamePeriods = new List<string>();
+                               cat.GamePeriods.Add ("1");
+                               cat.GamePeriods.Add ("2");
+                       }
+                       return cat;
+               }
+
+               public static Categories DefaultTemplate(int count) {
+                       List<string> periods = new List<string>();
+                       Categories defaultTemplate = new Categories();
+                       
+                       defaultTemplate.FillDefaultTemplate(count);
+                       periods.Add ("1");
+                       periods.Add ("2");
+                       defaultTemplate.GamePeriods = periods; 
+                       defaultTemplate.Version = new Version (Constants.DB_MAYOR_VERSION, 
Constants.DB_MINOR_VERSION);
+                       return defaultTemplate;
+               }
+
+               private void FillDefaultTemplate(int count) {
+                       for(int i=1; i<=count; i++)
+                               AddDefaultItem(i-1);
+               }
+       }
+}
diff --git a/LongoMatch.Core/Store/Templates/SubCategoryTemplate.cs 
b/LongoMatch.Migration/Core/Templates/SubCategoryTemplate.cs
similarity index 97%
rename from LongoMatch.Core/Store/Templates/SubCategoryTemplate.cs
rename to LongoMatch.Migration/Core/Templates/SubCategoryTemplate.cs
index 9f65bbe..4b0fef4 100644
--- a/LongoMatch.Core/Store/Templates/SubCategoryTemplate.cs
+++ b/LongoMatch.Migration/Core/Templates/SubCategoryTemplate.cs
@@ -21,11 +21,13 @@ using System.Collections.Generic;
 using LongoMatch.Common;
 using LongoMatch.Interfaces;
 using LongoMatch.Store;
+using Newtonsoft.Json;
 
 namespace LongoMatch.Store.Templates
 {
 
        [Serializable]
+       [JsonObject]
        public class SubCategoryTemplate: TagSubCategory, ITemplate<string>
        {
 
diff --git a/LongoMatch.Migration/Core/Templates/TeamTemplate.cs 
b/LongoMatch.Migration/Core/Templates/TeamTemplate.cs
new file mode 100644
index 0000000..8904ab3
--- /dev/null
+++ b/LongoMatch.Migration/Core/Templates/TeamTemplate.cs
@@ -0,0 +1,180 @@
+//
+//  Copyright (C) 2007-2009 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.Collections.Generic;
+using System.Linq;
+using Mono.Unix;
+using Newtonsoft.Json;
+
+using LongoMatch.Common;
+using LongoMatch.Interfaces;
+
+namespace LongoMatch.Store.Templates
+{
+       [Serializable]
+       [JsonObject]
+       public class TeamTemplate: List<Player>, ITemplate<Player>
+       {
+               [JsonProperty ("ID")]
+               private Guid _UUID;
+
+               private byte[] thumbnailBuf;
+               private const int MAX_WIDTH=100;
+               private const int MAX_HEIGHT=100;
+               Version version;
+               
+               public TeamTemplate () {
+                       init (Guid.NewGuid ());
+               }
+               
+               public TeamTemplate (Guid uuid) {
+                       init (uuid);
+               }
+
+               [JsonIgnore]
+               public Guid UUID {
+                       get {
+                               return _UUID;
+                       } set {
+                               _UUID = value;
+                       }
+               }
+                
+               public String Name {
+                       get;
+                       set;
+               }
+
+               public String TeamName {
+                       get;
+                       set;
+               }
+               
+               public Version Version {
+                       get;
+                       set;
+               }
+               
+               public List<Player> List {
+                       get {
+                               return this.ToList();
+                       }
+               }
+               
+               public Image Shield {
+                       get {
+                               if(thumbnailBuf != null)
+                                       return Image.Deserialize(thumbnailBuf);
+                               else return null;
+                       } set {
+                               if (value == null)
+                                       thumbnailBuf = null;
+                               else
+                                       thumbnailBuf = value.Serialize();
+                       }
+               }
+               
+               [JsonIgnore]
+               public int PlayingPlayers {
+                       get;
+                       protected set;
+               } 
+               
+               public int[] Formation {
+                       get;
+                       set;
+               }
+               
+               [JsonIgnore]
+               public string FormationStr {
+                       set {
+                               string[] elements = value.Split('-');
+                               int[] tactics = new int[elements.Length];
+                               int index = 0;
+                               foreach (string s in elements) {
+                                       try {
+                                               tactics[index] = int.Parse (s);
+                                               index ++;
+                                       } catch {
+                                               throw new FormatException ();
+                                       }
+                               }
+                               PlayingPlayers = tactics.Sum();
+                               Formation = tactics;
+                       }
+                       get {
+                               return String.Join ("-", Formation);
+                       }
+               }
+               
+               [JsonIgnore]
+               public List<Player> PlayingPlayersList {
+                       get {
+                               return this.Where(p=>p.Playing).Select(p=>p).ToList();
+                       }
+               }
+
+               public void Save(string filePath) {
+                       SerializableObject.Save(this, filePath);
+               }
+               
+               public Player AddDefaultItem (int i) {
+                       Player p = new Player {
+                               Name = "Player " + (i+1).ToString(),
+                               Birthday = new DateTime(),
+                               Height = 1.80f,
+                               Weight = 80,
+                               Number = i+1,
+                               Position = "",
+                               Photo = null,
+                               Playing = true,};
+                       Insert (i, p);
+                       return p;
+               }
+
+               public static TeamTemplate Load(string filePath) {
+                       TeamTemplate template = SerializableObject.LoadSafe<TeamTemplate>(filePath);
+                       if (template.Formation == null) {
+                               template.FormationStr = "1-4-3-3";
+                       }
+                       return template;
+               }
+
+               public static TeamTemplate DefaultTemplate(int playersCount) {
+                       TeamTemplate defaultTemplate = new TeamTemplate();
+                       defaultTemplate.FillDefaultTemplate(playersCount);
+                       return defaultTemplate;
+               }
+
+               private void FillDefaultTemplate(int playersCount) {
+                       Clear();
+                       for(int i=1; i<=playersCount; i++)
+                               AddDefaultItem(i-1);
+                       version = new Version (Constants.DB_MAYOR_VERSION, Constants.DB_MINOR_VERSION);
+               }
+               
+               void init (Guid uuid) {
+                       _UUID = uuid;
+                       TeamName = Catalog.GetString("Team");
+                       if (Formation == null) {
+                               FormationStr = "1-4-3-3";
+                       }
+               }
+       }
+}
diff --git a/LongoMatch.Migration/Core/Time.cs b/LongoMatch.Migration/Core/Time.cs
new file mode 100644
index 0000000..10d17dc
--- /dev/null
+++ b/LongoMatch.Migration/Core/Time.cs
@@ -0,0 +1,187 @@
+// Time.cs
+//
+//  Copyright (C) 2007-2009 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 Newtonsoft.Json;
+using LongoMatch.Common;
+
+namespace LongoMatch.Store
+{
+
+       /// <summary>
+       /// Represents a time instant. Other objects uses it to keep consistency in the time units consitency.
+       /// It's expressed in miliseconds and provide some helper methods for time conversion and 
representation
+       /// </summary>
+       [Serializable]
+       [JsonConverter (typeof (LongoMatchConverter))]
+       public class Time :  IComparable
+       {
+               private const int MS = 1000000 ;
+               public const int SECONDS_TO_TIME = 1000;
+               public const int TIME_TO_NSECONDS = 1000000;
+
+               #region Constructors
+               public Time() {
+               }
+               
+               public Time(int mSeconds) {
+                       MSeconds = mSeconds;
+               }
+               #endregion
+
+               //// <summary>
+               /// Time in miliseconds
+               /// </summary>
+               #region Properties
+               public int MSeconds {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// Time in seconds
+               /// </summary>          
+               [JsonIgnore]
+               public int Seconds {
+                       get {
+                               return MSeconds/SECONDS_TO_TIME;
+                       }
+                       set {
+                               MSeconds = value * SECONDS_TO_TIME;
+                       }
+               }
+               
+               /// <summary>
+               /// Time in nano seconds
+               /// </summary>          
+               [JsonIgnore]
+               public long NSeconds {
+                       get {
+                               return  (long)MSeconds * TIME_TO_NSECONDS;
+                       }
+                       set {
+                               MSeconds = (int) (value / TIME_TO_NSECONDS);
+                       }
+               }
+               #endregion
+
+               #region Public methods
+               /// <summary>
+               /// String representation in seconds
+               /// </summary>
+               /// <returns>
+               /// A <see cref="System.String"/>
+               /// </returns>
+               public  string ToSecondsString()
+               {
+                       int _h, _m, _s, _time;
+
+                       _time = MSeconds / 1000;
+                       _h = (_time / 3600);
+                       _m = ((_time % 3600) / 60);
+                       _s = ((_time % 3600) % 60);
+
+                       if(_h > 0)
+                               return String.Format("{0}:{1}:{2}", _h, _m.ToString("d2"),
+                                                    _s.ToString("d2"));
+
+                       return String.Format("{0}:{1}", _m, _s.ToString("d2"));
+               }
+
+               /// <summary>
+               /// String representation including the milisenconds information
+               /// </summary>
+               /// <returns>
+               /// A <see cref="System.String"/>
+               /// </returns>
+               public  string ToMSecondsString()
+               {
+                       int _ms ;
+                       _ms = ((MSeconds % 3600000)%60000)%1000;
+
+                       return String.Format("{0},{1}", ToSecondsString(), _ms.ToString("d3"));
+               }
+
+               public override bool Equals(object o)
+               {
+                       if(o is Time) {
+                               return ((Time)o).MSeconds == MSeconds;
+                       }
+                       else return false;
+               }
+
+               public override int GetHashCode()
+               {
+                       return base.GetHashCode();
+               }
+
+               public int CompareTo(object obj) {
+                       if(obj is Time)
+                       {
+                               Time  otherTime = (Time) obj;
+                               return MSeconds.CompareTo(otherTime.MSeconds);
+                       }
+                       else throw new ArgumentException("Object is not a Temperature");
+               }
+               #endregion
+
+               #region Operators
+               public static bool operator < (Time t1,Time t2) {
+                       return t1.MSeconds < t2.MSeconds;
+               }
+
+               public static bool operator > (Time t1,Time t2) {
+                       return t1.MSeconds > t2.MSeconds;
+               }
+
+               public static bool operator <= (Time t1,Time t2) {
+                       return t1.MSeconds <= t2.MSeconds;
+               }
+
+               public static bool operator >= (Time t1,Time t2) {
+                       return t1.MSeconds >= t2.MSeconds;
+               }
+
+               public static Time operator +(Time t1,int t2) {
+                       return new Time {MSeconds = t1.MSeconds+t2};
+               }
+
+               public static Time operator +(Time t1,Time t2) {
+                       return new Time {MSeconds = t1.MSeconds+t2.MSeconds};
+               }
+
+               public  static Time operator -(Time t1,Time t2) {
+                       return new Time {MSeconds = t1.MSeconds-t2.MSeconds};
+               }
+
+               public  static Time operator -(Time t1,int t2) {
+                       return new Time {MSeconds = t1.MSeconds-t2};
+               }
+               
+               public static Time operator *(Time t1, double t2) {
+                       return new Time {MSeconds = (int) (t1.MSeconds * t2)};
+               }
+               
+               public static Time operator /(Time t1, int t2) {
+                       return new Time {MSeconds = (int) (t1.MSeconds / t2)};
+               }
+               #endregion
+       }
+}
\ No newline at end of file
diff --git a/LongoMatch.Migration/Core/TimeNode.cs b/LongoMatch.Migration/Core/TimeNode.cs
new file mode 100644
index 0000000..36267f9
--- /dev/null
+++ b/LongoMatch.Migration/Core/TimeNode.cs
@@ -0,0 +1,88 @@
+// TimeNode.cs
+//
+//  Copyright (C) 2007-2009 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.Collections.Generic;
+using Newtonsoft.Json;
+using LongoMatch.Store;
+
+namespace LongoMatch.Store
+{
+
+       /// <summary>
+       /// Base class for all the time span related objects in the database.
+       /// It has a name that describe it and a start and stop <see cref="LongoMatch.Store.Time"/>
+       /// </summary>
+       [Serializable]
+       public class TimeNode
+       {
+               #region Constructors
+               public TimeNode() {
+                       Rate = 1;
+               }
+               #endregion
+
+               #region Properties
+               /// <summary>
+               /// A short description of the time node
+               /// </summary>
+               public string Name {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// Start Time
+               /// </summary>
+               public Time Start {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// Stop time
+               /// </summary>
+               public Time Stop {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// Duration (stop_time - start_time)
+               /// </summary>
+               [JsonIgnore]
+               public Time Duration {
+                       get {
+                               return Stop-Start;
+                       }
+               }
+               
+               /// <summary>
+               /// Play rate
+               /// </summary>
+               public float Rate {
+                       get;
+                       set;
+               }
+
+               #endregion
+
+       }
+}
diff --git a/LongoMatch.Migration/Core/TimelineNode.cs b/LongoMatch.Migration/Core/TimelineNode.cs
new file mode 100644
index 0000000..e85e7c5
--- /dev/null
+++ b/LongoMatch.Migration/Core/TimelineNode.cs
@@ -0,0 +1,127 @@
+// 
+//  Copyright (C) 2011 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 Newtonsoft.Json;
+using LongoMatch.Interfaces;
+
+namespace LongoMatch.Store
+{
+    /* FIXME: Code duplicated from Play, unfortunately we can't
+      * modify the class hierachy */
+       [Serializable]
+       public class TimelineNode: TimeNode, ITimelineNode
+       {
+               public TimelineNode ()
+               {
+               }
+               
+               /// <summary>
+               /// Video framerate in frames per second. This value is taken from the
+               /// video file properties and used to translate from seconds
+               /// to frames: second 100 is equivalent to frame 100*fps
+               /// </summary>
+               [JsonIgnore]
+               public uint Fps {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// Start frame number
+               /// </summary>
+               [JsonIgnore]
+               public uint StartFrame {
+                       get {
+                               return (uint)(Start.MSeconds * Fps / 1000);
+                       }
+                       set {
+                               Start = new Time {MSeconds = (int)(1000 * value / Fps)};
+                       }
+               }
+
+               /// <summary>
+               /// Stop frame number
+               /// </summary>
+               [JsonIgnore]
+               public uint StopFrame {
+                       get {
+                               return (uint)(Stop.MSeconds * Fps / 1000);
+                       }
+                       set {
+                               Stop = new Time {MSeconds = (int)(1000 * value / Fps)};
+                       }
+               }
+
+               /// <summary>
+               /// Get/Set wheter this play is actually loaded. Used in  <see 
cref="LongoMatch.Gui.Component.TimeScale">
+               /// </summary>
+               [JsonIgnore]
+               public bool Selected {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// Central frame number using (stopFrame-startFrame)/2
+               /// </summary>
+               [JsonIgnore]
+               public uint CentralFrame {
+                       get {
+                               return StopFrame-((TotalFrames)/2);
+                       }
+               }
+
+               /// <summary>
+               /// Number of frames inside the play's boundaries
+               /// </summary>
+               [JsonIgnore]
+               public uint TotalFrames {
+                       get {
+                               return StopFrame-StartFrame;
+                       }
+               }
+               
+               /// <summary>
+               /// Get the key frame number if this play as key frame drawing or 0
+               /// </summary>
+               public uint KeyFrame {
+                       get {
+                               return 0;
+                       }
+               }
+               
+               public bool HasDrawings {
+                       get;
+                       set;
+               }
+
+               /// <summary>
+               /// Check if the frame number is inside the play boundaries
+               /// </summary>
+               /// <param name="frame">
+               /// A <see cref="System.Int32"/> with the frame number
+               /// </param>
+               /// <returns>
+               /// A <see cref="System.Boolean"/>
+               /// </returns>
+               public bool HasFrame(int frame) {
+                       return (frame>=StartFrame && frame<StopFrame);
+               }
+       }
+}
+
diff --git a/LongoMatch.Core/Store/GameUnit.cs b/LongoMatch.Migration/Core/Timer.cs
similarity index 54%
copy from LongoMatch.Core/Store/GameUnit.cs
copy to LongoMatch.Migration/Core/Timer.cs
index f9ce9b9..ee28aac 100644
--- a/LongoMatch.Core/Store/GameUnit.cs
+++ b/LongoMatch.Migration/Core/Timer.cs
@@ -1,32 +1,33 @@
-// 
-//  Copyright (C) 2011 andoni
-// 
+//
+//  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;
 using System.Collections.Generic;
+using Newtonsoft.Json;
 
 namespace LongoMatch.Store
 {
-       [Serializable]
-       public class GameUnit: List<TimelineNode>
+       public class Timer
        {
-               
-               public GameUnit (string name)
+               public Timer ()
                {
-                       Name=name;
+                       Nodes = new List<TimeNode>();
                }
                
                public string Name {
@@ -34,10 +35,34 @@ namespace LongoMatch.Store
                        set;
                }
                
-               public override string ToString ()
-               {
-                       return string.Format ("[GameUnit: Name={0}]", Name);
-               }       
+               public List<TimeNode> Nodes {
+                       get;
+                       set;
+               }
+               
+               [JsonIgnore]
+               public Time TotalTime {
+                       get {
+                               return new Time (Nodes.Sum (tn => tn.Duration.MSeconds));
+                       }
+               }
+               
+               public void Start (Time start, string name = null) {
+                       if (name == null)
+                               name = Name;
+                       Stop (start);
+                       TimeNode tn = new TimeNode {Name = name, Start = start};
+                       Nodes.Add (tn);
+               }
+               
+               public void Stop (Time stop) {
+                       if (Nodes.Count > 0) {
+                               TimeNode last = Nodes.Last ();
+                               if (last.Stop == null) {
+                                       last.Stop = stop;
+                               }
+                       }
+               }
        }
 }
 
diff --git a/LongoMatch.Migration/Data/default.lct b/LongoMatch.Migration/Data/default.lct
new file mode 100644
index 0000000..d22200e
Binary files /dev/null and b/LongoMatch.Migration/Data/default.lct differ
diff --git a/LongoMatch.Migration/Data/default.ltt b/LongoMatch.Migration/Data/default.ltt
new file mode 100644
index 0000000..6231134
Binary files /dev/null and b/LongoMatch.Migration/Data/default.ltt differ
diff --git a/LongoMatch.Migration/Data/project.lgm b/LongoMatch.Migration/Data/project.lgm
new file mode 100644
index 0000000..0568b19
Binary files /dev/null and b/LongoMatch.Migration/Data/project.lgm differ
diff --git a/LongoMatch.Migration/DataBase.cs b/LongoMatch.Migration/DataBase.cs
new file mode 100644
index 0000000..fe25686
--- /dev/null
+++ b/LongoMatch.Migration/DataBase.cs
@@ -0,0 +1,554 @@
+// DB.cs
+//
+//  Copyright (C) 2007-2009 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.Collections.Generic;
+using System.IO;
+using System.Linq;
+using Db4objects.Db4o;
+using Db4objects.Db4o.Query;
+using Db4objects.Db4o.Ext;
+
+using LongoMatch.Common;
+using LongoMatch.Interfaces;
+using LongoMatch.Store;
+using LongoMatch.Store.Templates;
+
+namespace LongoMatch.DB
+{
+
+       /// <summary>
+       /// I am a proxy for the db4o database. I can store,retrieve, update and search
+       /// <see cref="LongoMatch.DB.Projects"/>.
+       /// Projects are uniquely indentified by their filename, assuming that you can't
+       /// create two projects for the same video file.
+       /// </summary>
+       public sealed class DataBase
+       {
+               string DBFile;
+               string DBName;
+               Version dbVersion;
+               BackupDate lastBackup;
+               int count;
+               TimeSpan maxDaysWithoutBackup = new TimeSpan(5, 0, 0, 0);
+               
+               
+               /// <summary>
+               /// Creates a proxy for the database
+               /// </summary>
+               /// <param name="file">
+               /// A <see cref="System.String"/> with the database file path
+               /// </param>
+               public DataBase(string file)
+               {
+                       DBFile = file;
+                       DBName = Path.GetFileNameWithoutExtension(DBFile);
+                       DBName = Path.GetFileNameWithoutExtension(DBName);
+                       Load ();
+               }
+               
+               /// <value>
+               /// The database version
+               /// </value>
+               public Version Version {
+                       get {
+                               return dbVersion;
+                       }
+                       set {
+                               UpdateVersion (value);
+                       }
+               }
+               
+               public string Name {
+                       get {
+                               return DBName;
+                       }
+               }
+               
+               public DateTime LastBackup {
+                       get {
+                               return lastBackup.Date;
+                       }
+               }
+               
+               public int Count {
+                       get {
+                               return count;
+                       }
+               }
+               
+               public bool Backup () {
+                       return BackupDB (true);
+               }
+               
+               public bool Delete () {
+                       try {
+                               File.Delete (DBFile);
+                               return true;
+                       } catch (Exception ex) {
+                               Log.Exception (ex);
+                               return false;
+                       }
+               }
+               
+               public void ListObjects() {
+                       Dictionary<Type, int> dict = new Dictionary<Type, int>();
+                       IObjectContainer db = Db4oFactory.OpenFile(DBFile);
+                       
+                       IQuery query = db.Query();
+                       query.Constrain(typeof(object));
+                       IObjectSet result = query.Execute();
+                       while(result.HasNext()) {
+                               var res = result.Next();
+                               Type type = res.GetType();
+                               
+                               if (dict.ContainsKey(type))
+                                       dict[type]++;
+                               else
+                                       dict.Add(type, 1);
+                               
+                       }
+                       foreach (Type t in dict.Keys) {
+                               Log.Information(t.ToString()+":" + dict[t]);
+                       }
+                       CloseDB(db);
+                       
+               }
+               
+               /// <summary>
+               /// Initialize the Database
+               /// </summary>
+               public bool Load() {
+                       bool ret = false;
+                       
+                       try {
+                               Log.Debug ("Loading database file: " + DBFile);
+                               /* Create a new DB if it doesn't exists yet */
+                               if(!System.IO.File.Exists(DBFile)) {
+                                       Log.Debug ("File doesn't exists, creating a new one");
+                                       CreateNewDB();
+                                       ret = true;
+                               }
+                               
+                               GetDBVersion();
+                               GetBackupDate();
+                               CheckDB();
+                               count = GetAllProjects().Count;
+                               try {
+                                       BackupDB();
+                               } catch (Exception e) {
+                                       Log.Error("Error creating database backup");
+                                       Log.Exception(e);
+                               }
+                       } catch (Exception ex) {
+                               throw ex;
+                       }
+                       return ret;
+               }
+               
+               /// <summary>
+               /// Retrieve all the projects from the database. This method don't return the
+               /// the whole <see cref="LongoMatch.DB.Project"/> but the projects fields to
+               /// create a <see cref="LongoMatch.DB.ProjectDescription"/> to make the seek
+               /// faster.
+               /// </summary>
+               /// <returns>
+               /// A <see cref="List"/>
+               /// </returns>
+               public List<ProjectDescription> GetAllProjects() {
+                       List<ProjectDescription> list = new List<ProjectDescription>();
+                       IObjectContainer db = Db4oFactory.OpenFile(DBFile);
+                       
+                       Log.Debug("Getting all projects");
+                       try     {
+                               IQuery query = db.Query();
+                               query.Constrain(typeof(ProjectDescription));
+                               IObjectSet result = query.Execute();
+                               Log.Debug(String.Format("Found {0} projects", result.Count));
+                               while(result.HasNext()) {
+                                       try {
+                                               ProjectDescription desc = (ProjectDescription)result.Next();
+                                               list.Add(desc);
+                                       } catch (Exception e) {
+                                               Log.Warning("Error retreiving project. Skip");
+                                               Log.Exception(e);
+                                       }
+                               }
+                       } catch (Exception ex) {
+                               Log.Exception (ex);
+                       }
+                       finally
+                       {
+                               CloseDB(db);
+                       }
+                       return list;
+               }
+
+               /// <summary>
+               /// Search and return a project in the database. Returns null if the
+               /// project is not found
+               /// </summary>
+               /// <param name="filename">
+               /// A <see cref="System.String"/> with the project's video file name
+               /// </param>
+               /// <returns>
+               /// A <see cref="LongoMatch.DB.Project"/>
+               /// </returns>
+               public Project GetProject(Guid id) {
+                       Project ret = null;
+                       IObjectContainer db = Db4oFactory.OpenFile(DBFile);
+                       
+                       Log.Debug("Getting project with ID: " + id);
+                       try     {
+                               IQuery query = GetQueryProjectById (db, id);
+                               IObjectSet result = query.Execute();
+                               ret = (Project) db.Ext().PeekPersisted(result.Next(),10,true);
+                       } finally {
+                               CloseDB(db);
+                       }
+                       if (ret != null && FixProjectCoordinates (ret)) {
+                               UpdateProject (ret);
+                       }
+                       return ret;
+               }
+
+               /// <summary>
+               /// Add a project to the databse
+               /// </summary>
+               /// <param name="project">
+               /// A <see cref="Project"/> to add
+               /// </param>
+               public void AddProject(Project project) {
+                       IObjectContainer db = Db4oFactory.OpenFile(DBFile);
+                       
+                       project.Description.LastModified = DateTime.Now;
+                       Log.Debug("Adding new project: " + project);
+                       try {
+                               db.Store(project);
+                               db.Commit();
+                               count ++;
+                       } catch (Exception e) {
+                               Log.Error("Could not add project");
+                               Log.Exception(e);
+                       }
+                       finally {
+                               CloseDB(db);
+                       }
+               }
+
+               /// <summary>
+               /// Delete a project from the database
+               /// </summary>
+               /// <param name="filePath">
+               /// A <see cref="System.String"/> with the project's video file path
+               /// </param>
+               public void RemoveProject(Guid id) {
+                       SetDeleteCascadeOptions();
+                       IObjectContainer db = Db4oFactory.OpenFile(DBFile);
+
+                       Log.Debug("Removing project with ID: " + id);
+                       try     {
+                               IQuery query = GetQueryProjectById(db, id);
+                               IObjectSet result = query.Execute();
+                               Project project = (Project)result.Next();
+                               db.Delete(project);
+                               db.Commit();
+                               count --;
+                       } catch (Exception e) {
+                               Log.Error("Could not delete project");
+                               Log.Exception(e);
+                       } finally {
+                               CloseDB(db);
+                       }
+               }
+
+               /// <summary>
+               /// Updates a project in the database. Because a <see cref="LongoMatch.DB.Project"/> has
+               /// many objects associated, a simple update would leave in the databse many orphaned objects.
+               /// Therefore we need to delete the old project a replace it with the changed one.
+               /// </summary>
+               /// <param name="project">
+               /// A <see cref="Project"/> to update
+               /// </param>
+               /// <param name="previousFileName">
+               /// A <see cref="System.String"/> with the old file path
+               /// </param>
+               public void UpdateProject(Project project) {
+                       // Configure db4o to cascade on delete for each one of the objects stored in a Project
+                       SetDeleteCascadeOptions();
+                       IObjectContainer db = Db4oFactory.OpenFile(DBFile);
+                       
+                       project.Description.LastModified = DateTime.Now;
+                       Log.Debug("Updating project " + project);
+                       try     {
+                               IQuery query = GetQueryProjectById(db, project.UUID);
+                               IObjectSet result = query.Execute();
+                               //Get the stored project and replace it with the new one
+                               if(result.Count == 1) {
+                                       Project fd = (Project)result.Next();
+                                       db.Delete(fd);
+                                       db.Store(project);
+                                       db.Commit();
+                               } else {
+                                       Log.Warning("Project with ID " + project.UUID + "not found");
+                               }
+                       } catch (Exception e) {
+                               Log.Error("Could not update project");
+                               Log.Exception(e);
+                       } finally {
+                               CloseDB(db);
+                       }
+               }
+
+               /// <summary>
+               /// Checks if a project already exists in the DataBase with the same file
+               /// </summary>
+               /// <param name="project">
+               /// A <see cref="Project"/> to compare
+               /// </param>
+               /// <returns>
+               /// A <see cref="System.Boolean"/>
+               /// </returns>
+               public bool Exists(Project project) {
+                       bool ret;
+                       IObjectContainer db = Db4oFactory.OpenFile(DBFile);
+               
+                       try {
+                               IQuery query = GetQueryProjectById(db, project.UUID);
+                               IObjectSet result = query.Execute();
+                               ret = result.HasNext();
+                       } catch {
+                               ret = false;
+                       } finally {
+                               CloseDB(db);
+                       }
+                       
+                       return ret;
+               }
+               
+               private void CreateNewDB () {
+                       // Create new DB and add version and last backup date
+                       IObjectContainer db = Db4oFactory.OpenFile(DBFile);
+                       try {
+                               dbVersion= new Version(Constants.DB_MAYOR_VERSION, 
Constants.DB_MINOR_VERSION);
+                               lastBackup = new BackupDate { Date = DateTime.UtcNow};
+                               db.Store(dbVersion);
+                               db.Store(lastBackup);
+                               Log.Information("Created new database:" + DBFile);
+                       }
+                       finally {
+                               db.Close();
+                       }
+               }
+               
+               private void GetDBVersion () {
+                       dbVersion = GetObject<Version>();
+                       if (dbVersion == null)
+                               dbVersion = new Version(Constants.DB_MAYOR_VERSION, 
Constants.DB_MINOR_VERSION);
+                       Log.Information("DB version: "+ dbVersion.ToString());
+               }
+               
+               private void GetBackupDate () {
+                       lastBackup = GetObject<BackupDate> ();
+                       if (lastBackup == null) {
+                               lastBackup = new BackupDate {Date = DateTime.UtcNow};
+                               UpdateBackupDate(true);
+                       }
+                       Log.Information("DB last backup: "+ lastBackup.Date.ToShortDateString());
+               }
+               
+               private void UpdateBackupDate (bool create) {
+                       IObjectContainer db = Db4oFactory.OpenFile(DBFile);
+                       try     {
+                               IQuery query = db.Query();
+                               query.Constrain(typeof(BackupDate));
+                               IObjectSet result = query.Execute();
+                               while (result.HasNext()) {
+                                       BackupDate date = result.Next() as BackupDate;
+                                       db.Delete (date);
+                               }
+                               db.Store(lastBackup);
+                       } finally {
+                               db.Close();
+                       }
+               }
+               
+               private void UpdateVersion (Version version) {
+                       IObjectContainer db = Db4oFactory.OpenFile(DBFile);
+                       try     {
+                               IQuery query = db.Query();
+                               query.Constrain(typeof(Version));
+                               IObjectSet result = query.Execute();
+                               while (result.HasNext()) {
+                                       Version v = result.Next() as Version;
+                                       db.Delete (v);
+                               }
+                               db.Store(version);
+                               dbVersion = version;
+                       } finally {
+                               db.Close();
+                       }
+               }
+               
+               private T GetObject<T>() {
+                       T ret = default(T);
+                       IObjectContainer db = Db4oFactory.OpenFile(DBFile);
+                       try     {
+                               IQuery query = db.Query();
+                               query.Constrain(typeof(T));
+                               IObjectSet result = query.Execute();
+                               if(result.HasNext())
+                                       ret = (T) result.Next();
+                       } finally {
+                               db.Close();
+                       }
+                       return ret;
+               }
+               
+               private void CheckDB() {
+                       /* FIXME: Check for migrations here */
+               }
+               
+               private bool BackupDB (bool force=false) {
+                       string backupFilepath;
+                       DateTime now = DateTime.UtcNow;
+                       if (!force && lastBackup.Date + maxDaysWithoutBackup >= now)
+                               return true;
+                       
+                       backupFilepath = DBFile + ".backup";
+                       try {
+                               if (File.Exists(backupFilepath))
+                                       File.Delete(backupFilepath);
+
+                               File.Copy(DBFile, backupFilepath);
+                               Log.Debug ("Created backup for database at ", backupFilepath);
+                               lastBackup = new BackupDate {Date = now};
+                               UpdateBackupDate(false);
+                               return true;
+                       } catch (Exception ex) {
+                               Log.Error("Could not create backup");
+                               Log.Exception(ex);
+                               return false;
+                       }
+                       
+               }
+
+               private IQuery GetQueryProjectById(IObjectContainer db, Guid id) {
+                       IQuery query = db.Query();
+                       query.Constrain(typeof(Project));
+                       query.Descend("_UUID").Constrain(id);
+                       return query;
+               }
+
+               private void CloseDB(IObjectContainer db) {
+                       db.Ext().Purge();
+                       db.Close();
+               }
+               
+               private List<Type> GetTypes() {
+                       List<Type> types = new List<Type>();
+                       types.Add(typeof(Project));
+                       types.Add(typeof(ProjectDescription));
+                       types.Add(typeof(Categories));
+                       types.Add(typeof(TeamTemplate));
+                       types.Add(typeof(Play));
+                       types.Add(typeof(TimeNode));
+                       types.Add(typeof(TeamTag));
+                       types.Add(typeof(PlayerTag));
+                       types.Add(typeof(StringTag));
+                       types.Add(typeof(PlayersTagStore));
+                       types.Add(typeof(TeamsTagStore));
+                       types.Add(typeof(StringTagStore));
+
+                       return types;
+               }
+
+               private void SetDeleteCascadeOptions() {
+                       foreach (Type type in GetTypes()) {
+                               Db4oFactory.Configure().ObjectClass(type).CascadeOnDelete(true);
+                       }
+               }
+
+               void FixCoordinates (Project project, int old_width, string backgroundName)
+               {
+                       List<Coordinates> coords = null;
+                       Image image = null;
+                       
+                       if (backgroundName == Constants.FIELD_BACKGROUND) {
+                               image = Config.FieldBackground;
+                               project.Categories.FieldBackground = image; 
+                               coords =  project.AllPlays().Select(p => p.FieldPosition).ToList();
+                       } else if (backgroundName == Constants.HALF_FIELD_BACKGROUND) {
+                               image = Config.HalfFieldBackground;
+                               project.Categories.HalfFieldBackground = image; 
+                               coords = project.AllPlays().Select(p => p.HalfFieldPosition).ToList();
+                       } else if (backgroundName == Constants.GOAL_BACKGROUND) {
+                               image = Config.GoalBackground;
+                               project.Categories.GoalBackground = image;
+                       }
+                       
+                       if (coords != null) {
+                               int new_width;
+                               
+                               new_width = image.Width;
+                               foreach (Coordinates c in coords) {
+                                       float scale = (float) new_width / old_width;
+                                       if (c == null)
+                                               continue;
+                                       foreach (Point p in c) {
+                                               p.X = (int) (p.X * scale);
+                                               p.Y = (int) (p.Y * scale);
+                                       }
+                               }
+                       }
+               }
+               
+               bool FixProjectCoordinates (Project project) {
+                       bool save = false;
+                       
+                       if (project.Categories.FieldBackground == null) {
+                               FixCoordinates (project, 2078, Constants.FIELD_BACKGROUND);
+                               save = true;
+                       }
+                       if (project.Categories.HalfFieldBackground == null) {
+                               FixCoordinates (project, 2078, Constants.HALF_FIELD_BACKGROUND);
+                               save = true;
+                       }
+                       if (project.Categories.GoalBackground == null) {
+                               FixCoordinates (project, 400, Constants.GOAL_BACKGROUND);
+                               save = true;
+                       }
+                       return save;
+               }
+
+               /* Dummy class to allow having a single instance of BackupDateTime in the DB and make it
+                * easIer to query */
+               protected class BackupDate 
+               {
+                       public DateTime Date {
+                               get;
+                               set;
+                       }                       
+               }
+               
+       }
+       
+       
+}
diff --git a/LongoMatch.Migration/LongoMatch.Migration.csproj 
b/LongoMatch.Migration/LongoMatch.Migration.csproj
new file mode 100644
index 0000000..edeb3b3
--- /dev/null
+++ b/LongoMatch.Migration/LongoMatch.Migration.csproj
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" 
xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>10.0.0</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{5177E0D5-38FE-475F-B13A-16C9EEF00EA8}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <RootNamespace>LongoMatch.Migration</RootNamespace>
+    <AssemblyName>LongoMatch.Migration</AssemblyName>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug</OutputPath>
+    <DefineConstants>DEBUG;</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <ConsolePause>false</ConsolePause>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>full</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release</OutputPath>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <ConsolePause>false</ConsolePause>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+      <SpecificVersion>False</SpecificVersion>
+      <Package>gtk-sharp-2.0</Package>
+    </Reference>
+    <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+      <SpecificVersion>False</SpecificVersion>
+      <Package>gtk-sharp-2.0</Package>
+    </Reference>
+    <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+      <SpecificVersion>False</SpecificVersion>
+      <Package>glib-sharp-2.0</Package>
+    </Reference>
+    <Reference Include="glade-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+      <SpecificVersion>False</SpecificVersion>
+      <Package>glade-sharp-2.0</Package>
+    </Reference>
+    <Reference Include="pango-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+      <SpecificVersion>False</SpecificVersion>
+      <Package>gtk-sharp-2.0</Package>
+    </Reference>
+    <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+      <SpecificVersion>False</SpecificVersion>
+      <Package>gtk-sharp-2.0</Package>
+    </Reference>
+    <Reference Include="Mono.Posix" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="gtk-gui\gui.stetic">
+      <LogicalName>gui.stetic</LogicalName>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="gtk-gui\generated.cs" />
+    <Compile Include="MainWindow.cs" />
+    <Compile Include="gtk-gui\MainWindow.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
diff --git a/LongoMatch.Migration/LongoMatch.Migration.mdp b/LongoMatch.Migration/LongoMatch.Migration.mdp
new file mode 100644
index 0000000..dc28526
--- /dev/null
+++ b/LongoMatch.Migration/LongoMatch.Migration.mdp
@@ -0,0 +1,89 @@
+<Project name="LongoMatch.Migration" fileversion="2.0" DefaultNamespace="LongoMatch.Migration" language="C#" 
targetFramework="4.0" ctype="DotNetProject">
+  <Configurations active="Release">
+    <Configuration name="Debug" ctype="DotNetProjectConfiguration">
+      <Output directory="bin/Debug" assembly="LongoMatch" />
+      <Build debugmode="True" target="WinExe" />
+      <Execution consolepause="False" runwithwarnings="True" runtime="MsNet" />
+      <CodeGeneration compiler="Mcs" warninglevel="4" optimize="False" unsafecodeallowed="False" 
generateoverflowchecks="False" definesymbols="DEBUG;HAVE_GTK" generatexmldocumentation="False" 
ctype="CSharpCompilerParameters" />
+    </Configuration>
+    <Configuration name="Release" ctype="DotNetProjectConfiguration">
+      <Output directory="bin/Release" assembly="LongoMatch" />
+      <Build debugmode="True" target="WinExe" />
+      <Execution consolepause="False" runwithwarnings="True" runtime="MsNet" />
+      <CodeGeneration compiler="Mcs" warninglevel="4" optimize="False" unsafecodeallowed="False" 
generateoverflowchecks="False" definesymbols="HAVE_GTK" generatexmldocumentation="False" 
ctype="CSharpCompilerParameters" />
+    </Configuration>
+  </Configurations>
+  <Contents>
+    <File subtype="Code" buildaction="EmbedAsResource" name="gtk-gui/gui.stetic" />
+    <File subtype="Code" buildaction="Compile" name="gtk-gui/generated.cs" />
+    <File subtype="Code" buildaction="Compile" name="MainWindow.cs" />
+    <File subtype="Code" buildaction="Compile" name="gtk-gui/MainWindow.cs" />
+    <File subtype="Code" buildaction="Compile" name="Program.cs" />
+    <File subtype="Code" buildaction="Compile" name="Properties/AssemblyInfo.cs" />
+    <File subtype="Directory" buildaction="Compile" name="Core" />
+    <File subtype="Code" buildaction="Compile" name="Core/Category.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/Player.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/ProjectDescription.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/Timer.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/MediaFile.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/Project.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/Period.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/TimelineNode.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/GameUnit.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/Drawing.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/Point.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/Coordinates.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/Time.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/TimeNode.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/PixbufTimeNode.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/TagStore.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/SubCategory.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/Play.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/HotKey.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/PlayListPlay.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/Tag.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/GameUnitsList.cs" />
+    <File subtype="Directory" buildaction="Compile" name="Core/Templates" />
+    <File subtype="Code" buildaction="Compile" name="Core/Templates/TeamTemplate.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/Templates/CategoriesTemplate.cs" />
+    <File subtype="Directory" buildaction="Compile" name="Core/Interfaces" />
+    <File subtype="Code" buildaction="Compile" name="Core/Interfaces/ITemplates.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/Interfaces/ISubCategory.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/Interfaces/ITag.cs" />
+    <File subtype="Directory" buildaction="Compile" name="Common" />
+    <File subtype="Code" buildaction="Compile" name="Common/Color.cs" />
+    <File subtype="Code" buildaction="Compile" name="Common/Image.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/Interfaces/ITimelineNode.cs" />
+    <File subtype="Code" buildaction="Compile" name="Common/Enums.cs" />
+    <File subtype="Code" buildaction="Compile" name="Common/Log.cs" />
+    <File subtype="Code" buildaction="Compile" name="Common/Constants.cs" />
+    <File subtype="Code" buildaction="Compile" name="Common/SerializableObject.cs" />
+    <File subtype="Code" buildaction="Compile" name="Common/ConsoleCrayon.cs" />
+    <File subtype="Code" buildaction="Compile" name="Common/Config.cs" />
+    <File subtype="Directory" buildaction="Compile" name="Tests" />
+    <File subtype="Code" buildaction="Compile" name="Tests/CateogiresTest.cs" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="Data/default.lct" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="Data/default.ltt" />
+    <File subtype="Code" buildaction="Compile" name="Core/Templates/SubCategoryTemplate.cs" />
+    <File subtype="Code" buildaction="Compile" name="Tests/TestTeam.cs" />
+    <File subtype="Code" buildaction="EmbedAsResource" name="Data/project.lgm" />
+    <File subtype="Code" buildaction="Compile" name="Converter.cs" />
+    <File subtype="Code" buildaction="Compile" name="Tests/TestProject.cs" />
+    <File subtype="Code" buildaction="Compile" name="DataBase.cs" />
+  </Contents>
+  <References>
+    <ProjectReference type="Package" localcopy="True" refto="System, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b77a5c561934e089" />
+    <ProjectReference type="Package" specificVersion="False" localcopy="True" refto="gtk-sharp, 
Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
+    <ProjectReference type="Package" specificVersion="False" localcopy="True" refto="gdk-sharp, 
Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
+    <ProjectReference type="Package" specificVersion="False" localcopy="True" refto="glib-sharp, 
Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
+    <ProjectReference type="Package" specificVersion="False" localcopy="True" refto="pango-sharp, 
Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
+    <ProjectReference type="Package" specificVersion="False" localcopy="True" refto="atk-sharp, 
Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
+    <ProjectReference type="Package" localcopy="True" refto="Mono.Posix, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=0738eb9f132ed756" />
+    <ProjectReference type="Package" localcopy="False" refto="Newtonsoft.Json, Version=5.0.0.0, 
Culture=neutral, PublicKeyToken=b9a188c8922137c6" />
+    <ProjectReference type="Package" specificVersion="False" localcopy="False" refto="System.Core, 
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+    <ProjectReference type="Package" specificVersion="False" localcopy="False" refto="System.Xml, 
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+    <ProjectReference type="Package" localcopy="False" refto="Db4objects.Db4o, Version=8.0.184.15484, 
Culture=neutral, PublicKeyToken=6199cd4f203aa8eb" />
+    <ProjectReference type="Package" specificVersion="False" localcopy="False" refto="System.Drawing, 
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+    <ProjectReference type="Package" localcopy="False" refto="nunit.framework, Version=2.6.0.0, 
Culture=neutral, PublicKeyToken=96d09a1eb7f44a77" />
+  </References>
+</Project>
\ No newline at end of file
diff --git a/LongoMatch.Migration/MainWindow.cs b/LongoMatch.Migration/MainWindow.cs
new file mode 100644
index 0000000..b760de7
--- /dev/null
+++ b/LongoMatch.Migration/MainWindow.cs
@@ -0,0 +1,182 @@
+//
+//  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.IO;
+using Gtk;
+using System.Collections.Generic;
+using LongoMatch.DB;
+using LongoMatch.Store;
+
+public partial class MainWindow: Gtk.Window
+{      
+
+       string baseDirectory;
+       string homeDirectory;
+       string configDirectory;
+       string buf;
+       List<string> teams, categories, dbs;
+       
+       
+       public MainWindow (): base (Gtk.WindowType.Toplevel)
+       {
+               Build ();
+               SetupBasedir ();
+               FindFiles ();
+               UpdateLabel ();
+               buf = "";
+       }
+       
+       void SetupBasedir () {
+               string home;
+                       
+               baseDirectory = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory,"../");
+               if (!System.IO.Directory.Exists(System.IO.Path.Combine(baseDirectory, "share", 
"longomatch"))) {
+                       baseDirectory = System.IO.Path.Combine(baseDirectory, "../");
+               }
+               
+               home = System.Environment.GetFolderPath(Environment.SpecialFolder.Personal);
+               homeDirectory = System.IO.Path.Combine(home, "LongoMatch");
+               if (Environment.OSVersion.Platform == PlatformID.Win32NT)
+                       configDirectory = homeDirectory;
+               else
+                       configDirectory = System.IO.Path.Combine(home,"." + "longomatch");
+       }
+       
+       void FindFiles () {
+               string dbdir, templatesdir;
+               
+               dbs = new List<string>();
+               teams = new List<string>(); 
+               categories = new List<string>();
+               
+               dbdir = System.IO.Path.Combine (configDirectory, "db");
+               if (Directory.Exists (dbdir)) {
+                       foreach (string file in Directory.GetFiles (dbdir)) {
+                               if (file.EndsWith ("1.db")) {
+                                       dbs.Add (file);
+                               }
+                       }
+               }
+               
+               templatesdir = System.IO.Path.Combine (homeDirectory, "templates");
+               if (Directory.Exists (templatesdir)) {
+                       foreach (string file in Directory.GetFiles (templatesdir)) {
+                               if (file.EndsWith (".lct")) {
+                                       categories.Add (file);
+                               }
+                               if (file.EndsWith (".ltt")) {
+                                       teams.Add (file);
+                               }
+                       }
+               }
+       }
+       
+       void UpdateLabel () {
+               label3.Markup = " <b> Databases </b>: " + dbs.Count + "\n\n" + 
+                       " <b> Analysis templates </b>: " + categories.Count + "\n\n" +
+                               " <b> Teams templates: </b>: " + teams.Count + "\n\n";
+       }
+       
+       protected void OnDeleteEvent (object sender, DeleteEventArgs a)
+       {
+               Application.Quit ();
+               a.RetVal = true;
+       }
+
+       protected void OnButton2Clicked (object sender, EventArgs e)
+       {
+               Application.Quit();
+       }
+       
+       void UpdateText (string t) {
+               buf += t;
+               textview1.Buffer.Text = buf;
+       }
+
+       protected void OnButton1Clicked (object sender, EventArgs e)
+       {
+               string dbdir =  System.IO.Path.Combine (homeDirectory, "db"); 
+               string teamdir =  System.IO.Path.Combine (homeDirectory, "db", "teams"); 
+               string analysisdir =  System.IO.Path.Combine (homeDirectory, "db", "analysis"); 
+               bool withError;
+               MessageDialog d;
+               
+               scrolledwindow1.Visible = true ;
+               label2.Visible = false;
+               label3.Visible = false;
+               withError = false;
+               
+               textview1.Buffer.Text = buf;
+               if (!Directory.Exists (teamdir)) {
+                       UpdateText ("Creating directory " + teamdir + "\n");
+                       Directory.CreateDirectory (teamdir);
+               }
+               if (!Directory.Exists (analysisdir)) {
+                       UpdateText ("Creating directory " + analysisdir + "\n");
+                       Directory.CreateDirectory (analysisdir);
+               }
+               
+               foreach (string f in dbs) {
+                       UpdateText ("Converting dabase " + f + "...");
+                       try {
+                               LongoMatch.Migration.Converter.ConvertDB (f, dbdir);
+                               UpdateText ("OK\n");
+                       } catch (Exception ex) {
+                               UpdateText ("ERROR\n");
+                               UpdateText (ex.ToString ());
+                               withError = true;
+                       }
+               }
+               foreach (string f in teams) {
+                       UpdateText ("Converting team template " + f + "...");
+                       try {
+                               string p = System.IO.Path.Combine (teamdir, System.IO.Path.GetFileName (f));
+                               LongoMatch.Migration.Converter.ConvertTeamTemplate (f, p);
+                               UpdateText ("OK\n");
+                       } catch (Exception ex) {
+                               UpdateText ("ERROR\n");
+                               UpdateText (ex.ToString ());
+                               withError = true;
+                       }
+               }
+               foreach (string f in categories) {
+                       UpdateText ("Converting analysis template " + f + "...");
+                       try {
+                               string p = System.IO.Path.Combine (analysisdir, System.IO.Path.GetFileName 
(f));
+                               LongoMatch.Migration.Converter.ConvertCategories (f, p);
+                               UpdateText ("OK\n");
+                       } catch (Exception ex) {
+                               UpdateText ("ERROR\n");
+                               UpdateText (ex.ToString ());
+                               withError = true;
+                       }
+               }
+               
+               if (!withError) {
+                       d = new MessageDialog (this, DialogFlags.Modal, MessageType.Info,
+                                              ButtonsType.Ok, "Everything migrated correctly!");
+                       d.Run();
+                       Application.Quit();
+               } else {
+                       button1.Visible = false;
+                       d = new MessageDialog (this, DialogFlags.DestroyWithParent, MessageType.Error,
+                                              ButtonsType.Ok, "Some errors where found migrating the old 
content.");
+                       d.Run();
+               }
+       }
+}
diff --git a/LongoMatch.Core/Store/GameUnit.cs b/LongoMatch.Migration/Program.cs
similarity index 66%
copy from LongoMatch.Core/Store/GameUnit.cs
copy to LongoMatch.Migration/Program.cs
index f9ce9b9..8b3a1bd 100644
--- a/LongoMatch.Core/Store/GameUnit.cs
+++ b/LongoMatch.Migration/Program.cs
@@ -1,43 +1,33 @@
-// 
-//  Copyright (C) 2011 andoni
-// 
+//
+//  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.Collections.Generic;
+using Gtk;
 
-namespace LongoMatch.Store
+namespace LongoMatch.Migration
 {
-       [Serializable]
-       public class GameUnit: List<TimelineNode>
+       class MainClass
        {
-               
-               public GameUnit (string name)
+               public static void Main (string[] args)
                {
-                       Name=name;
+                       Application.Init ();
+                       MainWindow win = new MainWindow ();
+                       win.Show ();
+                       Application.Run ();
                }
-               
-               public string Name {
-                       get;
-                       set;
-               }
-               
-               public override string ToString ()
-               {
-                       return string.Format ("[GameUnit: Name={0}]", Name);
-               }       
        }
 }
-
diff --git a/LongoMatch.Migration/Properties/AssemblyInfo.cs b/LongoMatch.Migration/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..a53d252
--- /dev/null
+++ b/LongoMatch.Migration/Properties/AssemblyInfo.cs
@@ -0,0 +1,51 @@
+//
+//  Copyright (C) 2007-2009 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.Reflection;
+using System.Runtime.CompilerServices;
+
+// Information about this assembly is defined by the following
+// attributes.
+//
+// change them to the information which is associated with the assembly
+// you compile.
+
+[assembly: AssemblyTitle("LongoMatch")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("Andoni Morales Alastruey")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// The assembly version has following format :
+//
+// Major.Minor.Build.Revision
+//
+// You can specify all values by your own or you can build default build and revision
+// numbers with the '*' character (the default):
+
+[assembly: AssemblyVersion("0.20.7")]
+
+// The following attributes specify the key for the sign of your assembly. See the
+// .NET Framework documentation for more information about signing.
+// This is not required, if you don't want signing let these attributes like they're.
+[assembly: AssemblyDelaySign(false)]
+[assembly: AssemblyKeyFile("")]
diff --git a/Tests/Core/TestSubcategoriesTemplate.cs b/LongoMatch.Migration/Tests/CateogiresTest.cs
similarity index 55%
copy from Tests/Core/TestSubcategoriesTemplate.cs
copy to LongoMatch.Migration/Tests/CateogiresTest.cs
index 769a25c..cc65853 100644
--- a/Tests/Core/TestSubcategoriesTemplate.cs
+++ b/LongoMatch.Migration/Tests/CateogiresTest.cs
@@ -15,40 +15,32 @@
 //  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 NUnit.Framework;
-using LongoMatch.Common;
-using LongoMatch.Store;
+using System;
+using System.Reflection;
 using LongoMatch.Store.Templates;
-using System.Collections.Generic;
+using LongoMatch.Common;
+using System.IO;
 
-namespace Tests.Core
+namespace LongoMatch.Migration.Tests
 {
        [TestFixture()]
-       public class TestSubcategoriesTemplate
+       public class CateogiresTest
        {
                [Test()]
-               public void TestSerialization ()
+               public void TestCategoriesMigration ()
                {
-                       string tag1="tag1", tag2="tag2";
-                       SubCategoryTemplate t = new SubCategoryTemplate {Name="Test",
-                               AllowMultiple = true, FastTag = true};
-                               
-                       Utils.CheckSerialization (t);
-                       t.Add (tag1);
-                       t.Add (tag2);
-                       Utils.CheckSerialization (t);
+                       var assembly = Assembly.GetExecutingAssembly();
+                       var resourceName = "default.lct";
                        
-                       SubCategoryTemplate newt = Utils.SerializeDeserialize (t);
-                       Assert.AreEqual (t.Name, newt.Name);
-                       Assert.AreEqual (t.AllowMultiple, newt.AllowMultiple);
-                       Assert.AreEqual (t.Count, newt.Count);
-                       Assert.AreEqual (t.FastTag, newt.FastTag);
-                       Assert.AreEqual (t.Count, 2);
-                       Assert.AreEqual (t[0], tag1);
-                       Assert.AreEqual (t[1], tag2);
-               
+                       using (Stream stream = assembly.GetManifestResourceStream(resourceName)) {
+                               Categories cats = SerializableObject.Load<Categories> (stream, 
SerializationType.Binary);
+                               var cstream = new MemoryStream ();
+                               SerializableObject.Save (cats, cstream, SerializationType.Json);
+                               cstream.Seek (0, SeekOrigin.Begin);
+                               var jsonString = new StreamReader(cstream).ReadToEnd();
+                               Console.WriteLine (jsonString);
+                       }
                }
        }
-}
-
+}
\ No newline at end of file
diff --git a/Tests/Core/TestSubcategoriesTemplate.cs b/LongoMatch.Migration/Tests/TestProject.cs
similarity index 53%
copy from Tests/Core/TestSubcategoriesTemplate.cs
copy to LongoMatch.Migration/Tests/TestProject.cs
index 769a25c..c4a7d88 100644
--- a/Tests/Core/TestSubcategoriesTemplate.cs
+++ b/LongoMatch.Migration/Tests/TestProject.cs
@@ -15,39 +15,32 @@
 //  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 NUnit.Framework;
-using LongoMatch.Common;
+using System;
+using System.Reflection;
+using System.IO;
 using LongoMatch.Store;
-using LongoMatch.Store.Templates;
-using System.Collections.Generic;
+using LongoMatch.Common;
 
-namespace Tests.Core
+namespace LongoMatch.Migration.Tests
 {
-       [TestFixture()]
-       public class TestSubcategoriesTemplate
+               [TestFixture()]
+       public class TestProject
        {
                [Test()]
-               public void TestSerialization ()
+               public void TestCase ()
                {
-                       string tag1="tag1", tag2="tag2";
-                       SubCategoryTemplate t = new SubCategoryTemplate {Name="Test",
-                               AllowMultiple = true, FastTag = true};
-                               
-                       Utils.CheckSerialization (t);
-                       t.Add (tag1);
-                       t.Add (tag2);
-                       Utils.CheckSerialization (t);
+                       var assembly = Assembly.GetExecutingAssembly();
+                       var resourceName = "project.lgm";
                        
-                       SubCategoryTemplate newt = Utils.SerializeDeserialize (t);
-                       Assert.AreEqual (t.Name, newt.Name);
-                       Assert.AreEqual (t.AllowMultiple, newt.AllowMultiple);
-                       Assert.AreEqual (t.Count, newt.Count);
-                       Assert.AreEqual (t.FastTag, newt.FastTag);
-                       Assert.AreEqual (t.Count, 2);
-                       Assert.AreEqual (t[0], tag1);
-                       Assert.AreEqual (t[1], tag2);
-               
+                       using (Stream stream = assembly.GetManifestResourceStream(resourceName)) {
+                               Project project = SerializableObject.Load<Project> (stream, 
SerializationType.Binary);
+                               var cstream = new MemoryStream ();
+                               SerializableObject.Save (project, cstream, SerializationType.Json);
+                               cstream.Seek (0, SeekOrigin.Begin);
+                               var jsonString = new StreamReader(cstream).ReadToEnd();
+                               Console.WriteLine (jsonString);
+                       }
                }
        }
 }
diff --git a/Tests/Core/TestSubcategoriesTemplate.cs b/LongoMatch.Migration/Tests/TestTeam.cs
similarity index 55%
rename from Tests/Core/TestSubcategoriesTemplate.cs
rename to LongoMatch.Migration/Tests/TestTeam.cs
index 769a25c..0829d55 100644
--- a/Tests/Core/TestSubcategoriesTemplate.cs
+++ b/LongoMatch.Migration/Tests/TestTeam.cs
@@ -15,39 +15,32 @@
 //  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 NUnit.Framework;
-using LongoMatch.Common;
-using LongoMatch.Store;
+using System;
+using System.Reflection;
+using System.IO;
 using LongoMatch.Store.Templates;
-using System.Collections.Generic;
+using LongoMatch.Common;
 
-namespace Tests.Core
+namespace LongoMatch.Migration.Tests
 {
        [TestFixture()]
-       public class TestSubcategoriesTemplate
+       public class TestTeam
        {
                [Test()]
-               public void TestSerialization ()
+               public void TestCase ()
                {
-                       string tag1="tag1", tag2="tag2";
-                       SubCategoryTemplate t = new SubCategoryTemplate {Name="Test",
-                               AllowMultiple = true, FastTag = true};
-                               
-                       Utils.CheckSerialization (t);
-                       t.Add (tag1);
-                       t.Add (tag2);
-                       Utils.CheckSerialization (t);
+                       var assembly = Assembly.GetExecutingAssembly();
+                       var resourceName = "default.ltt";
                        
-                       SubCategoryTemplate newt = Utils.SerializeDeserialize (t);
-                       Assert.AreEqual (t.Name, newt.Name);
-                       Assert.AreEqual (t.AllowMultiple, newt.AllowMultiple);
-                       Assert.AreEqual (t.Count, newt.Count);
-                       Assert.AreEqual (t.FastTag, newt.FastTag);
-                       Assert.AreEqual (t.Count, 2);
-                       Assert.AreEqual (t[0], tag1);
-                       Assert.AreEqual (t[1], tag2);
-               
+                       using (Stream stream = assembly.GetManifestResourceStream(resourceName)) {
+                               TeamTemplate template = SerializableObject.Load<TeamTemplate> (stream, 
SerializationType.Binary);
+                               var cstream = new MemoryStream ();
+                               SerializableObject.Save (template, cstream, SerializationType.Json);
+                               cstream.Seek (0, SeekOrigin.Begin);
+                               var jsonString = new StreamReader(cstream).ReadToEnd();
+                               Console.WriteLine (jsonString);
+                       }
                }
        }
 }
diff --git a/LongoMatch.Migration/gtk-gui/MainWindow.cs b/LongoMatch.Migration/gtk-gui/MainWindow.cs
new file mode 100644
index 0000000..471392c
--- /dev/null
+++ b/LongoMatch.Migration/gtk-gui/MainWindow.cs
@@ -0,0 +1,120 @@
+
+// This file has been generated by the GUI designer. Do not modify.
+public partial class MainWindow
+{
+       private global::Gtk.VBox vbox1;
+       private global::Gtk.VBox vbox2;
+       private global::Gtk.Label label2;
+       private global::Gtk.Label label3;
+       private global::Gtk.ScrolledWindow scrolledwindow1;
+       private global::Gtk.TextView textview1;
+       private global::Gtk.HBox hbox1;
+       private global::Gtk.Button button2;
+       private global::Gtk.Button button1;
+
+       protected virtual void Build ()
+       {
+               global::Stetic.Gui.Initialize (this);
+               // Widget MainWindow
+               this.Name = "MainWindow";
+               this.Title = global::Mono.Unix.Catalog.GetString ("Migration tool");
+               this.WindowPosition = ((global::Gtk.WindowPosition)(4));
+               // Container child MainWindow.Gtk.Container+ContainerChild
+               this.vbox1 = new global::Gtk.VBox ();
+               this.vbox1.Name = "vbox1";
+               this.vbox1.Spacing = 6;
+               // Container child vbox1.Gtk.Box+BoxChild
+               this.vbox2 = new global::Gtk.VBox ();
+               this.vbox2.Name = "vbox2";
+               this.vbox2.Spacing = 6;
+               // Container child vbox2.Gtk.Box+BoxChild
+               this.label2 = new global::Gtk.Label ();
+               this.label2.Name = "label2";
+               this.label2.LabelProp = global::Mono.Unix.Catalog.GetString ("<b> We have found the following 
elements from the old version: </b>");
+               this.label2.UseMarkup = true;
+               this.vbox2.Add (this.label2);
+               global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.label2]));
+               w1.Position = 0;
+               w1.Expand = false;
+               w1.Padding = ((uint)(23));
+               // Container child vbox2.Gtk.Box+BoxChild
+               this.label3 = new global::Gtk.Label ();
+               this.label3.Name = "label3";
+               this.vbox2.Add (this.label3);
+               global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.label3]));
+               w2.Position = 1;
+               w2.Expand = false;
+               // Container child vbox2.Gtk.Box+BoxChild
+               this.scrolledwindow1 = new global::Gtk.ScrolledWindow ();
+               this.scrolledwindow1.CanFocus = true;
+               this.scrolledwindow1.Name = "scrolledwindow1";
+               this.scrolledwindow1.ShadowType = ((global::Gtk.ShadowType)(1));
+               // Container child scrolledwindow1.Gtk.Container+ContainerChild
+               this.textview1 = new global::Gtk.TextView ();
+               this.textview1.CanFocus = true;
+               this.textview1.Name = "textview1";
+               this.scrolledwindow1.Add (this.textview1);
+               this.vbox2.Add (this.scrolledwindow1);
+               global::Gtk.Box.BoxChild w4 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.scrolledwindow1]));
+               w4.Position = 2;
+               this.vbox1.Add (this.vbox2);
+               global::Gtk.Box.BoxChild w5 = ((global::Gtk.Box.BoxChild)(this.vbox1 [this.vbox2]));
+               w5.Position = 0;
+               // Container child vbox1.Gtk.Box+BoxChild
+               this.hbox1 = new global::Gtk.HBox ();
+               this.hbox1.Name = "hbox1";
+               this.hbox1.Spacing = 6;
+               // Container child hbox1.Gtk.Box+BoxChild
+               this.button2 = new global::Gtk.Button ();
+               this.button2.CanFocus = true;
+               this.button2.Name = "button2";
+               this.button2.UseStock = true;
+               this.button2.UseUnderline = true;
+               this.button2.Label = "gtk-close";
+               this.hbox1.Add (this.button2);
+               global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.button2]));
+               w6.Position = 0;
+               w6.Fill = false;
+               // Container child hbox1.Gtk.Box+BoxChild
+               this.button1 = new global::Gtk.Button ();
+               this.button1.CanFocus = true;
+               this.button1.Name = "button1";
+               this.button1.UseUnderline = true;
+               // Container child button1.Gtk.Container+ContainerChild
+               global::Gtk.Alignment w7 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+               // Container child GtkAlignment.Gtk.Container+ContainerChild
+               global::Gtk.HBox w8 = new global::Gtk.HBox ();
+               w8.Spacing = 2;
+               // Container child GtkHBox.Gtk.Container+ContainerChild
+               global::Gtk.Image w9 = new global::Gtk.Image ();
+               w9.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-refresh", 
global::Gtk.IconSize.Menu);
+               w8.Add (w9);
+               // Container child GtkHBox.Gtk.Container+ContainerChild
+               global::Gtk.Label w11 = new global::Gtk.Label ();
+               w11.LabelProp = global::Mono.Unix.Catalog.GetString ("Convert");
+               w11.UseUnderline = true;
+               w8.Add (w11);
+               w7.Add (w8);
+               this.button1.Add (w7);
+               this.hbox1.Add (this.button1);
+               global::Gtk.Box.BoxChild w15 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.button1]));
+               w15.Position = 1;
+               w15.Fill = false;
+               this.vbox1.Add (this.hbox1);
+               global::Gtk.Box.BoxChild w16 = ((global::Gtk.Box.BoxChild)(this.vbox1 [this.hbox1]));
+               w16.Position = 1;
+               w16.Expand = false;
+               w16.Fill = false;
+               this.Add (this.vbox1);
+               if ((this.Child != null)) {
+                       this.Child.ShowAll ();
+               }
+               this.DefaultWidth = 664;
+               this.DefaultHeight = 285;
+               this.scrolledwindow1.Hide ();
+               this.Show ();
+               this.DeleteEvent += new global::Gtk.DeleteEventHandler (this.OnDeleteEvent);
+               this.button2.Clicked += new global::System.EventHandler (this.OnButton2Clicked);
+               this.button1.Clicked += new global::System.EventHandler (this.OnButton1Clicked);
+       }
+}
diff --git a/LongoMatch.Migration/gtk-gui/generated.cs b/LongoMatch.Migration/gtk-gui/generated.cs
new file mode 100644
index 0000000..d608548
--- /dev/null
+++ b/LongoMatch.Migration/gtk-gui/generated.cs
@@ -0,0 +1,63 @@
+
+// This file has been generated by the GUI designer. Do not modify.
+namespace Stetic
+{
+       internal class Gui
+       {
+               private static bool initialized;
+
+               internal static void Initialize (Gtk.Widget iconRenderer)
+               {
+                       if ((Stetic.Gui.initialized == false)) {
+                               Stetic.Gui.initialized = true;
+                       }
+               }
+       }
+
+       internal class IconLoader
+       {
+               public static Gdk.Pixbuf LoadIcon (Gtk.Widget widget, string name, Gtk.IconSize size)
+               {
+                       Gdk.Pixbuf res = widget.RenderIcon (name, size, null);
+                       if ((res != null)) {
+                               return res;
+                       } else {
+                               int sz;
+                               int sy;
+                               global::Gtk.Icon.SizeLookup (size, out  sz, out  sy);
+                               try {
+                                       return Gtk.IconTheme.Default.LoadIcon (name, sz, 0);
+                               } catch (System.Exception) {
+                                       if ((name != "gtk-missing-image")) {
+                                               return Stetic.IconLoader.LoadIcon (widget, 
"gtk-missing-image", size);
+                                       } else {
+                                               Gdk.Pixmap pmap = new Gdk.Pixmap 
(Gdk.Screen.Default.RootWindow, sz, sz);
+                                               Gdk.GC gc = new Gdk.GC (pmap);
+                                               gc.RgbFgColor = new Gdk.Color (255, 255, 255);
+                                               pmap.DrawRectangle (gc, true, 0, 0, sz, sz);
+                                               gc.RgbFgColor = new Gdk.Color (0, 0, 0);
+                                               pmap.DrawRectangle (gc, false, 0, 0, (sz - 1), (sz - 1));
+                                               gc.SetLineAttributes (3, Gdk.LineStyle.Solid, 
Gdk.CapStyle.Round, Gdk.JoinStyle.Round);
+                                               gc.RgbFgColor = new Gdk.Color (255, 0, 0);
+                                               pmap.DrawLine (gc, (sz / 4), (sz / 4), ((sz - 1) - (sz / 4)), 
((sz - 1) - (sz / 4)));
+                                               pmap.DrawLine (gc, ((sz - 1) - (sz / 4)), (sz / 4), (sz / 4), 
((sz - 1) - (sz / 4)));
+                                               return Gdk.Pixbuf.FromDrawable (pmap, pmap.Colormap, 0, 0, 0, 
0, sz, sz);
+                                       }
+                               }
+                       }
+               }
+       }
+
+       internal class ActionGroups
+       {
+               public static Gtk.ActionGroup GetActionGroup (System.Type type)
+               {
+                       return Stetic.ActionGroups.GetActionGroup (type.FullName);
+               }
+
+               public static Gtk.ActionGroup GetActionGroup (string name)
+               {
+                       return null;
+               }
+       }
+}
diff --git a/LongoMatch.Migration/gtk-gui/gui.stetic b/LongoMatch.Migration/gtk-gui/gui.stetic
new file mode 100644
index 0000000..94900c8
--- /dev/null
+++ b/LongoMatch.Migration/gtk-gui/gui.stetic
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="utf-8"?>
+<stetic-interface>
+  <configuration>
+    <images-root-path>..</images-root-path>
+    <target-gtk-version>2.12</target-gtk-version>
+  </configuration>
+  <import>
+    <widget-library name="../bin/Debug/LongoMatch.exe" internal="true" />
+  </import>
+  <widget class="Gtk.Window" id="MainWindow" design-size="664 285">
+    <property name="MemberName" />
+    <property name="Title" translatable="yes">Migration tool</property>
+    <property name="WindowPosition">CenterOnParent</property>
+    <signal name="DeleteEvent" handler="OnDeleteEvent" />
+    <child>
+      <widget class="Gtk.VBox" id="vbox1">
+        <property name="MemberName" />
+        <property name="Spacing">6</property>
+        <child>
+          <widget class="Gtk.VBox" id="vbox2">
+            <property name="MemberName" />
+            <property name="Spacing">6</property>
+            <child>
+              <widget class="Gtk.Label" id="label2">
+                <property name="MemberName" />
+                <property name="LabelProp" translatable="yes">&lt;b&gt; We have found the following elements 
from the old version: &lt;/b&gt;</property>
+                <property name="UseMarkup">True</property>
+              </widget>
+              <packing>
+                <property name="Position">0</property>
+                <property name="AutoSize">False</property>
+                <property name="Expand">False</property>
+                <property name="Padding">23</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.Label" id="label3">
+                <property name="MemberName" />
+              </widget>
+              <packing>
+                <property name="Position">1</property>
+                <property name="AutoSize">False</property>
+                <property name="Expand">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.ScrolledWindow" id="scrolledwindow1">
+                <property name="MemberName" />
+                <property name="Visible">False</property>
+                <property name="CanFocus">True</property>
+                <property name="ShadowType">In</property>
+                <child>
+                  <widget class="Gtk.TextView" id="textview1">
+                    <property name="MemberName" />
+                    <property name="CanFocus">True</property>
+                    <property name="Text" translatable="yes" />
+                  </widget>
+                </child>
+              </widget>
+              <packing>
+                <property name="Position">2</property>
+                <property name="AutoSize">True</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="Position">0</property>
+            <property name="AutoSize">False</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.HBox" id="hbox1">
+            <property name="MemberName" />
+            <property name="Spacing">6</property>
+            <child>
+              <widget class="Gtk.Button" id="button2">
+                <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <property name="UseStock">True</property>
+                <property name="Type">StockItem</property>
+                <property name="StockId">gtk-close</property>
+                <signal name="Clicked" handler="OnButton2Clicked" />
+                <property name="label">gtk-close</property>
+              </widget>
+              <packing>
+                <property name="Position">0</property>
+                <property name="AutoSize">False</property>
+                <property name="Fill">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.Button" id="button1">
+                <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">Convert</property>
+                <property name="UseUnderline">True</property>
+                <signal name="Clicked" handler="OnButton1Clicked" />
+              </widget>
+              <packing>
+                <property name="Position">1</property>
+                <property name="AutoSize">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>
+    </child>
+  </widget>
+</stetic-interface>
\ No newline at end of file
diff --git a/LongoMatch.Migration/test-results/LongoMatch.Migration.mdp-Release-2014-06-06.xml 
b/LongoMatch.Migration/test-results/LongoMatch.Migration.mdp-Release-2014-06-06.xml
new file mode 100644
index 0000000..ddca803
--- /dev/null
+++ b/LongoMatch.Migration/test-results/LongoMatch.Migration.mdp-Release-2014-06-06.xml
@@ -0,0 +1,6219 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TestRecord xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
+  <Tests>
+    <TestRecord Name="LongoMatch">
+      <Results>
+        <UnitTestResult>
+          <TestDate>2014-06-06T20:08:00</TestDate>
+          <Status />
+          <Passed>0</Passed>
+          <Errors>1</Errors>
+          <Failures>0</Failures>
+          <Inconclusive>0</Inconclusive>
+          <NotRunnable>0</NotRunnable>
+          <Skipped>0</Skipped>
+          <Ignored>0</Ignored>
+          <Time />
+          <Message>One or more child tests had errors</Message>
+        </UnitTestResult>
+        <UnitTestResult>
+          <TestDate>2014-06-06T20:09:48</TestDate>
+          <Status />
+          <Passed>0</Passed>
+          <Errors>1</Errors>
+          <Failures>0</Failures>
+          <Inconclusive>0</Inconclusive>
+          <NotRunnable>0</NotRunnable>
+          <Skipped>0</Skipped>
+          <Ignored>0</Ignored>
+          <Time />
+          <Message>One or more child tests had errors</Message>
+        </UnitTestResult>
+        <UnitTestResult>
+          <TestDate>2014-06-06T20:10:11</TestDate>
+          <Status />
+          <Passed>0</Passed>
+          <Errors>1</Errors>
+          <Failures>0</Failures>
+          <Inconclusive>0</Inconclusive>
+          <NotRunnable>0</NotRunnable>
+          <Skipped>0</Skipped>
+          <Ignored>0</Ignored>
+          <Time />
+          <Message>One or more child tests had errors</Message>
+        </UnitTestResult>
+        <UnitTestResult>
+          <TestDate>2014-06-06T20:12:31</TestDate>
+          <Status />
+          <Passed>0</Passed>
+          <Errors>1</Errors>
+          <Failures>0</Failures>
+          <Inconclusive>0</Inconclusive>
+          <NotRunnable>0</NotRunnable>
+          <Skipped>0</Skipped>
+          <Ignored>0</Ignored>
+          <Time />
+          <Message>One or more child tests had errors</Message>
+        </UnitTestResult>
+      </Results>
+      <Tests>
+        <TestRecord Name="Migration">
+          <Results>
+            <UnitTestResult>
+              <TestDate>2014-06-06T20:08:00</TestDate>
+              <Status />
+              <Passed>0</Passed>
+              <Errors>1</Errors>
+              <Failures>0</Failures>
+              <Inconclusive>0</Inconclusive>
+              <NotRunnable>0</NotRunnable>
+              <Skipped>0</Skipped>
+              <Ignored>0</Ignored>
+              <Time />
+              <Message>One or more child tests had errors</Message>
+            </UnitTestResult>
+            <UnitTestResult>
+              <TestDate>2014-06-06T20:09:48</TestDate>
+              <Status />
+              <Passed>0</Passed>
+              <Errors>1</Errors>
+              <Failures>0</Failures>
+              <Inconclusive>0</Inconclusive>
+              <NotRunnable>0</NotRunnable>
+              <Skipped>0</Skipped>
+              <Ignored>0</Ignored>
+              <Time />
+              <Message>One or more child tests had errors</Message>
+            </UnitTestResult>
+            <UnitTestResult>
+              <TestDate>2014-06-06T20:10:11</TestDate>
+              <Status />
+              <Passed>0</Passed>
+              <Errors>1</Errors>
+              <Failures>0</Failures>
+              <Inconclusive>0</Inconclusive>
+              <NotRunnable>0</NotRunnable>
+              <Skipped>0</Skipped>
+              <Ignored>0</Ignored>
+              <Time />
+              <Message>One or more child tests had errors</Message>
+            </UnitTestResult>
+            <UnitTestResult>
+              <TestDate>2014-06-06T20:12:31</TestDate>
+              <Status />
+              <Passed>0</Passed>
+              <Errors>1</Errors>
+              <Failures>0</Failures>
+              <Inconclusive>0</Inconclusive>
+              <NotRunnable>0</NotRunnable>
+              <Skipped>0</Skipped>
+              <Ignored>0</Ignored>
+              <Time />
+              <Message>One or more child tests had errors</Message>
+            </UnitTestResult>
+            <UnitTestResult>
+              <TestDate>2014-06-06T20:12:36</TestDate>
+              <Status />
+              <Passed>0</Passed>
+              <Errors>1</Errors>
+              <Failures>0</Failures>
+              <Inconclusive>0</Inconclusive>
+              <NotRunnable>0</NotRunnable>
+              <Skipped>0</Skipped>
+              <Ignored>0</Ignored>
+              <Time />
+              <Message>One or more child tests had errors</Message>
+            </UnitTestResult>
+          </Results>
+          <Tests>
+            <TestRecord Name="Tests">
+              <Results>
+                <UnitTestResult>
+                  <TestDate>2014-06-06T20:08:00</TestDate>
+                  <Status />
+                  <Passed>0</Passed>
+                  <Errors>1</Errors>
+                  <Failures>0</Failures>
+                  <Inconclusive>0</Inconclusive>
+                  <NotRunnable>0</NotRunnable>
+                  <Skipped>0</Skipped>
+                  <Ignored>0</Ignored>
+                  <Time />
+                  <Message>One or more child tests had errors</Message>
+                </UnitTestResult>
+                <UnitTestResult>
+                  <TestDate>2014-06-06T20:09:48</TestDate>
+                  <Status />
+                  <Passed>0</Passed>
+                  <Errors>1</Errors>
+                  <Failures>0</Failures>
+                  <Inconclusive>0</Inconclusive>
+                  <NotRunnable>0</NotRunnable>
+                  <Skipped>0</Skipped>
+                  <Ignored>0</Ignored>
+                  <Time />
+                  <Message>One or more child tests had errors</Message>
+                </UnitTestResult>
+                <UnitTestResult>
+                  <TestDate>2014-06-06T20:10:11</TestDate>
+                  <Status />
+                  <Passed>0</Passed>
+                  <Errors>1</Errors>
+                  <Failures>0</Failures>
+                  <Inconclusive>0</Inconclusive>
+                  <NotRunnable>0</NotRunnable>
+                  <Skipped>0</Skipped>
+                  <Ignored>0</Ignored>
+                  <Time />
+                  <Message>One or more child tests had errors</Message>
+                </UnitTestResult>
+                <UnitTestResult>
+                  <TestDate>2014-06-06T20:12:31</TestDate>
+                  <Status />
+                  <Passed>0</Passed>
+                  <Errors>1</Errors>
+                  <Failures>0</Failures>
+                  <Inconclusive>0</Inconclusive>
+                  <NotRunnable>0</NotRunnable>
+                  <Skipped>0</Skipped>
+                  <Ignored>0</Ignored>
+                  <Time />
+                  <Message>One or more child tests had errors</Message>
+                </UnitTestResult>
+                <UnitTestResult>
+                  <TestDate>2014-06-06T20:12:36</TestDate>
+                  <Status />
+                  <Passed>0</Passed>
+                  <Errors>1</Errors>
+                  <Failures>0</Failures>
+                  <Inconclusive>0</Inconclusive>
+                  <NotRunnable>0</NotRunnable>
+                  <Skipped>0</Skipped>
+                  <Ignored>0</Ignored>
+                  <Time />
+                  <Message>One or more child tests had errors</Message>
+                </UnitTestResult>
+              </Results>
+              <Tests>
+                <TestRecord Name="CateogiresTest">
+                  <Results>
+                    <UnitTestResult>
+                      <TestDate>2014-06-06T20:08:00</TestDate>
+                      <Status />
+                      <Passed>0</Passed>
+                      <Errors>1</Errors>
+                      <Failures>0</Failures>
+                      <Inconclusive>0</Inconclusive>
+                      <NotRunnable>0</NotRunnable>
+                      <Skipped>0</Skipped>
+                      <Ignored>0</Ignored>
+                      <Time />
+                      <Message>One or more child tests had errors</Message>
+                    </UnitTestResult>
+                    <UnitTestResult>
+                      <TestDate>2014-06-06T20:09:48</TestDate>
+                      <Status />
+                      <Passed>0</Passed>
+                      <Errors>1</Errors>
+                      <Failures>0</Failures>
+                      <Inconclusive>0</Inconclusive>
+                      <NotRunnable>0</NotRunnable>
+                      <Skipped>0</Skipped>
+                      <Ignored>0</Ignored>
+                      <Time />
+                      <Message>One or more child tests had errors</Message>
+                    </UnitTestResult>
+                    <UnitTestResult>
+                      <TestDate>2014-06-06T20:10:11</TestDate>
+                      <Status />
+                      <Passed>0</Passed>
+                      <Errors>1</Errors>
+                      <Failures>0</Failures>
+                      <Inconclusive>0</Inconclusive>
+                      <NotRunnable>0</NotRunnable>
+                      <Skipped>0</Skipped>
+                      <Ignored>0</Ignored>
+                      <Time />
+                      <Message>One or more child tests had errors</Message>
+                    </UnitTestResult>
+                    <UnitTestResult>
+                      <TestDate>2014-06-06T20:12:31</TestDate>
+                      <Status />
+                      <Passed>0</Passed>
+                      <Errors>1</Errors>
+                      <Failures>0</Failures>
+                      <Inconclusive>0</Inconclusive>
+                      <NotRunnable>0</NotRunnable>
+                      <Skipped>0</Skipped>
+                      <Ignored>0</Ignored>
+                      <Time />
+                      <Message>One or more child tests had errors</Message>
+                    </UnitTestResult>
+                    <UnitTestResult>
+                      <TestDate>2014-06-06T20:12:36</TestDate>
+                      <Status />
+                      <Passed>0</Passed>
+                      <Errors>1</Errors>
+                      <Failures>0</Failures>
+                      <Inconclusive>0</Inconclusive>
+                      <NotRunnable>0</NotRunnable>
+                      <Skipped>0</Skipped>
+                      <Ignored>0</Ignored>
+                      <Time />
+                      <Message>One or more child tests had errors</Message>
+                    </UnitTestResult>
+                  </Results>
+                  <Tests>
+                    <TestRecord Name="TestCategoriesMigration">
+                      <Results>
+                        <UnitTestResult>
+                          <TestDate>2014-06-06T20:08:00</TestDate>
+                          <Status />
+                          <Passed>0</Passed>
+                          <Errors>1</Errors>
+                          <Failures>0</Failures>
+                          <Inconclusive>0</Inconclusive>
+                          <NotRunnable>0</NotRunnable>
+                          <Skipped>0</Skipped>
+                          <Ignored>0</Ignored>
+                          <Time />
+                          <Message>System.Runtime.Serialization.SerializationException : Couldn't find 
assembly 'LongoMatch'
+  ----&gt; System.IO.FileNotFoundException : Could not load file or assembly 'LongoMatch' or one of its 
dependencies. The system cannot find the file specified.</Message>
+                          <StackTrace>  at 
System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetDeserializationType (Int64 assemblyId, 
System.String className, Boolean throwOnError) [0x00059] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:866
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetDeserializationType (Int64 assemblyId, 
System.String className) [0x00000] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:846
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadTypeMetadata (System.IO.BinaryReader 
reader, Boolean isRuntimeObject, Boolean hasTypeInfo) [0x000bd] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:643
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObjectInstance (System.IO.BinaryReader 
reader, Boolean isRuntimeObject, Boolean hasTypeInfo, System.Int64&amp; objectId, System.Object&amp; value, 
System.Runtime.Serialization.SerializationInfo&amp; info) [0x0000a] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:265
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObject (BinaryElement element, 
System.IO.BinaryReader reader, System.Int64&amp; objectId, System.Object&amp; value, 
System.Runtime.Serialization.SerializationInfo&amp; info) [0x0009b] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:191
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObject (BinaryElement element, 
System.IO.BinaryReader reader, System.Int64&amp; objectId, System.Object&amp; value, 
System.Runtime.Serialization.SerializationInfo&amp; info) [0x00103] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:219
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadNextObject (BinaryElement element, 
System.IO.BinaryReader reader) [0x00020] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:126
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObjectGraph (BinaryElement elem, 
System.IO.BinaryReader reader, Boolean readHeaders, System.Object&amp; result, 
System.Runtime.Remoting.Messaging.Header[]&amp; headers) [0x00004] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:100
 
+  at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.NoCheckDeserialize (System.IO.Stream 
serializationStream, System.Runtime.Remoting.Messaging.HeaderHandler handler) [0x0007a] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryFormatter.cs:177
 
+  at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO.Stream 
serializationStream) [0x00000] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryFormatter.cs:134
 
+  at LongoMatch.Common.SerializableObject.Load[Categories] (System.IO.Stream stream, SerializationType type) 
[0x00020] in /home/andoni/git/longomatch-rework/LongoMatch.Migration/Common/SerializableObject.cs:68 
+  at LongoMatch.Migration.Tests.CateogiresTest.TestCategoriesMigration () [0x00018] in 
/home/andoni/git/longomatch-rework/LongoMatch.Migration/Tests/CateogiresTest.cs:37 
+  at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke 
(System.Reflection.MonoMethod,object,object[],System.Exception&amp;)
+  at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, 
System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) 
[0x00054] in /build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Reflection/MonoMethod.cs:230 
+--FileNotFoundException
+  at System.AppDomain.Load (System.String assemblyString, System.Security.Policy.Evidence assemblySecurity, 
Boolean refonly) [0x00045] in /build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System/AppDomain.cs:803 
+  at System.AppDomain.Load (System.String assemblyString) [0x00000] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System/AppDomain.cs:781 
+  at (wrapper remoting-invoke-with-check) System.AppDomain:Load (string)
+  at System.Reflection.Assembly.Load (System.String assemblyString) [0x00000] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Reflection/Assembly.cs:541 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetDeserializationType (Int64 assemblyId, 
System.String className, Boolean throwOnError) [0x0003e] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:862
 </StackTrace>
+                          <ConsoleOutput />
+                          <ConsoleError />
+                        </UnitTestResult>
+                        <UnitTestResult>
+                          <TestDate>2014-06-06T20:09:48</TestDate>
+                          <Status />
+                          <Passed>0</Passed>
+                          <Errors>1</Errors>
+                          <Failures>0</Failures>
+                          <Inconclusive>0</Inconclusive>
+                          <NotRunnable>0</NotRunnable>
+                          <Skipped>0</Skipped>
+                          <Ignored>0</Ignored>
+                          <Time />
+                          <Message>System.Runtime.Serialization.SerializationException : Couldn't find 
assembly 'LongoMatch'
+  ----&gt; System.IO.FileNotFoundException : Could not load file or assembly 'LongoMatch' or one of its 
dependencies. The system cannot find the file specified.</Message>
+                          <StackTrace>  at 
System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetDeserializationType (Int64 assemblyId, 
System.String className, Boolean throwOnError) [0x00059] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:866
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetDeserializationType (Int64 assemblyId, 
System.String className) [0x00000] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:846
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadTypeMetadata (System.IO.BinaryReader 
reader, Boolean isRuntimeObject, Boolean hasTypeInfo) [0x000bd] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:643
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObjectInstance (System.IO.BinaryReader 
reader, Boolean isRuntimeObject, Boolean hasTypeInfo, System.Int64&amp; objectId, System.Object&amp; value, 
System.Runtime.Serialization.SerializationInfo&amp; info) [0x0000a] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:265
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObject (BinaryElement element, 
System.IO.BinaryReader reader, System.Int64&amp; objectId, System.Object&amp; value, 
System.Runtime.Serialization.SerializationInfo&amp; info) [0x0009b] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:191
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObject (BinaryElement element, 
System.IO.BinaryReader reader, System.Int64&amp; objectId, System.Object&amp; value, 
System.Runtime.Serialization.SerializationInfo&amp; info) [0x00103] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:219
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadNextObject (BinaryElement element, 
System.IO.BinaryReader reader) [0x00020] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:126
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObjectGraph (BinaryElement elem, 
System.IO.BinaryReader reader, Boolean readHeaders, System.Object&amp; result, 
System.Runtime.Remoting.Messaging.Header[]&amp; headers) [0x00004] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:100
 
+  at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.NoCheckDeserialize (System.IO.Stream 
serializationStream, System.Runtime.Remoting.Messaging.HeaderHandler handler) [0x0007a] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryFormatter.cs:177
 
+  at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO.Stream 
serializationStream) [0x00000] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryFormatter.cs:134
 
+  at LongoMatch.Common.SerializableObject.Load[Categories] (System.IO.Stream stream, SerializationType type) 
[0x00020] in /home/andoni/git/longomatch-rework/LongoMatch.Migration/Common/SerializableObject.cs:68 
+  at LongoMatch.Migration.Tests.CateogiresTest.TestCategoriesMigration () [0x00018] in 
/home/andoni/git/longomatch-rework/LongoMatch.Migration/Tests/CateogiresTest.cs:37 
+  at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke 
(System.Reflection.MonoMethod,object,object[],System.Exception&amp;)
+  at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, 
System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) 
[0x00054] in /build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Reflection/MonoMethod.cs:230 
+--FileNotFoundException
+  at System.AppDomain.Load (System.String assemblyString, System.Security.Policy.Evidence assemblySecurity, 
Boolean refonly) [0x00045] in /build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System/AppDomain.cs:803 
+  at System.AppDomain.Load (System.String assemblyString) [0x00000] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System/AppDomain.cs:781 
+  at (wrapper remoting-invoke-with-check) System.AppDomain:Load (string)
+  at System.Reflection.Assembly.Load (System.String assemblyString) [0x00000] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Reflection/Assembly.cs:541 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetDeserializationType (Int64 assemblyId, 
System.String className, Boolean throwOnError) [0x0003e] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:862
 </StackTrace>
+                          <ConsoleOutput />
+                          <ConsoleError />
+                        </UnitTestResult>
+                        <UnitTestResult>
+                          <TestDate>2014-06-06T20:10:11</TestDate>
+                          <Status />
+                          <Passed>0</Passed>
+                          <Errors>1</Errors>
+                          <Failures>0</Failures>
+                          <Inconclusive>0</Inconclusive>
+                          <NotRunnable>0</NotRunnable>
+                          <Skipped>0</Skipped>
+                          <Ignored>0</Ignored>
+                          <Time />
+                          <Message>System.Runtime.Serialization.SerializationException : Couldn't find 
assembly 'LongoMatch'
+  ----&gt; System.IO.FileNotFoundException : Could not load file or assembly 'LongoMatch' or one of its 
dependencies. The system cannot find the file specified.</Message>
+                          <StackTrace>  at 
System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetDeserializationType (Int64 assemblyId, 
System.String className, Boolean throwOnError) [0x00059] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:866
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetDeserializationType (Int64 assemblyId, 
System.String className) [0x00000] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:846
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadTypeMetadata (System.IO.BinaryReader 
reader, Boolean isRuntimeObject, Boolean hasTypeInfo) [0x000bd] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:643
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObjectInstance (System.IO.BinaryReader 
reader, Boolean isRuntimeObject, Boolean hasTypeInfo, System.Int64&amp; objectId, System.Object&amp; value, 
System.Runtime.Serialization.SerializationInfo&amp; info) [0x0000a] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:265
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObject (BinaryElement element, 
System.IO.BinaryReader reader, System.Int64&amp; objectId, System.Object&amp; value, 
System.Runtime.Serialization.SerializationInfo&amp; info) [0x0009b] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:191
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObject (BinaryElement element, 
System.IO.BinaryReader reader, System.Int64&amp; objectId, System.Object&amp; value, 
System.Runtime.Serialization.SerializationInfo&amp; info) [0x00103] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:219
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadNextObject (BinaryElement element, 
System.IO.BinaryReader reader) [0x00020] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:126
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObjectGraph (BinaryElement elem, 
System.IO.BinaryReader reader, Boolean readHeaders, System.Object&amp; result, 
System.Runtime.Remoting.Messaging.Header[]&amp; headers) [0x00004] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:100
 
+  at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.NoCheckDeserialize (System.IO.Stream 
serializationStream, System.Runtime.Remoting.Messaging.HeaderHandler handler) [0x0007a] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryFormatter.cs:177
 
+  at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO.Stream 
serializationStream) [0x00000] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryFormatter.cs:134
 
+  at LongoMatch.Common.SerializableObject.Load[Categories] (System.IO.Stream stream, SerializationType type) 
[0x00020] in /home/andoni/git/longomatch-rework/LongoMatch.Migration/Common/SerializableObject.cs:68 
+  at LongoMatch.Migration.Tests.CateogiresTest.TestCategoriesMigration () [0x00018] in 
/home/andoni/git/longomatch-rework/LongoMatch.Migration/Tests/CateogiresTest.cs:37 
+  at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke 
(System.Reflection.MonoMethod,object,object[],System.Exception&amp;)
+  at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, 
System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) 
[0x00054] in /build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Reflection/MonoMethod.cs:230 
+--FileNotFoundException
+  at System.AppDomain.Load (System.String assemblyString, System.Security.Policy.Evidence assemblySecurity, 
Boolean refonly) [0x00045] in /build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System/AppDomain.cs:803 
+  at System.AppDomain.Load (System.String assemblyString) [0x00000] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System/AppDomain.cs:781 
+  at (wrapper remoting-invoke-with-check) System.AppDomain:Load (string)
+  at System.Reflection.Assembly.Load (System.String assemblyString) [0x00000] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Reflection/Assembly.cs:541 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetDeserializationType (Int64 assemblyId, 
System.String className, Boolean throwOnError) [0x0003e] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:862
 </StackTrace>
+                          <ConsoleOutput />
+                          <ConsoleError />
+                        </UnitTestResult>
+                        <UnitTestResult>
+                          <TestDate>2014-06-06T20:12:31</TestDate>
+                          <Status />
+                          <Passed>0</Passed>
+                          <Errors>1</Errors>
+                          <Failures>0</Failures>
+                          <Inconclusive>0</Inconclusive>
+                          <NotRunnable>0</NotRunnable>
+                          <Skipped>0</Skipped>
+                          <Ignored>0</Ignored>
+                          <Time />
+                          <Message>System.Runtime.Serialization.SerializationException : Couldn't find 
assembly 'LongoMatch'
+  ----&gt; System.IO.FileNotFoundException : Could not load file or assembly 'LongoMatch' or one of its 
dependencies. The system cannot find the file specified.</Message>
+                          <StackTrace>  at 
System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetDeserializationType (Int64 assemblyId, 
System.String className, Boolean throwOnError) [0x00059] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:866
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetDeserializationType (Int64 assemblyId, 
System.String className) [0x00000] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:846
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadTypeMetadata (System.IO.BinaryReader 
reader, Boolean isRuntimeObject, Boolean hasTypeInfo) [0x000bd] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:643
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObjectInstance (System.IO.BinaryReader 
reader, Boolean isRuntimeObject, Boolean hasTypeInfo, System.Int64&amp; objectId, System.Object&amp; value, 
System.Runtime.Serialization.SerializationInfo&amp; info) [0x0000a] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:265
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObject (BinaryElement element, 
System.IO.BinaryReader reader, System.Int64&amp; objectId, System.Object&amp; value, 
System.Runtime.Serialization.SerializationInfo&amp; info) [0x0009b] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:191
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObject (BinaryElement element, 
System.IO.BinaryReader reader, System.Int64&amp; objectId, System.Object&amp; value, 
System.Runtime.Serialization.SerializationInfo&amp; info) [0x00103] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:219
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadNextObject (BinaryElement element, 
System.IO.BinaryReader reader) [0x00020] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:126
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObjectGraph (BinaryElement elem, 
System.IO.BinaryReader reader, Boolean readHeaders, System.Object&amp; result, 
System.Runtime.Remoting.Messaging.Header[]&amp; headers) [0x00004] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:100
 
+  at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.NoCheckDeserialize (System.IO.Stream 
serializationStream, System.Runtime.Remoting.Messaging.HeaderHandler handler) [0x0007a] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryFormatter.cs:177
 
+  at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO.Stream 
serializationStream) [0x00000] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryFormatter.cs:134
 
+  at LongoMatch.Common.SerializableObject.Load[Categories] (System.IO.Stream stream, SerializationType type) 
[0x00020] in /home/andoni/git/longomatch-rework/LongoMatch.Migration/Common/SerializableObject.cs:68 
+  at LongoMatch.Migration.Tests.CateogiresTest.TestCategoriesMigration () [0x00018] in 
/home/andoni/git/longomatch-rework/LongoMatch.Migration/Tests/CateogiresTest.cs:37 
+  at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke 
(System.Reflection.MonoMethod,object,object[],System.Exception&amp;)
+  at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, 
System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) 
[0x00054] in /build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Reflection/MonoMethod.cs:230 
+--FileNotFoundException
+  at System.AppDomain.Load (System.String assemblyString, System.Security.Policy.Evidence assemblySecurity, 
Boolean refonly) [0x00045] in /build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System/AppDomain.cs:803 
+  at System.AppDomain.Load (System.String assemblyString) [0x00000] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System/AppDomain.cs:781 
+  at (wrapper remoting-invoke-with-check) System.AppDomain:Load (string)
+  at System.Reflection.Assembly.Load (System.String assemblyString) [0x00000] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Reflection/Assembly.cs:541 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetDeserializationType (Int64 assemblyId, 
System.String className, Boolean throwOnError) [0x0003e] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:862
 </StackTrace>
+                          <ConsoleOutput />
+                          <ConsoleError />
+                        </UnitTestResult>
+                        <UnitTestResult>
+                          <TestDate>2014-06-06T20:12:36</TestDate>
+                          <Status />
+                          <Passed>0</Passed>
+                          <Errors>1</Errors>
+                          <Failures>0</Failures>
+                          <Inconclusive>0</Inconclusive>
+                          <NotRunnable>0</NotRunnable>
+                          <Skipped>0</Skipped>
+                          <Ignored>0</Ignored>
+                          <Time />
+                          <Message>System.Runtime.Serialization.SerializationException : Couldn't find 
assembly 'LongoMatch'
+  ----&gt; System.IO.FileNotFoundException : Could not load file or assembly 'LongoMatch' or one of its 
dependencies. The system cannot find the file specified.</Message>
+                          <StackTrace>  at 
System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetDeserializationType (Int64 assemblyId, 
System.String className, Boolean throwOnError) [0x00059] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:866
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetDeserializationType (Int64 assemblyId, 
System.String className) [0x00000] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:846
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadTypeMetadata (System.IO.BinaryReader 
reader, Boolean isRuntimeObject, Boolean hasTypeInfo) [0x000bd] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:643
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObjectInstance (System.IO.BinaryReader 
reader, Boolean isRuntimeObject, Boolean hasTypeInfo, System.Int64&amp; objectId, System.Object&amp; value, 
System.Runtime.Serialization.SerializationInfo&amp; info) [0x0000a] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:265
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObject (BinaryElement element, 
System.IO.BinaryReader reader, System.Int64&amp; objectId, System.Object&amp; value, 
System.Runtime.Serialization.SerializationInfo&amp; info) [0x0009b] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:191
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObject (BinaryElement element, 
System.IO.BinaryReader reader, System.Int64&amp; objectId, System.Object&amp; value, 
System.Runtime.Serialization.SerializationInfo&amp; info) [0x00103] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:219
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadNextObject (BinaryElement element, 
System.IO.BinaryReader reader) [0x00020] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:126
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObjectGraph (BinaryElement elem, 
System.IO.BinaryReader reader, Boolean readHeaders, System.Object&amp; result, 
System.Runtime.Remoting.Messaging.Header[]&amp; headers) [0x00004] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:100
 
+  at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.NoCheckDeserialize (System.IO.Stream 
serializationStream, System.Runtime.Remoting.Messaging.HeaderHandler handler) [0x0007a] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryFormatter.cs:177
 
+  at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO.Stream 
serializationStream) [0x00000] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryFormatter.cs:134
 
+  at LongoMatch.Common.SerializableObject.Load[Categories] (System.IO.Stream stream, SerializationType type) 
[0x00020] in /home/andoni/git/longomatch-rework/LongoMatch.Migration/Common/SerializableObject.cs:68 
+  at LongoMatch.Migration.Tests.CateogiresTest.TestCategoriesMigration () [0x00018] in 
/home/andoni/git/longomatch-rework/LongoMatch.Migration/Tests/CateogiresTest.cs:37 
+  at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke 
(System.Reflection.MonoMethod,object,object[],System.Exception&amp;)
+  at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, 
System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) 
[0x00054] in /build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Reflection/MonoMethod.cs:230 
+--FileNotFoundException
+  at System.AppDomain.Load (System.String assemblyString, System.Security.Policy.Evidence assemblySecurity, 
Boolean refonly) [0x00045] in /build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System/AppDomain.cs:803 
+  at System.AppDomain.Load (System.String assemblyString) [0x00000] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System/AppDomain.cs:781 
+  at (wrapper remoting-invoke-with-check) System.AppDomain:Load (string)
+  at System.Reflection.Assembly.Load (System.String assemblyString) [0x00000] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Reflection/Assembly.cs:541 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetDeserializationType (Int64 assemblyId, 
System.String className, Boolean throwOnError) [0x0003e] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:862
 </StackTrace>
+                          <ConsoleOutput />
+                          <ConsoleError />
+                        </UnitTestResult>
+                        <UnitTestResult>
+                          <TestDate>2014-06-06T20:12:43</TestDate>
+                          <Status />
+                          <Passed>0</Passed>
+                          <Errors>1</Errors>
+                          <Failures>0</Failures>
+                          <Inconclusive>0</Inconclusive>
+                          <NotRunnable>0</NotRunnable>
+                          <Skipped>0</Skipped>
+                          <Ignored>0</Ignored>
+                          <Time />
+                          <Message>System.Runtime.Serialization.SerializationException : Couldn't find 
assembly 'LongoMatch'
+  ----&gt; System.IO.FileNotFoundException : Could not load file or assembly 'LongoMatch' or one of its 
dependencies. The system cannot find the file specified.</Message>
+                          <StackTrace>  at 
System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetDeserializationType (Int64 assemblyId, 
System.String className, Boolean throwOnError) [0x00059] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:866
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetDeserializationType (Int64 assemblyId, 
System.String className) [0x00000] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:846
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadTypeMetadata (System.IO.BinaryReader 
reader, Boolean isRuntimeObject, Boolean hasTypeInfo) [0x000bd] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:643
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObjectInstance (System.IO.BinaryReader 
reader, Boolean isRuntimeObject, Boolean hasTypeInfo, System.Int64&amp; objectId, System.Object&amp; value, 
System.Runtime.Serialization.SerializationInfo&amp; info) [0x0000a] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:265
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObject (BinaryElement element, 
System.IO.BinaryReader reader, System.Int64&amp; objectId, System.Object&amp; value, 
System.Runtime.Serialization.SerializationInfo&amp; info) [0x0009b] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:191
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObject (BinaryElement element, 
System.IO.BinaryReader reader, System.Int64&amp; objectId, System.Object&amp; value, 
System.Runtime.Serialization.SerializationInfo&amp; info) [0x00103] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:219
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadNextObject (BinaryElement element, 
System.IO.BinaryReader reader) [0x00020] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:126
 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObjectGraph (BinaryElement elem, 
System.IO.BinaryReader reader, Boolean readHeaders, System.Object&amp; result, 
System.Runtime.Remoting.Messaging.Header[]&amp; headers) [0x00004] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:100
 
+  at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.NoCheckDeserialize (System.IO.Stream 
serializationStream, System.Runtime.Remoting.Messaging.HeaderHandler handler) [0x0007a] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryFormatter.cs:177
 
+  at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO.Stream 
serializationStream) [0x00000] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryFormatter.cs:134
 
+  at LongoMatch.Common.SerializableObject.Load[Categories] (System.IO.Stream stream, SerializationType type) 
[0x00020] in /home/andoni/git/longomatch-rework/LongoMatch.Migration/Common/SerializableObject.cs:68 
+  at LongoMatch.Migration.Tests.CateogiresTest.TestCategoriesMigration () [0x00018] in 
/home/andoni/git/longomatch-rework/LongoMatch.Migration/Tests/CateogiresTest.cs:37 
+  at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke 
(System.Reflection.MonoMethod,object,object[],System.Exception&amp;)
+  at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, 
System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) 
[0x00054] in /build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Reflection/MonoMethod.cs:230 
+--FileNotFoundException
+  at System.AppDomain.Load (System.String assemblyString, System.Security.Policy.Evidence assemblySecurity, 
Boolean refonly) [0x00045] in /build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System/AppDomain.cs:803 
+  at System.AppDomain.Load (System.String assemblyString) [0x00000] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System/AppDomain.cs:781 
+  at (wrapper remoting-invoke-with-check) System.AppDomain:Load (string)
+  at System.Reflection.Assembly.Load (System.String assemblyString) [0x00000] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Reflection/Assembly.cs:541 
+  at System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetDeserializationType (Int64 assemblyId, 
System.String className, Boolean throwOnError) [0x0003e] in 
/build/buildd/mono-3.2.8+dfsg/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:862
 </StackTrace>
+                          <ConsoleOutput />
+                          <ConsoleError />
+                        </UnitTestResult>
+                        <UnitTestResult>
+                          <TestDate>2014-06-06T20:15:14</TestDate>
+                          <Status />
+                          <Passed>1</Passed>
+                          <Errors>0</Errors>
+                          <Failures>0</Failures>
+                          <Inconclusive>0</Inconclusive>
+                          <NotRunnable>0</NotRunnable>
+                          <Skipped>0</Skipped>
+                          <Ignored>0</Ignored>
+                          <Time />
+                          <Message>Prueba satisfactoria
+
+Tiempo de ejecución: 0,20 ms</Message>
+                          <ConsoleOutput>{
+  "$id": "1",
+  "$type": "LongoMatch.Store.Templates.Categories, LongoMatch",
+  "Name": "default",
+  "Version": "2.1",
+  "GameUnits": [],
+  "GamePeriods": [
+    "1",
+    "2"
+  ],
+  "Image": null,
+  "FieldBackground": {
+    "$id": "2",
+    "$type": "LongoMatch.Common.Image, LongoMatch",
+    "pngbuf": {
+      "$type": "System.Byte[], mscorlib",
+      "$value": 
"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
 U5ErkJggg=="
+    }
+  },
+  "HalfFieldBackground": {
+    "$id": "3",
+    "$type": "LongoMatch.Common.Image, LongoMatch",
+    "pngbuf": {
+      "$type": "System.Byte[], mscorlib",
+      "$value": 
"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"
+    }
+  },
+  "GoalBackground": {
+    "$id": "4",
+    "$type": "LongoMatch.Common.Image, LongoMatch",
+    "pngbuf": {
+      "$type": "System.Byte[], mscorlib",
+      "$value": 
"iVBORw0KGgoAAAANSUhEUgAAAZAAAAEsCAYAAADtt+XCAAAABHNCSVQICAgIfAhkiAAACZpJREFUeJzt2r+rJWcdx/FnZp459+wuqOgfYBEEA4KNlShooyn2DxAEIUm1fYpYioUWAcutoo2Ff0AKtVCLkMpGEBUkXcqkkWT33jPPzFhcVxJ2l/B89ro3V16vZmE5X+Y7v/Z9z+4O5ZO+cutzt14ajsOL2/n2uW3ZbhWeq+k4zKWUsp7vy3XvgvvxWeN+XI9xHh+Ox/Ff+/n+t4f/evi7Uso/SyllKKWUvZT9WrcD4MYZSym3r3sJAG6esZTy7eteAoCbZyylfPG6lwDg5hnLf/4dBAB6jNe9AAA3k4AAEBEQACICAkBEQACICAgAEQEBICIgAEQEBIBIfZbhn+8/e+uqFuHS/VfeuFtKKfd++Zpr+xlw/9X/3I833Y/PAvfjf+f14cd3e2d8AwEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIAJF63QvA/5uLj87r1rahZ6ad2ni6OE09M1vbhtOD8+53+PzDh3PvzOn8VNfWus5pW7ZxOS1d57Tv+3B6cPH0c9ovf3nnN3964RP7PbyY97L3XvNpXdauH6L3
 
tg2tta5rvm97OZ1fdF/zdrHUfe87p3XZxq21vudo24e2LPX1vvVKKc8YkA/ee/92z+fb+Wlqp9Z1w9pp6Z4ppZTlYpnasvQda1mntfNY66lNbek8p6VN66fc5D/+6rcvPn6sdWxL58PR1nFta9dMOy3dM2vrf3BLyR741tZpW/te/LWt09a2+Bv3/VfeuJvOcvX+8vs/P/Z+8PwNpZQf7qX8Ohn+8stfuuJ14Oar89SGadx7ZsZp2mqd1p6ZYRz2eja3vu1KmY+HpXemHmqbau06p2EatjrPXec0DsM+3z489Zz+8fZfXyillK9+62vvfvz3D8ezZRiGrv3qoa7TXLeu/eZxnw9913wcxnJ259h9zQ93zto49D1H9axu9ezQd83ruB9vHdtPvvDT7/dtePkNpGvBj7vz+TsPej4/1rpO89h3w2pdp9o3U0opU53Wepi75qY6rWOdumbqXNfp0Dcz1brWuT7xJj/6yerr3/vG359wrG06PHnuqcc61K3OfX8w1Xne5rO+F78e6lYPfTP/nTv2PfD1ULdD50tSz+ZtPvbvd//Vy28e99587a3eWa7eo4B89+WXHns/eP6e6a+wfvSLe3+4qkW49Cgg3/zBd979tM8CXCf/CwuAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAE
 
BEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASBSr3sB+H9z8dF53do29My0UxtPF6epZ2Zr23B6cN79Dp9/+HDunTmdn+raWtc5bcs2Lqel65z2fR9ODy6efk775S/v/OZPL3xiv4cX81723ms+rcva9UP03rahtdZ1zfdtL6fzi+5r3i6Wuu9957Qu27i11vccbfvQlqW+3rdeKeUZA/LBe+/f7vl8Oz9N7dS6blg7Ld0zpZSyXCxTW5a+Yy3rtHYeaz21qS2d57S0af2Um/zHX/32xcePtY5t6Xw42jqube2aaaele2Zt/Q9uKdkD39o6bWvfi7+2ddraFn/jvv/KG3fTWa7eX37/58feD56/oZTyw72UXyfDX375S1e8Dtx8dZ7aMI17z8w4TVut09ozM4zDXs/m1rddKfPxsPTO1ENtU61d5zRMw1bnueucxmHY59uHp57TP97+6wullPLVb33t3Y///uF4tgzD0LVfPdR1muvWtd887vOh75qPw1jO7hy7r/nhzlkbh77nqJ7VrZ4d+q55HffjrWP7yRd++v2+DS+/gXQt+HF3Pn/nQc/nx1rXaR77blit61T7ZkopZarTWg9z19xUp3WsU9dMnes6HfpmplrXOtcn3uRHP1l9/Xvf+PsTjrVNhyfPPfVYh7rVue8PpjrP23zW9+LXQ93qoW/mv3PHvge+Hup26HxJ6tm8zcf+/e6/evnN496br73VO8vVexSQ77780mPvB8/fM/0V1o9+ce8PV7UIlx4F5Js/+M67n/ZZgOvkf2EBEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICA
 
gAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAyllL2614CgJtnLKV8cN1LAHDzjKWUt697CQBunrGU8uC6lwDg5hlKKWUP/x1kKOWtq10HgOuwl3K3d+bf5QExFK9CmrIAAAAASUVORK5CYII="
+    }
+  },
+  "Capacity": 32,
+  "_items": [
+    {
+      "$id": "5",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "5845f457-2ddc-44d5-b161-601e363e9140",
+      "ID": "5845f457-2ddc-44d5-b161-601e363e9140",
+      "name": "Category 0",
+      "Name": "Category 0",
+      "start": {
+        "$id": "6",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "6",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "7",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "7",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "8",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "8",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": -1,
+      "Position": -1,
+      "subcategories": [
+        {
+          "$id": "9",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            1,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        },
+        {
+          "$id": "10",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            2,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "9"
+        },
+        {
+          "$ref": "10"
+        }
+      ],
+      "Color": {
+        "$id": "11",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "12",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "7f49ecac-5441-4dec-b3dd-4b66e804125c",
+      "ID": "7f49ecac-5441-4dec-b3dd-4b66e804125c",
+      "name": "Category 1",
+      "Name": "Category 1",
+      "start": {
+        "$id": "13",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "13",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "14",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "14",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "15",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": 100,
+        "Modifier": 0,
+        "Defined": true
+      },
+      "Hotkey": {
+        "$id": "15",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": 100,
+        "Modifier": 0,
+        "Defined": true
+      },
+      "position": 0,
+      "Position": 0,
+      "subcategories": [
+        {
+          "$id": "16",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            1,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        },
+        {
+          "$id": "17",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            2,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "16"
+        },
+        {
+          "$ref": "17"
+        }
+      ],
+      "Color": {
+        "$id": "18",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "19",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "1755d18a-2e91-4fc3-af2f-2b4b778a9812",
+      "ID": "1755d18a-2e91-4fc3-af2f-2b4b778a9812",
+      "name": "Category 2",
+      "Name": "Category 2",
+      "start": {
+        "$id": "20",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "20",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "21",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "21",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "22",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "22",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 1,
+      "Position": 1,
+      "subcategories": [
+        {
+          "$id": "23",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            1,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        },
+        {
+          "$id": "24",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            2,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "23"
+        },
+        {
+          "$ref": "24"
+        }
+      ],
+      "Color": {
+        "$id": "25",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "26",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "368b23a6-c022-4afc-aebf-cabac0395e31",
+      "ID": "368b23a6-c022-4afc-aebf-cabac0395e31",
+      "name": "Category 3",
+      "Name": "Category 3",
+      "start": {
+        "$id": "27",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "27",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "28",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "28",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "29",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "29",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 2,
+      "Position": 2,
+      "subcategories": [
+        {
+          "$id": "30",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            1,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        },
+        {
+          "$id": "31",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            2,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "30"
+        },
+        {
+          "$ref": "31"
+        }
+      ],
+      "Color": {
+        "$id": "32",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "33",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "fd11e6a6-4889-465f-b4a7-cb16f5104bbf",
+      "ID": "fd11e6a6-4889-465f-b4a7-cb16f5104bbf",
+      "name": "Category 4",
+      "Name": "Category 4",
+      "start": {
+        "$id": "34",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "34",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "35",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "35",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "36",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "36",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 3,
+      "Position": 3,
+      "subcategories": [
+        {
+          "$id": "37",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            1,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        },
+        {
+          "$id": "38",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            2,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "37"
+        },
+        {
+          "$ref": "38"
+        }
+      ],
+      "Color": {
+        "$id": "39",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "40",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "d570ccc9-5132-4985-a57c-6127444ae6b9",
+      "ID": "d570ccc9-5132-4985-a57c-6127444ae6b9",
+      "name": "Category 5",
+      "Name": "Category 5",
+      "start": {
+        "$id": "41",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "41",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "42",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "42",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "43",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "43",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 4,
+      "Position": 4,
+      "subcategories": [
+        {
+          "$id": "44",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            1,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        },
+        {
+          "$id": "45",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            2,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "44"
+        },
+        {
+          "$ref": "45"
+        }
+      ],
+      "Color": {
+        "$id": "46",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "47",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "663c2efa-e035-40d5-8016-275830ab337d",
+      "ID": "663c2efa-e035-40d5-8016-275830ab337d",
+      "name": "Category 6",
+      "Name": "Category 6",
+      "start": {
+        "$id": "48",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "48",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "49",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "49",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "50",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "50",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 5,
+      "Position": 5,
+      "subcategories": [
+        {
+          "$id": "51",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            1,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        },
+        {
+          "$id": "52",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            2,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "51"
+        },
+        {
+          "$ref": "52"
+        }
+      ],
+      "Color": {
+        "$id": "53",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "54",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "0bbb95e4-aa55-4a4e-8b03-7b20d19da8ee",
+      "ID": "0bbb95e4-aa55-4a4e-8b03-7b20d19da8ee",
+      "name": "Category 7",
+      "Name": "Category 7",
+      "start": {
+        "$id": "55",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "55",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "56",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "56",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "57",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "57",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 6,
+      "Position": 6,
+      "subcategories": [
+        {
+          "$id": "58",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            1,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        },
+        {
+          "$id": "59",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            2,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "58"
+        },
+        {
+          "$ref": "59"
+        }
+      ],
+      "Color": {
+        "$id": "60",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "61",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "a1b2cb44-3f88-4bbf-9734-8c2711a90ae6",
+      "ID": "a1b2cb44-3f88-4bbf-9734-8c2711a90ae6",
+      "name": "Category 8",
+      "Name": "Category 8",
+      "start": {
+        "$id": "62",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "62",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "63",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "63",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "64",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "64",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 7,
+      "Position": 7,
+      "subcategories": [
+        {
+          "$id": "65",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            1,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        },
+        {
+          "$id": "66",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            2,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "65"
+        },
+        {
+          "$ref": "66"
+        }
+      ],
+      "Color": {
+        "$id": "67",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "68",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "1ce743c8-8912-42ad-8e75-cbb0f338ef2e",
+      "ID": "1ce743c8-8912-42ad-8e75-cbb0f338ef2e",
+      "name": "Category 9",
+      "Name": "Category 9",
+      "start": {
+        "$id": "69",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "69",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "70",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "70",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "71",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "71",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 8,
+      "Position": 8,
+      "subcategories": [
+        {
+          "$id": "72",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            1,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        },
+        {
+          "$id": "73",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            2,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "72"
+        },
+        {
+          "$ref": "73"
+        }
+      ],
+      "Color": {
+        "$id": "74",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "75",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "309cf7f9-2948-4281-9821-6752370e9276",
+      "ID": "309cf7f9-2948-4281-9821-6752370e9276",
+      "name": "Category 10",
+      "Name": "Category 10",
+      "start": {
+        "$id": "76",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "76",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "77",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "77",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "78",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "78",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 9,
+      "Position": 9,
+      "subcategories": [
+        {
+          "$id": "79",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            1,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        },
+        {
+          "$id": "80",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            2,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "79"
+        },
+        {
+          "$ref": "80"
+        }
+      ],
+      "Color": {
+        "$id": "81",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "82",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "da3e873d-3cfe-409d-a28b-306397a08535",
+      "ID": "da3e873d-3cfe-409d-a28b-306397a08535",
+      "name": "Category 11",
+      "Name": "Category 11",
+      "start": {
+        "$id": "83",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "83",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "84",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "84",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "85",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "85",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 10,
+      "Position": 10,
+      "subcategories": [
+        {
+          "$id": "86",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            1,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        },
+        {
+          "$id": "87",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            2,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "86"
+        },
+        {
+          "$ref": "87"
+        }
+      ],
+      "Color": {
+        "$id": "88",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "89",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "e35989cc-42f4-43b6-8cc5-9213f1524ec0",
+      "ID": "e35989cc-42f4-43b6-8cc5-9213f1524ec0",
+      "name": "Category 12",
+      "Name": "Category 12",
+      "start": {
+        "$id": "90",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "90",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "91",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "91",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "92",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "92",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 11,
+      "Position": 11,
+      "subcategories": [
+        {
+          "$id": "93",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            1,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        },
+        {
+          "$id": "94",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            2,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "93"
+        },
+        {
+          "$ref": "94"
+        }
+      ],
+      "Color": {
+        "$id": "95",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "96",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "f7aeab6a-8f86-4425-88a3-7d25a8d729f8",
+      "ID": "f7aeab6a-8f86-4425-88a3-7d25a8d729f8",
+      "name": "Category 13",
+      "Name": "Category 13",
+      "start": {
+        "$id": "97",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "97",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "98",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "98",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "99",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "99",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 12,
+      "Position": 12,
+      "subcategories": [
+        {
+          "$id": "100",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            1,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        },
+        {
+          "$id": "101",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            2,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "100"
+        },
+        {
+          "$ref": "101"
+        }
+      ],
+      "Color": {
+        "$id": "102",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "103",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "8e079dab-bd4e-4c63-b553-3b6b1f6fe1e1",
+      "ID": "8e079dab-bd4e-4c63-b553-3b6b1f6fe1e1",
+      "name": "Category 14",
+      "Name": "Category 14",
+      "start": {
+        "$id": "104",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "104",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "105",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "105",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "106",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "106",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 13,
+      "Position": 13,
+      "subcategories": [
+        {
+          "$id": "107",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            1,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        },
+        {
+          "$id": "108",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            2,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "107"
+        },
+        {
+          "$ref": "108"
+        }
+      ],
+      "Color": {
+        "$id": "109",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "110",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "2e5df4f8-f17f-4337-bcb6-ec630e2f986f",
+      "ID": "2e5df4f8-f17f-4337-bcb6-ec630e2f986f",
+      "name": "Category 15",
+      "Name": "Category 15",
+      "start": {
+        "$id": "111",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "111",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "112",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "112",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "113",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "113",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 14,
+      "Position": 14,
+      "subcategories": [
+        {
+          "$id": "114",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            1,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        },
+        {
+          "$id": "115",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            2,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "114"
+        },
+        {
+          "$ref": "115"
+        }
+      ],
+      "Color": {
+        "$id": "116",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "117",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "90dd1b63-0678-412e-a0fc-a6409e6caf24",
+      "ID": "90dd1b63-0678-412e-a0fc-a6409e6caf24",
+      "name": "Category 16",
+      "Name": "Category 16",
+      "start": {
+        "$id": "118",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "118",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "119",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "119",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "120",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "120",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 15,
+      "Position": 15,
+      "subcategories": [
+        {
+          "$id": "121",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            1,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        },
+        {
+          "$id": "122",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            2,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "121"
+        },
+        {
+          "$ref": "122"
+        }
+      ],
+      "Color": {
+        "$id": "123",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "124",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "63a37c3c-99e1-45ea-906c-3bdc5798ec0d",
+      "ID": "63a37c3c-99e1-45ea-906c-3bdc5798ec0d",
+      "name": "Category 17",
+      "Name": "Category 17",
+      "start": {
+        "$id": "125",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "125",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "126",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "126",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "127",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "127",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 16,
+      "Position": 16,
+      "subcategories": [
+        {
+          "$id": "128",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            1,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        },
+        {
+          "$id": "129",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            2,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "128"
+        },
+        {
+          "$ref": "129"
+        }
+      ],
+      "Color": {
+        "$id": "130",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "131",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "ddf63750-94f6-4cf6-9803-f4aa54e72a50",
+      "ID": "ddf63750-94f6-4cf6-9803-f4aa54e72a50",
+      "name": "Category 18",
+      "Name": "Category 18",
+      "start": {
+        "$id": "132",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "132",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "133",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "133",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "134",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "134",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 17,
+      "Position": 17,
+      "subcategories": [
+        {
+          "$id": "135",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            1,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        },
+        {
+          "$id": "136",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            2,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "135"
+        },
+        {
+          "$ref": "136"
+        }
+      ],
+      "Color": {
+        "$id": "137",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "138",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "eb8e5d7d-fbfb-4c9c-b5d0-4bc9dcd41347",
+      "ID": "eb8e5d7d-fbfb-4c9c-b5d0-4bc9dcd41347",
+      "name": "Category 19",
+      "Name": "Category 19",
+      "start": {
+        "$id": "139",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "139",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "140",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "140",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "141",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "141",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 18,
+      "Position": 18,
+      "subcategories": [
+        {
+          "$id": "142",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            1,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        },
+        {
+          "$id": "143",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "_items": [
+            2,
+            0,
+            0,
+            0
+          ],
+          "_size": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "142"
+        },
+        {
+          "$ref": "143"
+        }
+      ],
+      "Color": {
+        "$id": "144",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    null,
+    null,
+    null,
+    null,
+    null,
+    null,
+    null,
+    null,
+    null,
+    null,
+    null,
+    null
+  ],
+  "_size": 20
+}
+</ConsoleOutput>
+                          <ConsoleError />
+                        </UnitTestResult>
+                        <UnitTestResult>
+                          <TestDate>2014-06-06T20:24:04</TestDate>
+                          <Status />
+                          <Passed>1</Passed>
+                          <Errors>0</Errors>
+                          <Failures>0</Failures>
+                          <Inconclusive>0</Inconclusive>
+                          <NotRunnable>0</NotRunnable>
+                          <Skipped>0</Skipped>
+                          <Ignored>0</Ignored>
+                          <Time />
+                          <Message>Prueba satisfactoria
+
+Tiempo de ejecución: 0,19 ms</Message>
+                          <ConsoleOutput>{
+  "$id": "1",
+  "$type": "LongoMatch.Store.Templates.Categories, LongoMatch",
+  "Name": "default",
+  "Version": "2.1",
+  "GameUnits": [],
+  "GamePeriods": [
+    "1",
+    "2"
+  ],
+  "Image": null,
+  "FieldBackground": {
+    "$id": "2",
+    "$type": "LongoMatch.Common.Image, LongoMatch",
+    "pngbuf": {
+      "$type": "System.Byte[], mscorlib",
+      "$value": 
"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
 U5ErkJggg=="
+    }
+  },
+  "HalfFieldBackground": {
+    "$id": "3",
+    "$type": "LongoMatch.Common.Image, LongoMatch",
+    "pngbuf": {
+      "$type": "System.Byte[], mscorlib",
+      "$value": 
"iVBORw0KGgoAAAANSUhEUgAAAfQAAAEFCAYAAAAVGBU2AAAABHNCSVQICAgIfAhkiAAAIABJREFUeJzt3Vlwned93/Hv854NGwFCIkVStDY7kWJLihXJkuJFdhI7TpM6qaeTTptpe5WbTGcybSfT9LbTq1x1m6bNtJlJnCa2E1nWYlP7RlIiKW4iSHADse845+Dg7Nu7PL0AQJEUKQAkgPcsv4+GQ4J4cfgXDoDfeZb3/xiu8e/tvwHgv5r/RVhUQ2PV0Sg1BNbw350/Byy7fq9G4EQSDvYLDsG/tMY8Z+BLQD/gbF0lduV3s3X/hGrYgC2powbMgD2O4VXggPXJWkuQfqXjUxc3yvdH2DU0Sh3tXoP5Y/vHGAIiBBEwDsvfHWF/p4pcx6787C4u9PPqn/zJHrfS9W8N5o/Adl29SF+1shlWXycsf0Gdt9b+6S9+98jBr/zhS14k7oVXl8j1rAVrwDeY4L+YPycawTMWpw/4V8DvAp8H7g63TpFPWHvNGxGcXQ9Pd80PPBwDi4lYYt01OneVcGIeTjQIrU5pdobAdagXElQXu/HdKFgejca9n+95dLRkrXGtBaMXjhK+AJgHrgB/Z7EH/tj+USVq4CmDfR7Mg2FWJ3IrxiyHejW7g8F/+C7zAw9jIgFdu4vseXKGnv1ZTMSu/UAi61Qvxslc3MPixT145bj56H//s56OnQX2PDYMRl9r0hDuNvAo8H3gbQfzrx0wfwY8GG5dIp/NBg6LI/cx9v5XMBFLz/4c93/7CjvuX1KYy6aL99TZ+/QUe5+eItZdx6slOP/Cd/Bq8etnjEQaw3cczB86wJNhVyKyFr8eY+LDX8H6EeK9VfY8NUV8Ry3ssqTF3f1LC/Q9tIiJBMwP/gKFhbuWVy1FGo79FQeIhF2GyFoCL0Jm5HMYx9LRV6H7nmLYJUk7MND7UAYnFoA1LF55ABts4Y0UIrfNRPWVKU3B
 
BoZavgccS6ynph3tsi2shfiOKsZZnmevZHo15S4NS4EuTSPwzXKOK8xlGxljWb2XzXoRTblLw1Kgi4jcwvW3qCnIpbEp0EVERFqAAl1ERKQFKNBFRERagAJdRESkBSjQRUREWoACXUREpLlZUKCLiIi0BAW6NDx15hIRWZsCXUREpAUo0KXhGTXokoagqSJpWAYU6CIiIi1BgS4isi6aKpLGpkAXERFpAQp0ERGRFqBAFxERaQEKdBERkRagQBcREWkBCnQREZHmpl7uIiIirUKBLiJyCzpHQJqJAl1ERKQFKNBFRG5B5whIk1AvdxERkVahQJeGp3VMEZG1KdBFRERagAJdGp7WMUVE1qZAFxERaQEKdBGRddFmDmlsCnQREZEWoEAXEbkF3WEhzUSBLiIi0gIU6CIit3D9HRa63UIamwJdRESkBSjQRUREWoACXUREpAUo0KVpGMcu3wmsnceyjaz9ZO3cRAItpUvDUqBLUzDGEu+uQGDwalHdTiTbxq/GYCXU4z0V9IpSGlV0ox8QIcJO+tnNbrrZQZw4MWI4em0gW8hPxHnwdxKUF6PE+/q4+4H7NFKSbVHd0UX2d+IEnsODX3yI/kgCQxB2WQLLr61a9OeAxeLhUadGlSoZFkmSxKV+88vZQKBHiLCbe3iIL/AAD7KXe+mllwQJ4iSIENms/4+GYq3F8zxisVjYpbS3BPC91Td2rPwS2SZfXf3DM2FWITewWNy6SzweD7uUTWcJqONSo0qFMkkWmGSSCUaZYOKmwb6uQI8R4wEe5Dl+jYf4BXro2fTiG5XneWQyGfbs2RN2KSIicoNUKsX+/fvDLmPTGRwSK//10sce9vFLPMos0xznGGc4RYXKdR+zrkDfxW6+yW/wJR7b0NS6vWah09ziDMzVa1bff+Pba12/kTpup4YgCCgWi58K9I3Wsd4ablXH7Tzmev6NtR6z0Z6P233M261hI3Xo+bj9OvR8rP9j9
 
Hxcf02hUNhw3c32fKxaHlw/RBfdFMhzkfP4+Fffv2agx4nzEF/gEb54XZjXgzqpepJUbYGCV8C17oYKaxaBG2AqEfrqvWGXIiIi16jXXQZKp5lNT4VdyqZzjENXpJu7Yndxb8fn6Ix0YlY2DOzmHp7iGUYZpkwZVnYSrCPQE+xlLzE+WUO+UrzMyws/5XzhLEtuhopfwbfe1vxfhSzuJ3jG/xrdpc6wSxERkWuUSmX+avb/4NVvulGsqRnj0OF00BPdwYOdD/G9Pd/nqb5n6Ih0AHAfDxDl+r1dawZ6BIcOrg+zwcJZ/mLif7BQm9/E8htTZ9DFvsh+su5S2KWIiMgKay35Sp6B0scUo/mwy9lSHU4nnZEuHun54tVA76IL54Yt/utYEDdXh/mrin6BxXp604ptZBaLb/21LxQRkW1jjKFWr+E7rTk7fK1qUCFTX8QNPlnaXg7zDQd6m7Nct+lAREQaQ82tEUTUE2CVAn0NFosXKNBFRBpNpV6hRVug3BYF+ppsy274ExFpZpVaBSJqxbtKgb6GAEvdtt4OShGRZleoFbAaoV+lQF+DtQEVvxx2GSIicoOSV8TqsJyrFOifxS6P0Ct+5bquRSIiEr6yV0Kn3wErnwQF+mewLDfILzslqtVq2OWIiMg1SkFZI/RrbDjQ22mkagwEjqUcKZMtZsMuR0RErlH2S20Z57d6EaMR+loMuNE6SwV1ihMRaSQlr4im3D+x4UDf6Okwzc4AvvEp1gtrXisiItunEpTbatZ41Y3dW1lpGacR+loMBNan4lfWvlZERLZNyWvPKfdbUaCvg299Sn4x7DJERGRFEAQUggKacv+EAn0dPOuR93JhlyEiIitSmRTZRAZrFOirFOjr4FmPrKtd7iIijWI8OY7fo7bc11Kgr4MXeOTdXFtuvhARaURL9QyW4MYTRNua7kNfB9/xWDIZCkXtdBcRCZu1diXQ2y+PPotG6OtgHUspXmQmPR
 
N2KSIiAmTdJQX6DXQf+no4UDd10uVU2JWIiLS11VniJXepLWeMQZ3i7pivne4iIg3B8z1y/hKBRujXUaCvkxu4ZOtq/yoiEiZjDMnFBXKJLLTpLWs36RQHKNDXzbUuaTfdtlM8IiKNYnhhmFqHunfeSIG+Tq5xSdkFCiXtdBcRCdNcdRbP+rpl7QYK9HUKnIBsbInp9HTYpYiItLVkbQHf+mGX0XAU6OtkHKibGvOlubBLERFpW57nseDN46MucTdSoG9APXDJuIthlyEi0rZS2RSZaJrABGGX0nAU6Bvg2jqLdW2MExEJy1hqlGpHRevn17OgQN8Q17ikg6Q2xomIhCRZWcDDU6DfhHq5b4B1AjKRRSbTk2GXIiLSlhZq89oQdwsaoW+EA2VbZraonu4iItutVC4x589oQ9wtqJf7Rlio+GXmqrNhVyIi0nZGF0ZIxZIEjjbE3cCARugbY6BqqswFM1pHFxHZZmNLo1ScstbPb0GBvkF+xCNlFpha1Dq6iMh2mq5OUQ/qYZfRsBToG2WgZIvMlTTtLiKyXfLFPLN2GhcF+q1Ewy6g6Rio+BWStYWwKxERaRtjyVEWY2mtn38GjdBvQ9WpMuvPkM1nwy5FRKQtTBUmqZmq1s8/gwL9NgQRn6SdZ2JxIuxSRERanrWW2eoMtaAWdikNTYF+m3JejumSNsaJiGy1mdQME4zhGq2ffxYF+u0wUAjyTNYmqNf1BSYislWstVxJD5Exi1infTuVrkG93O9EPVZj2k4ykRoPuxQRkZa02mp8ojRGOShp/XwN6uV+uwwseRmmi1NhVyIi0pKMMSxmFxkNhqmaStjlNAzLzXNYI/Q7UPDzzNZm8H0dFCAishVG0sNknDRBRLerrUW93G+XgWq8wqh7hYmF8bCrERFpSZPlcYpBUdPt1zCf/mSol/sdM7DoZZgpTYddiYhIyymVS0zUx6lYTbevhwL9ThhYcjNMV6cJAk0HiYh
 
spvPTg8wwRRDVsuZ6KNDvUDlR5HL9AuOadhcR2TTWWkZKw+S8nKbb10mBfqccSNWTTJUmdAeAiMgmmc/Mc8W/RNHRUdXrpUDfBEtBhonKOJWa1nlERO6UtZYLC+dZCOaxUS1nrpfuQ98EbqLOUOUSw8krYZciItL0XM9luDxE3suFXUpT0Qh9MxhIuUmmK1P4gTZviIjcifGFcUaCK1SjmvXcCAX6Jsk6GUYrw2SLOlJVROR2WWsZyQ2TDZYgEnY1zUWNZTZJEA8Yr44xkR3XsoSIyG0qVYqMVK9QsJpuvxW1ft0GaT/JVGWSuqsze0VEbsfFuYtM+KN4MS/sUpqOAn0TleJFzubPMJ4eD7sUEZGmU61XuVg8T8pL6t7zz3CT1q+AAn1zOTBdm2S8NIbruWFXIyLSVCbTkwzVLlGKFsMupSkp0DfZUjTDhcIgqXwq7FJERJqG67lczl1k3p/TZrjbpEDfZDYWMFYZYao4of7uIiLrlMonuVK9TMHkwy6laSnQt0DKSTJUuEy2pFvYRETWYq3lYvoCo9Vhgph6edwuBfoW8OIuF3Pnmc5P6RY2EZE15Eo5hstDZOxi2KU0NQX6Fpm2k1zOX6RU1eYOEZGbWR3wjCwOM1S9jBuvh1xR07KgQN8ylXiZs9kzzObnNEoXEbnB6s/FbCnLhcIgSTuvW9XukA5n2SoOTARjXFwapFjR8X8iItda7Tp6JTXEucKA+rZvAo3Qt1AlXubjxVPMFTRKFxG5Ua6c40L+HHN2Rmm0CdTLfSs5MGqHObd4lqLW0kVErrLWMp4Z43zxHNWYRud3yIBeE225SqLMwOJp0qWURukiIiuypSwXcoPMMask2iT6NG41B8acEc4lz2otXUSET0bnZ3NnqMY1Ot8sCvRtUI1X+Dh9klQprVG6iLS9XCnHYPYsM0xpZ/smUqBvBweGo0OcnD+uUbqItLUgCJjIjnMmd1qj802mQN8m1XiFE+lj
 
JEtJ9XgXkbaVzCU5kfyIuah2tm82fTq3i4Hpzgk+mDhEtqwe7yLSfjzfYyQ7zJnCKdyYusJtNgX6NvKiHicKx5jKTuL5XtjliIhsi9W9Q8ncAsdTx0h3JLV2vgUU6NvJQKp7gfcn36VQ1RGBItIejDFU61WGli4zWBvAj+pEtU2mXu5hCCIBA95prqSuUHc15SQi7WEuN8fR+Q8pdOTCLqVlqZd7CAqdOd4ef5NcVV/YItK6VvOiVClxNnWGC8E5rKMMuVOWm38ONUIPgwODsTMcHfuQar0adjUiIlvGWst8cY4Pk4eodug2ta2kXu4hcRN13px/jXQxpdvYRKQlGWNI5ZK8OfI6410jGkJuEvPpHYXq5R4qA8n+OV4afJFyvRR2NSIim67u1bmSHeJk7SNNtW8DBXqIrGM5Yg9yYuwEnu9pf4KItAxrLalCkp8Pv0K+J6vb1LaBAj1kbk+dAxMvU6pplC4ircFaS76S59D4QUZ6hsIup20o0BvAxN2j/PTj56m5NY3SRaTp+YHPWGaE9xbfxsa0R2i7KNAbgQMfVA8ymhwhsPriF5HmZa0lW17i9ZFXWdqZDructqL70BtEfmeW/3fhr1ksLoZdiojIbbHWUqqVODx6kAHnlNbNt5lG6A1kuO8SL537qTrIiUhTCmzA2OIob6Zfw+vSeRXbTfehN5IoHPbf5cToCc2EiEhTCWxAqpDk+Ss/Jr0zGXY5LU2d4ppEtbvCS1PPk8wuhF2KiMi6WGsp10q8NfQmlzrOh11O21KgN6CJvlF+eO5vKZR1IpuINDZrLdZaBqYHeK/8lna1b4ObdIoDFOgNyRrLycgxjo4ewQ90zKCINLaF3Dwvj71AoUcHToVJgd6IDNQTNV7PHGBo9rLW00WkYS0Vl3jx4guM9Q6HXUrbU6A3KgOznVM8P/Jj5rNzYVcjIvIpdbfOobH3OeIfhmjY1YgCvYH5xudS5yA/G3mZpUIm7HJER
 
K6y1vLxxGkOLL1MrUvHojYCBXojM+A6LifcY3wwcUhnp4tIwxhLjvHyzAtkezTYaBQK9EZnIBfN8lbudU5PntLZ6SISurnMLC+M/D0jnVfCLkWWWVCgNwXrBCRj87yZfI2RBW08EZHwFMtF3hh9jQFzmsDRXTiNRL3cm4Tv+IxEL3Ng6hXml+bDLkdE2lAQBHw4dpjD1feoxarq1d5gNEJvFgaqpsq54AzvTb9NpqBDXERk+1hrOTl+nLeyr1PoyCvMG5B6uTcTB/KRPIeK7/HuxDsUyoWwKxKRNnF2aoAX5v6BqfjELXuJS2gMaITefBxLJpLmcP59js98pJPZRGTLDc1e5sDcK0zExgiMr9F5g1KgN6EgEjAfm+Wt9GucmDiune8ismWm09O8Mv0iFziH73gK8wamQG9SgeMzGRnj7cXXuTh3IexyRKQFLeYXeXvmdQaDAWoRbYJrdAr0JuY6LkPmEq/N/ZzhOd0PKiKbp1Kt8M7YmxytfEgpWlKYNwEFejMzUHdqDHoDvDZ7gMn0RNgViUgLqLk13h97l8Pl98lGMmC0Ca4ZKNCbnYFSpMjH7gnemnmD6cx02BWJSBNzPZeDI+/xdvZ1ktF5Akd7dJqFAr0VOFCI5jlSPsQbk6+ykFXjGRHZON/3OTx6iNeWfsZ0dEph3mQU6K3CQD6a41jlQ96ffpd0Ph12RSLSRIIg4Mjoh7yxeIC56IzaujYhBXorcSAbXeLd4lu8O/M22VI27IpEpAlYazk1cZIDiy8xER3FNwrzJqPDWVqSY1mKLPJ+7m2OzH6gbnIisqaPJ07z84WXmHDGlsNcO9qbkg5naUHWsaSjSV5NvcLhqYOUqqWwSxKRBmSt5fzUIC/PvcCQcxFPjWOawq1a70a3uQ7ZJtZYkrF5fpZ+kcAPeO6Bb9HX3Rd2WSLSIKy1nJn8mJdmf8JQRGHeCjYc6DqcpXlYx5JOJHlx8XkqXpnvfuG3FeoiQh
 
AEnBo/yY+n/paprgmsCRTmTcR8+snS4SxtwUC+M8uruVd488prLBUzYVckIiEKgoBTEyf5yfSPmeoaV5i3EE25twMDxa4CLxdeoHSpzO/84j9md+89mm0RaSPWWjzf48T4cX44+Tcs9M4qyFuMRuhtpNZV5c3yAV65/BKLxUVtcBRpE9ZavMDjo/Fj/N34DxTmLUoj9Dbjdtd5p/wG9UGX3334n7C/fz/GGI3WRVrQ6ov2YrXIicnjPD/9I9I7FxTmLUoj9Dbkdbm8x5v81Zm/ZCozRWADjdZFWpDFki1neXv4TX44+wOFeYvTfejtKm45t+M0f376v3Fx/gKe7+m5FWkhfuAzl53l50Mv8+LS8+R6l8IuSbaYRujtLAJjdw3z11f+kkvJi9TcmkJdpAX4gc9cbpaXhn7Ka8WfUelWc6l2sOFA11prizEw0TPKX1z5nxybOkq5XlaoizQpay2u7zKaHuEfhn7EoeBd3K562GXJJlOnOPlMyZ45fjT9N7jW5cm9T3J3z66wSxKRDbDWUvNqXFkc4pXRFxmInMbGdfxpO1Ggy1WZnjQ/WPi/DGe/xfce+j32938Ox9GqjEijC2zAUmmJM8nTvDL7IrMdU9r81sJu0ikOUKDLDWodVd5z32JxcJF//qU/4IGdDxKPxcMuS0RuIQgC5nNzHJx5n3eX3iDbpc1v7UqBLp9iYwED0ZNkL2X4/n2/z+O7f1k94EUajLWWIAi4OHeBt2bf4IR3VOvlbU7zqXJzBiY6R/nR1N/w7vhbLOQWwq5IRK5Rc2sMzJzhby//gKPBIdyEwrzdaYQut2Yg2TnPS5mfsFBZ4Nf3f5sv3PMLRCP6shEJUyqX4uTccX4++zLJ3jkNzQRQoMtaDJQ7Sxyuv0dqNMl33d/m4bseob+nP+zKRNqO7/tcmR/iWPoIhzLvUejLhV2SNBAFuqzNQD1RYzA4Q2pygWezX+Nre77BA7sf1C54kS1krb3
 
a+yNbyDKYPMvrswcYiQ7h9XohVycNxIICXTYgcALmEjO8VXiNVDXJr9W+zcP3PEJXR1fYpYm0nNUGT9ZaJlMTHE0e4WjmA+Y6p7FGzZ/k0zYc6Ooi1uYcKCWKHPePMj81xzeK3+KpfU+zr39f2JWJtIzVkXmtvrzx7WDyXQb9AcpdJd1fLrekEbpsnAE3WmfUDJPP5FmozfNc9dd4aNdDxGKxsKsTaWqrg6b5zDzn0gO8k3qTicgYXtxVmMtn2nCgq5e7rLKRgFRinoPVd5mdmuGppaf5lT1Pse9ujdZFble1VuX83CBHlj7gUnWQxXiawFELV/lMBjRClzvlQCVe4rx3lrmlGSYr43yt8hy/uPthOhOdYVcn0vBWR+TGGCaTE5xYOM6pwnEmnFHq8bpG5bJuCnTZFH7UI+Us8IF7kKmZSZ7KPsOv3vs19vXv06yOyGcwxlCulhmYPcMH6YNccs9TiBWwEY3KZWMU6LJ5HKg5VYb9IdL5FHPVWZ7b8y0e2fNLJOKJsKsTaUgzizMcnz3GseKHTJtJ6omaRuVyWxTosumCiE/GpDnqHWZiZozH00/w9f3f4IFdDxJxImGXJ9IQMoUMA3MfczT3IWP+MPlIjkCjcrkDCnTZGiuj9XF/hHQ1yfj4KE+nnuUr9z3Drl6dtS7tq1qvMpS8zOGFg1x2L5AySbyodrDLnVOgy5ayEUvByXPeH2CqMM65SwN8a/dv8Oi+x+ju6A67PJFtEwQBYwujHJp6n/P+WeadWWqRmvqwy6ZRoMvWM+BHfZZshjP+KWbmp/jSwuN896Hf5nO7PqfDXqQlXdu2dbGwyMmp4xzJfcCEGaUcKWvTm2w6/SSV7WOgHq0xE0yRDlKMDY3w9Myz/MYjv0lfV592w0tLWd29fmH2PO8tvM1lLlKI5AkcX9PrstnUy11CsrK+PmqGWfDmOPPxxzzR9SS/9aV/RFeiW8EuTenaEXm1XmVo7jLvzb3D
 
EBfJRjLUTV3T67Kl1MtdQhNEfAo2z+X4ecb8YQZOnubpjq/y3S//FrFoTMEuTcUYQ92tM7YwxpuTr3OeAXKxLJ7RhjfZXJab57BG6BIuA0EkoGorXE5cYNwf5czRU3yz/9d57rFvKtSlKfi+z1xmjjdHXuOMf4p0PIWLRuSyvdTLXRqDAd/4lE2Js50fc7lwkdOHTvLNfb/Okw8/GXZ1IjcVBAGLuUVev/QqJ2vHWOiZw49qjVy2lvn0F5h6uUsDMmBNQDVe5ljsMKezH/HYh0/w1b5v8LUvfp1IRI1pJHzWWsbnxzkw9AqDDJDrXsKP+TqnXEKlQJfGtDJir1DhhHOUU8WPOPD2K3x91zf5zuO/STwaxzGOZoxk2wQ2IAgCrsxd4WcTLzHgnqK+oxZ2WSJXKdCl8RkIYgEjd19m3Bvm0Pvv8tWdz/HtR79DT2ePgl22jLUWay0BAWfHBzgw/DMuxs7h9tahI+zqRK6nQJfmsdKgZvyuEaa8CQ4efYdn+7/Gs/d/lb19e4k7caKRqMJdbsu1d/AENsD1XWp+jZOjxzm68CGXnPPU7qpqfVwalgJdmo8BP+Yx2z/Fi/7f89aF1/iSeYxn932VJ+57kkQkQSwSw3G0xVg2xgs8XL/OzNIsx+eOcnzpKAtdc/g7tNFNGp/uQ5fmFoFiT57j9ggfp0+yf+p+nup/mmfue5Zd3bvpjHVq1C6fyQ98am6Nslfm/Mw5js0d5WIwSKmrCL36eSfNQyN0aQ0G3Hid8fgwU5Uxjp47zKNdv8xX9j/Dff330+F00BnrJBKJKNzb1OpgxBhDEARU3SpVr0KmkmFw/hyn0icYj45Q7aro/nFpSroPXVqOn/CZTUwza6c5NP4u+67s55GuL/LlvU+wf+d99MR76E5062z2NlStVynUCmRrS5ydHWBw6SwTZoxSRwG7Q6NxaQ7qFCftx0Cts8p45wjj3ggfjh7ifh7k8bu+zON7f5n+z
 
rvYkdhBIpa4+kJVL1hbi7UW13Mp1UoUagWG01c4tXCCcW+ExY7U8tq4SItQoEt7iEKxN88FznKpcJ730+9wX+x+Ht39OA/sfIDeWB89sR3s7NmJ4+g2uGYWBAGVWoVsJUvZLzFTmOFS8gKjpRHmIzNUusuaUpemdpNOcYACXdpQ0Omz0DnLArOczhynd6qfe6P7eajnCzyx/wl2dvTTE+lh545+Io7W3JtBEASUKiVy1Rx5N8dEdpxzqbPMubMknTnq3TXYGXaVIltLgS5tLegIyHYskmWRC/WzfHDxfe6N7ef+2IM8+bmv0N/VT1e0m96OXjo7OsMuV1ZYa/EDn3wpT8krUaznuZy8zKWlC8x406SjSbxuF7rCrlRk+yjQRVbFIRdfIscSF91Bjlw+zD3RPeztvJfP3/UF7t9xP93RHnrjffR19NGRUKuw7RQEAdlilnw9R8EtsFTPMJS+zEx5mlR9gXQ0hd/jhV2mSGgU6CI3E4PCXTkK5BixQxxJH6R/6m72dOzjvp77eaj78+zv3U93tIeuaDc9iR4F/CbzfZ9CuUDZK1HySuTqOS6nLzJRGWehMkfapKj31JZH4RqJiyjQRdZkwCYsmUSaDGku1gfpyHewe/4ediV2c3d8N/t69nFP5166nC66TBfd0R76e/pJxBNag18H31+ePs9VsxTdAiW/RMEWmClOs1hLk6qlSNUXyHdksTELsbArFmk8CnSRjXIs1a4KU0wwxQS4EE3G6PX72Bnpp9f0cXd0F/f3PMDurnvoinbRGemkO9ZDb1cvHYmOtg55z/MolPMUagXKXpmqXyFfLzBVmGS2Os1ifZGsmyEfzeN21pZ3pMdXfonILSnQRe6UAS/ukmF5BI8F4xkS853sYAc7Yr30RHroi/ezp3MPd8XvpjvaQ3e0i85INz3xHvq7lkfzN/afv7a7WTO4tjW053vky3ny1Txlr0jJL1P2SuTdHAvVeTK1RfJugZ
 
JXIO/nKcWLBHFf0+ciG2dBgS6y+QzYmKUaK1OlTIoFAKwH0XSUzqCLnkgPPdFeeqI99MX7uDtxNz3RHXRGupbb1Ea6iDtxEk6CDqeDvo6ddHd2E43e/Fv2VsF/bcDe6n2rf7/WY1yPa5PlAAAEOklEQVR7nbWWSq1CrpKj4pWp+lXqtkYtqFHxK1T9CmW/zFI9w1J9iYKbp+gVKHoFSrZEPVFb/umTWPklIndMh7OIbBMTAb/Lo0ieInlgdvkdNbAFiPgROp1OOpxOuiJdxJ0ECSdBZ6STndG76I/10xnpJGZixEycmBNb/rMTJ+7EiDkxIkRZfkUBERNZft1u7cqfzXUtIx3HwQ88LBYn4uD6LhiDMeBbH9e6eNalHiz/XgtqeIFL3brUgxoFL8+im6bkl6gGVepBjapfpRKUqfgVXONi4xYTBSIrvxTeIltGI3SRsDlgOiDAp0SREkUWr32/D9QMMS9GNIgRM1FiTpzoyu/Lob4a6BFuGeiY616QO46Db1cC3bk+0AMC3MDFte4nwe7X8VbednHxIh5B1F9e4zZ8EtrXaI6FApHWoMNZRJpB1OJG67jUqdzqmhsnz1bfvvZb1tzk/QDBNe+79uOuvV4v/0UalQF1NBYREWkJCnQREZEWoEAXERFpAQp0ERGRFqBAFxERaQEKdBERkRagQBcREWkBCnQREZHmZkGBLiIi0hI2HOjq5S4iIhIe+6m2kMs0QhcREWkBGw509XIXEREJj/n0sUfq5S4iItIqFOgiIiItQIEuIiLSAhToIiIiLUCBLiIi0gJ0H7qIiEgL0AhdRESkBeg+dBERkSaiTnEiIiItTIEuIiLSRG7SKQ5QoIuIiLQEBbqIiEgLUKCLiIi0AAW6iIhIC1Cgi4iItAAFuoiISHOzoEAXERFpCerlLiIi0gI0QhcREWkB6uUuIiLS3AxohC4iItISFOgiIiItQIEuIiLSAhToIiIiLUCBLiIi0gI
 
U6CIiIi1AgS4iItIC1gz0gAAX77q/e2zHl/n9ff+CXfHdW1aYiIhIu0s4Hfxq/9f59u7v0hfbefXv67hYrnZutQDRtR7MxSVD+rq/+1LPo/znR/6Mf/f5PyXrLlHyitc+sIiIiNyhRKSDndGd7Iz1syt+Dx1Ox9X3pUni4193fRQoAL23esAaVcYZI02KXey++o/si+xnb+JefHwCG4ACXUREZNMYHCImgmOun0y3WD7mJDWqK28DkI8CPwT+w60e0GKZZILX+Tnf4/vspP+Tf8wYokRXms6JiIjIVvLxeZ93GOAMLi4ABrwAfhL5yn964nQEJwLmcSBx/YcuH63m45s0aaaZsjGi7KDPxIl/ctXKdYa1G73feO1aH7uR69dbx+3WsJ6PudMa1lPHZtWwkce8nev1fGysho085u1cr+djYzVs5DFv53o9HxurYSOPeTvXN/rz4eExzhhv8Con+ciWKC5fClPAf7TwivkD+0/Zxz0JA3sCzHNg7gcbv/HBDBAhQoIO9nFv1yN88XN7uXdvNz29ceIdrOPJEBERkfXx8NwKpcISmcxlLoxPMJ4tUbIeLhaKFjvqY49EcDIG4/5/jtcO8KozHA0AAAAASUVORK5CYII="
+    }
+  },
+  "GoalBackground": {
+    "$id": "4",
+    "$type": "LongoMatch.Common.Image, LongoMatch",
+    "pngbuf": {
+      "$type": "System.Byte[], mscorlib",
+      "$value": 
"iVBORw0KGgoAAAANSUhEUgAAAZAAAAEsCAYAAADtt+XCAAAABHNCSVQICAgIfAhkiAAACZpJREFUeJzt2r+rJWcdx/FnZp459+wuqOgfYBEEA4KNlShooyn2DxAEIUm1fYpYioUWAcutoo2Ff0AKtVCLkMpGEBUkXcqkkWT33jPPzFhcVxJ2l/B89ro3V16vZmE5X+Y7v/Z9z+4O5ZO+cutzt14ajsOL2/n2uW3ZbhWeq+k4zKWUsp7vy3XvgvvxWeN+XI9xHh+Ox/Ff+/n+t4f/evi7Uso/SyllKKWUvZT9WrcD4MYZSym3r3sJAG6esZTy7eteAoCbZyylfPG6lwDg5hnLf/4dBAB6jNe9AAA3k4AAEBEQACICAkBEQACICAgAEQEBICIgAEQEBIBIfZbhn+8/e+uqFuHS/VfeuFtKKfd++Zpr+xlw/9X/3I833Y/PAvfjf+f14cd3e2d8AwEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIAJF63QvA/5uLj87r1rahZ6ad2ni6OE09M1vbhtOD8+53+PzDh3PvzOn8VNfWus5pW7ZxOS1d57Tv+3B6cPH0c9ovf3nnN3964RP7PbyY97L3XvNpXdauH6L3
 
tg2tta5rvm97OZ1fdF/zdrHUfe87p3XZxq21vudo24e2LPX1vvVKKc8YkA/ee/92z+fb+Wlqp9Z1w9pp6Z4ppZTlYpnasvQda1mntfNY66lNbek8p6VN66fc5D/+6rcvPn6sdWxL58PR1nFta9dMOy3dM2vrf3BLyR741tZpW/te/LWt09a2+Bv3/VfeuJvOcvX+8vs/P/Z+8PwNpZQf7qX8Ohn+8stfuuJ14Oar89SGadx7ZsZp2mqd1p6ZYRz2eja3vu1KmY+HpXemHmqbau06p2EatjrPXec0DsM+3z489Zz+8fZfXyillK9+62vvfvz3D8ezZRiGrv3qoa7TXLeu/eZxnw9913wcxnJ259h9zQ93zto49D1H9axu9ezQd83ruB9vHdtPvvDT7/dtePkNpGvBj7vz+TsPej4/1rpO89h3w2pdp9o3U0opU53Wepi75qY6rWOdumbqXNfp0Dcz1brWuT7xJj/6yerr3/vG359wrG06PHnuqcc61K3OfX8w1Xne5rO+F78e6lYPfTP/nTv2PfD1ULdD50tSz+ZtPvbvd//Vy28e99587a3eWa7eo4B89+WXHns/eP6e6a+wfvSLe3+4qkW49Cgg3/zBd979tM8CXCf/CwuAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAE
 
BEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASBSr3sB+H9z8dF53do29My0UxtPF6epZ2Zr23B6cN79Dp9/+HDunTmdn+raWtc5bcs2Lqel65z2fR9ODy6efk775S/v/OZPL3xiv4cX81723ms+rcva9UP03rahtdZ1zfdtL6fzi+5r3i6Wuu9957Qu27i11vccbfvQlqW+3rdeKeUZA/LBe+/f7vl8Oz9N7dS6blg7Ld0zpZSyXCxTW5a+Yy3rtHYeaz21qS2d57S0af2Um/zHX/32xcePtY5t6Xw42jqube2aaaele2Zt/Q9uKdkD39o6bWvfi7+2ddraFn/jvv/KG3fTWa7eX37/58feD56/oZTyw72UXyfDX375S1e8Dtx8dZ7aMI17z8w4TVut09ozM4zDXs/m1rddKfPxsPTO1ENtU61d5zRMw1bnueucxmHY59uHp57TP97+6wullPLVb33t3Y///uF4tgzD0LVfPdR1muvWtd887vOh75qPw1jO7hy7r/nhzlkbh77nqJ7VrZ4d+q55HffjrWP7yRd++v2+DS+/gXQt+HF3Pn/nQc/nx1rXaR77blit61T7ZkopZarTWg9z19xUp3WsU9dMnes6HfpmplrXOtcn3uRHP1l9/Xvf+PsTjrVNhyfPPfVYh7rVue8PpjrP23zW9+LXQ93qoW/mv3PHvge+Hup26HxJ6tm8zcf+/e6/evnN496br73VO8vVexSQ77780mPvB8/fM/0V1o9+ce8PV7UIlx4F5Js/+M67n/ZZgOvkf2EBEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICA
 
gAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAyllL2614CgJtnLKV8cN1LAHDzjKWUt697CQBunrGU8uC6lwDg5hlKKWUP/x1kKOWtq10HgOuwl3K3d+bf5QExFK9CmrIAAAAASUVORK5CYII="
+    }
+  },
+  "Capacity": 32,
+  "Count": 20
+}
+</ConsoleOutput>
+                          <ConsoleError />
+                        </UnitTestResult>
+                        <UnitTestResult>
+                          <TestDate>2014-06-06T20:25:32</TestDate>
+                          <Status />
+                          <Passed>1</Passed>
+                          <Errors>0</Errors>
+                          <Failures>0</Failures>
+                          <Inconclusive>0</Inconclusive>
+                          <NotRunnable>0</NotRunnable>
+                          <Skipped>0</Skipped>
+                          <Ignored>0</Ignored>
+                          <Time />
+                          <Message>Prueba satisfactoria
+
+Tiempo de ejecución: 0,19 ms</Message>
+                          <ConsoleOutput>{
+  "$id": "1",
+  "$type": "LongoMatch.Store.Templates.Categories, LongoMatch",
+  "Name": "default",
+  "Version": "2.1",
+  "GamePeriods": [
+    "1",
+    "2"
+  ],
+  "Image": null,
+  "Categorires": null,
+  "FieldBackground": {
+    "$id": "2",
+    "$type": "LongoMatch.Common.Image, LongoMatch",
+    "pngbuf": {
+      "$type": "System.Byte[], mscorlib",
+      "$value": 
"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
 U5ErkJggg=="
+    }
+  },
+  "HalfFieldBackground": {
+    "$id": "3",
+    "$type": "LongoMatch.Common.Image, LongoMatch",
+    "pngbuf": {
+      "$type": "System.Byte[], mscorlib",
+      "$value": 
"iVBORw0KGgoAAAANSUhEUgAAAfQAAAEFCAYAAAAVGBU2AAAABHNCSVQICAgIfAhkiAAAIABJREFUeJzt3Vlwned93/Hv854NGwFCIkVStDY7kWJLihXJkuJFdhI7TpM6qaeTTptpe5WbTGcybSfT9LbTq1x1m6bNtJlJnCa2E1nWYlP7RlIiKW4iSHADse845+Dg7Nu7PL0AQJEUKQAkgPcsv4+GQ4J4cfgXDoDfeZb3/xiu8e/tvwHgv5r/RVhUQ2PV0Sg1BNbw350/Byy7fq9G4EQSDvYLDsG/tMY8Z+BLQD/gbF0lduV3s3X/hGrYgC2powbMgD2O4VXggPXJWkuQfqXjUxc3yvdH2DU0Sh3tXoP5Y/vHGAIiBBEwDsvfHWF/p4pcx6787C4u9PPqn/zJHrfS9W8N5o/Adl29SF+1shlWXycsf0Gdt9b+6S9+98jBr/zhS14k7oVXl8j1rAVrwDeY4L+YPycawTMWpw/4V8DvAp8H7g63TpFPWHvNGxGcXQ9Pd80PPBwDi4lYYt01OneVcGIeTjQIrU5pdobAdagXElQXu/HdKFgejca9n+95dLRkrXGtBaMXjhK+AJgHrgB/Z7EH/tj+USVq4CmDfR7Mg2FWJ3IrxiyHejW7g8F/+C7zAw9jIgFdu4vseXKGnv1ZTMSu/UAi61Qvxslc3MPixT145bj56H//s56OnQX2PDYMRl9r0hDuNvAo8H3gbQfzrx0wfwY8GG5dIp/NBg6LI/cx9v5XMBFLz/4c93/7CjvuX1KYy6aL99TZ+/QUe5+eItZdx6slOP/Cd/Bq8etnjEQaw3cczB86wJNhVyKyFr8eY+LDX8H6EeK9VfY8NUV8Ry3ssqTF3f1LC/Q9tIiJBMwP/gKFhbuWVy1FGo79FQeIhF2GyFoCL0Jm5HMYx9LRV6H7nmLYJUk7MND7UAYnFoA1LF55ABts4Y0UIrfNRPWVKU3B
 
BoZavgccS6ynph3tsi2shfiOKsZZnmevZHo15S4NS4EuTSPwzXKOK8xlGxljWb2XzXoRTblLw1Kgi4jcwvW3qCnIpbEp0EVERFqAAl1ERKQFKNBFRERagAJdRESkBSjQRUREWoACXUREpLlZUKCLiIi0BAW6NDx15hIRWZsCXUREpAUo0KXhGTXokoagqSJpWAYU6CIiIi1BgS4isi6aKpLGpkAXERFpAQp0ERGRFqBAFxERaQEKdBERkRagQBcREWkBCnQREZHmpl7uIiIirUKBLiJyCzpHQJqJAl1ERKQFKNBFRG5B5whIk1AvdxERkVahQJeGp3VMEZG1KdBFRERagAJdGp7WMUVE1qZAFxERaQEKdBGRddFmDmlsCnQREZEWoEAXEbkF3WEhzUSBLiIi0gIU6CIit3D9HRa63UIamwJdRESkBSjQRUREWoACXUREpAUo0KVpGMcu3wmsnceyjaz9ZO3cRAItpUvDUqBLUzDGEu+uQGDwalHdTiTbxq/GYCXU4z0V9IpSGlV0ox8QIcJO+tnNbrrZQZw4MWI4em0gW8hPxHnwdxKUF6PE+/q4+4H7NFKSbVHd0UX2d+IEnsODX3yI/kgCQxB2WQLLr61a9OeAxeLhUadGlSoZFkmSxKV+88vZQKBHiLCbe3iIL/AAD7KXe+mllwQJ4iSIENms/4+GYq3F8zxisVjYpbS3BPC91Td2rPwS2SZfXf3DM2FWITewWNy6SzweD7uUTWcJqONSo0qFMkkWmGSSCUaZYOKmwb6uQI8R4wEe5Dl+jYf4BXro2fTiG5XneWQyGfbs2RN2KSIicoNUKsX+/fvDLmPTGRwSK//10sce9vFLPMos0xznGGc4RYXKdR+zrkDfxW6+yW/wJR7b0NS6vWah09ziDMzVa1bff+Pba12/kTpup4YgCCgWi58K9I3Wsd4ablXH7Tzmev6NtR6z0Z6P233M261hI3Xo+bj9OvR8rP9j9
 
Hxcf02hUNhw3c32fKxaHlw/RBfdFMhzkfP4+Fffv2agx4nzEF/gEb54XZjXgzqpepJUbYGCV8C17oYKaxaBG2AqEfrqvWGXIiIi16jXXQZKp5lNT4VdyqZzjENXpJu7Yndxb8fn6Ix0YlY2DOzmHp7iGUYZpkwZVnYSrCPQE+xlLzE+WUO+UrzMyws/5XzhLEtuhopfwbfe1vxfhSzuJ3jG/xrdpc6wSxERkWuUSmX+avb/4NVvulGsqRnj0OF00BPdwYOdD/G9Pd/nqb5n6Ih0AHAfDxDl+r1dawZ6BIcOrg+zwcJZ/mLif7BQm9/E8htTZ9DFvsh+su5S2KWIiMgKay35Sp6B0scUo/mwy9lSHU4nnZEuHun54tVA76IL54Yt/utYEDdXh/mrin6BxXp604ptZBaLb/21LxQRkW1jjKFWr+E7rTk7fK1qUCFTX8QNPlnaXg7zDQd6m7Nct+lAREQaQ82tEUTUE2CVAn0NFosXKNBFRBpNpV6hRVug3BYF+ppsy274ExFpZpVaBSJqxbtKgb6GAEvdtt4OShGRZleoFbAaoV+lQF+DtQEVvxx2GSIicoOSV8TqsJyrFOifxS6P0Ct+5bquRSIiEr6yV0Kn3wErnwQF+mewLDfILzslqtVq2OWIiMg1SkFZI/RrbDjQ22mkagwEjqUcKZMtZsMuR0RErlH2S20Z57d6EaMR+loMuNE6SwV1ihMRaSQlr4im3D+x4UDf6Okwzc4AvvEp1gtrXisiItunEpTbatZ41Y3dW1lpGacR+loMBNan4lfWvlZERLZNyWvPKfdbUaCvg299Sn4x7DJERGRFEAQUggKacv+EAn0dPOuR93JhlyEiIitSmRTZRAZrFOirFOjr4FmPrKtd7iIijWI8OY7fo7bc11Kgr4MXeOTdXFtuvhARaURL9QyW4MYTRNua7kNfB9/xWDIZCkXtdBcRCZu1diXQ2y+PPotG6OtgHUspXmQmPR
 
N2KSIiAmTdJQX6DXQf+no4UDd10uVU2JWIiLS11VniJXepLWeMQZ3i7pivne4iIg3B8z1y/hKBRujXUaCvkxu4ZOtq/yoiEiZjDMnFBXKJLLTpLWs36RQHKNDXzbUuaTfdtlM8IiKNYnhhmFqHunfeSIG+Tq5xSdkFCiXtdBcRCdNcdRbP+rpl7QYK9HUKnIBsbInp9HTYpYiItLVkbQHf+mGX0XAU6OtkHKibGvOlubBLERFpW57nseDN46MucTdSoG9APXDJuIthlyEi0rZS2RSZaJrABGGX0nAU6Bvg2jqLdW2MExEJy1hqlGpHRevn17OgQN8Q17ikg6Q2xomIhCRZWcDDU6DfhHq5b4B1AjKRRSbTk2GXIiLSlhZq89oQdwsaoW+EA2VbZraonu4iItutVC4x589oQ9wtqJf7Rlio+GXmqrNhVyIi0nZGF0ZIxZIEjjbE3cCARugbY6BqqswFM1pHFxHZZmNLo1ScstbPb0GBvkF+xCNlFpha1Dq6iMh2mq5OUQ/qYZfRsBToG2WgZIvMlTTtLiKyXfLFPLN2GhcF+q1Ewy6g6Rio+BWStYWwKxERaRtjyVEWY2mtn38GjdBvQ9WpMuvPkM1nwy5FRKQtTBUmqZmq1s8/gwL9NgQRn6SdZ2JxIuxSRERanrWW2eoMtaAWdikNTYF+m3JejumSNsaJiGy1mdQME4zhGq2ffxYF+u0wUAjyTNYmqNf1BSYislWstVxJD5Exi1infTuVrkG93O9EPVZj2k4ykRoPuxQRkZa02mp8ojRGOShp/XwN6uV+uwwseRmmi1NhVyIi0pKMMSxmFxkNhqmaStjlNAzLzXNYI/Q7UPDzzNZm8H0dFCAishVG0sNknDRBRLerrUW93G+XgWq8wqh7hYmF8bCrERFpSZPlcYpBUdPt1zCf/mSol/sdM7DoZZgpTYddiYhIyymVS0zUx6lYTbevhwL9ThhYcjNMV6cJAk0HiYh
 
spvPTg8wwRRDVsuZ6KNDvUDlR5HL9AuOadhcR2TTWWkZKw+S8nKbb10mBfqccSNWTTJUmdAeAiMgmmc/Mc8W/RNHRUdXrpUDfBEtBhonKOJWa1nlERO6UtZYLC+dZCOaxUS1nrpfuQ98EbqLOUOUSw8krYZciItL0XM9luDxE3suFXUpT0Qh9MxhIuUmmK1P4gTZviIjcifGFcUaCK1SjmvXcCAX6Jsk6GUYrw2SLOlJVROR2WWsZyQ2TDZYgEnY1zUWNZTZJEA8Yr44xkR3XsoSIyG0qVYqMVK9QsJpuvxW1ft0GaT/JVGWSuqsze0VEbsfFuYtM+KN4MS/sUpqOAn0TleJFzubPMJ4eD7sUEZGmU61XuVg8T8pL6t7zz3CT1q+AAn1zOTBdm2S8NIbruWFXIyLSVCbTkwzVLlGKFsMupSkp0DfZUjTDhcIgqXwq7FJERJqG67lczl1k3p/TZrjbpEDfZDYWMFYZYao4of7uIiLrlMonuVK9TMHkwy6laSnQt0DKSTJUuEy2pFvYRETWYq3lYvoCo9Vhgph6edwuBfoW8OIuF3Pnmc5P6RY2EZE15Eo5hstDZOxi2KU0NQX6Fpm2k1zOX6RU1eYOEZGbWR3wjCwOM1S9jBuvh1xR07KgQN8ylXiZs9kzzObnNEoXEbnB6s/FbCnLhcIgSTuvW9XukA5n2SoOTARjXFwapFjR8X8iItda7Tp6JTXEucKA+rZvAo3Qt1AlXubjxVPMFTRKFxG5Ua6c40L+HHN2Rmm0CdTLfSs5MGqHObd4lqLW0kVErrLWMp4Z43zxHNWYRud3yIBeE225SqLMwOJp0qWURukiIiuypSwXcoPMMask2iT6NG41B8acEc4lz2otXUSET0bnZ3NnqMY1Ot8sCvRtUI1X+Dh9klQprVG6iLS9XCnHYPYsM0xpZ/smUqBvBweGo0OcnD+uUbqItLUgCJjIjnMmd1qj802mQN8m1XiFE+lj
 
JEtJ9XgXkbaVzCU5kfyIuah2tm82fTq3i4Hpzgk+mDhEtqwe7yLSfjzfYyQ7zJnCKdyYusJtNgX6NvKiHicKx5jKTuL5XtjliIhsi9W9Q8ncAsdTx0h3JLV2vgUU6NvJQKp7gfcn36VQ1RGBItIejDFU61WGli4zWBvAj+pEtU2mXu5hCCIBA95prqSuUHc15SQi7WEuN8fR+Q8pdOTCLqVlqZd7CAqdOd4ef5NcVV/YItK6VvOiVClxNnWGC8E5rKMMuVOWm38ONUIPgwODsTMcHfuQar0adjUiIlvGWst8cY4Pk4eodug2ta2kXu4hcRN13px/jXQxpdvYRKQlGWNI5ZK8OfI6410jGkJuEvPpHYXq5R4qA8n+OV4afJFyvRR2NSIim67u1bmSHeJk7SNNtW8DBXqIrGM5Yg9yYuwEnu9pf4KItAxrLalCkp8Pv0K+J6vb1LaBAj1kbk+dAxMvU6pplC4ircFaS76S59D4QUZ6hsIup20o0BvAxN2j/PTj56m5NY3SRaTp+YHPWGaE9xbfxsa0R2i7KNAbgQMfVA8ymhwhsPriF5HmZa0lW17i9ZFXWdqZDructqL70BtEfmeW/3fhr1ksLoZdiojIbbHWUqqVODx6kAHnlNbNt5lG6A1kuO8SL537qTrIiUhTCmzA2OIob6Zfw+vSeRXbTfehN5IoHPbf5cToCc2EiEhTCWxAqpDk+Ss/Jr0zGXY5LU2d4ppEtbvCS1PPk8wuhF2KiMi6WGsp10q8NfQmlzrOh11O21KgN6CJvlF+eO5vKZR1IpuINDZrLdZaBqYHeK/8lna1b4ObdIoDFOgNyRrLycgxjo4ewQ90zKCINLaF3Dwvj71AoUcHToVJgd6IDNQTNV7PHGBo9rLW00WkYS0Vl3jx4guM9Q6HXUrbU6A3KgOznVM8P/Jj5rNzYVcjIvIpdbfOobH3OeIfhmjY1YgCvYH5xudS5yA/G3mZpUIm7HJER
 
K6y1vLxxGkOLL1MrUvHojYCBXojM+A6LifcY3wwcUhnp4tIwxhLjvHyzAtkezTYaBQK9EZnIBfN8lbudU5PntLZ6SISurnMLC+M/D0jnVfCLkWWWVCgNwXrBCRj87yZfI2RBW08EZHwFMtF3hh9jQFzmsDRXTiNRL3cm4Tv+IxEL3Ng6hXml+bDLkdE2lAQBHw4dpjD1feoxarq1d5gNEJvFgaqpsq54AzvTb9NpqBDXERk+1hrOTl+nLeyr1PoyCvMG5B6uTcTB/KRPIeK7/HuxDsUyoWwKxKRNnF2aoAX5v6BqfjELXuJS2gMaITefBxLJpLmcP59js98pJPZRGTLDc1e5sDcK0zExgiMr9F5g1KgN6EgEjAfm+Wt9GucmDiune8ismWm09O8Mv0iFziH73gK8wamQG9SgeMzGRnj7cXXuTh3IexyRKQFLeYXeXvmdQaDAWoRbYJrdAr0JuY6LkPmEq/N/ZzhOd0PKiKbp1Kt8M7YmxytfEgpWlKYNwEFejMzUHdqDHoDvDZ7gMn0RNgViUgLqLk13h97l8Pl98lGMmC0Ca4ZKNCbnYFSpMjH7gnemnmD6cx02BWJSBNzPZeDI+/xdvZ1ktF5Akd7dJqFAr0VOFCI5jlSPsQbk6+ykFXjGRHZON/3OTx6iNeWfsZ0dEph3mQU6K3CQD6a41jlQ96ffpd0Ph12RSLSRIIg4Mjoh7yxeIC56IzaujYhBXorcSAbXeLd4lu8O/M22VI27IpEpAlYazk1cZIDiy8xER3FNwrzJqPDWVqSY1mKLPJ+7m2OzH6gbnIisqaPJ07z84WXmHDGlsNcO9qbkg5naUHWsaSjSV5NvcLhqYOUqqWwSxKRBmSt5fzUIC/PvcCQcxFPjWOawq1a70a3uQ7ZJtZYkrF5fpZ+kcAPeO6Bb9HX3Rd2WSLSIKy1nJn8mJdmf8JQRGHeCjYc6DqcpXlYx5JOJHlx8XkqXpnvfuG3FeoiQh
 
AEnBo/yY+n/paprgmsCRTmTcR8+snS4SxtwUC+M8uruVd488prLBUzYVckIiEKgoBTEyf5yfSPmeoaV5i3EE25twMDxa4CLxdeoHSpzO/84j9md+89mm0RaSPWWjzf48T4cX44+Tcs9M4qyFuMRuhtpNZV5c3yAV65/BKLxUVtcBRpE9ZavMDjo/Fj/N34DxTmLUoj9Dbjdtd5p/wG9UGX3334n7C/fz/GGI3WRVrQ6ov2YrXIicnjPD/9I9I7FxTmLUoj9Dbkdbm8x5v81Zm/ZCozRWADjdZFWpDFki1neXv4TX44+wOFeYvTfejtKm45t+M0f376v3Fx/gKe7+m5FWkhfuAzl53l50Mv8+LS8+R6l8IuSbaYRujtLAJjdw3z11f+kkvJi9TcmkJdpAX4gc9cbpaXhn7Ka8WfUelWc6l2sOFA11prizEw0TPKX1z5nxybOkq5XlaoizQpay2u7zKaHuEfhn7EoeBd3K562GXJJlOnOPlMyZ45fjT9N7jW5cm9T3J3z66wSxKRDbDWUvNqXFkc4pXRFxmInMbGdfxpO1Ggy1WZnjQ/WPi/DGe/xfce+j32938Ox9GqjEijC2zAUmmJM8nTvDL7IrMdU9r81sJu0ikOUKDLDWodVd5z32JxcJF//qU/4IGdDxKPxcMuS0RuIQgC5nNzHJx5n3eX3iDbpc1v7UqBLp9iYwED0ZNkL2X4/n2/z+O7f1k94EUajLWWIAi4OHeBt2bf4IR3VOvlbU7zqXJzBiY6R/nR1N/w7vhbLOQWwq5IRK5Rc2sMzJzhby//gKPBIdyEwrzdaYQut2Yg2TnPS5mfsFBZ4Nf3f5sv3PMLRCP6shEJUyqX4uTccX4++zLJ3jkNzQRQoMtaDJQ7Sxyuv0dqNMl33d/m4bseob+nP+zKRNqO7/tcmR/iWPoIhzLvUejLhV2SNBAFuqzNQD1RYzA4Q2pygWezX+Nre77BA7sf1C54kS1krb3
 
a+yNbyDKYPMvrswcYiQ7h9XohVycNxIICXTYgcALmEjO8VXiNVDXJr9W+zcP3PEJXR1fYpYm0nNUGT9ZaJlMTHE0e4WjmA+Y6p7FGzZ/k0zYc6Ooi1uYcKCWKHPePMj81xzeK3+KpfU+zr39f2JWJtIzVkXmtvrzx7WDyXQb9AcpdJd1fLrekEbpsnAE3WmfUDJPP5FmozfNc9dd4aNdDxGKxsKsTaWqrg6b5zDzn0gO8k3qTicgYXtxVmMtn2nCgq5e7rLKRgFRinoPVd5mdmuGppaf5lT1Pse9ujdZFble1VuX83CBHlj7gUnWQxXiawFELV/lMBjRClzvlQCVe4rx3lrmlGSYr43yt8hy/uPthOhOdYVcn0vBWR+TGGCaTE5xYOM6pwnEmnFHq8bpG5bJuCnTZFH7UI+Us8IF7kKmZSZ7KPsOv3vs19vXv06yOyGcwxlCulhmYPcMH6YNccs9TiBWwEY3KZWMU6LJ5HKg5VYb9IdL5FHPVWZ7b8y0e2fNLJOKJsKsTaUgzizMcnz3GseKHTJtJ6omaRuVyWxTosumCiE/GpDnqHWZiZozH00/w9f3f4IFdDxJxImGXJ9IQMoUMA3MfczT3IWP+MPlIjkCjcrkDCnTZGiuj9XF/hHQ1yfj4KE+nnuUr9z3Drl6dtS7tq1qvMpS8zOGFg1x2L5AySbyodrDLnVOgy5ayEUvByXPeH2CqMM65SwN8a/dv8Oi+x+ju6A67PJFtEwQBYwujHJp6n/P+WeadWWqRmvqwy6ZRoMvWM+BHfZZshjP+KWbmp/jSwuN896Hf5nO7PqfDXqQlXdu2dbGwyMmp4xzJfcCEGaUcKWvTm2w6/SSV7WOgHq0xE0yRDlKMDY3w9Myz/MYjv0lfV592w0tLWd29fmH2PO8tvM1lLlKI5AkcX9PrstnUy11CsrK+PmqGWfDmOPPxxzzR9SS/9aV/RFeiW8EuTenaEXm1XmVo7jLvzb3D
 
EBfJRjLUTV3T67Kl1MtdQhNEfAo2z+X4ecb8YQZOnubpjq/y3S//FrFoTMEuTcUYQ92tM7YwxpuTr3OeAXKxLJ7RhjfZXJab57BG6BIuA0EkoGorXE5cYNwf5czRU3yz/9d57rFvKtSlKfi+z1xmjjdHXuOMf4p0PIWLRuSyvdTLXRqDAd/4lE2Js50fc7lwkdOHTvLNfb/Okw8/GXZ1IjcVBAGLuUVev/QqJ2vHWOiZw49qjVy2lvn0F5h6uUsDMmBNQDVe5ljsMKezH/HYh0/w1b5v8LUvfp1IRI1pJHzWWsbnxzkw9AqDDJDrXsKP+TqnXEKlQJfGtDJir1DhhHOUU8WPOPD2K3x91zf5zuO/STwaxzGOZoxk2wQ2IAgCrsxd4WcTLzHgnqK+oxZ2WSJXKdCl8RkIYgEjd19m3Bvm0Pvv8tWdz/HtR79DT2ePgl22jLUWay0BAWfHBzgw/DMuxs7h9tahI+zqRK6nQJfmsdKgZvyuEaa8CQ4efYdn+7/Gs/d/lb19e4k7caKRqMJdbsu1d/AENsD1XWp+jZOjxzm68CGXnPPU7qpqfVwalgJdmo8BP+Yx2z/Fi/7f89aF1/iSeYxn932VJ+57kkQkQSwSw3G0xVg2xgs8XL/OzNIsx+eOcnzpKAtdc/g7tNFNGp/uQ5fmFoFiT57j9ggfp0+yf+p+nup/mmfue5Zd3bvpjHVq1C6fyQ98am6Nslfm/Mw5js0d5WIwSKmrCL36eSfNQyN0aQ0G3Hid8fgwU5Uxjp47zKNdv8xX9j/Dff330+F00BnrJBKJKNzb1OpgxBhDEARU3SpVr0KmkmFw/hyn0icYj45Q7aro/nFpSroPXVqOn/CZTUwza6c5NP4u+67s55GuL/LlvU+wf+d99MR76E5062z2NlStVynUCmRrS5ydHWBw6SwTZoxSRwG7Q6NxaQ7qFCftx0Cts8p45wjj3ggfjh7ifh7k8bu+zON7f5n+z
 
rvYkdhBIpa4+kJVL1hbi7UW13Mp1UoUagWG01c4tXCCcW+ExY7U8tq4SItQoEt7iEKxN88FznKpcJ730+9wX+x+Ht39OA/sfIDeWB89sR3s7NmJ4+g2uGYWBAGVWoVsJUvZLzFTmOFS8gKjpRHmIzNUusuaUpemdpNOcYACXdpQ0Omz0DnLArOczhynd6qfe6P7eajnCzyx/wl2dvTTE+lh545+Io7W3JtBEASUKiVy1Rx5N8dEdpxzqbPMubMknTnq3TXYGXaVIltLgS5tLegIyHYskmWRC/WzfHDxfe6N7ef+2IM8+bmv0N/VT1e0m96OXjo7OsMuV1ZYa/EDn3wpT8krUaznuZy8zKWlC8x406SjSbxuF7rCrlRk+yjQRVbFIRdfIscSF91Bjlw+zD3RPeztvJfP3/UF7t9xP93RHnrjffR19NGRUKuw7RQEAdlilnw9R8EtsFTPMJS+zEx5mlR9gXQ0hd/jhV2mSGgU6CI3E4PCXTkK5BixQxxJH6R/6m72dOzjvp77eaj78+zv3U93tIeuaDc9iR4F/CbzfZ9CuUDZK1HySuTqOS6nLzJRGWehMkfapKj31JZH4RqJiyjQRdZkwCYsmUSaDGku1gfpyHewe/4ediV2c3d8N/t69nFP5166nC66TBfd0R76e/pJxBNag18H31+ePs9VsxTdAiW/RMEWmClOs1hLk6qlSNUXyHdksTELsbArFmk8CnSRjXIs1a4KU0wwxQS4EE3G6PX72Bnpp9f0cXd0F/f3PMDurnvoinbRGemkO9ZDb1cvHYmOtg55z/MolPMUagXKXpmqXyFfLzBVmGS2Os1ifZGsmyEfzeN21pZ3pMdXfonILSnQRe6UAS/ukmF5BI8F4xkS853sYAc7Yr30RHroi/ezp3MPd8XvpjvaQ3e0i85INz3xHvq7lkfzN/afv7a7WTO4tjW053vky3ny1Txlr0jJL1P2SuTdHAvVeTK1RfJugZ
 
JXIO/nKcWLBHFf0+ciG2dBgS6y+QzYmKUaK1OlTIoFAKwH0XSUzqCLnkgPPdFeeqI99MX7uDtxNz3RHXRGupbb1Ea6iDtxEk6CDqeDvo6ddHd2E43e/Fv2VsF/bcDe6n2rf7/WY1yPa5PlAAAEOklEQVR7nbWWSq1CrpKj4pWp+lXqtkYtqFHxK1T9CmW/zFI9w1J9iYKbp+gVKHoFSrZEPVFb/umTWPklIndMh7OIbBMTAb/Lo0ieInlgdvkdNbAFiPgROp1OOpxOuiJdxJ0ECSdBZ6STndG76I/10xnpJGZixEycmBNb/rMTJ+7EiDkxIkRZfkUBERNZft1u7cqfzXUtIx3HwQ88LBYn4uD6LhiDMeBbH9e6eNalHiz/XgtqeIFL3brUgxoFL8+im6bkl6gGVepBjapfpRKUqfgVXONi4xYTBSIrvxTeIltGI3SRsDlgOiDAp0SREkUWr32/D9QMMS9GNIgRM1FiTpzoyu/Lob4a6BFuGeiY616QO46Db1cC3bk+0AMC3MDFte4nwe7X8VbednHxIh5B1F9e4zZ8EtrXaI6FApHWoMNZRJpB1OJG67jUqdzqmhsnz1bfvvZb1tzk/QDBNe+79uOuvV4v/0UalQF1NBYREWkJCnQREZEWoEAXERFpAQp0ERGRFqBAFxERaQEKdBERkRagQBcREWkBCnQREZHmZkGBLiIi0hI2HOjq5S4iIhIe+6m2kMs0QhcREWkBGw509XIXEREJj/n0sUfq5S4iItIqFOgiIiItQIEuIiLSAhToIiIiLUCBLiIi0gJ0H7qIiEgL0AhdRESkBeg+dBERkSaiTnEiIiItTIEuIiLSRG7SKQ5QoIuIiLQEBbqIiEgLUKCLiIi0AAW6iIhIC1Cgi4iItAAFuoiISHOzoEAXERFpCerlLiIi0gI0QhcREWkB6uUuIiLS3AxohC4iItISFOgiIiItQIEuIiLSAhToIiIiLUCBLiIi0gI
 
U6CIiIi1AgS4iItIC1gz0gAAX77q/e2zHl/n9ff+CXfHdW1aYiIhIu0s4Hfxq/9f59u7v0hfbefXv67hYrnZutQDRtR7MxSVD+rq/+1LPo/znR/6Mf/f5PyXrLlHyitc+sIiIiNyhRKSDndGd7Iz1syt+Dx1Ox9X3pUni4193fRQoAL23esAaVcYZI02KXey++o/si+xnb+JefHwCG4ACXUREZNMYHCImgmOun0y3WD7mJDWqK28DkI8CPwT+w60e0GKZZILX+Tnf4/vspP+Tf8wYokRXms6JiIjIVvLxeZ93GOAMLi4ABrwAfhL5yn964nQEJwLmcSBx/YcuH63m45s0aaaZsjGi7KDPxIl/ctXKdYa1G73feO1aH7uR69dbx+3WsJ6PudMa1lPHZtWwkce8nev1fGysho085u1cr+djYzVs5DFv53o9HxurYSOPeTvXN/rz4eExzhhv8Con+ciWKC5fClPAf7TwivkD+0/Zxz0JA3sCzHNg7gcbv/HBDBAhQoIO9nFv1yN88XN7uXdvNz29ceIdrOPJEBERkfXx8NwKpcISmcxlLoxPMJ4tUbIeLhaKFjvqY49EcDIG4/5/jtcO8KozHA0AAAAASUVORK5CYII="
+    }
+  },
+  "GoalBackground": {
+    "$id": "4",
+    "$type": "LongoMatch.Common.Image, LongoMatch",
+    "pngbuf": {
+      "$type": "System.Byte[], mscorlib",
+      "$value": 
"iVBORw0KGgoAAAANSUhEUgAAAZAAAAEsCAYAAADtt+XCAAAABHNCSVQICAgIfAhkiAAACZpJREFUeJzt2r+rJWcdx/FnZp459+wuqOgfYBEEA4KNlShooyn2DxAEIUm1fYpYioUWAcutoo2Ff0AKtVCLkMpGEBUkXcqkkWT33jPPzFhcVxJ2l/B89ro3V16vZmE5X+Y7v/Z9z+4O5ZO+cutzt14ajsOL2/n2uW3ZbhWeq+k4zKWUsp7vy3XvgvvxWeN+XI9xHh+Ox/Ff+/n+t4f/evi7Uso/SyllKKWUvZT9WrcD4MYZSym3r3sJAG6esZTy7eteAoCbZyylfPG6lwDg5hnLf/4dBAB6jNe9AAA3k4AAEBEQACICAkBEQACICAgAEQEBICIgAEQEBIBIfZbhn+8/e+uqFuHS/VfeuFtKKfd++Zpr+xlw/9X/3I833Y/PAvfjf+f14cd3e2d8AwEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIAJF63QvA/5uLj87r1rahZ6ad2ni6OE09M1vbhtOD8+53+PzDh3PvzOn8VNfWus5pW7ZxOS1d57Tv+3B6cPH0c9ovf3nnN3964RP7PbyY97L3XvNpXdauH6L3
 
tg2tta5rvm97OZ1fdF/zdrHUfe87p3XZxq21vudo24e2LPX1vvVKKc8YkA/ee/92z+fb+Wlqp9Z1w9pp6Z4ppZTlYpnasvQda1mntfNY66lNbek8p6VN66fc5D/+6rcvPn6sdWxL58PR1nFta9dMOy3dM2vrf3BLyR741tZpW/te/LWt09a2+Bv3/VfeuJvOcvX+8vs/P/Z+8PwNpZQf7qX8Ohn+8stfuuJ14Oar89SGadx7ZsZp2mqd1p6ZYRz2eja3vu1KmY+HpXemHmqbau06p2EatjrPXec0DsM+3z489Zz+8fZfXyillK9+62vvfvz3D8ezZRiGrv3qoa7TXLeu/eZxnw9913wcxnJ259h9zQ93zto49D1H9axu9ezQd83ruB9vHdtPvvDT7/dtePkNpGvBj7vz+TsPej4/1rpO89h3w2pdp9o3U0opU53Wepi75qY6rWOdumbqXNfp0Dcz1brWuT7xJj/6yerr3/vG359wrG06PHnuqcc61K3OfX8w1Xne5rO+F78e6lYPfTP/nTv2PfD1ULdD50tSz+ZtPvbvd//Vy28e99587a3eWa7eo4B89+WXHns/eP6e6a+wfvSLe3+4qkW49Cgg3/zBd979tM8CXCf/CwuAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAE
 
BEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASBSr3sB+H9z8dF53do29My0UxtPF6epZ2Zr23B6cN79Dp9/+HDunTmdn+raWtc5bcs2Lqel65z2fR9ODy6efk775S/v/OZPL3xiv4cX81723ms+rcva9UP03rahtdZ1zfdtL6fzi+5r3i6Wuu9957Qu27i11vccbfvQlqW+3rdeKeUZA/LBe+/f7vl8Oz9N7dS6blg7Ld0zpZSyXCxTW5a+Yy3rtHYeaz21qS2d57S0af2Um/zHX/32xcePtY5t6Xw42jqube2aaaele2Zt/Q9uKdkD39o6bWvfi7+2ddraFn/jvv/KG3fTWa7eX37/58feD56/oZTyw72UXyfDX375S1e8Dtx8dZ7aMI17z8w4TVut09ozM4zDXs/m1rddKfPxsPTO1ENtU61d5zRMw1bnueucxmHY59uHp57TP97+6wullPLVb33t3Y///uF4tgzD0LVfPdR1muvWtd887vOh75qPw1jO7hy7r/nhzlkbh77nqJ7VrZ4d+q55HffjrWP7yRd++v2+DS+/gXQt+HF3Pn/nQc/nx1rXaR77blit61T7ZkopZarTWg9z19xUp3WsU9dMnes6HfpmplrXOtcn3uRHP1l9/Xvf+PsTjrVNhyfPPfVYh7rVue8PpjrP23zW9+LXQ93qoW/mv3PHvge+Hup26HxJ6tm8zcf+/e6/evnN496br73VO8vVexSQ77780mPvB8/fM/0V1o9+ce8PV7UIlx4F5Js/+M67n/ZZgOvkf2EBEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICA
 
gAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAyllL2614CgJtnLKV8cN1LAHDzjKWUt697CQBunrGU8uC6lwDg5hlKKWUP/x1kKOWtq10HgOuwl3K3d+bf5QExFK9CmrIAAAAASUVORK5CYII="
+    }
+  },
+  "Capacity": 32,
+  "Count": 20
+}
+</ConsoleOutput>
+                          <ConsoleError />
+                        </UnitTestResult>
+                        <UnitTestResult>
+                          <TestDate>2014-06-06T20:25:58</TestDate>
+                          <Status />
+                          <Passed>1</Passed>
+                          <Errors>0</Errors>
+                          <Failures>0</Failures>
+                          <Inconclusive>0</Inconclusive>
+                          <NotRunnable>0</NotRunnable>
+                          <Skipped>0</Skipped>
+                          <Ignored>0</Ignored>
+                          <Time />
+                          <Message>Prueba satisfactoria
+
+Tiempo de ejecución: 0,18 ms</Message>
+                          <ConsoleOutput>{
+  "$id": "1",
+  "$type": "LongoMatch.Store.Templates.Categories, LongoMatch",
+  "Name": "default",
+  "Version": "2.1",
+  "GamePeriods": [
+    "1",
+    "2"
+  ],
+  "Image": null,
+  "Categories": null,
+  "FieldBackground": {
+    "$id": "2",
+    "$type": "LongoMatch.Common.Image, LongoMatch",
+    "pngbuf": {
+      "$type": "System.Byte[], mscorlib",
+      "$value": 
"iVBORw0KGgoAAAANSUhEUgAAAfQAAAEDCAYAAADDQfYrAAAABHNCSVQICAgIfAhkiAAAERNJREFUeJzt3dtvHOd9xvHnndkdLrkkxYNIS7QsS5ZkK7Kc1KnlxglqRC3gNoWLFG0KtDe96UXb3LX/RYGgh/teFC1QF70pjKJI3RhoEDsJ4lgRZMuJY0WSLYmyJZnn5WFP8/ZCB4uWbFFazr67v/f7IWTAo92Zn2YH+/A9zDvub/xfOqf2VK7SX0juRUkHJE0KAAD0olzSR5Le89K/pUpeKqtZK+VKjjol35X0cOACAQDAvSWSZiTNOOnrudp/2lbrjxNJ/yDCHACAPuWOt5T9VeKkp0OXAgAAHpyXezqRlIYuBAAAPDgnpUnoIgAAQEe8dH1gHQAA9DkCHQAAAwh0AAAMINABAOhvTiLQAQAwgUAHAMAAAh0AAAMIdAAADCDQAQAwoBS6gFASJXJKrk8NBAD0PS8pVy6vPHQpQUQT6KlSTWuXJjWpEY1qUENKWcYeAAzxaqmlVdVUU01X9JHmNSd/fWVU86II9N16WI/rsA7qkKY0rVGNKtOAEkYcAMAMf+NnXWta0YpmdUlndUa/0Dta0mLo8gpnPtB362E9r6/riJ7SsIbl6GQHAJPcjZ+qhlXVsKb1kB7TAY1rXD/UD7Ss5dAlFsp0E7WiQT2jZ/VFPa0Rjdx3mHvv5f3du2o+6+8+7z0P6n6P1Qs1FIHPo7NjbXcdfB6d7ZPPo7gabkqUaEzjOqbn9GUdK+QYvcR0C323ZrRP+1VRRZLU9m2dXnlLp5Z+pquNK2rkTSmSsZVuS1yi5yeO66sTv3lr23JzWa9c+2+dWf1lwMrikLpUT+94Ri9MfePWtpX2il6b+z+dWj4ZsLI4pK6kJ4YP6w92fevWtlprRa/P/0A/W/ppwMpsc3IaSAe0p7JXv77jWR2oHpST04hG9IS+oBP6qVYMt9JN
 
B/pOTW3qZj+59Kb+8fx3dGLxDS23ltXyrcAV2pW6VENpdVOg19or+q8r/6n/vfbdgJXFIUsy/dmeP78V6N57rbZqevXjV/TS7L8Grs6+LMn0e9O/vynQV9ur+v7cq/rni/8UsDL7yklZE+VJPTP2G/rbL/y9dmZTSpVqWCMa1ziB3q/KKiu57Z94fu2sTi6d0MWNCwGrikOqVM28sWmb914b7XWttmuBqopHI89Uzzc2bcuVq57XOf9d0MwzbbQ3n3/vPee/G9rSYnNBrbypxeaCdmZTkqRUicrKAhdXLNNj6O5To+Zt347m9gXgds4xGRRx8fJ39MIanhTtJeOBDgBALAh0AAD6G89DBwDAimgCvVv3SgMAekssc6eiCXQAACyLJtCZ5QsAsCyaQAcAwDICHYgAc0gA+wh0AAAMINABAKYZXiFuEwIdAAADCHQgAtzlAdhHoAMAYACBjq5gljUAFIanrQEAYEU0gU4LMSzGcMPi+kfMWMsdAAD0jWgCnRYiYsb1D5jG89ABALCCQAcAmMZKcQAAoG8Q6AAAGECgAwBgQDSBzn24AADLogl0AAAsiybQuQ83LHpIwuL8A/ZFE+gAAFhGoKMr6CEJi/MP2EegAwBgAIEORIAxdMA+Ah0AAAMIdCACjKEDpnmJQAcAwAQCHQCA/sbz0AEAsCKaQGeWLwDEySuO7/9oAh0AAMuiCXRm+QIALIsm0AEAsIxAByLAHBLAPgIdAAADCHQAgGlOccyhItABADCAQAciwF0egH0EOgAABhDo6ApmWQNAYXjaGgAAVkQT6LQQw2IMNyyuf8SMtdwBAEDfiCbQaSEiZlz/gGk8Dx0AACsIdACAaawUBwAA+gaBDgCAAQQ6AAAGRBPo3IcLALAsmkAHAMCyaAKd+3DDoockLM4/YF80gQ4AgGUEOrqCHpKwOP+AfQQ6AAAGEOhABBhDB+wj0AEAMIBABwDAgFIRO73Zu/d583A+3
 
QN487X3eu9W9g1gMybFAZK85LW1/NhqFt201QwriJcKCnRJylup6ksjaqxV5Ntd7AhIvLLhNVVGa1K5e4cFAPS+dqOsjcURNdcrN2KwO1yaqzJaUzayJpfkhQT+tgT6zd9IWvVM197dr9k3jmp5dlqNtYryVip1+dF1Saml8uCG9hwf0teODUrDXT08AKDHrM/v0NuvvqDX3pJaG5l8O+1yBV5p1lI2vKaJ/bPac+y0Jg5eVJLm27FzJ21jC33xgxm998pXdfWdA1qfG1NzI5N8wCF6l2thn1PzaIlAB4DINdYq+vjdfbr280TdbmR+wsslXnNn9uryycN65Nm39dhvvaHq1OK27H1bAn3h/Rn94uXjuviTp9SuZwp3sm7jE+WtRP7GLxXctgMAcfLeS7lT3iqpq/3sd3DyuVOjVlWjNqTVa+Oqr1T15Le+p8GxWsd777gJ3W6UNPvmk5p980m16wPaHOb+tj9b9Vmv38p+7vdYAABInWXPg7zeqVEb0qU3j+jDk4fvY/+freMW+spHOzX3q71qrlVu2+pVrjY0MLamtNKSc90MWadWvayN+UHJDX6ylVm+ABC3NFd5pK7K+JrSrK1uNgC9T9SsZaovDqpdvzlj22n12oQ+PvOo9hw7rWx4o6NjdBzo9ZUh1Zerur1lPrpvTlNf/FCV8bUwve9eaqxmGh47IGkyQAEAgF7iUq8d++d14MnzSsvtINnkc6f1a1V9+JN92piv3tiYqL5cVX2lGjbQvZd8O1X+qdmCAzvqGtixodJgq6PiOpFWWioPNIMdH+glzCFB7FziVR5qKBupB1vHxHsp27Gh8nD9k0CXlLdTtVudT2nbnmnod3xXhB/LpocdAHA753ojG+4YhvZO29FlwNKvAADTemUOVdFlEOgAABjQUaD3yC89AO6hV1ooAIpDCx0AAAMKCHRm0+JOzLIGgMJ4iRY6AAAmdBTod2909eZYHS3EsBjDDYvrHz
 
Hrleu/6DJooQMAYEA0s9xpISJmXP+AaU6ihQ4AgAkEOgDAtF7poWKlOAAAcE8EOgAABhDoAAAYEE2g98p9iAAAFCGaQAcAwLICVorrzZZwr8xyjBU9JGFx/gH7aKEDAGBAASvF0RLGneghCYvzD9hHCx0AAAMKGEMH0GsYQwfso4UOAIAB0TxtDYgZY+iAaV6ihQ4AgAkEOgAA/Y3noQMAYEU0gc4sXwCIU698/xddRjSBDgCAZdEEOrN8AQCWRRPoAABYxkpxQAR6ZQwRQHFooQMAYACBDgAwrVfmUBVdBoEOAIABrOUORKBXWigAikMLHQAAAwoIdGbT4k7MsgaAwvC0NQAArCjgPvTeHKujhRgWY7hhcf0jZr1y/bOWOwAAuKdoZrnTQkTMuP4B03geOgAAVhDoAADTeqWHipXiAADAPRHoAAAYQKADAGBANIHeK/chAgBQhGgCHQAAywpYKa43W8K9MssxVvSQhMX5B+yjhQ4AgAEFrBRHSxh3oockLM4/YB8tdAAADChgDB1Ar2EMHbCPFjoAAAZE87Q1IGaMoQOmeYkWOgAAJhDoAAD0N56HDgCAFdEEOrN8ASBOvfL9X3QZ0QQ6AACWRRPozPIFAFgWTaADAGAZK8UBEeiVMUQAxaGFDgCAAaXt2Mkdw9PeyXsXtgWfq1cfzQ4A6KKbc6i8l3yusA8FzZ18vrkt7ZyX24bA6ijQnaR0oKF0oLFp++K5CblyW6OPLCrNWl0/ee16SSsXx1TbPyo92d1jAwB6T95KtDK7Q3P5Qxqarikp5d0twDs11zItnR/X6kcjt/+F0oGGSpV6x4forIXupKHJJVWn5iWXS/76bx3N2qCuntirqyf2dlxgJ5pTjCgAEnd5APJSfa6q2dMHQ1eySVJuqTq1oMHxlc731ekOqpOLmj5yTtWdi6KPGwCALXK5JvbPatdTZ5SU2h3vrvMmrJP2PveWHv/GD1WdnldSaunuwe7
 
vc3snitgnOsEsawD94X6z6kHyxivNGpp47JIO/c6P9NDRX91vkXcrYnsmxWXVdR363ddVnZrTue8f08L7M2rXM+Wtkrx3Xc9Wl+RKSrnKQyUlyaCktLsFAAB6iktzZcNrKle9fCu9nk1dLeBmNrWVDa1r8tAFHXrhR5o6ck4u2Z6Q3JZAl6RypaFHv3ZKM0+/q7lze7R0cZfWro2rVc+26xBbVqrUNTixpH1HZ1QZ+5KkMVqIgTGGGxbXP2Lm5TU0uagnXvyxFp7Y0MbCqNrNbYu/rXFe2dCGqtMLGt83q/F9l7elm/122/4vKg/VtevoWe06ena7d33fxvS8Eh0NXQYAILBSpaHpI+d05Mh7oUspTDTTwGkhImZc/4BpPA8dAAArCHQAAAwg0AEAprmga712D4EOAIABBDoAAAYQ6AAAGBBNoLOwBgDAsmgCHQAAy6IJdBbWCIsekrA4/4B90QQ6AACWEejoCnpIwuL8A/YR6AAAGECgAxFgDB2wj0AHAMAAAh2IAGPogGleItABADCBQAcAoL85iUAHAMCEaAKdWb4AECevOL7/owl0AAAsiybQmeULALAsmkAHAMAyAh2IAHNIAPsIdAAADCDQAQCmOcUxh4pABwDAAAIdiAB3eQD2EegAABhAoKMrmGUNAIXhaWsAAFgRTaDTQgyLMdywuP4RM9ZyBwAAfSOaQKeFiJhx/QOm8Tx0AACsINABAKaxUhwAAOgbBDoAAAYQ6AAAGBBNoHMfLgDAsmgCHQAAy6IJdO7DDYsekrA4/4B90QQ6AACWEejoCnpIwuL8A/YR6AAAGECgAxFgDB2wj0AHAMAAAh2IAGPogGleItABADCBQAcAoL/xPHQAAKyIJtCZ5QsAcfKK4/s/mkAHAMCyaAKdWb4AAMuiCXQAACwj0IEIMIcEsI9ABwDAAAIdAGCaUxxzqAh0AAAMINCBCHCXB2AfgQ4AgAEEOrqCWdYAUBietgYA
 
gBXRBDotxLAYww2L6x8xYy13AADQN6IJdFqIiBnXP2Ca/eeh58o3dbUMl0ZUSSoBKwIAFC1RotHSjk3f917XM8GyUugCirSmVTXUuPX/vzb6ZX1z1x/pzcU3tNauKY9kXCWE1KXaXXl407YsyXRo+LA+bn4cqKp4lF1Zjw7t37Qtc5n2Dz2mY2NfCVRVPDJX1oHqoU3byklZ+wb3c/4L5CQ5JRovT+j5yePaNTBz6++aaqimWrjiusD9tf/2kqTR0IUUYZd260V9U4d1RIlSSVIjb+ji+gdaaM6r7W3/thaSc9Keyl7N3Bbqjbyu99fOa6G5ELCyOCTOaXrgIT06+EmoN/K6Lm1c0rX61YCVxSFxTuPlCR2sPn5rWyNv6PLGJV2pXwlYmW1O1xsTD1V2a0/lkVvbG2rotE7pP/SSGqqHK7BYL5sOdCenY/qKflsvaFI7ldgeYQAAfEpbbV3Q+/qe/kfv6uehyynSy6a73L283tYpDWpQT+lLmtEeDWggmoX6ASBWXrlWtaqLuqATekNn9MvQJRXOdKBL0rrW9GO9rgv6QIf0hHZqSlVVVVZGsAOAMV5edW1oVau6rEs6qzO6rNko7kU3H+jS9fGT8zqri/pAIxrRsEaU0VIHAHO8vNa1plWtallLUQT5TVEE+k0ttbRw4wcAAEuYJQYAgAEEOgAABhDoAAAYQKADAGAAgQ4AgAEEOgAA/c1LBDoAACYQ6AAA9Df7z0MHACAWBDoAAAYQ6AAAGJBIWgpdBAAAeCD+xn8WEy/9S+hqAADA/fG69Si5ppP/96Sp5t95+e94+fnPeZu//mfLh9nC6z/9mnu9535reJB9Pkjd213Dg76nkxru9ho+j87e00kNd3sNn0dn7+mkhru9hs+js/d0UsPdXhPt5yEvnffStyW95v7E/6F2a9eAVzIutZ6T3CEnDW79gAAAoMsWvdw7TTVPlpQuJUpa/w8yrdC1zPql6AAAAABJR
 U5ErkJggg=="
+    }
+  },
+  "HalfFieldBackground": {
+    "$id": "3",
+    "$type": "LongoMatch.Common.Image, LongoMatch",
+    "pngbuf": {
+      "$type": "System.Byte[], mscorlib",
+      "$value": 
"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"
+    }
+  },
+  "GoalBackground": {
+    "$id": "4",
+    "$type": "LongoMatch.Common.Image, LongoMatch",
+    "pngbuf": {
+      "$type": "System.Byte[], mscorlib",
+      "$value": 
"iVBORw0KGgoAAAANSUhEUgAAAZAAAAEsCAYAAADtt+XCAAAABHNCSVQICAgIfAhkiAAACZpJREFUeJzt2r+rJWcdx/FnZp459+wuqOgfYBEEA4KNlShooyn2DxAEIUm1fYpYioUWAcutoo2Ff0AKtVCLkMpGEBUkXcqkkWT33jPPzFhcVxJ2l/B89ro3V16vZmE5X+Y7v/Z9z+4O5ZO+cutzt14ajsOL2/n2uW3ZbhWeq+k4zKWUsp7vy3XvgvvxWeN+XI9xHh+Ox/Ff+/n+t4f/evi7Uso/SyllKKWUvZT9WrcD4MYZSym3r3sJAG6esZTy7eteAoCbZyylfPG6lwDg5hnLf/4dBAB6jNe9AAA3k4AAEBEQACICAkBEQACICAgAEQEBICIgAEQEBIBIfZbhn+8/e+uqFuHS/VfeuFtKKfd++Zpr+xlw/9X/3I833Y/PAvfjf+f14cd3e2d8AwEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIAJF63QvA/5uLj87r1rahZ6ad2ni6OE09M1vbhtOD8+53+PzDh3PvzOn8VNfWus5pW7ZxOS1d57Tv+3B6cPH0c9ovf3nnN3964RP7PbyY97L3XvNpXdauH6L3
 
tg2tta5rvm97OZ1fdF/zdrHUfe87p3XZxq21vudo24e2LPX1vvVKKc8YkA/ee/92z+fb+Wlqp9Z1w9pp6Z4ppZTlYpnasvQda1mntfNY66lNbek8p6VN66fc5D/+6rcvPn6sdWxL58PR1nFta9dMOy3dM2vrf3BLyR741tZpW/te/LWt09a2+Bv3/VfeuJvOcvX+8vs/P/Z+8PwNpZQf7qX8Ohn+8stfuuJ14Oar89SGadx7ZsZp2mqd1p6ZYRz2eja3vu1KmY+HpXemHmqbau06p2EatjrPXec0DsM+3z489Zz+8fZfXyillK9+62vvfvz3D8ezZRiGrv3qoa7TXLeu/eZxnw9913wcxnJ259h9zQ93zto49D1H9axu9ezQd83ruB9vHdtPvvDT7/dtePkNpGvBj7vz+TsPej4/1rpO89h3w2pdp9o3U0opU53Wepi75qY6rWOdumbqXNfp0Dcz1brWuT7xJj/6yerr3/vG359wrG06PHnuqcc61K3OfX8w1Xne5rO+F78e6lYPfTP/nTv2PfD1ULdD50tSz+ZtPvbvd//Vy28e99587a3eWa7eo4B89+WXHns/eP6e6a+wfvSLe3+4qkW49Cgg3/zBd979tM8CXCf/CwuAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAE
 
BEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASBSr3sB+H9z8dF53do29My0UxtPF6epZ2Zr23B6cN79Dp9/+HDunTmdn+raWtc5bcs2Lqel65z2fR9ODy6efk775S/v/OZPL3xiv4cX81723ms+rcva9UP03rahtdZ1zfdtL6fzi+5r3i6Wuu9957Qu27i11vccbfvQlqW+3rdeKeUZA/LBe+/f7vl8Oz9N7dS6blg7Ld0zpZSyXCxTW5a+Yy3rtHYeaz21qS2d57S0af2Um/zHX/32xcePtY5t6Xw42jqube2aaaele2Zt/Q9uKdkD39o6bWvfi7+2ddraFn/jvv/KG3fTWa7eX37/58feD56/oZTyw72UXyfDX375S1e8Dtx8dZ7aMI17z8w4TVut09ozM4zDXs/m1rddKfPxsPTO1ENtU61d5zRMw1bnueucxmHY59uHp57TP97+6wullPLVb33t3Y///uF4tgzD0LVfPdR1muvWtd887vOh75qPw1jO7hy7r/nhzlkbh77nqJ7VrZ4d+q55HffjrWP7yRd++v2+DS+/gXQt+HF3Pn/nQc/nx1rXaR77blit61T7ZkopZarTWg9z19xUp3WsU9dMnes6HfpmplrXOtcn3uRHP1l9/Xvf+PsTjrVNhyfPPfVYh7rVue8PpjrP23zW9+LXQ93qoW/mv3PHvge+Hup26HxJ6tm8zcf+/e6/evnN496br73VO8vVexSQ77780mPvB8/fM/0V1o9+ce8PV7UIlx4F5Js/+M67n/ZZgOvkf2EBEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICA
 
gAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAyllL2614CgJtnLKV8cN1LAHDzjKWUt697CQBunrGU8uC6lwDg5hlKKWUP/x1kKOWtq10HgOuwl3K3d+bf5QExFK9CmrIAAAAASUVORK5CYII="
+    }
+  },
+  "Capacity": 32,
+  "Count": 20
+}
+</ConsoleOutput>
+                          <ConsoleError />
+                        </UnitTestResult>
+                        <UnitTestResult>
+                          <TestDate>2014-06-06T20:26:24</TestDate>
+                          <Status />
+                          <Passed>1</Passed>
+                          <Errors>0</Errors>
+                          <Failures>0</Failures>
+                          <Inconclusive>0</Inconclusive>
+                          <NotRunnable>0</NotRunnable>
+                          <Skipped>0</Skipped>
+                          <Ignored>0</Ignored>
+                          <Time />
+                          <Message>Prueba satisfactoria
+
+Tiempo de ejecución: 0,20 ms</Message>
+                          <ConsoleOutput>{
+  "$id": "1",
+  "$type": "LongoMatch.Store.Templates.Categories, LongoMatch",
+  "Name": "default",
+  "Version": "2.1",
+  "GamePeriods": [
+    "1",
+    "2"
+  ],
+  "Image": null,
+  "Categories": {
+    "$ref": "1"
+  },
+  "FieldBackground": {
+    "$id": "2",
+    "$type": "LongoMatch.Common.Image, LongoMatch",
+    "pngbuf": {
+      "$type": "System.Byte[], mscorlib",
+      "$value": 
"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
 U5ErkJggg=="
+    }
+  },
+  "HalfFieldBackground": {
+    "$id": "3",
+    "$type": "LongoMatch.Common.Image, LongoMatch",
+    "pngbuf": {
+      "$type": "System.Byte[], mscorlib",
+      "$value": 
"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"
+    }
+  },
+  "GoalBackground": {
+    "$id": "4",
+    "$type": "LongoMatch.Common.Image, LongoMatch",
+    "pngbuf": {
+      "$type": "System.Byte[], mscorlib",
+      "$value": 
"iVBORw0KGgoAAAANSUhEUgAAAZAAAAEsCAYAAADtt+XCAAAABHNCSVQICAgIfAhkiAAACZpJREFUeJzt2r+rJWcdx/FnZp459+wuqOgfYBEEA4KNlShooyn2DxAEIUm1fYpYioUWAcutoo2Ff0AKtVCLkMpGEBUkXcqkkWT33jPPzFhcVxJ2l/B89ro3V16vZmE5X+Y7v/Z9z+4O5ZO+cutzt14ajsOL2/n2uW3ZbhWeq+k4zKWUsp7vy3XvgvvxWeN+XI9xHh+Ox/Ff+/n+t4f/evi7Uso/SyllKKWUvZT9WrcD4MYZSym3r3sJAG6esZTy7eteAoCbZyylfPG6lwDg5hnLf/4dBAB6jNe9AAA3k4AAEBEQACICAkBEQACICAgAEQEBICIgAEQEBIBIfZbhn+8/e+uqFuHS/VfeuFtKKfd++Zpr+xlw/9X/3I833Y/PAvfjf+f14cd3e2d8AwEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIAJF63QvA/5uLj87r1rahZ6ad2ni6OE09M1vbhtOD8+53+PzDh3PvzOn8VNfWus5pW7ZxOS1d57Tv+3B6cPH0c9ovf3nnN3964RP7PbyY97L3XvNpXdauH6L3
 
tg2tta5rvm97OZ1fdF/zdrHUfe87p3XZxq21vudo24e2LPX1vvVKKc8YkA/ee/92z+fb+Wlqp9Z1w9pp6Z4ppZTlYpnasvQda1mntfNY66lNbek8p6VN66fc5D/+6rcvPn6sdWxL58PR1nFta9dMOy3dM2vrf3BLyR741tZpW/te/LWt09a2+Bv3/VfeuJvOcvX+8vs/P/Z+8PwNpZQf7qX8Ohn+8stfuuJ14Oar89SGadx7ZsZp2mqd1p6ZYRz2eja3vu1KmY+HpXemHmqbau06p2EatjrPXec0DsM+3z489Zz+8fZfXyillK9+62vvfvz3D8ezZRiGrv3qoa7TXLeu/eZxnw9913wcxnJ259h9zQ93zto49D1H9axu9ezQd83ruB9vHdtPvvDT7/dtePkNpGvBj7vz+TsPej4/1rpO89h3w2pdp9o3U0opU53Wepi75qY6rWOdumbqXNfp0Dcz1brWuT7xJj/6yerr3/vG359wrG06PHnuqcc61K3OfX8w1Xne5rO+F78e6lYPfTP/nTv2PfD1ULdD50tSz+ZtPvbvd//Vy28e99587a3eWa7eo4B89+WXHns/eP6e6a+wfvSLe3+4qkW49Cgg3/zBd979tM8CXCf/CwuAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAE
 
BEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASBSr3sB+H9z8dF53do29My0UxtPF6epZ2Zr23B6cN79Dp9/+HDunTmdn+raWtc5bcs2Lqel65z2fR9ODy6efk775S/v/OZPL3xiv4cX81723ms+rcva9UP03rahtdZ1zfdtL6fzi+5r3i6Wuu9957Qu27i11vccbfvQlqW+3rdeKeUZA/LBe+/f7vl8Oz9N7dS6blg7Ld0zpZSyXCxTW5a+Yy3rtHYeaz21qS2d57S0af2Um/zHX/32xcePtY5t6Xw42jqube2aaaele2Zt/Q9uKdkD39o6bWvfi7+2ddraFn/jvv/KG3fTWa7eX37/58feD56/oZTyw72UXyfDX375S1e8Dtx8dZ7aMI17z8w4TVut09ozM4zDXs/m1rddKfPxsPTO1ENtU61d5zRMw1bnueucxmHY59uHp57TP97+6wullPLVb33t3Y///uF4tgzD0LVfPdR1muvWtd887vOh75qPw1jO7hy7r/nhzlkbh77nqJ7VrZ4d+q55HffjrWP7yRd++v2+DS+/gXQt+HF3Pn/nQc/nx1rXaR77blit61T7ZkopZarTWg9z19xUp3WsU9dMnes6HfpmplrXOtcn3uRHP1l9/Xvf+PsTjrVNhyfPPfVYh7rVue8PpjrP23zW9+LXQ93qoW/mv3PHvge+Hup26HxJ6tm8zcf+/e6/evnN496br73VO8vVexSQ77780mPvB8/fM/0V1o9+ce8PV7UIlx4F5Js/+M67n/ZZgOvkf2EBEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICA
 
gAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAyllL2614CgJtnLKV8cN1LAHDzjKWUt697CQBunrGU8uC6lwDg5hlKKWUP/x1kKOWtq10HgOuwl3K3d+bf5QExFK9CmrIAAAAASUVORK5CYII="
+    }
+  },
+  "Capacity": 32,
+  "Count": 20
+}
+</ConsoleOutput>
+                          <ConsoleError />
+                        </UnitTestResult>
+                        <UnitTestResult>
+                          <TestDate>2014-06-06T20:26:39</TestDate>
+                          <Status />
+                          <Passed>1</Passed>
+                          <Errors>0</Errors>
+                          <Failures>0</Failures>
+                          <Inconclusive>0</Inconclusive>
+                          <NotRunnable>0</NotRunnable>
+                          <Skipped>0</Skipped>
+                          <Ignored>0</Ignored>
+                          <Time />
+                          <Message>Prueba satisfactoria
+
+Tiempo de ejecución: 0,19 ms</Message>
+                          <ConsoleOutput>{
+  "$id": "1",
+  "$type": "LongoMatch.Store.Templates.Categories, LongoMatch",
+  "Name": "default",
+  "Version": "2.1",
+  "GamePeriods": [
+    "1",
+    "2"
+  ],
+  "Image": null,
+  "Categories": [
+    {
+      "$id": "2",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "5845f457-2ddc-44d5-b161-601e363e9140",
+      "ID": "5845f457-2ddc-44d5-b161-601e363e9140",
+      "name": "Category 0",
+      "Name": "Category 0",
+      "start": {
+        "$id": "3",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "3",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "4",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "4",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "5",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "5",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": -1,
+      "Position": -1,
+      "subcategories": [
+        {
+          "$id": "6",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "7",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "6"
+        },
+        {
+          "$ref": "7"
+        }
+      ],
+      "Color": {
+        "$id": "8",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "9",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "7f49ecac-5441-4dec-b3dd-4b66e804125c",
+      "ID": "7f49ecac-5441-4dec-b3dd-4b66e804125c",
+      "name": "Category 1",
+      "Name": "Category 1",
+      "start": {
+        "$id": "10",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "10",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "11",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "11",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "12",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": 100,
+        "Modifier": 0,
+        "Defined": true
+      },
+      "Hotkey": {
+        "$id": "12",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": 100,
+        "Modifier": 0,
+        "Defined": true
+      },
+      "position": 0,
+      "Position": 0,
+      "subcategories": [
+        {
+          "$id": "13",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "14",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "13"
+        },
+        {
+          "$ref": "14"
+        }
+      ],
+      "Color": {
+        "$id": "15",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "16",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "1755d18a-2e91-4fc3-af2f-2b4b778a9812",
+      "ID": "1755d18a-2e91-4fc3-af2f-2b4b778a9812",
+      "name": "Category 2",
+      "Name": "Category 2",
+      "start": {
+        "$id": "17",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "17",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "18",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "18",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "19",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "19",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 1,
+      "Position": 1,
+      "subcategories": [
+        {
+          "$id": "20",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "21",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "20"
+        },
+        {
+          "$ref": "21"
+        }
+      ],
+      "Color": {
+        "$id": "22",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "23",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "368b23a6-c022-4afc-aebf-cabac0395e31",
+      "ID": "368b23a6-c022-4afc-aebf-cabac0395e31",
+      "name": "Category 3",
+      "Name": "Category 3",
+      "start": {
+        "$id": "24",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "24",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "25",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "25",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "26",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "26",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 2,
+      "Position": 2,
+      "subcategories": [
+        {
+          "$id": "27",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "28",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "27"
+        },
+        {
+          "$ref": "28"
+        }
+      ],
+      "Color": {
+        "$id": "29",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "30",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "fd11e6a6-4889-465f-b4a7-cb16f5104bbf",
+      "ID": "fd11e6a6-4889-465f-b4a7-cb16f5104bbf",
+      "name": "Category 4",
+      "Name": "Category 4",
+      "start": {
+        "$id": "31",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "31",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "32",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "32",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "33",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "33",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 3,
+      "Position": 3,
+      "subcategories": [
+        {
+          "$id": "34",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "35",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "34"
+        },
+        {
+          "$ref": "35"
+        }
+      ],
+      "Color": {
+        "$id": "36",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "37",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "d570ccc9-5132-4985-a57c-6127444ae6b9",
+      "ID": "d570ccc9-5132-4985-a57c-6127444ae6b9",
+      "name": "Category 5",
+      "Name": "Category 5",
+      "start": {
+        "$id": "38",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "38",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "39",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "39",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "40",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "40",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 4,
+      "Position": 4,
+      "subcategories": [
+        {
+          "$id": "41",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "42",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "41"
+        },
+        {
+          "$ref": "42"
+        }
+      ],
+      "Color": {
+        "$id": "43",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "44",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "663c2efa-e035-40d5-8016-275830ab337d",
+      "ID": "663c2efa-e035-40d5-8016-275830ab337d",
+      "name": "Category 6",
+      "Name": "Category 6",
+      "start": {
+        "$id": "45",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "45",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "46",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "46",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "47",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "47",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 5,
+      "Position": 5,
+      "subcategories": [
+        {
+          "$id": "48",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "49",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "48"
+        },
+        {
+          "$ref": "49"
+        }
+      ],
+      "Color": {
+        "$id": "50",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "51",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "0bbb95e4-aa55-4a4e-8b03-7b20d19da8ee",
+      "ID": "0bbb95e4-aa55-4a4e-8b03-7b20d19da8ee",
+      "name": "Category 7",
+      "Name": "Category 7",
+      "start": {
+        "$id": "52",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "52",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "53",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "53",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "54",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "54",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 6,
+      "Position": 6,
+      "subcategories": [
+        {
+          "$id": "55",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "56",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "55"
+        },
+        {
+          "$ref": "56"
+        }
+      ],
+      "Color": {
+        "$id": "57",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "58",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "a1b2cb44-3f88-4bbf-9734-8c2711a90ae6",
+      "ID": "a1b2cb44-3f88-4bbf-9734-8c2711a90ae6",
+      "name": "Category 8",
+      "Name": "Category 8",
+      "start": {
+        "$id": "59",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "59",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "60",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "60",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "61",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "61",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 7,
+      "Position": 7,
+      "subcategories": [
+        {
+          "$id": "62",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "63",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "62"
+        },
+        {
+          "$ref": "63"
+        }
+      ],
+      "Color": {
+        "$id": "64",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "65",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "1ce743c8-8912-42ad-8e75-cbb0f338ef2e",
+      "ID": "1ce743c8-8912-42ad-8e75-cbb0f338ef2e",
+      "name": "Category 9",
+      "Name": "Category 9",
+      "start": {
+        "$id": "66",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "66",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "67",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "67",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "68",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "68",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 8,
+      "Position": 8,
+      "subcategories": [
+        {
+          "$id": "69",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "70",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "69"
+        },
+        {
+          "$ref": "70"
+        }
+      ],
+      "Color": {
+        "$id": "71",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "72",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "309cf7f9-2948-4281-9821-6752370e9276",
+      "ID": "309cf7f9-2948-4281-9821-6752370e9276",
+      "name": "Category 10",
+      "Name": "Category 10",
+      "start": {
+        "$id": "73",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "73",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "74",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "74",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "75",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "75",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 9,
+      "Position": 9,
+      "subcategories": [
+        {
+          "$id": "76",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "77",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "76"
+        },
+        {
+          "$ref": "77"
+        }
+      ],
+      "Color": {
+        "$id": "78",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "79",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "da3e873d-3cfe-409d-a28b-306397a08535",
+      "ID": "da3e873d-3cfe-409d-a28b-306397a08535",
+      "name": "Category 11",
+      "Name": "Category 11",
+      "start": {
+        "$id": "80",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "80",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "81",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "81",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "82",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "82",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 10,
+      "Position": 10,
+      "subcategories": [
+        {
+          "$id": "83",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "84",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "83"
+        },
+        {
+          "$ref": "84"
+        }
+      ],
+      "Color": {
+        "$id": "85",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "86",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "e35989cc-42f4-43b6-8cc5-9213f1524ec0",
+      "ID": "e35989cc-42f4-43b6-8cc5-9213f1524ec0",
+      "name": "Category 12",
+      "Name": "Category 12",
+      "start": {
+        "$id": "87",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "87",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "88",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "88",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "89",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "89",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 11,
+      "Position": 11,
+      "subcategories": [
+        {
+          "$id": "90",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "91",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "90"
+        },
+        {
+          "$ref": "91"
+        }
+      ],
+      "Color": {
+        "$id": "92",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "93",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "f7aeab6a-8f86-4425-88a3-7d25a8d729f8",
+      "ID": "f7aeab6a-8f86-4425-88a3-7d25a8d729f8",
+      "name": "Category 13",
+      "Name": "Category 13",
+      "start": {
+        "$id": "94",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "94",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "95",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "95",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "96",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "96",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 12,
+      "Position": 12,
+      "subcategories": [
+        {
+          "$id": "97",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "98",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "97"
+        },
+        {
+          "$ref": "98"
+        }
+      ],
+      "Color": {
+        "$id": "99",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "100",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "8e079dab-bd4e-4c63-b553-3b6b1f6fe1e1",
+      "ID": "8e079dab-bd4e-4c63-b553-3b6b1f6fe1e1",
+      "name": "Category 14",
+      "Name": "Category 14",
+      "start": {
+        "$id": "101",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "101",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "102",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "102",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "103",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "103",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 13,
+      "Position": 13,
+      "subcategories": [
+        {
+          "$id": "104",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "105",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "104"
+        },
+        {
+          "$ref": "105"
+        }
+      ],
+      "Color": {
+        "$id": "106",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "107",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "2e5df4f8-f17f-4337-bcb6-ec630e2f986f",
+      "ID": "2e5df4f8-f17f-4337-bcb6-ec630e2f986f",
+      "name": "Category 15",
+      "Name": "Category 15",
+      "start": {
+        "$id": "108",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "108",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "109",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "109",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "110",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "110",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 14,
+      "Position": 14,
+      "subcategories": [
+        {
+          "$id": "111",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "112",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "111"
+        },
+        {
+          "$ref": "112"
+        }
+      ],
+      "Color": {
+        "$id": "113",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "114",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "90dd1b63-0678-412e-a0fc-a6409e6caf24",
+      "ID": "90dd1b63-0678-412e-a0fc-a6409e6caf24",
+      "name": "Category 16",
+      "Name": "Category 16",
+      "start": {
+        "$id": "115",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "115",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "116",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "116",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "117",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "117",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 15,
+      "Position": 15,
+      "subcategories": [
+        {
+          "$id": "118",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "119",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "118"
+        },
+        {
+          "$ref": "119"
+        }
+      ],
+      "Color": {
+        "$id": "120",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "121",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "63a37c3c-99e1-45ea-906c-3bdc5798ec0d",
+      "ID": "63a37c3c-99e1-45ea-906c-3bdc5798ec0d",
+      "name": "Category 17",
+      "Name": "Category 17",
+      "start": {
+        "$id": "122",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "122",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "123",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "123",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "124",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "124",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 16,
+      "Position": 16,
+      "subcategories": [
+        {
+          "$id": "125",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "126",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "125"
+        },
+        {
+          "$ref": "126"
+        }
+      ],
+      "Color": {
+        "$id": "127",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "128",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "ddf63750-94f6-4cf6-9803-f4aa54e72a50",
+      "ID": "ddf63750-94f6-4cf6-9803-f4aa54e72a50",
+      "name": "Category 18",
+      "Name": "Category 18",
+      "start": {
+        "$id": "129",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "129",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "130",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "130",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "131",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "131",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 17,
+      "Position": 17,
+      "subcategories": [
+        {
+          "$id": "132",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "133",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "132"
+        },
+        {
+          "$ref": "133"
+        }
+      ],
+      "Color": {
+        "$id": "134",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "135",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "uuid": "eb8e5d7d-fbfb-4c9c-b5d0-4bc9dcd41347",
+      "ID": "eb8e5d7d-fbfb-4c9c-b5d0-4bc9dcd41347",
+      "name": "Category 19",
+      "Name": "Category 19",
+      "start": {
+        "$id": "136",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Start": {
+        "$id": "136",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "stop": {
+        "$id": "137",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "137",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "hotkey": {
+        "$id": "138",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Hotkey": {
+        "$id": "138",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "position": 18,
+      "Position": 18,
+      "subcategories": [
+        {
+          "$id": "139",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "140",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "SubCategories": [
+        {
+          "$ref": "139"
+        },
+        {
+          "$ref": "140"
+        }
+      ],
+      "Color": {
+        "$id": "141",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "red": 65535,
+      "green": 0,
+      "blue": 0,
+      "sort_method": 1,
+      "SortMethod": 1,
+      "tagfieldpos": true,
+      "TagFieldPosition": true,
+      "taghalffieldpos": false,
+      "TagHalfFieldPosition": false,
+      "taggoalpos": false,
+      "TagGoalPosistion": false,
+      "fieldposisdist": false,
+      "FieldPositionIsDistance": false,
+      "halffieldposisdist": false,
+      "HalfFieldPositionIsDistance": false
+    }
+  ],
+  "FieldBackground": {
+    "$id": "142",
+    "$type": "LongoMatch.Common.Image, LongoMatch",
+    "pngbuf": {
+      "$type": "System.Byte[], mscorlib",
+      "$value": 
"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
 U5ErkJggg=="
+    }
+  },
+  "HalfFieldBackground": {
+    "$id": "143",
+    "$type": "LongoMatch.Common.Image, LongoMatch",
+    "pngbuf": {
+      "$type": "System.Byte[], mscorlib",
+      "$value": 
"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"
+    }
+  },
+  "GoalBackground": {
+    "$id": "144",
+    "$type": "LongoMatch.Common.Image, LongoMatch",
+    "pngbuf": {
+      "$type": "System.Byte[], mscorlib",
+      "$value": 
"iVBORw0KGgoAAAANSUhEUgAAAZAAAAEsCAYAAADtt+XCAAAABHNCSVQICAgIfAhkiAAACZpJREFUeJzt2r+rJWcdx/FnZp459+wuqOgfYBEEA4KNlShooyn2DxAEIUm1fYpYioUWAcutoo2Ff0AKtVCLkMpGEBUkXcqkkWT33jPPzFhcVxJ2l/B89ro3V16vZmE5X+Y7v/Z9z+4O5ZO+cutzt14ajsOL2/n2uW3ZbhWeq+k4zKWUsp7vy3XvgvvxWeN+XI9xHh+Ox/Ff+/n+t4f/evi7Uso/SyllKKWUvZT9WrcD4MYZSym3r3sJAG6esZTy7eteAoCbZyylfPG6lwDg5hnLf/4dBAB6jNe9AAA3k4AAEBEQACICAkBEQACICAgAEQEBICIgAEQEBIBIfZbhn+8/e+uqFuHS/VfeuFtKKfd++Zpr+xlw/9X/3I833Y/PAvfjf+f14cd3e2d8AwEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIAJF63QvA/5uLj87r1rahZ6ad2ni6OE09M1vbhtOD8+53+PzDh3PvzOn8VNfWus5pW7ZxOS1d57Tv+3B6cPH0c9ovf3nnN3964RP7PbyY97L3XvNpXdauH6L3
 
tg2tta5rvm97OZ1fdF/zdrHUfe87p3XZxq21vudo24e2LPX1vvVKKc8YkA/ee/92z+fb+Wlqp9Z1w9pp6Z4ppZTlYpnasvQda1mntfNY66lNbek8p6VN66fc5D/+6rcvPn6sdWxL58PR1nFta9dMOy3dM2vrf3BLyR741tZpW/te/LWt09a2+Bv3/VfeuJvOcvX+8vs/P/Z+8PwNpZQf7qX8Ohn+8stfuuJ14Oar89SGadx7ZsZp2mqd1p6ZYRz2eja3vu1KmY+HpXemHmqbau06p2EatjrPXec0DsM+3z489Zz+8fZfXyillK9+62vvfvz3D8ezZRiGrv3qoa7TXLeu/eZxnw9913wcxnJ259h9zQ93zto49D1H9axu9ezQd83ruB9vHdtPvvDT7/dtePkNpGvBj7vz+TsPej4/1rpO89h3w2pdp9o3U0opU53Wepi75qY6rWOdumbqXNfp0Dcz1brWuT7xJj/6yerr3/vG359wrG06PHnuqcc61K3OfX8w1Xne5rO+F78e6lYPfTP/nTv2PfD1ULdD50tSz+ZtPvbvd//Vy28e99587a3eWa7eo4B89+WXHns/eP6e6a+wfvSLe3+4qkW49Cgg3/zBd979tM8CXCf/CwuAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAE
 
BEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASBSr3sB+H9z8dF53do29My0UxtPF6epZ2Zr23B6cN79Dp9/+HDunTmdn+raWtc5bcs2Lqel65z2fR9ODy6efk775S/v/OZPL3xiv4cX81723ms+rcva9UP03rahtdZ1zfdtL6fzi+5r3i6Wuu9957Qu27i11vccbfvQlqW+3rdeKeUZA/LBe+/f7vl8Oz9N7dS6blg7Ld0zpZSyXCxTW5a+Yy3rtHYeaz21qS2d57S0af2Um/zHX/32xcePtY5t6Xw42jqube2aaaele2Zt/Q9uKdkD39o6bWvfi7+2ddraFn/jvv/KG3fTWa7eX37/58feD56/oZTyw72UXyfDX375S1e8Dtx8dZ7aMI17z8w4TVut09ozM4zDXs/m1rddKfPxsPTO1ENtU61d5zRMw1bnueucxmHY59uHp57TP97+6wullPLVb33t3Y///uF4tgzD0LVfPdR1muvWtd887vOh75qPw1jO7hy7r/nhzlkbh77nqJ7VrZ4d+q55HffjrWP7yRd++v2+DS+/gXQt+HF3Pn/nQc/nx1rXaR77blit61T7ZkopZarTWg9z19xUp3WsU9dMnes6HfpmplrXOtcn3uRHP1l9/Xvf+PsTjrVNhyfPPfVYh7rVue8PpjrP23zW9+LXQ93qoW/mv3PHvge+Hup26HxJ6tm8zcf+/e6/evnN496br73VO8vVexSQ77780mPvB8/fM/0V1o9+ce8PV7UIlx4F5Js/+M67n/ZZgOvkf2EBEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICA
 
gAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAyllL2614CgJtnLKV8cN1LAHDzjKWUt697CQBunrGU8uC6lwDg5hlKKWUP/x1kKOWtq10HgOuwl3K3d+bf5QExFK9CmrIAAAAASUVORK5CYII="
+    }
+  },
+  "Capacity": 32,
+  "Count": 20
+}
+</ConsoleOutput>
+                          <ConsoleError />
+                        </UnitTestResult>
+                        <UnitTestResult>
+                          <TestDate>2014-06-06T20:28:43</TestDate>
+                          <Status />
+                          <Passed>1</Passed>
+                          <Errors>0</Errors>
+                          <Failures>0</Failures>
+                          <Inconclusive>0</Inconclusive>
+                          <NotRunnable>0</NotRunnable>
+                          <Skipped>0</Skipped>
+                          <Ignored>0</Ignored>
+                          <Time />
+                          <Message>Prueba satisfactoria
+
+Tiempo de ejecución: 0,19 ms</Message>
+                          <ConsoleOutput>{
+  "$id": "1",
+  "$type": "LongoMatch.Store.Templates.Categories, LongoMatch",
+  "Name": "default",
+  "Version": "2.1",
+  "GamePeriods": [
+    "1",
+    "2"
+  ],
+  "Image": null,
+  "Categories": [
+    {
+      "$id": "2",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "ID": "5845f457-2ddc-44d5-b161-601e363e9140",
+      "Name": "Category 0",
+      "Start": {
+        "$id": "3",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "4",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Hotkey": {
+        "$id": "5",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Position": -1,
+      "SubCategories": [
+        {
+          "$id": "6",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "7",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "Color": {
+        "$id": "8",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "SortMethod": 1,
+      "TagFieldPosition": true,
+      "TagHalfFieldPosition": false,
+      "TagGoalPosistion": false,
+      "FieldPositionIsDistance": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "9",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "ID": "7f49ecac-5441-4dec-b3dd-4b66e804125c",
+      "Name": "Category 1",
+      "Start": {
+        "$id": "10",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "11",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Hotkey": {
+        "$id": "12",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": 100,
+        "Modifier": 0,
+        "Defined": true
+      },
+      "Position": 0,
+      "SubCategories": [
+        {
+          "$id": "13",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "14",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "Color": {
+        "$id": "15",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "SortMethod": 1,
+      "TagFieldPosition": true,
+      "TagHalfFieldPosition": false,
+      "TagGoalPosistion": false,
+      "FieldPositionIsDistance": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "16",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "ID": "1755d18a-2e91-4fc3-af2f-2b4b778a9812",
+      "Name": "Category 2",
+      "Start": {
+        "$id": "17",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "18",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Hotkey": {
+        "$id": "19",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Position": 1,
+      "SubCategories": [
+        {
+          "$id": "20",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "21",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "Color": {
+        "$id": "22",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "SortMethod": 1,
+      "TagFieldPosition": true,
+      "TagHalfFieldPosition": false,
+      "TagGoalPosistion": false,
+      "FieldPositionIsDistance": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "23",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "ID": "368b23a6-c022-4afc-aebf-cabac0395e31",
+      "Name": "Category 3",
+      "Start": {
+        "$id": "24",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "25",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Hotkey": {
+        "$id": "26",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Position": 2,
+      "SubCategories": [
+        {
+          "$id": "27",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "28",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "Color": {
+        "$id": "29",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "SortMethod": 1,
+      "TagFieldPosition": true,
+      "TagHalfFieldPosition": false,
+      "TagGoalPosistion": false,
+      "FieldPositionIsDistance": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "30",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "ID": "fd11e6a6-4889-465f-b4a7-cb16f5104bbf",
+      "Name": "Category 4",
+      "Start": {
+        "$id": "31",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "32",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Hotkey": {
+        "$id": "33",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Position": 3,
+      "SubCategories": [
+        {
+          "$id": "34",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "35",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "Color": {
+        "$id": "36",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "SortMethod": 1,
+      "TagFieldPosition": true,
+      "TagHalfFieldPosition": false,
+      "TagGoalPosistion": false,
+      "FieldPositionIsDistance": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "37",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "ID": "d570ccc9-5132-4985-a57c-6127444ae6b9",
+      "Name": "Category 5",
+      "Start": {
+        "$id": "38",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "39",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Hotkey": {
+        "$id": "40",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Position": 4,
+      "SubCategories": [
+        {
+          "$id": "41",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "42",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "Color": {
+        "$id": "43",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "SortMethod": 1,
+      "TagFieldPosition": true,
+      "TagHalfFieldPosition": false,
+      "TagGoalPosistion": false,
+      "FieldPositionIsDistance": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "44",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "ID": "663c2efa-e035-40d5-8016-275830ab337d",
+      "Name": "Category 6",
+      "Start": {
+        "$id": "45",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "46",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Hotkey": {
+        "$id": "47",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Position": 5,
+      "SubCategories": [
+        {
+          "$id": "48",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "49",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "Color": {
+        "$id": "50",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "SortMethod": 1,
+      "TagFieldPosition": true,
+      "TagHalfFieldPosition": false,
+      "TagGoalPosistion": false,
+      "FieldPositionIsDistance": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "51",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "ID": "0bbb95e4-aa55-4a4e-8b03-7b20d19da8ee",
+      "Name": "Category 7",
+      "Start": {
+        "$id": "52",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "53",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Hotkey": {
+        "$id": "54",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Position": 6,
+      "SubCategories": [
+        {
+          "$id": "55",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "56",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "Color": {
+        "$id": "57",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "SortMethod": 1,
+      "TagFieldPosition": true,
+      "TagHalfFieldPosition": false,
+      "TagGoalPosistion": false,
+      "FieldPositionIsDistance": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "58",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "ID": "a1b2cb44-3f88-4bbf-9734-8c2711a90ae6",
+      "Name": "Category 8",
+      "Start": {
+        "$id": "59",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "60",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Hotkey": {
+        "$id": "61",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Position": 7,
+      "SubCategories": [
+        {
+          "$id": "62",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "63",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "Color": {
+        "$id": "64",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "SortMethod": 1,
+      "TagFieldPosition": true,
+      "TagHalfFieldPosition": false,
+      "TagGoalPosistion": false,
+      "FieldPositionIsDistance": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "65",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "ID": "1ce743c8-8912-42ad-8e75-cbb0f338ef2e",
+      "Name": "Category 9",
+      "Start": {
+        "$id": "66",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "67",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Hotkey": {
+        "$id": "68",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Position": 8,
+      "SubCategories": [
+        {
+          "$id": "69",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "70",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "Color": {
+        "$id": "71",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "SortMethod": 1,
+      "TagFieldPosition": true,
+      "TagHalfFieldPosition": false,
+      "TagGoalPosistion": false,
+      "FieldPositionIsDistance": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "72",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "ID": "309cf7f9-2948-4281-9821-6752370e9276",
+      "Name": "Category 10",
+      "Start": {
+        "$id": "73",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "74",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Hotkey": {
+        "$id": "75",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Position": 9,
+      "SubCategories": [
+        {
+          "$id": "76",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "77",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "Color": {
+        "$id": "78",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "SortMethod": 1,
+      "TagFieldPosition": true,
+      "TagHalfFieldPosition": false,
+      "TagGoalPosistion": false,
+      "FieldPositionIsDistance": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "79",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "ID": "da3e873d-3cfe-409d-a28b-306397a08535",
+      "Name": "Category 11",
+      "Start": {
+        "$id": "80",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "81",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Hotkey": {
+        "$id": "82",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Position": 10,
+      "SubCategories": [
+        {
+          "$id": "83",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "84",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "Color": {
+        "$id": "85",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "SortMethod": 1,
+      "TagFieldPosition": true,
+      "TagHalfFieldPosition": false,
+      "TagGoalPosistion": false,
+      "FieldPositionIsDistance": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "86",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "ID": "e35989cc-42f4-43b6-8cc5-9213f1524ec0",
+      "Name": "Category 12",
+      "Start": {
+        "$id": "87",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "88",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Hotkey": {
+        "$id": "89",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Position": 11,
+      "SubCategories": [
+        {
+          "$id": "90",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "91",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "Color": {
+        "$id": "92",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "SortMethod": 1,
+      "TagFieldPosition": true,
+      "TagHalfFieldPosition": false,
+      "TagGoalPosistion": false,
+      "FieldPositionIsDistance": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "93",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "ID": "f7aeab6a-8f86-4425-88a3-7d25a8d729f8",
+      "Name": "Category 13",
+      "Start": {
+        "$id": "94",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "95",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Hotkey": {
+        "$id": "96",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Position": 12,
+      "SubCategories": [
+        {
+          "$id": "97",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "98",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "Color": {
+        "$id": "99",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "SortMethod": 1,
+      "TagFieldPosition": true,
+      "TagHalfFieldPosition": false,
+      "TagGoalPosistion": false,
+      "FieldPositionIsDistance": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "100",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "ID": "8e079dab-bd4e-4c63-b553-3b6b1f6fe1e1",
+      "Name": "Category 14",
+      "Start": {
+        "$id": "101",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "102",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Hotkey": {
+        "$id": "103",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Position": 13,
+      "SubCategories": [
+        {
+          "$id": "104",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "105",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "Color": {
+        "$id": "106",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "SortMethod": 1,
+      "TagFieldPosition": true,
+      "TagHalfFieldPosition": false,
+      "TagGoalPosistion": false,
+      "FieldPositionIsDistance": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "107",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "ID": "2e5df4f8-f17f-4337-bcb6-ec630e2f986f",
+      "Name": "Category 15",
+      "Start": {
+        "$id": "108",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "109",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Hotkey": {
+        "$id": "110",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Position": 14,
+      "SubCategories": [
+        {
+          "$id": "111",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "112",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "Color": {
+        "$id": "113",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "SortMethod": 1,
+      "TagFieldPosition": true,
+      "TagHalfFieldPosition": false,
+      "TagGoalPosistion": false,
+      "FieldPositionIsDistance": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "114",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "ID": "90dd1b63-0678-412e-a0fc-a6409e6caf24",
+      "Name": "Category 16",
+      "Start": {
+        "$id": "115",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "116",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Hotkey": {
+        "$id": "117",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Position": 15,
+      "SubCategories": [
+        {
+          "$id": "118",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "119",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "Color": {
+        "$id": "120",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "SortMethod": 1,
+      "TagFieldPosition": true,
+      "TagHalfFieldPosition": false,
+      "TagGoalPosistion": false,
+      "FieldPositionIsDistance": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "121",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "ID": "63a37c3c-99e1-45ea-906c-3bdc5798ec0d",
+      "Name": "Category 17",
+      "Start": {
+        "$id": "122",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "123",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Hotkey": {
+        "$id": "124",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Position": 16,
+      "SubCategories": [
+        {
+          "$id": "125",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "126",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "Color": {
+        "$id": "127",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "SortMethod": 1,
+      "TagFieldPosition": true,
+      "TagHalfFieldPosition": false,
+      "TagGoalPosistion": false,
+      "FieldPositionIsDistance": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "128",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "ID": "ddf63750-94f6-4cf6-9803-f4aa54e72a50",
+      "Name": "Category 18",
+      "Start": {
+        "$id": "129",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "130",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Hotkey": {
+        "$id": "131",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Position": 17,
+      "SubCategories": [
+        {
+          "$id": "132",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "133",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "Color": {
+        "$id": "134",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "SortMethod": 1,
+      "TagFieldPosition": true,
+      "TagHalfFieldPosition": false,
+      "TagGoalPosistion": false,
+      "FieldPositionIsDistance": false,
+      "HalfFieldPositionIsDistance": false
+    },
+    {
+      "$id": "135",
+      "$type": "LongoMatch.Store.Category, LongoMatch",
+      "ID": "eb8e5d7d-fbfb-4c9c-b5d0-4bc9dcd41347",
+      "Name": "Category 19",
+      "Start": {
+        "$id": "136",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Stop": {
+        "$id": "137",
+        "$type": "LongoMatch.Store.Time, LongoMatch",
+        "MSeconds": 10000
+      },
+      "Hotkey": {
+        "$id": "138",
+        "$type": "LongoMatch.Store.HotKey, LongoMatch",
+        "Key": -1,
+        "Modifier": -1,
+        "Defined": false
+      },
+      "Position": 18,
+      "SubCategories": [
+        {
+          "$id": "139",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo local",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        },
+        {
+          "$id": "140",
+          "$type": "LongoMatch.Store.PlayerSubCategory, LongoMatch",
+          "PositionFilter": false,
+          "Name": "Plantilla del equipo visitante",
+          "AllowMultiple": true,
+          "FastTag": true,
+          "Capacity": 4,
+          "Count": 1
+        }
+      ],
+      "Color": {
+        "$id": "141",
+        "$type": "LongoMatch.Common.Color, LongoMatch",
+        "R": 255,
+        "G": 0,
+        "B": 0,
+        "A": 255
+      },
+      "SortMethod": 1,
+      "TagFieldPosition": true,
+      "TagHalfFieldPosition": false,
+      "TagGoalPosistion": false,
+      "FieldPositionIsDistance": false,
+      "HalfFieldPositionIsDistance": false
+    }
+  ],
+  "FieldBackground": {
+    "$id": "142",
+    "$type": "LongoMatch.Common.Image, LongoMatch",
+    "pngbuf": {
+      "$type": "System.Byte[], mscorlib",
+      "$value": 
"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
 U5ErkJggg=="
+    }
+  },
+  "HalfFieldBackground": {
+    "$id": "143",
+    "$type": "LongoMatch.Common.Image, LongoMatch",
+    "pngbuf": {
+      "$type": "System.Byte[], mscorlib",
+      "$value": 
"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"
+    }
+  },
+  "GoalBackground": {
+    "$id": "144",
+    "$type": "LongoMatch.Common.Image, LongoMatch",
+    "pngbuf": {
+      "$type": "System.Byte[], mscorlib",
+      "$value": 
"iVBORw0KGgoAAAANSUhEUgAAAZAAAAEsCAYAAADtt+XCAAAABHNCSVQICAgIfAhkiAAACZpJREFUeJzt2r+rJWcdx/FnZp459+wuqOgfYBEEA4KNlShooyn2DxAEIUm1fYpYioUWAcutoo2Ff0AKtVCLkMpGEBUkXcqkkWT33jPPzFhcVxJ2l/B89ro3V16vZmE5X+Y7v/Z9z+4O5ZO+cutzt14ajsOL2/n2uW3ZbhWeq+k4zKWUsp7vy3XvgvvxWeN+XI9xHh+Ox/Ff+/n+t4f/evi7Uso/SyllKKWUvZT9WrcD4MYZSym3r3sJAG6esZTy7eteAoCbZyylfPG6lwDg5hnLf/4dBAB6jNe9AAA3k4AAEBEQACICAkBEQACICAgAEQEBICIgAEQEBIBIfZbhn+8/e+uqFuHS/VfeuFtKKfd++Zpr+xlw/9X/3I833Y/PAvfjf+f14cd3e2d8AwEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIAJF63QvA/5uLj87r1rahZ6ad2ni6OE09M1vbhtOD8+53+PzDh3PvzOn8VNfWus5pW7ZxOS1d57Tv+3B6cPH0c9ovf3nnN3964RP7PbyY97L3XvNpXdauH6L3
 
tg2tta5rvm97OZ1fdF/zdrHUfe87p3XZxq21vudo24e2LPX1vvVKKc8YkA/ee/92z+fb+Wlqp9Z1w9pp6Z4ppZTlYpnasvQda1mntfNY66lNbek8p6VN66fc5D/+6rcvPn6sdWxL58PR1nFta9dMOy3dM2vrf3BLyR741tZpW/te/LWt09a2+Bv3/VfeuJvOcvX+8vs/P/Z+8PwNpZQf7qX8Ohn+8stfuuJ14Oar89SGadx7ZsZp2mqd1p6ZYRz2eja3vu1KmY+HpXemHmqbau06p2EatjrPXec0DsM+3z489Zz+8fZfXyillK9+62vvfvz3D8ezZRiGrv3qoa7TXLeu/eZxnw9913wcxnJ259h9zQ93zto49D1H9axu9ezQd83ruB9vHdtPvvDT7/dtePkNpGvBj7vz+TsPej4/1rpO89h3w2pdp9o3U0opU53Wepi75qY6rWOdumbqXNfp0Dcz1brWuT7xJj/6yerr3/vG359wrG06PHnuqcc61K3OfX8w1Xne5rO+F78e6lYPfTP/nTv2PfD1ULdD50tSz+ZtPvbvd//Vy28e99587a3eWa7eo4B89+WXHns/eP6e6a+wfvSLe3+4qkW49Cgg3/zBd979tM8CXCf/CwuAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAE
 
BEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASBSr3sB+H9z8dF53do29My0UxtPF6epZ2Zr23B6cN79Dp9/+HDunTmdn+raWtc5bcs2Lqel65z2fR9ODy6efk775S/v/OZPL3xiv4cX81723ms+rcva9UP03rahtdZ1zfdtL6fzi+5r3i6Wuu9957Qu27i11vccbfvQlqW+3rdeKeUZA/LBe+/f7vl8Oz9N7dS6blg7Ld0zpZSyXCxTW5a+Yy3rtHYeaz21qS2d57S0af2Um/zHX/32xcePtY5t6Xw42jqube2aaaele2Zt/Q9uKdkD39o6bWvfi7+2ddraFn/jvv/KG3fTWa7eX37/58feD56/oZTyw72UXyfDX375S1e8Dtx8dZ7aMI17z8w4TVut09ozM4zDXs/m1rddKfPxsPTO1ENtU61d5zRMw1bnueucxmHY59uHp57TP97+6wullPLVb33t3Y///uF4tgzD0LVfPdR1muvWtd887vOh75qPw1jO7hy7r/nhzlkbh77nqJ7VrZ4d+q55HffjrWP7yRd++v2+DS+/gXQt+HF3Pn/nQc/nx1rXaR77blit61T7ZkopZarTWg9z19xUp3WsU9dMnes6HfpmplrXOtcn3uRHP1l9/Xvf+PsTjrVNhyfPPfVYh7rVue8PpjrP23zW9+LXQ93qoW/mv3PHvge+Hup26HxJ6tm8zcf+/e6/evnN496br73VO8vVexSQ77780mPvB8/fM/0V1o9+ce8PV7UIlx4F5Js/+M67n/ZZgOvkf2EBEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICA
 
gAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAiIABEBASAiIAAEBEQACICAkBEQACICAgAEQEBICIgAEQEBICIgAAQERAAIgICQERAAIgICAARAQEgIiAARAQEgIiAABAREAAiAgJAREAAiAgIABEBASAyllL2614CgJtnLKV8cN1LAHDzjKWUt697CQBunrGU8uC6lwDg5hlKKWUP/x1kKOWtq10HgOuwl3K3d+bf5QExFK9CmrIAAAAASUVORK5CYII="
+    }
+  },
+  "Capacity": 32,
+  "Count": 20
+}
+</ConsoleOutput>
+                          <ConsoleError />
+                        </UnitTestResult>
+                      </Results>
+                    </TestRecord>
+                  </Tests>
+                </TestRecord>
+              </Tests>
+            </TestRecord>
+          </Tests>
+        </TestRecord>
+      </Tests>
+    </TestRecord>
+  </Tests>
+</TestRecord>
\ No newline at end of file
diff --git a/LongoMatch.Multimedia/LongoMatch.Multimedia.mdp b/LongoMatch.Multimedia/LongoMatch.Multimedia.mdp
index 0c532ba..af237a0 100644
--- a/LongoMatch.Multimedia/LongoMatch.Multimedia.mdp
+++ b/LongoMatch.Multimedia/LongoMatch.Multimedia.mdp
@@ -59,12 +59,12 @@
   </Contents>
   <References>
     <ProjectReference type="Project" localcopy="True" refto="libcesarplayer" />
-    <ProjectReference type="Gac" localcopy="True" refto="glib-sharp, Version=2.12.0.0, Culture=neutral, 
PublicKeyToken=35e10195dab3c99f" />
+    <ProjectReference type="Package" localcopy="True" refto="glib-sharp, Version=2.12.0.0, Culture=neutral, 
PublicKeyToken=35e10195dab3c99f" />
     <ProjectReference type="Project" localcopy="True" refto="LongoMatch.Core" />
-    <ProjectReference type="Gac" localcopy="True" refto="Mono.Posix, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=0738eb9f132ed756" />
-    <ProjectReference type="Gac" localcopy="True" refto="System, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b77a5c561934e089" />
-    <ProjectReference type="Gac" localcopy="False" refto="gdk-sharp, Version=2.12.0.0, Culture=neutral, 
PublicKeyToken=35e10195dab3c99f" />
-    <ProjectReference type="Gac" localcopy="True" refto="gtk-sharp, Version=2.12.0.0, Culture=neutral, 
PublicKeyToken=35e10195dab3c99f" />
-    <ProjectReference specificVersion="False" type="Gac" localcopy="False" refto="System.Core, 
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+    <ProjectReference type="Package" localcopy="True" refto="Mono.Posix, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=0738eb9f132ed756" />
+    <ProjectReference type="Package" localcopy="True" refto="System, 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" />
+    <ProjectReference type="Package" localcopy="True" refto="gtk-sharp, Version=2.12.0.0, Culture=neutral, 
PublicKeyToken=35e10195dab3c99f" />
+    <ProjectReference type="Package" specificVersion="False" localcopy="False" refto="System.Core, 
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
   </References>
-</Project>
+</Project>
\ No newline at end of file
diff --git a/LongoMatch.Plugins/CSVExporter.cs b/LongoMatch.Plugins/CSVExporter.cs
index 4a89d18..d1e8878 100644
--- a/LongoMatch.Plugins/CSVExporter.cs
+++ b/LongoMatch.Plugins/CSVExporter.cs
@@ -76,7 +76,7 @@ namespace LongoMatch.Plugins
                }
                
                public void Export() {
-                       foreach (Category cat in project.Categories) {
+                       foreach (Category cat in project.Categories.List) {
                                ExportCategory (cat);
                        }
                        File.WriteAllLines(filename, output);
@@ -91,25 +91,15 @@ namespace LongoMatch.Plugins
                        
                        /* Write Headers for this category */
                        headers = "Name;Start;Stop;Team";
-                       foreach (ISubCategory subcat in cat.SubCategories) {
-                               TagSubCategory ts = subcat as TagSubCategory;
-                               if (ts == null)
+                       foreach (SubCategory subcat in cat.SubCategories) {
+                               if (subcat == null)
                                        continue;
                                        
-                               foreach (string desc in ts.ElementsDesc()) {
-                                       headers += String.Format (";{0}:{1}", ts.Name, desc);
+                               foreach (string desc in subcat.Options) {
+                                       headers += String.Format (";{0}:{1}", subcat.Name, desc);
                                }
                        }
                        
-                       /* Players subcategories */
-                       foreach (ISubCategory subcat in cat.SubCategories) {
-                               PlayerSubCategory ps = subcat as PlayerSubCategory;
-                               if (ps == null)
-                                       continue;
-                               headers += ";" + ps.Name;
-                       }
-                       output.Add (headers);
-                       
                        foreach (Play play in plays.OrderBy(p=>p.Start)) {
                                string line;
                                
@@ -119,28 +109,16 @@ namespace LongoMatch.Plugins
                                                         play.Team);
                                
                                /* Strings Tags */
-                               foreach (ISubCategory subcat in cat.SubCategories) {
-                                       TagSubCategory ts = subcat as TagSubCategory;
-                                       if (ts == null)
+                               foreach (SubCategory subcat in cat.SubCategories) {
+                                       if (subcat == null)
                                                continue;
                                        
-                                       foreach (string desc in ts.ElementsDesc()) {
-                                               StringTag t = new StringTag{SubCategory=subcat, Value = desc};
+                                       foreach (string desc in subcat.Options) {
+                                               Tag t = new Tag{SubCategory=subcat, Value = desc};
                                                line += ";" + (play.Tags.Contains(t) ? "1" : "0");
                                        }
                                }
                                
-                               /* Player Tags */
-                               foreach (ISubCategory subcat in cat.SubCategories) {
-                                       PlayerSubCategory ps = subcat as PlayerSubCategory;
-                                       if (ps == null)
-                                               continue;
-                                       
-                                       line += ";";
-                                       foreach (PlayerTag p in play.Players.GetTags (ps)) {
-                                               line += p.Value.Name + " ";
-                                       }
-                               }
                                output.Add (line);
                        }
                        output.Add("");
diff --git a/LongoMatch.Plugins/LongoMatch.Plugins.mdp b/LongoMatch.Plugins/LongoMatch.Plugins.mdp
index 4708654..75a9909 100644
--- a/LongoMatch.Plugins/LongoMatch.Plugins.mdp
+++ b/LongoMatch.Plugins/LongoMatch.Plugins.mdp
@@ -18,10 +18,10 @@
     <File subtype="Code" buildaction="Compile" name="CSVExporter.cs" />
   </Contents>
   <References>
-    <ProjectReference type="Gac" localcopy="True" refto="System, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b77a5c561934e089" />
+    <ProjectReference type="Package" localcopy="True" refto="System, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b77a5c561934e089" />
     <ProjectReference type="Project" localcopy="True" refto="LongoMatch.Addins" />
     <ProjectReference type="Project" localcopy="True" refto="LongoMatch.Core" />
-    <ProjectReference type="Gac" localcopy="False" refto="Mono.Addins, Version=0.6.0.0, Culture=neutral, 
PublicKeyToken=0738eb9f132ed756" />
-    <ProjectReference specificVersion="False" type="Gac" localcopy="False" refto="Mono.Posix, 
Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
+    <ProjectReference type="Package" localcopy="False" refto="Mono.Addins, Version=0.6.0.0, Culture=neutral, 
PublicKeyToken=0738eb9f132ed756" />
+    <ProjectReference type="Package" specificVersion="False" localcopy="False" refto="Mono.Posix, 
Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
   </References>
 </Project>
\ No newline at end of file
diff --git a/LongoMatch.Services/LongoMatch.Services.mdp b/LongoMatch.Services/LongoMatch.Services.mdp
index 1cf8a74..1027439 100644
--- a/LongoMatch.Services/LongoMatch.Services.mdp
+++ b/LongoMatch.Services/LongoMatch.Services.mdp
@@ -27,7 +27,6 @@
     <File subtype="Directory" buildaction="Compile" name=".." />
     <File subtype="Directory" buildaction="Compile" name="Services" />
     <File subtype="Code" buildaction="Compile" name="Services/DataBaseManager.cs" />
-    <File subtype="Code" buildaction="Compile" name="Services/MigrationsManager.cs" />
     <File subtype="Code" buildaction="Compile" name="Services/ToolsManager.cs" />
     <File subtype="Code" buildaction="Compile" name="Services/FileDB.cs" />
   </Contents>
diff --git a/LongoMatch.Services/Services/Core.cs b/LongoMatch.Services/Services/Core.cs
index 879dc8f..bfec6eb 100644
--- a/LongoMatch.Services/Services/Core.cs
+++ b/LongoMatch.Services/Services/Core.cs
@@ -82,20 +82,15 @@ namespace LongoMatch.Services
                        ToolsManager toolsManager;
                        TemplatesService ts;
                                
-                       ts = new TemplatesService (Config.TemplatesDir);
+                       ts = new TemplatesService ();
                        Config.TeamTemplatesProvider = ts.TeamTemplateProvider;
                        Config.CategoriesTemplatesProvider = ts.CategoriesTemplateProvider;
-                       Config.SubcategoriesTemplatesProvider = ts.SubCategoriesTemplateProvider;
 
                        /* Start DB services */
                        dbManager = new DataBaseManager (Config.DBDir, guiToolkit);
                        dbManager.SetActiveByName (Config.CurrentDatabase);
                        Config.DatabaseManager = dbManager;
                        
-                       /* Start Migration */
-                       MigrationsManager migration = new MigrationsManager(ts, dbManager);
-                       migration.StartMigration();
-                       
                        /* Start the rendering jobs manager */
                        videoRenderer = new RenderingJobsManager (multimediaToolkit, guiToolkit);
                        Config.RenderingJobsManger = videoRenderer;
diff --git a/LongoMatch.Services/Services/EventsManager.cs b/LongoMatch.Services/Services/EventsManager.cs
index 1578a47..2f275dc 100644
--- a/LongoMatch.Services/Services/EventsManager.cs
+++ b/LongoMatch.Services/Services/EventsManager.cs
@@ -54,6 +54,7 @@ namespace LongoMatch.Services
                        this.renderer = renderer;
                        Config.EventsBroker.OpenedProjectChanged += HandleOpenedProjectChanged;
                        catsTime = new Dictionary<Category, Time>();
+                       ConnectSignals ();
                }
 
                void HandleOpenedProjectChanged (Project project, ProjectType projectType,
@@ -67,12 +68,25 @@ namespace LongoMatch.Services
                        if (project == null)
                                return;
                                
+                       if (player != null) {
+                               Console.WriteLine ("Disconnecting");
+                               player.Prev -= OnPrev;
+                               player.SegmentClosedEvent -= OnSegmentClosedEvent;
+                               player.DrawFrame -= OnDrawFrame;
+                               player.PlaybackRateChanged -= HandlePlaybackRateChanged;
+                       }
+
                        player = analysisWindow.Player;
                        capturer = analysisWindow.Capturer;
-                       if (this.analysisWindow != analysisWindow) {
-                               this.analysisWindow = analysisWindow;
-                               ConnectSignals();
+                       
+                       if (player != null) {
+                               Console.WriteLine ("Connecting");
+                               player.Prev += OnPrev;
+                               player.SegmentClosedEvent += OnSegmentClosedEvent;
+                               player.DrawFrame += OnDrawFrame;
+                               player.PlaybackRateChanged += HandlePlaybackRateChanged;
                        }
+
                }
 
                void Save (Project project) {
@@ -98,14 +112,6 @@ namespace LongoMatch.Services
                        
                        Config.EventsBroker.ShowProjectStatsEvent += HandleShowProjectStatsEvent;
                        Config.EventsBroker.TagSubcategoriesChangedEvent += 
HandleTagSubcategoriesChangedEvent;
-                       
-                       /* Connect player events */
-                       if (player != null) {
-                               player.Prev += OnPrev;
-                               player.SegmentClosedEvent += OnSegmentClosedEvent;
-                               player.DrawFrame += OnDrawFrame;
-                               player.PlaybackRateChanged += HandlePlaybackRateChanged;
-                       }
                }
 
                void HandleTagSubcategoriesChangedEvent (bool tagsubcategories)
@@ -338,6 +344,7 @@ namespace LongoMatch.Services
                void OnDuplicatePlay (Play play)
                {
                        Play copy = Cloner.Clone (play);
+                       copy.ID = Guid.NewGuid();
                        /* The category is also serialized and desarialized */
                        copy.Category = play.Category;
                        openedProject.AddPlay (copy);
diff --git a/LongoMatch.Services/Services/FileDB.cs b/LongoMatch.Services/Services/FileDB.cs
index 35d1ee4..0be3f4a 100644
--- a/LongoMatch.Services/Services/FileDB.cs
+++ b/LongoMatch.Services/Services/FileDB.cs
@@ -45,7 +45,7 @@ namespace LongoMatch.DB
                        }
                        if (File.Exists(dbPath)) {
                                try {
-                                       projectsDB = SerializableObject.Load<LiteDB> (dbPath);
+                                       projectsDB = Serializer.Load<LiteDB> (dbPath);
                                        projectsDB.DBPath = dbPath;
                                }
                                catch  (Exception e){
@@ -93,8 +93,8 @@ namespace LongoMatch.DB
                
                public bool Exists (Project project) {
                        bool ret = false;
-                       if (projectsDB.ProjectsDict.ContainsKey (project.UUID)) {
-                               if (File.Exists (Path.Combine (dbDirPath, project.UUID.ToString()))) {
+                       if (projectsDB.ProjectsDict.ContainsKey (project.ID)) {
+                               if (File.Exists (Path.Combine (dbDirPath, project.ID.ToString()))) {
                                        ret = true;
                                }
                        }
@@ -145,7 +145,7 @@ namespace LongoMatch.DB
                        try {
                                string projectFile = Path.Combine (dbDirPath, id.ToString());
                                if (File.Exists (projectFile)) {
-                                       return SerializableObject.Load<Project> (projectFile);
+                                       return Serializer.Load<Project> (projectFile);
                                }
                        } catch (Exception ex) {
                                Log.Exception (ex);
@@ -157,16 +157,16 @@ namespace LongoMatch.DB
                        string projectFile;
                        
                        try {
-                               projectFile = Path.Combine (dbDirPath, project.UUID.ToString());
+                               projectFile = Path.Combine (dbDirPath, project.ID.ToString());
                                project.Description.LastModified = DateTime.Now;
                                projectsDB.Add (project.Description);
                                try {
                                        if (File.Exists(projectFile))
                                                File.Delete(projectFile);
-                                       SerializableObject.Save(project, projectFile);
+                                       Serializer.Save(project, projectFile);
                                } catch (Exception ex) {
                                        Log.Exception (ex);
-                                       projectsDB.Delete (project.Description.UUID);
+                                       projectsDB.Delete (project.Description.ID);
                                }
                                return true;
                        } catch (Exception ex) {
@@ -203,7 +203,7 @@ namespace LongoMatch.DB
                                        continue;
                                }
                                try {
-                                       Project project = SerializableObject.Load<Project> (file.FullName);
+                                       Project project = Serializer.Load<Project> (file.FullName);
                                        projectsDB.Add (project.Description);
                                } catch (Exception ex) {
                                        Log.Exception (ex);
@@ -246,10 +246,10 @@ namespace LongoMatch.DB
                }
                
                public bool Add (ProjectDescription desc) {
-                       if (ProjectsDict.ContainsKey (desc.UUID)) {
-                               ProjectsDict[desc.UUID] = desc;
+                       if (ProjectsDict.ContainsKey (desc.ID)) {
+                               ProjectsDict[desc.ID] = desc;
                        } else {
-                               ProjectsDict.Add (desc.UUID, desc);
+                               ProjectsDict.Add (desc.ID, desc);
                        }
                        return Save ();
                }
@@ -266,7 +266,7 @@ namespace LongoMatch.DB
                        bool ret = false;
                        
                        try {
-                               SerializableObject.Save (this, DBPath);
+                               Serializer.Save (this, DBPath);
                                ret = true;
                        } catch (Exception ex) {
                                Log.Exception (ex);
diff --git a/LongoMatch.Services/Services/HotKeysManager.cs b/LongoMatch.Services/Services/HotKeysManager.cs
index b641992..53d3aca 100644
--- a/LongoMatch.Services/Services/HotKeysManager.cs
+++ b/LongoMatch.Services/Services/HotKeysManager.cs
@@ -60,7 +60,7 @@ namespace LongoMatch.Services
                        
                        dic.Clear();
                        ignoreKeys = false;
-                       foreach(Category cat in project.Categories) {
+                       foreach(Category cat in project.Categories.List) {
                                if(cat.HotKey.Defined &&
                                   !dic.ContainsKey(cat.HotKey))
                                        dic.Add(cat.HotKey, cat);
diff --git a/LongoMatch.Services/Services/ProjectsManager.cs b/LongoMatch.Services/Services/ProjectsManager.cs
index b8ed6a8..217803c 100644
--- a/LongoMatch.Services/Services/ProjectsManager.cs
+++ b/LongoMatch.Services/Services/ProjectsManager.cs
@@ -132,18 +132,18 @@ namespace LongoMatch.Services
                }
 
                void SaveCaptureProject(Project project) {
-                       Guid projectID = project.UUID;
+                       Guid projectID = project.ID;
                        string filePath = project.Description.File.FilePath;
 
                        /* scan the new file to build a new PreviewMediaFile with all the metadata */
                        try {
-                               Log.Debug ("Saving capture project: " + project.UUID);
+                               Log.Debug ("Saving capture project: " + project.ID);
                        
                                RemuxOutputFile (Capturer.CaptureSettings.EncodingSettings);
                        
                                Log.Debug("Reloading saved file: " + filePath);
                                project.Description.File = multimediaToolkit.DiscoverFile(filePath);
-                               foreach (Play play in project.AllPlays ()) {
+                               foreach (Play play in project.Timeline) {
                                        play.Fps = project.Description.File.Fps;
                                }
                                DB.AddProject(project);
@@ -171,7 +171,7 @@ namespace LongoMatch.Services
                                CloseOpenedProject(true);
                        }
                        
-                       Log.Debug ("Loading project " + project.UUID + " " + projectType);
+                       Log.Debug ("Loading project " + project.ID + " " + projectType);
                                
                        PlaysFilter = new PlaysFilter(project);
                        guiToolkit.OpenProject (project, projectType, props, PlaysFilter,
@@ -292,7 +292,7 @@ namespace LongoMatch.Services
                        if (save)
                                SaveProject(OpenedProject, OpenedProjectType);
                        
-                       Log.Debug ("Closing project " + OpenedProject.UUID);
+                       Log.Debug ("Closing project " + OpenedProject.ID);
                        if(OpenedProjectType != ProjectType.FileProject)
                                Capturer.Close();
                        else
diff --git a/LongoMatch.Services/Services/RenderingJobsManager.cs 
b/LongoMatch.Services/Services/RenderingJobsManager.cs
index d8e73eb..abf2a78 100644
--- a/LongoMatch.Services/Services/RenderingJobsManager.cs
+++ b/LongoMatch.Services/Services/RenderingJobsManager.cs
@@ -145,7 +145,7 @@ namespace LongoMatch.Services
                        videoConverter.Error += OnError;
                        
                        foreach(MediaFile file in job.InputFiles) {
-                               videoConverter.AddFile (file.FilePath, file.Length);
+                               videoConverter.AddFile (file.FilePath, file.Duration.MSeconds);
                        }
                        
                        try {
@@ -193,17 +193,17 @@ namespace LongoMatch.Services
                                
                                videoEditor.AddSegment(segment.MediaFile.FilePath,
                                                       segment.Start.MSeconds,
-                                                      drawing.RenderTime - segment.Start.MSeconds,
+                                                      drawing.Render.MSeconds - segment.Start.MSeconds,
                                                       segment.Rate,
                                                       segment.Name,
                                                       segment.MediaFile.HasAudio);
                                videoEditor.AddImageSegment(image_path,
-                                                           drawing.RenderTime,
-                                                           drawing.PauseTime,
+                                                           drawing.Render.MSeconds,
+                                                           drawing.Pause.MSeconds,
                                                            segment.Name);
                                videoEditor.AddSegment(segment.MediaFile.FilePath,
-                                                      drawing.RenderTime,
-                                                      segment.Stop.MSeconds - drawing.RenderTime,
+                                                      drawing.Render.MSeconds,
+                                                      segment.Stop.MSeconds - drawing.Render.MSeconds,
                                                       segment.Rate,
                                                       segment.Name,
                                                       segment.MediaFile.HasAudio);
diff --git a/LongoMatch.Services/Services/TemplatesService.cs 
b/LongoMatch.Services/Services/TemplatesService.cs
index ecfa00a..59abbd3 100644
--- a/LongoMatch.Services/Services/TemplatesService.cs
+++ b/LongoMatch.Services/Services/TemplatesService.cs
@@ -33,18 +33,14 @@ namespace LongoMatch.Services
        public class TemplatesService: ITemplatesService
        {
                private Dictionary<Type, ITemplateProvider> dict;
-               private List<PlayerSubCategory> playerSubcatList;
-               private List<TeamSubCategory> teamSubcatList;
                
-               public TemplatesService (string basePath)
+               public TemplatesService ()
                {
                        dict = new Dictionary<Type, ITemplateProvider>();
-                       dict.Add(typeof(SubCategoryTemplate), new SubCategoriesTemplatesProvider(basePath));
-                       dict.Add(typeof(TeamTemplate), new TeamTemplatesProvider(basePath));
-                       dict.Add(typeof(Categories), new CategoriesTemplatesProvider (basePath));
+                       dict.Add(typeof(TeamTemplate),
+                                new TeamTemplatesProvider(Config.TeamsDir));
+                       dict.Add(typeof(Categories), new CategoriesTemplatesProvider (Config.AnalysisDir));
                        CheckDefaultTemplates();
-                       CreateDefaultPlayerSubCategories();
-                       CreateDefaultTeamSubCategories();
                }
                
                private void CheckDefaultTemplates () {
@@ -52,47 +48,12 @@ namespace LongoMatch.Services
                                t.CheckDefaultTemplate();
                }
                
-               private void CreateDefaultPlayerSubCategories () {
-                       PlayerSubCategory subcat;
-                       
-                       /* Local team players */
-                       playerSubcatList = new List<PlayerSubCategory>();
-                       subcat = new PlayerSubCategory{
-                               Name=Catalog.GetString("Local team players"), AllowMultiple=true, 
FastTag=true};
-                       subcat.Add(Team.LOCAL);
-                       playerSubcatList.Add(subcat);
-
-                       /* Visitor team players */
-                       subcat = new PlayerSubCategory{
-                               Name=Catalog.GetString("Visitor team players"), AllowMultiple=true, 
FastTag=true};
-                       subcat.Add(Team.VISITOR);
-                       playerSubcatList.Add(subcat);
-                       
-                       /* Local and Visitor team players */
-                       subcat = new PlayerSubCategory{
-                               Name=Catalog.GetString("All teams players"), AllowMultiple=true, 
FastTag=true};
-                       subcat.Add(Team.LOCAL);
-                       subcat.Add(Team.VISITOR);
-                       playerSubcatList.Add(subcat);
-               }
-               
-               private void CreateDefaultTeamSubCategories () {
-                       teamSubcatList = new List<TeamSubCategory>();
-                       teamSubcatList.Add(new TeamSubCategory());
-               }
-               
                public ITemplateProvider<T, U> GetTemplateProvider<T, U>() where T: ITemplate<U> {
                        if (dict.ContainsKey(typeof(T)))
                                return (ITemplateProvider<T, U>)dict[typeof(T)];
                        return null;
                }
                
-               public ISubcategoriesTemplatesProvider SubCategoriesTemplateProvider {
-                       get {
-                               return (ISubcategoriesTemplatesProvider) dict[typeof(SubCategoryTemplate)]; 
-                       }
-               }
-               
                public ITeamTemplatesProvider TeamTemplateProvider {
                        get {
                                return (ITeamTemplatesProvider) dict[typeof(TeamTemplate)]; 
@@ -104,18 +65,6 @@ namespace LongoMatch.Services
                                return (ICategoriesTemplatesProvider) dict[typeof(Categories)]; 
                        }
                }
-               
-               public List<PlayerSubCategory> PlayerSubcategories {
-                       get{
-                               return playerSubcatList;
-                       }
-               }
-               
-               public List<TeamSubCategory> TeamSubcategories {
-                       get{
-                               return teamSubcatList;
-                       }
-               }
        }
        
        public class TemplatesProvider<T, U>: ITemplateProvider<T, U> where T: ITemplate<U>
@@ -246,10 +195,4 @@ namespace LongoMatch.Services
                public CategoriesTemplatesProvider (string basePath): base (basePath, 
Constants.CAT_TEMPLATE_EXT) {}
                 
        }
-       
-       public class SubCategoriesTemplatesProvider : TemplatesProvider<SubCategoryTemplate, string>, 
ISubcategoriesTemplatesProvider
-       {
-               public SubCategoriesTemplatesProvider (string basePath): base (basePath, 
Constants.SUBCAT_TEMPLATE_EXT) {}
-                
-       } 
 }
diff --git a/LongoMatch.Services/Services/ToolsManager.cs b/LongoMatch.Services/Services/ToolsManager.cs
index d7357b6..138ff89 100644
--- a/LongoMatch.Services/Services/ToolsManager.cs
+++ b/LongoMatch.Services/Services/ToolsManager.cs
@@ -156,7 +156,7 @@ namespace LongoMatch.Services {
 
                        /* Create all the thumbnails */
                        capturer.Open(project.Description.File.FilePath);
-                       foreach(Play play in project.AllPlays()) {
+                       foreach(Play play in project.Timeline) {
                                try {
                                        capturer.Seek (play.Start + ((play.Stop - play.Start) / 2),
                                                          true);
diff --git a/LongoMatch.mds b/LongoMatch.mds
index fc9ca74..ab004bd 100644
--- a/LongoMatch.mds
+++ b/LongoMatch.mds
@@ -32,6 +32,8 @@
       <Entry build="True" name="LongoMatch.GUI.Helpers" configuration="Debug" />
       <Entry build="True" name="LongoMatch.Drawing" configuration="Debug" />
       <Entry build="True" name="LongoMatch.Drawing.Cairo" configuration="Debug" />
+      <Entry build="True" name="LongoMatch.Addins.RFEBM" configuration="Debug" />
+      <Entry build="True" name="LongoMatch.Migration" configuration="Debug" />
     </Configuration>
     <Configuration name="Release" ctype="CombineConfiguration">
       <Entry build="True" name="LongoMatch.GUI" configuration="Release" />
@@ -48,6 +50,8 @@
       <Entry build="True" name="LongoMatch.GUI.Helpers" configuration="Release" />
       <Entry build="True" name="LongoMatch.Drawing" configuration="Release" />
       <Entry build="True" name="LongoMatch.Drawing.Cairo" configuration="Release" />
+      <Entry build="True" name="LongoMatch.Addins.RFEBM" configuration="Release" />
+      <Entry build="True" name="LongoMatch.Migration" configuration="Release" />
     </Configuration>
   </Configurations>
   <StartMode startupentry="LongoMatchGtk" single="True">
@@ -65,6 +69,8 @@
     <Execute type="None" entry="LongoMatch.GUI.Helpers" />
     <Execute type="None" entry="LongoMatch.Drawing" />
     <Execute type="None" entry="LongoMatch.Drawing.Cairo" />
+    <Execute type="None" entry="LongoMatch.Addins.RFEBM" />
+    <Execute type="None" entry="LongoMatch.Migration" />
   </StartMode>
   <Entries>
     <Entry filename="LongoMatch.GUI/LongoMatch.GUI.mdp" />
@@ -81,5 +87,7 @@
     <Entry filename="LongoMatch.GUI.Helpers/LongoMatch.GUI.Helpers.mdp" />
     <Entry filename="LongoMatch.Drawing/LongoMatch.Drawing.mdp" />
     <Entry filename="LongoMatch.Drawing.Cairo/LongoMatch.Drawing.Cairo.mdp" />
+    <Entry filename="LongoMatch.Addins.RFEBM/LongoMatch.Addins.RFEBM.mdp" />
+    <Entry filename="LongoMatch.Migration/LongoMatch.Migration.mdp" />
   </Entries>
 </Combine>
\ No newline at end of file
diff --git a/Tests/Core/TestCategoriesTemplate.cs b/Tests/Core/TestCategoriesTemplate.cs
index e8795e9..72b4ecc 100644
--- a/Tests/Core/TestCategoriesTemplate.cs
+++ b/Tests/Core/TestCategoriesTemplate.cs
@@ -35,26 +35,25 @@ namespace Tests.Core
                        Utils.CheckSerialization (cat);
                        
                        cat.Name = "test";
-                       cat.Version = new Version (1, 2);
                        cat.GamePeriods = new List<string> ();
                        cat.GamePeriods.Add ("1");
                        cat.GamePeriods.Add ("2");
-                       cat.Add ( new Category {Name = "cat1"});
-                       cat.Add ( new Category {Name = "cat2"});
-                       cat.Add ( new Category {Name = "cat3"});
+                       cat.List.Add ( new Category {Name = "cat1"});
+                       cat.List.Add ( new Category {Name = "cat2"});
+                       cat.List.Add ( new Category {Name = "cat3"});
                        
                        Utils.CheckSerialization (cat);
                        
                        Categories newcat = Utils.SerializeDeserialize (cat);
+                       Assert.AreEqual (cat.ID, newcat.ID);
                        Assert.AreEqual (cat.Name, newcat.Name);
-                       Assert.AreEqual (cat.Version, newcat.Version);
                        Assert.AreEqual (cat.GamePeriods.Count, newcat.GamePeriods.Count);
                        Assert.AreEqual (cat.GamePeriods[0], newcat.GamePeriods[0]);
                        Assert.AreEqual (cat.GamePeriods[1], newcat.GamePeriods[1]);
-                       Assert.AreEqual (cat.Count, newcat.Count);
-                       Assert.AreEqual (cat[0].UUID, newcat[0].UUID);
-                       Assert.AreEqual (cat[1].UUID, newcat[1].UUID);
-                       Assert.AreEqual (cat[2].UUID, newcat[2].UUID);
+                       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);
                }
        }
 }
diff --git a/Tests/Core/TestCategory.cs b/Tests/Core/TestCategory.cs
index 3e4dda1..a39b31f 100644
--- a/Tests/Core/TestCategory.cs
+++ b/Tests/Core/TestCategory.cs
@@ -50,21 +50,21 @@ namespace Tests.Core
                        cat.TagHalfFieldPosition = true;
                        cat.FieldPositionIsDistance = true;
                        cat.HalfFieldPositionIsDistance = false;
-                       cat.SubCategories = new 
System.Collections.Generic.List<LongoMatch.Interfaces.ISubCategory>();
-                       cat.SubCategories.Add (new TagSubCategory {Name="TestSubcat"});
+                       cat.SubCategories = new System.Collections.Generic.List<SubCategory>();
+                       cat.SubCategories.Add (new SubCategory {Name="TestSubcat"});
                        
                        Utils.CheckSerialization (cat);
                        
                        stream = new MemoryStream ();
-                       SerializableObject.Save (cat, stream, SerializationType.Json);
+                       Serializer.Save (cat, stream, SerializationType.Json);
                        stream.Seek (0, SeekOrigin.Begin);
                        reader = new StreamReader (stream);
                        jsonString = reader.ReadToEnd();
                        Assert.False (jsonString.Contains ("SortMethodString"));
                        stream.Seek (0, SeekOrigin.Begin);
-                       Category newcat = SerializableObject.Load<Category> (stream, SerializationType.Json);
+                       Category newcat = Serializer.Load<Category> (stream, SerializationType.Json);
                        
-                       Assert.AreEqual (cat.UUID, newcat.UUID);
+                       Assert.AreEqual (cat.ID, newcat.ID);
                        Assert.AreEqual (cat.Name, newcat.Name);
                        Assert.AreEqual (cat.Position, newcat.Position);
                        Assert.AreEqual (cat.SortMethod, newcat.SortMethod);
@@ -83,6 +83,15 @@ namespace Tests.Core
                        Assert.AreEqual (newcat.SubCategories[0].Name, "TestSubcat");
                }
                
+               [Test()]
+               public void TestNullList ()
+               {
+                       Category cat = new Category();
+                       Assert.AreNotEqual (cat.SubCategories, null);
+                       Category newcat = Utils.SerializeDeserialize (cat);
+                       Assert.AreNotEqual (newcat.SubCategories, null);
+               }
+               
                public static void Main (string [] args)
                {
                }
diff --git a/Tests/Core/TestColor.cs b/Tests/Core/TestColor.cs
index da822ca..7ea83ca 100644
--- a/Tests/Core/TestColor.cs
+++ b/Tests/Core/TestColor.cs
@@ -27,7 +27,7 @@ namespace Tests.Core
                [Test()]
                public void TestSerialization ()
                {
-                       Color c = new Color (1, 2, 3, 4);
+                       Color c = new Color (255, 10, 255, 10);
                        
                        Utils.CheckSerialization (c);
                        Color c1 = Utils.SerializeDeserialize (c);
diff --git a/Tests/Core/TestCoordinates.cs b/Tests/Core/TestCoordinates.cs
index e45ca39..d0e9ed0 100644
--- a/Tests/Core/TestCoordinates.cs
+++ b/Tests/Core/TestCoordinates.cs
@@ -31,40 +31,40 @@ namespace Tests.Core
                        Coordinates coords = new Coordinates();
                        Point p1 = new Point (1, 2);
                        Point p2 = new Point (3, 4);
-                       coords.Add(p1);
-                       coords.Add(p2);
+                       coords.Points.Add(p1);
+                       coords.Points.Add(p2);
                        
                        Utils.CheckSerialization(coords);
                        Coordinates newcoords = Utils.SerializeDeserialize(coords);
                        
-                       Assert.AreEqual (coords.Count, newcoords.Count);
-                       Assert.AreEqual (coords[0].X, newcoords[0].X);
-                       Assert.AreEqual (coords[1].X, newcoords[1].X);
-                       Assert.AreEqual (coords[0].Y, newcoords[0].Y);
-                       Assert.AreEqual (coords[1].Y, newcoords[1].Y);
+                       Assert.AreEqual (coords.Points.Count, newcoords.Points.Count);
+                       Assert.AreEqual (coords.Points[0].X, newcoords.Points[0].X);
+                       Assert.AreEqual (coords.Points[1].X, newcoords.Points[1].X);
+                       Assert.AreEqual (coords.Points[0].Y, newcoords.Points[0].Y);
+                       Assert.AreEqual (coords.Points[1].Y, newcoords.Points[1].Y);
                }
                
                [Test()]
                public void TestEqual ()
                {
                        Coordinates coords = new Coordinates();
-                       coords.Add(new Point (1, 2));
-                       coords.Add(new Point (3, 4));
+                       coords.Points.Add(new Point (1, 2));
+                       coords.Points.Add(new Point (3, 4));
                        
                        Coordinates coords2 = new Coordinates();
-                       coords2.Add (new Point (1, 2));
-                       coords2.Add (new Point (3, 4));
+                       coords2.Points.Add (new Point (1, 2));
+                       coords2.Points.Add (new Point (3, 4));
                        
                        Assert.AreEqual (coords, coords2);
                        
                        /* Different number of elements */
-                       coords2.Add (new Point (1, 2));
+                       coords2.Points.Add (new Point (1, 2));
                        Assert.AreNotEqual (coords, coords2);
                        
                        /* Same number of elements but different points */
                        coords2 = new Coordinates();
-                       coords2.Add (new Point (1, 1));
-                       coords2.Add (new Point (3, 4));
+                       coords2.Points.Add (new Point (1, 1));
+                       coords2.Points.Add (new Point (3, 4));
                        Assert.AreNotEqual (coords, coords2);
                }
        }
diff --git a/LongoMatch.Core/Store/GameUnit.cs b/Tests/Core/TestImage.cs
similarity index 66%
copy from LongoMatch.Core/Store/GameUnit.cs
copy to Tests/Core/TestImage.cs
index f9ce9b9..0fdcac9 100644
--- a/LongoMatch.Core/Store/GameUnit.cs
+++ b/Tests/Core/TestImage.cs
@@ -1,43 +1,32 @@
-// 
-//  Copyright (C) 2011 andoni
-// 
+//
+//  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 NUnit.Framework;
 using System;
-using System.Collections.Generic;
 
-namespace LongoMatch.Store
+namespace Tests.Core
 {
-       [Serializable]
-       public class GameUnit: List<TimelineNode>
+       [TestFixture()]
+       public class TestImage
        {
-               
-               public GameUnit (string name)
+               [Test()]
+               public void TestSerialization ()
                {
-                       Name=name;
+                       
                }
-               
-               public string Name {
-                       get;
-                       set;
-               }
-               
-               public override string ToString ()
-               {
-                       return string.Format ("[GameUnit: Name={0}]", Name);
-               }       
        }
-}
-
+}
\ No newline at end of file
diff --git a/Tests/Core/TestMediaFile.cs b/Tests/Core/TestMediaFile.cs
index 08be46f..3329217 100644
--- a/Tests/Core/TestMediaFile.cs
+++ b/Tests/Core/TestMediaFile.cs
@@ -29,12 +29,12 @@ namespace Tests.Core
                public void TestSerialization ()
                {
                        MediaFile mf = new MediaFile ("path", 34000, 25, true, true, "mp4", "h264",
-                                                     "aac", 320, 240, 1.3, new Image (null));
+                                                     "aac", 320, 240, 1.3, null);
                        Utils.CheckSerialization (mf);
                        
                        MediaFile newmf = Utils.SerializeDeserialize (mf);
                        Assert.AreEqual (mf.FilePath, newmf.FilePath);
-                       Assert.AreEqual (mf.Length, newmf.Length);
+                       Assert.AreEqual (mf.Duration, newmf.Duration);
                        Assert.AreEqual (mf.Fps, newmf.Fps);
                        Assert.AreEqual (mf.HasAudio, newmf.HasAudio);
                        Assert.AreEqual (mf.HasVideo, newmf.HasVideo);
@@ -51,8 +51,7 @@ namespace Tests.Core
                public void TestGetFrames ()
                {
                        MediaFile mf = new MediaFile ("path", 34000, 25, true, true, "mp4", "h264",
-                                                     "aac", 320, 240, 1.3, new Image (null));
-                       Assert.AreEqual (mf.GetFrames(), 850);
+                                                     "aac", 320, 240, 1.3, null);
                }
        }
 }
diff --git a/Tests/Core/TestPlay.cs b/Tests/Core/TestPlay.cs
index c6f20b1..6feeae5 100644
--- a/Tests/Core/TestPlay.cs
+++ b/Tests/Core/TestPlay.cs
@@ -36,22 +36,19 @@ namespace Tests.Core
                        play.Fps = 30;
                        play.Selected = true;
                        play.Team = LongoMatch.Common.Team.LOCAL;
-                       play.GamePeriod = "2";
                        play.FieldPosition = new Coordinates();
-                       play.FieldPosition.Add (new Point (1, 2));
+                       play.FieldPosition.Points.Add (new Point (1, 2));
                        play.HalfFieldPosition = new Coordinates ();
-                       play.HalfFieldPosition.Add (new Point (4,5));
+                       play.HalfFieldPosition.Points.Add (new Point (4,5));
                        play.GoalPosition = new Coordinates ();
-                       play.GoalPosition.Add (new Point (6, 7));
+                       play.GoalPosition.Points.Add (new Point (6, 7));
                        play.PlaybackRate = 1.5f;
                        play.Name = "Play";
                        play.Start = new Time(1000);
                        play.Stop = new Time(2000);
                        play.Rate = 2.3f;
                        
-                       play.Tags.Add(new StringTag {Value = "test"});
-                       play.Teams.Add(new TeamTag {Value = Team.LOCAL});
-                       play.Players.Add(new PlayerTag {Value = new Player {Name="Test"}});
+                       play.Tags.Add(new Tag {Value = "test"});
                        return play;
                }
                
@@ -64,11 +61,10 @@ namespace Tests.Core
                        p = CreatePlay ();
                        var newp = Utils.SerializeDeserialize (p);
                        
-                       Assert.AreEqual (p.Category.UUID, newp.Category.UUID);
+                       Assert.AreEqual (p.Category.ID, newp.Category.ID);
                        Assert.AreEqual (p.Notes, newp.Notes);
                        Assert.AreEqual (p.Fps, newp.Fps);
                        Assert.AreEqual (p.Team, newp.Team);
-                       Assert.AreEqual (p.GamePeriod, newp.GamePeriod);
                        Assert.AreEqual (p.FieldPosition, newp.FieldPosition);
                        Assert.AreEqual (p.HalfFieldPosition, newp.HalfFieldPosition);
                        Assert.AreEqual (p.GoalPosition, newp.GoalPosition);
@@ -79,53 +75,6 @@ namespace Tests.Core
                        Assert.AreEqual (p.Rate, newp.Rate);
                        Assert.AreEqual (p.PlaybackRate, newp.PlaybackRate);
                }
-               
-               [Test()]
-               public void TestStartFrame ()
-               {
-                       Play p = CreatePlay ();
-                       Assert.AreEqual (p.StartFrame, p.Start.MSeconds * p.Fps / 1000);
-               }
-               
-               [Test()]
-               public void TestStopFrame ()
-               {
-                       Play p = CreatePlay ();
-                       Assert.AreEqual (p.StopFrame, p.Stop.MSeconds * p.Fps / 1000);
-               }
-               
-               [Test()]
-               public void TestTotalFrames ()
-               {
-                       Play p = CreatePlay ();
-                       Assert.AreEqual (p.TotalFrames, p.StopFrame - p.StartFrame);
-               }
-               
-               [Test()]
-               public void TestCentralFrame ()
-               {
-                       Play p = CreatePlay ();
-                       Assert.AreEqual (p.CentralFrame, p.StopFrame-((p.TotalFrames)/2));
-               }
-               
-               [Test()]
-               public void TestKeyframe ()
-               {
-                       Play p = CreatePlay ();
-                       Assert.IsFalse (p.HasDrawings);
-                       Assert.AreEqual (p.KeyFrame, 0);
-                       p.KeyFrameDrawing = new Drawing {RenderTime = 1000};
-                       Assert.AreEqual (p.KeyFrame, p.KeyFrameDrawing.RenderTime * p.Fps / 1000);
-               }
-               
-               [Test()]
-               public void TestHasFrame ()
-               {
-                       Play p = CreatePlay ();
-                       Assert.IsTrue (p.HasFrame (35));
-                       Assert.IsFalse (p.HasFrame (70));
-                       Assert.IsFalse (p.HasFrame (3));
-               }
        }
 }
 
diff --git a/Tests/Core/TestPlayer.cs b/Tests/Core/TestPlayer.cs
index 6beabde..22fed9f 100644
--- a/Tests/Core/TestPlayer.cs
+++ b/Tests/Core/TestPlayer.cs
@@ -58,24 +58,9 @@ namespace Tests.Core
                        player.Photo = null;
                        Assert.AreEqual (player.Photo, null);
                        /* FIXME: test with real image */
-                       player.Photo = new DummyImage ("test");
+                       player.Photo = null;
                        Utils.CheckSerialization (player);
                }
        }
-       [Serializable]
-       public class DummyImage: Image
-       {
-               string text;
-               
-               public DummyImage (string text): base (null)
-               {
-                       this.text = text;
-               }
-               
-               public byte[] Serialize  () {
-                       Console.WriteLine ("SER");
-                       return new byte[] {byte.Parse ("1")};
-               }
-       }
 }
 
diff --git a/Tests/Core/TestProject.cs b/Tests/Core/TestProject.cs
index 0ae75f2..51040c9 100644
--- a/Tests/Core/TestProject.cs
+++ b/Tests/Core/TestProject.cs
@@ -58,36 +58,36 @@ namespace Tests.Core
                        Project newp = Utils.SerializeDeserialize (p);
                        Assert.AreEqual (newp.CompareTo (p), 0);
                        Assert.AreEqual (newp.Description.CompareTo (p.Description), 0);
-                       Assert.AreEqual (newp.AllPlays().Count, p.AllPlays().Count);
+                       Assert.AreEqual (newp.Timeline.Count, p.Timeline.Count);
                }
                
                [Test ()]
                public void TestPlaysGrouping () {
                        Project p = CreateProject ();
-                       p.AddPlay (p.Categories[0], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories[0], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories[1], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories[2], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories[2], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories[2], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories[6], 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[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);
                        
                        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[0]);
+                       Assert.AreEqual (gr.Key, p.Categories.List[0]);
                        Assert.AreEqual (gr.Count(), 2);
                        
                        gr = g.ElementAt (1);
-                       Assert.AreEqual (gr.Key, p.Categories[1]);
+                       Assert.AreEqual (gr.Key, p.Categories.List[1]);
                        Assert.AreEqual (gr.Count(), 1);
                        
                        gr = g.ElementAt (2);
-                       Assert.AreEqual (gr.Key, p.Categories[2]);
+                       Assert.AreEqual (gr.Key, p.Categories.List[2]);
                        Assert.AreEqual (gr.Count(), 3);
                        
                        gr = g.ElementAt (3);
-                       Assert.AreEqual (gr.Key, p.Categories[6]);
+                       Assert.AreEqual (gr.Key, p.Categories.List[6]);
                        Assert.AreEqual (gr.Count(), 1);
                }
                
@@ -99,14 +99,14 @@ namespace Tests.Core
                [Test ()]
                public void TestAddPlay () {
                        Project p = CreateProject ();
-                       p.AddPlay (p.Categories[0], new Time (1000), new Time (2000), null);
-                       Assert.AreEqual (p.AllPlays().Count, 1);
-                       p.AddPlay (p.Categories[0], new Time (1000), new Time (2000), null);
-                       Assert.AreEqual (p.AllPlays().Count, 2);
+                       p.AddPlay (p.Categories.List[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);
+                       Assert.AreEqual (p.Timeline.Count, 2);
                        p.AddPlay (new Play());
-                       Assert.AreEqual (p.AllPlays().Count, 3);
+                       Assert.AreEqual (p.Timeline.Count, 3);
                        p.AddPlay (new Play());
-                       Assert.AreEqual (p.AllPlays().Count, 4);
+                       Assert.AreEqual (p.Timeline.Count, 4);
                }
                
                [Test ()]
@@ -124,44 +124,43 @@ namespace Tests.Core
                        plays.Add(p1);
                        plays.Add(p2);
                        p.RemovePlays (plays);
-                       Assert.AreEqual (p.AllPlays().Count, 1);
-                       Assert.AreEqual (p.AllPlays()[0], p3);
+                       Assert.AreEqual (p.Timeline.Count, 1);
+                       Assert.AreEqual (p.Timeline[0], p3);
                }
 
                [Test ()] 
                public void TestRemoveCategory () {
                        Project p = CreateProject ();
-                       p.AddPlay (p.Categories[0], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories[0], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories[0], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories[2], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories[3], new Time (1000), new Time (2000), null);
-                       p.RemoveCategory(p.Categories[0]);
-                       Assert.AreEqual(p.AllPlays().Count, 2);
-                       Assert.AreEqual(p.Categories.Count, 9);
-                       p.RemoveCategory(p.Categories[0]);
-                       p.RemoveCategory(p.Categories[0]);
-                       p.RemoveCategory(p.Categories[0]);
-                       p.RemoveCategory(p.Categories[0]);
-                       p.RemoveCategory(p.Categories[0]);
-                       p.RemoveCategory(p.Categories[0]);
-                       p.RemoveCategory(p.Categories[0]);
-                       p.RemoveCategory(p.Categories[0]);
+                       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]);
+                       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.Throws<Exception>(
-                               delegate {p.RemoveCategory(p.Categories[0]);});
+                               delegate {p.RemoveCategory(p.Categories.List[0]);});
                }
                
                [Test ()] 
                public void TestRemovePlayer () {
                        Play play = new Play();
                        Project project = CreateProject ();
-                       Player player = project.LocalTeamTemplate[0];
-                       PlayerTag tag = new PlayerTag {Value=player};
-                       play.Players.Add (tag);
+                       Player player = project.LocalTeamTemplate.List[0];
+                       play.Players.Add (player);
                        project.AddPlay (play);
                        project.RemovePlayer (project.LocalTeamTemplate, player);
-                       Assert.AreEqual (project.LocalTeamTemplate.Count, 9);
-                       Assert.IsFalse (play.Players.Contains (tag));
+                       Assert.AreEqual (project.LocalTeamTemplate.List.Count, 9);
+                       Assert.IsFalse (play.Players.Contains (player));
                }
                
                [Test ()] 
@@ -172,15 +171,15 @@ namespace Tests.Core
                [Test ()] 
                public void TestPlaysInCategory () {
                        Project p = CreateProject ();
-                       p.AddPlay (p.Categories[0], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories[0], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories[0], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories[2], new Time (1000), new Time (2000), null);
-                       p.AddPlay (p.Categories[3], new Time (1000), new Time (2000), null);
-                       Assert.AreEqual (p.PlaysInCategory (p.Categories[0]).Count, 3);
-                       Assert.AreEqual (p.PlaysInCategory (p.Categories[1]).Count, 0);
-                       Assert.AreEqual (p.PlaysInCategory (p.Categories[2]).Count, 1);
-                       Assert.AreEqual (p.PlaysInCategory (p.Categories[3]).Count, 1);
+                       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);
                }
 
                [Test ()] 
diff --git a/Tests/Core/TestProjectDescription.cs b/Tests/Core/TestProjectDescription.cs
index 546028b..5367a2d 100644
--- a/Tests/Core/TestProjectDescription.cs
+++ b/Tests/Core/TestProjectDescription.cs
@@ -45,7 +45,7 @@ namespace Tests.Core
                        
                        ProjectDescription newpd = Utils.SerializeDeserialize(pd);
                        Assert.AreEqual (pd.CompareTo (newpd), 0);
-                       Assert.AreEqual (pd.UUID, newpd.UUID);
+                       Assert.AreEqual (pd.ID, newpd.ID);
                }
        }
 }
diff --git a/Tests/Core/TestSubCategory.cs b/Tests/Core/TestSubCategory.cs
index 0b74c79..0f04004 100644
--- a/Tests/Core/TestSubCategory.cs
+++ b/Tests/Core/TestSubCategory.cs
@@ -29,59 +29,26 @@ namespace Tests.Core
        public class TestSubCategory
        {
                [Test()]
-               public void TestTagSubcategoryProps ()
-               {
-                       string tag1="tag1", tag2="tag2";
-                       List<string> elementsDesc;
-                       TagSubCategory subcat = new TagSubCategory {Name="Test",
-                               AllowMultiple = true, FastTag = true};
-                               
-                       subcat.Add (tag1);
-                       subcat.Add (tag2);
-                       elementsDesc = subcat.ElementsDesc ();
-                       Assert.AreEqual (elementsDesc.Count, 2);
-                       Assert.AreEqual (elementsDesc[0], tag1);
-                       Assert.AreEqual (elementsDesc[1], tag2);
-               }
-               
-               
-               [Test()]
                public void TestTagSubcategorySerialization ()
                {
                        string tag1="tag1", tag2="tag2";
                        List<string> elementsDesc;
                        MemoryStream stream;
-                       TagSubCategory subcat, newsubcat;
+                       SubCategory subcat, newsubcat;
                        
-                       subcat = new TagSubCategory {Name="Test",
-                               AllowMultiple = true, FastTag = true};
-                       subcat.Add (tag1);
-                       subcat.Add (tag2);
+                       subcat = new SubCategory {Name="Test",
+                               AllowMultiple = true};
+                       subcat.Options.Add (tag1);
+                       subcat.Options.Add (tag2);
                        
                        Utils.CheckSerialization (subcat);
-                       
-                       stream = new MemoryStream ();
-                       SerializableObject.Save (subcat, stream, SerializationType.Json);
-                       stream.Seek (0, SeekOrigin.Begin);
-                       var reader = new StreamReader (stream);
-                       var jsonString = reader.ReadToEnd();
-                       Console.WriteLine (jsonString);
-                       /* Count property is removed */
-                       Assert.False (jsonString.Contains ("Count"));
-                       Assert.True (jsonString.Contains ("_items"));
-                       Assert.True (jsonString.Contains ("_size"));
-                       stream.Seek (0, SeekOrigin.Begin);
+                       newsubcat = Utils.SerializeDeserialize (subcat);
 
-                       newsubcat = SerializableObject.Load<TagSubCategory> (stream, SerializationType.Json);
-                       
                        Assert.AreEqual (subcat.Name, newsubcat.Name);
                        Assert.AreEqual (subcat.AllowMultiple, newsubcat.AllowMultiple);
-                       Assert.AreEqual (subcat.Count, newsubcat.Count);
-                       Assert.AreEqual (subcat.FastTag, newsubcat.FastTag);
-                       elementsDesc = newsubcat.ElementsDesc ();
-                       Assert.AreEqual (elementsDesc.Count, 2);
-                       Assert.AreEqual (elementsDesc[0], tag1);
-                       Assert.AreEqual (elementsDesc[1], tag2);
+                       Assert.AreEqual (subcat.Options.Count, newsubcat.Options.Count);
+                       Assert.AreEqual (subcat.Options[0], newsubcat.Options[0]);
+                       Assert.AreEqual (subcat.Options[1], newsubcat.Options[1]);
                }
        }
 }
diff --git a/Tests/Core/TestTagStore.cs b/Tests/Core/TestTagStore.cs
index bde6687..4f8dd7d 100644
--- a/Tests/Core/TestTagStore.cs
+++ b/Tests/Core/TestTagStore.cs
@@ -28,19 +28,19 @@ namespace Tests.Core
        [TestFixture()]
        public class TagStore
        {
-               StringTag tag1, tag2, tag3, tag4;
-               SubCategory<string> subcat1, subcat2, subcat3;
-               StringTagStore store;
+               Tag tag1, tag2, tag3, tag4;
+               SubCategory subcat1, subcat2, subcat3;
+               TagsStore store;
                
                void FillStore () {
-                       store = new StringTagStore ();
-                       subcat1 = new SubCategory<string> {Name = "subcat1"};
-                       subcat2 = new SubCategory<string> {Name = "subcat2"};
-                       subcat3 = new SubCategory<string> {Name = "subcat3"};
-                       tag1 = new StringTag {SubCategory=subcat1, Value="tag1"};
-                       tag2 = new StringTag {SubCategory=subcat1, Value="tag2"};
-                       tag3 = new StringTag {SubCategory=subcat2, Value="tag3"};
-                       tag4 = new StringTag {SubCategory=subcat3, Value="tag4"};
+                       store = new TagsStore ();
+                       subcat1 = new SubCategory {Name = "subcat1"};
+                       subcat2 = new SubCategory {Name = "subcat2"};
+                       subcat3 = new SubCategory {Name = "subcat3"};
+                       tag1 = new Tag {SubCategory=subcat1, Value="tag1"};
+                       tag2 = new Tag {SubCategory=subcat1, Value="tag2"};
+                       tag3 = new Tag {SubCategory=subcat2, Value="tag3"};
+                       tag4 = new Tag {SubCategory=subcat3, Value="tag4"};
                        store.Add (tag1);
                        store.Add (tag2);
                        store.Add (tag3);
@@ -79,7 +79,7 @@ namespace Tests.Core
                        FillStore ();
                        
                        Assert.AreEqual (store.AllUniqueElements.Count, 4);
-                       var tag = new StringTag {SubCategory=subcat1, Value="tag1"};
+                       var tag = new Tag {SubCategory=subcat1, Value="tag1"};
                        store.Add (tag);
                        Assert.AreEqual (store.AllUniqueElements.Count, 4);
                }
@@ -107,24 +107,6 @@ namespace Tests.Core
                }
                
                [Test()]
-               public void TestRemoveByPlayer ()
-               {
-                       var store = new PlayersTagStore ();
-                       var subcat1 = new SubCategory<string> {Name = "subcat1"};
-                       var player1 = new Player ();
-                       var player2 = new Player ();
-                       var tag1 = new PlayerTag {SubCategory=subcat1, Value=player1};
-                       var tag2 = new PlayerTag {SubCategory=subcat1, Value=player2};
-                       store.Add (tag1);
-                       store.Add (tag2);
-                       
-                       store.RemoveByPlayer (player1);
-                       Assert.AreEqual (store.Tags.Count, 1);
-                       store.RemoveByPlayer (player2);
-                       Assert.AreEqual (store.Tags.Count, 0);
-               }
-               
-               [Test()]
                public void TestSerialization ()
                {
                        FillStore ();
diff --git a/Tests/Core/TestTeamTemplate.cs b/Tests/Core/TestTeamTemplate.cs
index f2ef1a8..4ae3507 100644
--- a/Tests/Core/TestTeamTemplate.cs
+++ b/Tests/Core/TestTeamTemplate.cs
@@ -34,24 +34,23 @@ namespace Tests.Core
                        Utils.CheckSerialization(t);
                        
                        t.Name = "test";
-                       t.Version = new Version (1, 2);
                        t.TeamName = "team";
-                       t.Add (new Player {Name="P1"});
-                       t.Add (new Player {Name="P2"});
-                       t.Add (new Player {Name="P3"});
+                       t.List.Add (new Player {Name="P1"});
+                       t.List.Add (new Player {Name="P2"});
+                       t.List.Add (new Player {Name="P3"});
                        
                        
                        Utils.CheckSerialization (t);
                        
                        TeamTemplate newt = Utils.SerializeDeserialize(t);
                        
+                       Assert.AreEqual (t.ID, newt.ID);
                        Assert.AreEqual (t.Name, newt.Name);
-                       Assert.AreEqual (t.Version, newt.Version);
                        Assert.AreEqual (t.TeamName, newt.TeamName);
-                       Assert.AreEqual (t.Count, newt.Count);
-                       Assert.AreEqual (t[0].Name, newt[0].Name);
-                       Assert.AreEqual (t[1].Name, newt[1].Name);
-                       Assert.AreEqual (t[2].Name, newt[2].Name);
+                       Assert.AreEqual (t.List.Count, newt.List.Count);
+                       Assert.AreEqual (t.List[0].Name, newt.List[0].Name);
+                       Assert.AreEqual (t.List[1].Name, newt.List[1].Name);
+                       Assert.AreEqual (t.List[2].Name, newt.List[2].Name);
                }
                
                
@@ -62,7 +61,6 @@ namespace Tests.Core
                        Player p1, p2, p3;
                        
                        t.Name = "test";
-                       t.Version = new Version (1, 2);
                        t.TeamName = "team";
                        
                        Assert.AreEqual (t.PlayingPlayersList.Count, 0);
@@ -70,11 +68,11 @@ namespace Tests.Core
                        p1 = new Player {Name="P1", Playing = true};
                        p2 = new Player {Name="P2", Playing = false};
                        p3 = new Player {Name="P3", Playing = true};
-                       t.Add (p1);
+                       t.List.Add (p1);
                        Assert.AreEqual (t.PlayingPlayersList.Count, 1);
-                       t.Add (p2);
+                       t.List.Add (p2);
                        Assert.AreEqual (t.PlayingPlayersList.Count, 1);
-                       t.Add (p3);
+                       t.List.Add (p3);
                        Assert.AreEqual (t.PlayingPlayersList.Count, 2);
                        Assert.AreEqual (t.PlayingPlayersList[0], p1);
                        Assert.AreEqual (t.PlayingPlayersList[1], p3);
@@ -85,10 +83,21 @@ namespace Tests.Core
                {
                        TeamTemplate t = TeamTemplate.DefaultTemplate (10);
                        
-                       Assert.AreEqual (t.Count, 10);
+                       Assert.AreEqual (t.List.Count, 10);
                        t.AddDefaultItem (8);
-                       Assert.AreEqual (t.Count, 11);
+                       Assert.AreEqual (t.List.Count, 11);
                }
                
+               [Test()]
+               public void TestFormation ()
+               {
+                       TeamTemplate t = TeamTemplate.DefaultTemplate (1);
+                       t.FormationStr = "1-2-3-4";
+                       Assert.AreEqual (t.Formation.Length, 4);
+                       Assert.AreEqual (t.Formation[0], 1);
+                       Assert.AreEqual (t.Formation[1], 2);
+                       Assert.AreEqual (t.Formation[2], 3);
+                       Assert.AreEqual (t.Formation[3], 4);
+               }
        }
 }
diff --git a/LongoMatch.Core/Store/GameUnit.cs b/Tests/Core/TestTime.cs
similarity index 66%
rename from LongoMatch.Core/Store/GameUnit.cs
rename to Tests/Core/TestTime.cs
index f9ce9b9..3e40ebb 100644
--- a/LongoMatch.Core/Store/GameUnit.cs
+++ b/Tests/Core/TestTime.cs
@@ -1,43 +1,35 @@
-// 
-//  Copyright (C) 2011 andoni
-// 
+//
+//  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 NUnit.Framework;
 using System;
-using System.Collections.Generic;
+using LongoMatch.Store;
 
-namespace LongoMatch.Store
+namespace Tests.Core
 {
-       [Serializable]
-       public class GameUnit: List<TimelineNode>
+       [TestFixture()]
+       public class TestTime
        {
-               
-               public GameUnit (string name)
+               [Test()]
+               public void TestSerialization ()
                {
-                       Name=name;
+                       Time t = new Time (1000);
+                       Utils.CheckSerialization (t);
                }
-               
-               public string Name {
-                       get;
-                       set;
-               }
-               
-               public override string ToString ()
-               {
-                       return string.Format ("[GameUnit: Name={0}]", Name);
-               }       
        }
 }
 
diff --git a/Tests/Services/TestDatabase.cs b/Tests/Services/TestDatabase.cs
index 9e2449e..cfbbb54 100644
--- a/Tests/Services/TestDatabase.cs
+++ b/Tests/Services/TestDatabase.cs
@@ -119,8 +119,8 @@ namespace Tests.Services
                        ProjectDescription pd1 = new ProjectDescription ();
                        Project p1 = new Project {Description = pd1};
                        db.AddProject (p1);
-                       Project p2 = db.GetProject (p1.UUID);
-                       Assert.AreEqual (p1.UUID, p2.UUID);
+                       Project p2 = db.GetProject (p1.ID);
+                       Assert.AreEqual (p1.ID, p2.ID);
                        Assert.IsNull (db.GetProject (new Guid()));
                }
                
@@ -132,7 +132,7 @@ namespace Tests.Services
                        ProjectDescription pd1 = new ProjectDescription ();
                        Project p1 = new Project {Description = pd1};
                        Assert.IsTrue (db.AddProject (p1));
-                       Assert.IsTrue (File.Exists (Path.Combine (dbdir, p1.UUID.ToString())));
+                       Assert.IsTrue (File.Exists (Path.Combine (dbdir, p1.ID.ToString())));
                        Assert.IsTrue (db.AddProject (p1));
                        Assert.AreEqual (db.Count, 1);
                        db = new DataBase (dbdir);
@@ -147,12 +147,12 @@ namespace Tests.Services
                        ProjectDescription pd1 = new ProjectDescription ();
                        Project p1 = new Project {Description = pd1};
                        Assert.IsTrue (db.AddProject (p1));
-                       Assert.IsTrue (File.Exists (Path.Combine (dbdir, p1.UUID.ToString())));
+                       Assert.IsTrue (File.Exists (Path.Combine (dbdir, p1.ID.ToString())));
                        Assert.AreEqual (db.Count, 1);
-                       Assert.IsTrue (db.RemoveProject (p1.UUID));
-                       Assert.IsFalse (File.Exists (Path.Combine (dbdir, p1.UUID.ToString())));
+                       Assert.IsTrue (db.RemoveProject (p1.ID));
+                       Assert.IsFalse (File.Exists (Path.Combine (dbdir, p1.ID.ToString())));
                        Assert.AreEqual (db.Count, 0);
-                       Assert.IsFalse (db.RemoveProject (p1.UUID));
+                       Assert.IsFalse (db.RemoveProject (p1.ID));
                        db = new DataBase (dbdir);
                        Assert.AreEqual (db.Count, 0);
                }
diff --git a/Tests/Tests.mdp b/Tests/Tests.mdp
index ca8d043..6ae96b9 100644
--- a/Tests/Tests.mdp
+++ b/Tests/Tests.mdp
@@ -30,7 +30,6 @@
     <File subtype="Code" buildaction="Compile" name="Core/TestTimeNode.cs" />
     <File subtype="Code" buildaction="Compile" name="Core/TestCategoriesTemplate.cs" />
     <File subtype="Code" buildaction="Compile" name="Core/TestTeamTemplate.cs" />
-    <File subtype="Code" buildaction="Compile" name="Core/TestSubcategoriesTemplate.cs" />
     <File subtype="Directory" buildaction="Compile" name="Services" />
     <File subtype="Code" buildaction="Compile" name="Services/TestDatabase.cs" />
     <File subtype="Code" buildaction="Compile" name="Services/TestDatabasesManager.cs" />
@@ -46,15 +45,18 @@
     <File subtype="Code" buildaction="Compile" name="Core/Drawables/TestDrawable.cs" />
     <File subtype="Code" buildaction="Compile" name="Core/Drawables/TestCircle.cs" />
     <File subtype="Code" buildaction="Compile" name="Core/TestColor.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/TestTime.cs" />
+    <File subtype="Code" buildaction="Compile" name="Core/TestImage.cs" />
   </Contents>
   <References>
-    <ProjectReference type="Gac" localcopy="False" refto="nunit.core, Version=2.6.0.0, Culture=neutral, 
PublicKeyToken=96d09a1eb7f44a77" />
-    <ProjectReference type="Gac" localcopy="False" refto="nunit.framework, Version=2.6.0.0, Culture=neutral, 
PublicKeyToken=96d09a1eb7f44a77" />
-    <ProjectReference specificVersion="False" type="Gac" localcopy="False" refto="System, Version=4.0.0.0, 
Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+    <ProjectReference type="Package" localcopy="False" refto="nunit.core, Version=2.6.0.0, Culture=neutral, 
PublicKeyToken=96d09a1eb7f44a77" />
+    <ProjectReference type="Package" localcopy="False" refto="nunit.framework, Version=2.6.0.0, 
Culture=neutral, PublicKeyToken=96d09a1eb7f44a77" />
+    <ProjectReference type="Package" specificVersion="False" localcopy="False" refto="System, 
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
     <ProjectReference type="Project" localcopy="True" refto="LongoMatch.Core" />
-    <ProjectReference type="Gac" localcopy="False" refto="Newtonsoft.Json, Version=5.0.0.0, Culture=neutral, 
PublicKeyToken=b9a188c8922137c6" />
-    <ProjectReference specificVersion="False" type="Gac" localcopy="False" refto="System.Drawing, 
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-    <ProjectReference specificVersion="False" type="Gac" localcopy="False" refto="System.Core, 
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+    <ProjectReference type="Package" localcopy="False" refto="Newtonsoft.Json, Version=5.0.0.0, 
Culture=neutral, PublicKeyToken=b9a188c8922137c6" />
+    <ProjectReference type="Package" specificVersion="False" localcopy="False" refto="System.Drawing, 
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+    <ProjectReference type="Package" specificVersion="False" localcopy="False" refto="System.Core, 
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
     <ProjectReference type="Project" localcopy="True" refto="LongoMatch.Services" />
+    <ProjectReference type="Package" localcopy="False" refto="gdk-sharp, Version=2.12.0.0, Culture=neutral, 
PublicKeyToken=35e10195dab3c99f" />
   </References>
 </Project>
\ No newline at end of file
diff --git a/Tests/Utils.cs b/Tests/Utils.cs
index 240c761..7423454 100644
--- a/Tests/Utils.cs
+++ b/Tests/Utils.cs
@@ -30,27 +30,27 @@ namespace Tests
                
                public static T SerializeDeserialize<T> (T obj) {
                        var stream = new MemoryStream ();
-                       SerializableObject.Save (obj, stream, SerializationType.Json);
+                       Serializer.Save (obj, stream, SerializationType.Json);
                        stream.Seek (0, SeekOrigin.Begin);
                        var jsonString = new StreamReader(stream).ReadToEnd();
                        Console.WriteLine (jsonString);
                        stream.Seek(0, SeekOrigin.Begin);
                        
-                       return SerializableObject.Load<T>(stream, SerializationType.Json);
+                       return Serializer.Load<T>(stream, SerializationType.Json);
                }
                 
                public static void CheckSerialization<T> (T obj) {
                        var stream = new MemoryStream ();
-                       SerializableObject.Save (obj, stream, SerializationType.Json);
+                       Serializer.Save (obj, stream, SerializationType.Json);
                        stream.Seek (0, SeekOrigin.Begin);
                        var jsonString = new StreamReader(stream).ReadToEnd();
                        Console.WriteLine (jsonString);
                        stream.Seek(0, SeekOrigin.Begin);
                        
-                       var newobj = SerializableObject.Load<T>(stream, SerializationType.Json);
+                       var newobj = Serializer.Load<T>(stream, SerializationType.Json);
                        
                        stream = new MemoryStream ();
-                       SerializableObject.Save (newobj, stream, SerializationType.Json);
+                       Serializer.Save (newobj, stream, SerializationType.Json);
                        stream.Seek(0, SeekOrigin.Begin);
                        var newJsonString = new StreamReader(stream).ReadToEnd();
                        Console.WriteLine (newJsonString);


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