[chronojump] 0.8.9.0



commit d21f0b7c81859fe7ebdd59b8f900b03417abce38
Author: Xavier de Blas <xaviblas gmail com>
Date:   Mon May 4 16:03:10 2009 +0200

    0.8.9.0
    start logo changed to 0.9
    runanalysis execute test done
    multiChronopic deleteFirst done
    multiChronopic export done
    client/server code for upload multichronopic
    dialog_server_stats with multiChronopic
    
    added maximum jump and its graphs (git added)
    runAnalysis is no longer a jumpRjType on sql
    added reactionTime graph (git added)
    gesell_dbt in 3d
    improvemenents on session_upload window
    
    updated sqlite disagrams
    when createBlankDBServer is called, client new version is printed automatically
---
 Makefile                                    |    2 +
 TODO.txt                                    |   15 +-
 build/data/chronojump.prg                   |  Bin 2951168 -> 3010560 bytes
 build/data/chronojump_mini.prg              |  Bin 39936 -> 40448 bytes
 build/data/version.txt                      |    2 +-
 changelog.txt                               |   18 +
 chronojump_server/ChronojumpServer.cs       |  109 +++
 chronojump_server/bin/chronojumpServer.dll  |  Bin 244736 -> 263168 bytes
 chronojump_server/chronojumpServerCSharp.cs |   10 +
 glade/chronojump.glade                      | 1079 +++++++++++++++------------
 images/chronojump_320.png                   |  Bin 31769 -> 32313 bytes
 images/gesell_dbt.png                       |  Bin 7009 -> 18291 bytes
 images/jump_max.png                         |  Bin 0 -> 9826 bytes
 images/mini/gesell_dbt.png                  |  Bin 3320 -> 7684 bytes
 images/mini/jump_max.png                    |  Bin 0 -> 4906 bytes
 images/mini/multiChronopic.png              |  Bin 2954 -> 2873 bytes
 images/mini/reaction_time.png               |  Bin 0 -> 5013 bytes
 images/multiChronopic.png                   |  Bin 5528 -> 5500 bytes
 images/reaction_time.png                    |  Bin 0 -> 10214 bytes
 images/svg/bosco_jumps.svg                  |  199 +++++-
 sqlite_diagrams/chronojump_sqlite.dia       |  Bin 10139 -> 11146 bytes
 sqlite_diagrams/chronojump_sqlite.png       |  Bin 199982 -> 309302 bytes
 src/chronojump.cs                           |    7 +-
 src/constants.cs                            |    3 +-
 src/execute/multiChronopic.cs               |   90 ++-
 src/exportSession.cs                        |  119 +++
 src/gui/chronojump.cs                       |  147 +++--
 src/gui/dialogServerStats.cs                |    8 +
 src/gui/eventExecute.cs                     |   30 +-
 src/gui/server.cs                           |   19 +-
 src/jumpType.cs                             |    8 +-
 src/multiChronopic.cs                       |   68 ++-
 src/multiChronopicType.cs                   |    4 +-
 src/reactionTimeType.cs                     |    8 +
 src/server.cs                               |   33 +
 src/sqlite/jumpType.cs                      |    4 +-
 src/sqlite/main.cs                          |   22 +-
 src/sqlite/personSession.cs                 |    2 +-
 src/sqlite/server.cs                        |    2 +
 src/treeViewMultiChronopic.cs               |   50 +-
 src/util.cs                                 |    8 +
 version.txt                                 |    2 +-
 42 files changed, 1411 insertions(+), 657 deletions(-)

diff --git a/Makefile b/Makefile
index 2b1e267..25f4121 100644
--- a/Makefile
+++ b/Makefile
@@ -62,6 +62,7 @@ RESOURCES_IMAGES = -resource:images/mini/no_image.png,mini/no_image.png \
 		-resource:images/jump_cmj_l.png,jump_cmj_l.png 			-resource:images/mini/jump_cmj_l.png,mini/jump_cmj_l.png \
 		-resource:images/jump_abk.png,jump_abk.png 			-resource:images/mini/jump_abk.png,mini/jump_abk.png \
 		-resource:images/jump_abk_l.png,jump_abk_l.png 			-resource:images/mini/jump_abk_l.png,mini/jump_abk_l.png \
+		-resource:images/jump_max.png,jump_max.png 			-resource:images/mini/jump_max.png,mini/jump_max.png \
 		-resource:images/jump_dj.png,jump_dj.png 			-resource:images/mini/jump_dj.png,mini/jump_dj.png \
 		-resource:images/jump_rocket.png,jump_rocket.png 		-resource:images/mini/jump_rocket.png,mini/jump_rocket.png \
 		-resource:images/jump_rj.png,jump_rj.png 			-resource:images/mini/jump_rj.png,mini/jump_rj.png \
@@ -75,6 +76,7 @@ RESOURCES_IMAGES = -resource:images/mini/no_image.png,mini/no_image.png \
 		-resource:images/run_analysis.png,run_analysis.png		-resource:images/mini/run_analysis.png,mini/run_analysis.png \
 		-resource:images/pulse_free.png,pulse_free.png 			-resource:images/mini/pulse_free.png,mini/pulse_free.png \
 		-resource:images/pulse_custom.png,pulse_custom.png		-resource:images/mini/pulse_custom.png,mini/pulse_custom.png \
+		-resource:images/reaction_time.png,reaction_time.png		-resource:images/mini/reaction_time.png,mini/reaction_time.png \
 		-resource:images/mtgug.png,mtgug.png				-resource:images/mini/mtgug.png,mini/mtgug.png \
 		-resource:images/take_off.png,take_off.png			-resource:images/mini/take_off.png,mini/take_off.png \
 		-resource:images/chronopic1.jpg,chronopic1.jpg			-resource:images/mini/chronopic1.jpg,mini/chronopic1.jpg \
diff --git a/TODO.txt b/TODO.txt
index 0421104..332e16b 100644
--- a/TODO.txt
+++ b/TODO.txt
@@ -6,13 +6,11 @@ work done (30 apr (2)), just do more tests
 2.- the sqlite problem with the thread at start... need to explore more
 
 multiChronopic:
-(when press two for full finishing, say that then it will be recorded)
 -repair
 -tempTable
--export
+-upload server
 
 new multichronopic tests:
--do button enter
 - padu runAnalysis (2cp): out of jumpRj and going to multichronopic (also in menu)
 - discrimitative reaction time with two lights and two fotocells (or platforms)
 (4cp) when evaluator push left or right button, cp 1 or cp2 lights, person has to cross fotocell a or b (connected to cp 3, 4)
@@ -27,13 +25,13 @@ http://cran.r-project.org/web/packages/RSQLite/index.html
 http://cran.r-project.org/web/packages/RSQLite/INSTALL
 http://cran.r-project.org/web/packages/DBI/index.html
 
-all this will be release 0.9
-
 do the ping gets real IP
 
+implement all server evaluator SAFE stuff 
+
 put thread in other server situations:
 -upload evaluator
--upload session
+-upload session (doing) pending to generate wsdl proxy in order to download
 
 http://en.csharp-online.net/ASP.NET_Security_Hacks¿Avoiding_SQL_Injection
 http://ferruh.mavituna.com/sql-injection-cheatsheet-oku/
@@ -42,10 +40,13 @@ c# books. Or look for ; and after alter, insert, delete, drop, update, ...
 (low and hight case)
 i think there will be no problems because all is parametrized
 
-Put pictures and description of runAnalysis. Do svn add, Makefile, ...
+Put description of runAnalysis
+Put description of reactionTime
 
 Add longDescription on margaria
 
+Update manual
+
 
 intersession stats only have to show one max or avg, not n max or all jumps
 stats all and limit is not updating the treeview stats. 
diff --git a/build/data/chronojump.prg b/build/data/chronojump.prg
index 81b845b..d6051f7 100755
Binary files a/build/data/chronojump.prg and b/build/data/chronojump.prg differ
diff --git a/build/data/chronojump_mini.prg b/build/data/chronojump_mini.prg
index 5a9e74b..0cf35d9 100755
Binary files a/build/data/chronojump_mini.prg and b/build/data/chronojump_mini.prg differ
diff --git a/build/data/version.txt b/build/data/version.txt
index 4810611..cc02ea7 100644
--- a/build/data/version.txt
+++ b/build/data/version.txt
@@ -1 +1 @@
-0.8.3.2
+0.8.9.0
diff --git a/changelog.txt b/changelog.txt
index 707a85e..f9dd696 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -1,5 +1,22 @@
 CHANGELOG.txt
 
+	0.8.9.0
+	start logo changed to 0.9
+	runanalysis execute test done
+	multiChronopic deleteFirst done
+	multiChronopic export done
+	client/server code for upload multichronopic
+	dialog_server_stats with multiChronopic
+	
+	added maximum jump and its graphs (git added)
+	runAnalysis is no longer a jumpRjType on sql
+	added reactionTime graph (git added)
+	gesell_dbt in 3d
+	improvemenents on session_upload window
+
+	updated sqlite disagrams
+	when createBlankDBServer is called, client new version is printed automatically
+
 30 apr 2009 (2)
 	added graphs for multiChronopic and runAnalysis
 	multiChronopic sync is done or not depending on multiChronopic type
@@ -7,6 +24,7 @@ CHANGELOG.txt
 	improvements on threading on multiChronopic, now finishing will not record event 4 times
 
 	improvements on (really few sometimes) crash when splash win is created too late (findversion error)
+	button enter done for multiChronopic and runAnalysis
 
 30 apr 2009
 	new test Gesell-DBT test new db: 0.69
diff --git a/chronojump_server/ChronojumpServer.cs b/chronojump_server/ChronojumpServer.cs
index 744b725..af84813 100644
--- a/chronojump_server/ChronojumpServer.cs
+++ b/chronojump_server/ChronojumpServer.cs
@@ -66,6 +66,8 @@ public class ChronojumpServer : System.Web.Services.Protocols.SoapHttpClientProt
     
     private System.Threading.SendOrPostCallback UploadPulseOperationCompleted;
     
+    private System.Threading.SendOrPostCallback UploadMultiChronopicOperationCompleted;
+    
     private System.Threading.SendOrPostCallback ListDirectoryOperationCompleted;
     
     public ChronojumpServer() {
@@ -116,6 +118,8 @@ public class ChronojumpServer : System.Web.Services.Protocols.SoapHttpClientProt
     
     private event UploadPulseCompletedEventHandler UploadPulseCompleted;
     
+    private event UploadMultiChronopicCompletedEventHandler UploadMultiChronopicCompleted;
+    
     private event ListDirectoryCompletedEventHandler ListDirectoryCompleted;
     
     /// <remarks>
@@ -1001,6 +1005,45 @@ public class ChronojumpServer : System.Web.Services.Protocols.SoapHttpClientProt
     }
     
     /// <remarks>
+///Upload a multiChronopic
+///</remarks>
+    [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://server.chronojump.org/UploadMultiChronopic";, RequestNamespace="http://server.chronojump.org/";, ResponseNamespace="http://server.chronojump.org/";, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped, Use=System.Web.Services.Description.SoapBindingUse.Literal)]
+    public int UploadMultiChronopic(MultiChronopic myTest) {
+        object[] results = this.Invoke("UploadMultiChronopic", new object[] {
+                    myTest});
+        return ((int)(results[0]));
+    }
+    
+    public System.IAsyncResult BeginUploadMultiChronopic(MultiChronopic myTest, System.AsyncCallback callback, object asyncState) {
+        return this.BeginInvoke("UploadMultiChronopic", new object[] {
+                    myTest}, callback, asyncState);
+    }
+    
+    public int EndUploadMultiChronopic(System.IAsyncResult asyncResult) {
+        object[] results = this.EndInvoke(asyncResult);
+        return ((int)(results[0]));
+    }
+    
+    public void UploadMultiChronopicAsync(MultiChronopic myTest) {
+        this.UploadMultiChronopicAsync(myTest, null);
+    }
+    
+    public void UploadMultiChronopicAsync(MultiChronopic myTest, object userState) {
+        if ((this.UploadMultiChronopicOperationCompleted == null)) {
+            this.UploadMultiChronopicOperationCompleted = new System.Threading.SendOrPostCallback(this.OnUploadMultiChronopicCompleted);
+        }
+        this.InvokeAsync("UploadMultiChronopic", new object[] {
+                    myTest}, this.UploadMultiChronopicOperationCompleted, userState);
+    }
+    
+    private void OnUploadMultiChronopicCompleted(object arg) {
+        if ((this.UploadMultiChronopicCompleted != null)) {
+            System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
+            this.UploadMultiChronopicCompleted(this, new UploadMultiChronopicCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
+        }
+    }
+    
+    /// <remarks>
 ///List directory files (only as a sample)
 ///</remarks>
     [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://server.chronojump.org/ListDirectory";, RequestNamespace="http://server.chronojump.org/";, ResponseNamespace="http://server.chronojump.org/";, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped, Use=System.Web.Services.Description.SoapBindingUse.Literal)]
@@ -1039,6 +1082,7 @@ public class ChronojumpServer : System.Web.Services.Protocols.SoapHttpClientProt
         }
     }
 }
+
 /*
 /// <remarks/>
 [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.42")]
@@ -1347,6 +1391,7 @@ public partial class Jump : Event {
 [System.Xml.Serialization.XmlIncludeAttribute(typeof(RunInterval))]
 [System.Xml.Serialization.XmlIncludeAttribute(typeof(ReactionTime))]
 [System.Xml.Serialization.XmlIncludeAttribute(typeof(Pulse))]
+[System.Xml.Serialization.XmlIncludeAttribute(typeof(MultiChronopic))]
 public partial class Event {
     
     /// <remarks/>
@@ -1458,6 +1503,51 @@ public partial class Pulse : Event {
     /// <remarks/>
     public string TimesString;
 }
+
+/// <remarks/>
+[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.42")]
+[System.SerializableAttribute()]
+[System.Diagnostics.DebuggerStepThroughAttribute()]
+[System.ComponentModel.DesignerCategoryAttribute("code")]
+[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://server.chronojump.org/";)]
+public partial class MultiChronopic : Event {
+    
+    /// <remarks/>
+    public int Cp1StartedIn;
+    
+    /// <remarks/>
+    public int Cp2StartedIn;
+    
+    /// <remarks/>
+    public int Cp3StartedIn;
+    
+    /// <remarks/>
+    public int Cp4StartedIn;
+    
+    /// <remarks/>
+    public string Cp1InStr;
+    
+    /// <remarks/>
+    public string Cp1OutStr;
+    
+    /// <remarks/>
+    public string Cp2InStr;
+    
+    /// <remarks/>
+    public string Cp2OutStr;
+    
+    /// <remarks/>
+    public string Cp3InStr;
+    
+    /// <remarks/>
+    public string Cp3OutStr;
+    
+    /// <remarks/>
+    public string Cp4InStr;
+    
+    /// <remarks/>
+    public string Cp4OutStr;
+}
 */
 public class ConnectDatabaseCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
     
@@ -1877,6 +1967,25 @@ public class UploadPulseCompletedEventArgs : System.ComponentModel.AsyncComplete
 
 public delegate void UploadPulseCompletedEventHandler(object sender, UploadPulseCompletedEventArgs args);
 
+public class UploadMultiChronopicCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+    
+    private object[] results;
+    
+    internal UploadMultiChronopicCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+            base(exception, cancelled, userState) {
+        this.results = results;
+    }
+    
+    public int Result {
+        get {
+            this.RaiseExceptionIfNecessary();
+            return ((int)(this.results[0]));
+        }
+    }
+}
+
+public delegate void UploadMultiChronopicCompletedEventHandler(object sender, UploadMultiChronopicCompletedEventArgs args);
+
 public class ListDirectoryCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
     
     private object[] results;
diff --git a/chronojump_server/bin/chronojumpServer.dll b/chronojump_server/bin/chronojumpServer.dll
index 39a3667..6e6a681 100755
Binary files a/chronojump_server/bin/chronojumpServer.dll and b/chronojump_server/bin/chronojumpServer.dll differ
diff --git a/chronojump_server/chronojumpServerCSharp.cs b/chronojump_server/chronojumpServerCSharp.cs
index 4c31082..6fc187c 100755
--- a/chronojump_server/chronojumpServerCSharp.cs
+++ b/chronojump_server/chronojumpServerCSharp.cs
@@ -466,6 +466,16 @@ public class ChronojumpServer {
 		return id; //uniqueID of person at server
 	}
 
+	[WebMethod(Description="Upload a multiChronopic")]
+	public int UploadMultiChronopic (MultiChronopic myTest)
+	{
+		int temp = myTest.UniqueID;
+		myTest.UniqueID = -1;
+		int id = myTest.InsertAtDB(false, Constants.MultiChronopicTable);
+		myTest.UniqueID = temp;
+		return id; //uniqueID of person at server
+	}
+
 	
 	[WebMethod(Description="List directory files (only as a sample)")]
 	public string [] ListDirectory(string path) {
diff --git a/glade/chronojump.glade b/glade/chronojump.glade
index f0173a9..4ad9e43 100644
--- a/glade/chronojump.glade
+++ b/glade/chronojump.glade
@@ -8641,7 +8641,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_new_activate" last_modification_time="Wed, 22 Sep 2004 23:55:11 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4269">
+			<widget class="GtkImage" id="image4339">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-new</property>
 			  <property name="icon_size">1</property>
@@ -8662,7 +8662,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_open_activate" last_modification_time="Wed, 22 Sep 2004 23:55:11 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4270">
+			<widget class="GtkImage" id="image4340">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-open</property>
 			  <property name="icon_size">1</property>
@@ -8683,7 +8683,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_edit_session_activate" last_modification_time="Tue, 26 Jul 2005 19:12:07 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4271">
+			<widget class="GtkImage" id="image4341">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-edit</property>
 			  <property name="icon_size">1</property>
@@ -8705,7 +8705,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_delete_session_activate" last_modification_time="Thu, 28 Jul 2005 13:37:42 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4272">
+			<widget class="GtkImage" id="image4342">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-remove</property>
 			  <property name="icon_size">1</property>
@@ -8733,7 +8733,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_export_session_activate" last_modification_time="Sat, 12 Feb 2005 21:57:07 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4273">
+			<widget class="GtkImage" id="image4343">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-convert</property>
 			  <property name="icon_size">1</property>
@@ -8768,7 +8768,7 @@ suitable for agility tests)</property>
 		      <property name="use_underline">True</property>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4274">
+			<widget class="GtkImage" id="image4344">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-connect</property>
 			  <property name="icon_size">1</property>
@@ -8836,7 +8836,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_preferences_activate" last_modification_time="Mon, 04 Oct 2004 19:19:19 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4275">
+			<widget class="GtkImage" id="image4345">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-preferences</property>
 			  <property name="icon_size">1</property>
@@ -8863,7 +8863,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_quit1_activate" last_modification_time="Wed, 22 Sep 2004 23:17:31 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4276">
+			<widget class="GtkImage" id="image4346">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-quit</property>
 			  <property name="icon_size">1</property>
@@ -8897,7 +8897,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_person_add_single_activate" last_modification_time="Thu, 18 Aug 2005 23:07:39 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4277">
+			<widget class="GtkImage" id="image4347">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-new</property>
 			  <property name="icon_size">1</property>
@@ -8918,7 +8918,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_person_add_multiple_activate" last_modification_time="Thu, 18 Aug 2005 23:01:23 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4278">
+			<widget class="GtkImage" id="image4348">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-new</property>
 			  <property name="icon_size">1</property>
@@ -8945,7 +8945,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_recuperate_person_activate" last_modification_time="Sun, 12 Dec 2004 00:40:31 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4279">
+			<widget class="GtkImage" id="image4349">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-open</property>
 			  <property name="icon_size">1</property>
@@ -8966,7 +8966,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_recuperate_persons_from_session_activate" last_modification_time="Tue, 26 Jul 2005 19:12:07 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4280">
+			<widget class="GtkImage" id="image4350">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-open</property>
 			  <property name="icon_size">1</property>
@@ -8993,7 +8993,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_edit_current_person_clicked" last_modification_time="Sun, 17 Oct 2004 11:43:33 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4281">
+			<widget class="GtkImage" id="image4351">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-edit</property>
 			  <property name="icon_size">1</property>
@@ -9014,7 +9014,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_show_all_person_events_activate" last_modification_time="Mon, 29 Aug 2005 09:51:24 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4282">
+			<widget class="GtkImage" id="image4352">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-index</property>
 			  <property name="icon_size">1</property>
@@ -9041,7 +9041,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_delete_current_person_from_session_activate" last_modification_time="Thu, 28 Jul 2005 15:49:38 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4283">
+			<widget class="GtkImage" id="image4353">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-remove</property>
 			  <property name="icon_size">1</property>
@@ -9070,7 +9070,7 @@ suitable for agility tests)</property>
 		  <child>
 		    <widget class="GtkMenuItem" id="execute_simple_jumps1">
 		      <property name="visible">True</property>
-		      <property name="label" translatable="yes">Simple jump with no special technique</property>
+		      <property name="label" translatable="yes">Execute simple jump</property>
 		      <property name="use_underline">True</property>
 
 		      <child>
@@ -9126,6 +9126,16 @@ suitable for agility tests)</property>
 			  </child>
 
 			  <child>
+			    <widget class="GtkMenuItem" id="jumps_max">
+			      <property name="visible">True</property>
+			      <property name="tooltip" translatable="yes">Maximum Jump (like Abalakov but with free technique)</property>
+			      <property name="label" translatable="yes">Max</property>
+			      <property name="use_underline">True</property>
+			      <signal name="activate" handler="on_normal_jump_activate" last_modification_time="Fri, 01 May 2009 11:53:57 GMT"/>
+			    </widget>
+			  </child>
+
+			  <child>
 			    <widget class="GtkMenuItem" id="dj">
 			      <property name="visible">True</property>
 			      <property name="tooltip" translatable="yes">Drop Jump</property>
@@ -9168,7 +9178,7 @@ suitable for agility tests)</property>
 			      <signal name="activate" handler="on_button_more_clicked" last_modification_time="Thu, 10 Mar 2005 18:52:25 GMT"/>
 
 			      <child internal-child="image">
-				<widget class="GtkImage" id="image4284">
+				<widget class="GtkImage" id="image4354">
 				  <property name="visible">True</property>
 				  <property name="stock">gtk-add</property>
 				  <property name="icon_size">1</property>
@@ -9193,7 +9203,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_edit_selected_jump_clicked" last_modification_time="Sun, 17 Oct 2004 11:47:42 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4285">
+			<widget class="GtkImage" id="image4355">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-edit</property>
 			  <property name="icon_size">1</property>
@@ -9214,7 +9224,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_delete_selected_jump_clicked" last_modification_time="Tue, 19 Oct 2004 11:54:17 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4286">
+			<widget class="GtkImage" id="image4356">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-remove</property>
 			  <property name="icon_size">1</property>
@@ -9295,7 +9305,7 @@ suitable for agility tests)</property>
 			      <signal name="activate" handler="on_button_more_rj_clicked" last_modification_time="Fri, 11 Mar 2005 14:45:23 GMT"/>
 
 			      <child internal-child="image">
-				<widget class="GtkImage" id="image4287">
+				<widget class="GtkImage" id="image4357">
 				  <property name="visible">True</property>
 				  <property name="stock">gtk-add</property>
 				  <property name="icon_size">1</property>
@@ -9320,7 +9330,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_edit_selected_jump_rj_clicked" last_modification_time="Sun, 07 Nov 2004 17:37:37 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4288">
+			<widget class="GtkImage" id="image4358">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-edit</property>
 			  <property name="icon_size">1</property>
@@ -9341,7 +9351,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_repair_selected_reactive_jump_clicked" last_modification_time="Wed, 07 Dec 2005 01:14:11 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4289">
+			<widget class="GtkImage" id="image4359">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-preferences</property>
 			  <property name="icon_size">1</property>
@@ -9362,7 +9372,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_delete_selected_jump_rj_clicked" last_modification_time="Sun, 07 Nov 2004 17:37:37 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4290">
+			<widget class="GtkImage" id="image4360">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-remove</property>
 			  <property name="icon_size">1</property>
@@ -9389,7 +9399,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_jump_type_add_activate" last_modification_time="Thu, 10 Mar 2005 18:52:25 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4291">
+			<widget class="GtkImage" id="image4361">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-new</property>
 			  <property name="icon_size">1</property>
@@ -9552,7 +9562,7 @@ suitable for agility tests)</property>
 			      <signal name="activate" handler="on_button_run_more_clicked" last_modification_time="Fri, 22 Apr 2005 14:37:06 GMT"/>
 
 			      <child internal-child="image">
-				<widget class="GtkImage" id="image4292">
+				<widget class="GtkImage" id="image4362">
 				  <property name="visible">True</property>
 				  <property name="stock">gtk-add</property>
 				  <property name="icon_size">1</property>
@@ -9577,7 +9587,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_edit_selected_run_clicked" last_modification_time="Fri, 22 Apr 2005 14:34:58 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4293">
+			<widget class="GtkImage" id="image4363">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-edit</property>
 			  <property name="icon_size">1</property>
@@ -9598,7 +9608,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_delete_selected_run_clicked" last_modification_time="Fri, 22 Apr 2005 14:34:58 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4294">
+			<widget class="GtkImage" id="image4364">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-remove</property>
 			  <property name="icon_size">1</property>
@@ -9679,7 +9689,7 @@ suitable for agility tests)</property>
 			      <signal name="activate" handler="on_button_run_interval_more_clicked" last_modification_time="Tue, 16 Aug 2005 01:18:41 GMT"/>
 
 			      <child internal-child="image">
-				<widget class="GtkImage" id="image4295">
+				<widget class="GtkImage" id="image4365">
 				  <property name="visible">True</property>
 				  <property name="stock">gtk-add</property>
 				  <property name="icon_size">1</property>
@@ -9704,7 +9714,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_edit_selected_run_interval_clicked" last_modification_time="Tue, 16 Aug 2005 12:33:39 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4296">
+			<widget class="GtkImage" id="image4366">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-edit</property>
 			  <property name="icon_size">1</property>
@@ -9725,7 +9735,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_repair_selected_run_interval_clicked" last_modification_time="Wed, 03 May 2006 15:15:38 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4297">
+			<widget class="GtkImage" id="image4367">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-preferences</property>
 			  <property name="icon_size">1</property>
@@ -9746,7 +9756,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_delete_selected_run_interval_clicked" last_modification_time="Tue, 16 Aug 2005 12:33:39 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4298">
+			<widget class="GtkImage" id="image4368">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-remove</property>
 			  <property name="icon_size">1</property>
@@ -9773,7 +9783,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_run_type_add_activate" last_modification_time="Fri, 22 Apr 2005 14:34:58 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4299">
+			<widget class="GtkImage" id="image4369">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-new</property>
 			  <property name="icon_size">1</property>
@@ -9877,7 +9887,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_menuitem_view_stats_activate" last_modification_time="Tue, 26 Jul 2005 23:54:29 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4300">
+			<widget class="GtkImage" id="image4370">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-refresh</property>
 			  <property name="icon_size">1</property>
@@ -9898,7 +9908,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_show_report_activate" last_modification_time="Tue, 06 Sep 2005 09:10:32 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4301">
+			<widget class="GtkImage" id="image4371">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-refresh</property>
 			  <property name="icon_size">1</property>
@@ -9966,7 +9976,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_menuitem_manual_activate" last_modification_time="Wed, 03 Oct 2007 23:31:41 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4302">
+			<widget class="GtkImage" id="image4372">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-info</property>
 			  <property name="icon_size">1</property>
@@ -10002,7 +10012,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_about1_activate" last_modification_time="Wed, 22 Sep 2004 23:17:31 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4303">
+			<widget class="GtkImage" id="image4373">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-about</property>
 			  <property name="icon_size">1</property>
@@ -10029,7 +10039,7 @@ suitable for agility tests)</property>
 		      <signal name="activate" handler="on_debug_crash_activate" last_modification_time="Thu, 23 Oct 2008 22:57:02 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image4304">
+			<widget class="GtkImage" id="image4374">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-dialog-error</property>
 			  <property name="icon_size">1</property>
@@ -10568,6 +10578,25 @@ suitable for agility tests)</property>
 					  </child>
 
 					  <child>
+					    <widget class="GtkButton" id="button_jumps_max">
+					      <property name="visible">True</property>
+					      <property name="tooltip" translatable="yes">Maximum Jump (like Abalakov but with free technique)</property>
+					      <property name="can_focus">True</property>
+					      <property name="label">Max</property>
+					      <property name="use_underline">True</property>
+					      <property name="relief">GTK_RELIEF_NORMAL</property>
+					      <property name="focus_on_click">True</property>
+					      <signal name="clicked" handler="on_normal_jump_activate" last_modification_time="Sat, 02 Oct 2004 20:26:49 GMT"/>
+					      <signal name="enter" handler="on_button_enter" last_modification_time="Tue, 01 May 2007 20:00:28 GMT"/>
+					    </widget>
+					    <packing>
+					      <property name="padding">0</property>
+					      <property name="expand">False</property>
+					      <property name="fill">False</property>
+					    </packing>
+					  </child>
+
+					  <child>
 					    <widget class="GtkButton" id="button_dj">
 					      <property name="visible">True</property>
 					      <property name="tooltip" translatable="yes">Drop Jump</property>
@@ -12807,7 +12836,7 @@ suitable for agility tests)</property>
 					  <property name="right_padding">0</property>
 
 					  <child>
-					    <widget class="GtkButton" id="button13">
+					    <widget class="GtkButton" id="button_reaction_time">
 					      <property name="visible">True</property>
 					      <property name="can_focus">True</property>
 					      <property name="label" translatable="yes">Execute reaction time</property>
@@ -12815,6 +12844,7 @@ suitable for agility tests)</property>
 					      <property name="relief">GTK_RELIEF_NORMAL</property>
 					      <property name="focus_on_click">True</property>
 					      <signal name="clicked" handler="on_reaction_time_activate" last_modification_time="Sun, 04 Mar 2007 19:11:16 GMT"/>
+					      <signal name="enter" handler="on_button_enter" last_modification_time="Fri, 01 May 2009 11:43:59 GMT"/>
 					    </widget>
 					  </child>
 					</widget>
@@ -13492,28 +13522,6 @@ suitable for agility tests)</property>
 					  </child>
 
 					  <child>
-					    <widget class="GtkCheckButton" id="check_multi_sync">
-					      <property name="visible">True</property>
-					      <property name="can_focus">True</property>
-					      <property name="label" translatable="yes">Sychronize Chronopics</property>
-					      <property name="use_underline">True</property>
-					      <property name="relief">GTK_RELIEF_NORMAL</property>
-					      <property name="focus_on_click">True</property>
-					      <property name="active">True</property>
-					      <property name="inconsistent">False</property>
-					      <property name="draw_indicator">True</property>
-					    </widget>
-					    <packing>
-					      <property name="left_attach">0</property>
-					      <property name="right_attach">1</property>
-					      <property name="top_attach">0</property>
-					      <property name="bottom_attach">1</property>
-					      <property name="x_options">fill</property>
-					      <property name="y_options"></property>
-					    </packing>
-					  </child>
-
-					  <child>
 					    <widget class="GtkButton" id="button_multi_chronopic_start">
 					      <property name="visible">True</property>
 					      <property name="can_focus">True</property>
@@ -13552,6 +13560,62 @@ suitable for agility tests)</property>
 					      <property name="x_options">fill</property>
 					    </packing>
 					  </child>
+
+					  <child>
+					    <widget class="GtkHBox" id="hbox352">
+					      <property name="visible">True</property>
+					      <property name="homogeneous">False</property>
+					      <property name="spacing">4</property>
+
+					      <child>
+						<widget class="GtkCheckButton" id="check_multi_sync">
+						  <property name="visible">True</property>
+						  <property name="tooltip" translatable="yes">Synchronize chronopics</property>
+						  <property name="can_focus">True</property>
+						  <property name="label" translatable="yes">Sync</property>
+						  <property name="use_underline">True</property>
+						  <property name="relief">GTK_RELIEF_NORMAL</property>
+						  <property name="focus_on_click">True</property>
+						  <property name="active">True</property>
+						  <property name="inconsistent">False</property>
+						  <property name="draw_indicator">True</property>
+						</widget>
+						<packing>
+						  <property name="padding">0</property>
+						  <property name="expand">False</property>
+						  <property name="fill">False</property>
+						</packing>
+					      </child>
+
+					      <child>
+						<widget class="GtkCheckButton" id="check_multi_delete_first">
+						  <property name="visible">True</property>
+						  <property name="tooltip" translatable="yes">Delete first TC and TF of each chronopic</property>
+						  <property name="can_focus">True</property>
+						  <property name="label" translatable="yes">Delete first</property>
+						  <property name="use_underline">True</property>
+						  <property name="relief">GTK_RELIEF_NORMAL</property>
+						  <property name="focus_on_click">True</property>
+						  <property name="active">True</property>
+						  <property name="inconsistent">False</property>
+						  <property name="draw_indicator">True</property>
+						</widget>
+						<packing>
+						  <property name="padding">0</property>
+						  <property name="expand">False</property>
+						  <property name="fill">False</property>
+						</packing>
+					      </child>
+					    </widget>
+					    <packing>
+					      <property name="left_attach">0</property>
+					      <property name="right_attach">1</property>
+					      <property name="top_attach">0</property>
+					      <property name="bottom_attach">1</property>
+					      <property name="x_options">fill</property>
+					      <property name="y_options">fill</property>
+					    </packing>
+					  </child>
 					</widget>
 					<packing>
 					  <property name="padding">0</property>
@@ -13600,7 +13664,7 @@ suitable for agility tests)</property>
 							  <child>
 							    <widget class="GtkLabel" id="label692">
 							      <property name="visible">True</property>
-							      <property name="label" translatable="yes">1</property>
+							      <property name="label">1</property>
 							      <property name="use_underline">False</property>
 							      <property name="use_markup">False</property>
 							      <property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -13685,7 +13749,7 @@ suitable for agility tests)</property>
 							  <child>
 							    <widget class="GtkLabel" id="label693">
 							      <property name="visible">True</property>
-							      <property name="label" translatable="yes">2</property>
+							      <property name="label">2</property>
 							      <property name="use_underline">False</property>
 							      <property name="use_markup">False</property>
 							      <property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -13770,7 +13834,7 @@ suitable for agility tests)</property>
 							  <child>
 							    <widget class="GtkLabel" id="label694">
 							      <property name="visible">True</property>
-							      <property name="label" translatable="yes">3</property>
+							      <property name="label">3</property>
 							      <property name="use_underline">False</property>
 							      <property name="use_markup">False</property>
 							      <property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -13855,7 +13919,7 @@ suitable for agility tests)</property>
 							  <child>
 							    <widget class="GtkLabel" id="label695">
 							      <property name="visible">True</property>
-							      <property name="label" translatable="yes">4</property>
+							      <property name="label">4</property>
 							      <property name="use_underline">False</property>
 							      <property name="use_markup">False</property>
 							      <property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -25844,7 +25908,8 @@ comments</property>
   <property name="type">GTK_WINDOW_TOPLEVEL</property>
   <property name="window_position">GTK_WIN_POS_NONE</property>
   <property name="modal">True</property>
-  <property name="resizable">False</property>
+  <property name="default_height">480</property>
+  <property name="resizable">True</property>
   <property name="destroy_with_parent">False</property>
   <property name="decorated">True</property>
   <property name="skip_taskbar_hint">False</property>
@@ -25862,442 +25927,416 @@ comments</property>
       <property name="spacing">8</property>
 
       <child>
-	<widget class="GtkTable" id="table48">
+	<widget class="GtkScrolledWindow" id="scrolledwindow36">
 	  <property name="visible">True</property>
-	  <property name="n_rows">2</property>
-	  <property name="n_columns">2</property>
-	  <property name="homogeneous">False</property>
-	  <property name="row_spacing">6</property>
-	  <property name="column_spacing">8</property>
-
-	  <child>
-	    <widget class="GtkLabel" id="label533">
-	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">&lt;b&gt;Persons&lt;/b&gt;</property>
-	      <property name="use_underline">False</property>
-	      <property name="use_markup">True</property>
-	      <property name="justify">GTK_JUSTIFY_LEFT</property>
-	      <property name="wrap">False</property>
-	      <property name="selectable">False</property>
-	      <property name="xalign">0</property>
-	      <property name="yalign">0.5</property>
-	      <property name="xpad">0</property>
-	      <property name="ypad">0</property>
-	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-	      <property name="width_chars">-1</property>
-	      <property name="single_line_mode">False</property>
-	      <property name="angle">0</property>
-	    </widget>
-	    <packing>
-	      <property name="left_attach">0</property>
-	      <property name="right_attach">1</property>
-	      <property name="top_attach">0</property>
-	      <property name="bottom_attach">1</property>
-	      <property name="x_options">fill</property>
-	      <property name="y_options"></property>
-	    </packing>
-	  </child>
-
-	  <child>
-	    <widget class="GtkLabel" id="label534">
-	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">&lt;b&gt;Tests&lt;/b&gt;</property>
-	      <property name="use_underline">False</property>
-	      <property name="use_markup">True</property>
-	      <property name="justify">GTK_JUSTIFY_LEFT</property>
-	      <property name="wrap">False</property>
-	      <property name="selectable">False</property>
-	      <property name="xalign">0</property>
-	      <property name="yalign">0.5</property>
-	      <property name="xpad">0</property>
-	      <property name="ypad">0</property>
-	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-	      <property name="width_chars">-1</property>
-	      <property name="single_line_mode">False</property>
-	      <property name="angle">0</property>
-	    </widget>
-	    <packing>
-	      <property name="left_attach">1</property>
-	      <property name="right_attach">2</property>
-	      <property name="top_attach">0</property>
-	      <property name="bottom_attach">1</property>
-	      <property name="x_options">fill</property>
-	      <property name="y_options"></property>
-	    </packing>
-	  </child>
+	  <property name="can_focus">True</property>
+	  <property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property>
+	  <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
+	  <property name="shadow_type">GTK_SHADOW_NONE</property>
+	  <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
 
 	  <child>
-	    <widget class="GtkTable" id="table49">
+	    <widget class="GtkViewport" id="viewport5">
 	      <property name="visible">True</property>
-	      <property name="n_rows">2</property>
-	      <property name="n_columns">6</property>
-	      <property name="homogeneous">False</property>
-	      <property name="row_spacing">4</property>
-	      <property name="column_spacing">8</property>
+	      <property name="shadow_type">GTK_SHADOW_IN</property>
 
 	      <child>
-		<widget class="GtkLabel" id="label536">
+		<widget class="GtkTable" id="table68">
 		  <property name="visible">True</property>
-		  <property name="label" translatable="yes">Jumps</property>
-		  <property name="use_underline">False</property>
-		  <property name="use_markup">False</property>
-		  <property name="justify">GTK_JUSTIFY_LEFT</property>
-		  <property name="wrap">False</property>
-		  <property name="selectable">False</property>
-		  <property name="xalign">0</property>
-		  <property name="yalign">0.5</property>
-		  <property name="xpad">0</property>
-		  <property name="ypad">0</property>
-		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-		  <property name="width_chars">-1</property>
-		  <property name="single_line_mode">False</property>
-		  <property name="angle">0</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">0</property>
-		  <property name="right_attach">1</property>
-		  <property name="top_attach">0</property>
-		  <property name="bottom_attach">1</property>
-		  <property name="x_options">fill</property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
+		  <property name="n_rows">2</property>
+		  <property name="n_columns">8</property>
+		  <property name="homogeneous">False</property>
+		  <property name="row_spacing">0</property>
+		  <property name="column_spacing">4</property>
 
-	      <child>
-		<widget class="GtkLabel" id="label537">
-		  <property name="visible">True</property>
-		  <property name="label" translatable="yes">Jumps
+		  <child>
+		    <widget class="GtkLabel" id="label699">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Jumps</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label700">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Jumps
 reactive</property>
-		  <property name="use_underline">False</property>
-		  <property name="use_markup">False</property>
-		  <property name="justify">GTK_JUSTIFY_LEFT</property>
-		  <property name="wrap">False</property>
-		  <property name="selectable">False</property>
-		  <property name="xalign">0</property>
-		  <property name="yalign">0.5</property>
-		  <property name="xpad">0</property>
-		  <property name="ypad">0</property>
-		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-		  <property name="width_chars">-1</property>
-		  <property name="single_line_mode">False</property>
-		  <property name="angle">0</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">1</property>
-		  <property name="right_attach">2</property>
-		  <property name="top_attach">0</property>
-		  <property name="bottom_attach">1</property>
-		  <property name="x_options">fill</property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">2</property>
+		      <property name="right_attach">3</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
 
-	      <child>
-		<widget class="GtkLabel" id="label538">
-		  <property name="visible">True</property>
-		  <property name="label" translatable="yes">Runs</property>
-		  <property name="use_underline">False</property>
-		  <property name="use_markup">False</property>
-		  <property name="justify">GTK_JUSTIFY_LEFT</property>
-		  <property name="wrap">False</property>
-		  <property name="selectable">False</property>
-		  <property name="xalign">0</property>
-		  <property name="yalign">0.5</property>
-		  <property name="xpad">0</property>
-		  <property name="ypad">0</property>
-		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-		  <property name="width_chars">-1</property>
-		  <property name="single_line_mode">False</property>
-		  <property name="angle">0</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">2</property>
-		  <property name="right_attach">3</property>
-		  <property name="top_attach">0</property>
-		  <property name="bottom_attach">1</property>
-		  <property name="x_options">fill</property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
+		  <child>
+		    <widget class="GtkLabel" id="label701">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Runs</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">3</property>
+		      <property name="right_attach">4</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
 
-	      <child>
-		<widget class="GtkLabel" id="label539">
-		  <property name="visible">True</property>
-		  <property name="label" translatable="yes">Runs
+		  <child>
+		    <widget class="GtkLabel" id="label702">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Runs
 intervallic</property>
-		  <property name="use_underline">False</property>
-		  <property name="use_markup">False</property>
-		  <property name="justify">GTK_JUSTIFY_LEFT</property>
-		  <property name="wrap">False</property>
-		  <property name="selectable">False</property>
-		  <property name="xalign">0</property>
-		  <property name="yalign">0.5</property>
-		  <property name="xpad">0</property>
-		  <property name="ypad">0</property>
-		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-		  <property name="width_chars">-1</property>
-		  <property name="single_line_mode">False</property>
-		  <property name="angle">0</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">3</property>
-		  <property name="right_attach">4</property>
-		  <property name="top_attach">0</property>
-		  <property name="bottom_attach">1</property>
-		  <property name="x_options">fill</property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">4</property>
+		      <property name="right_attach">5</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
 
-	      <child>
-		<widget class="GtkLabel" id="label540">
-		  <property name="visible">True</property>
-		  <property name="label" translatable="yes">Reaction
+		  <child>
+		    <widget class="GtkLabel" id="label703">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Reaction
 times</property>
-		  <property name="use_underline">False</property>
-		  <property name="use_markup">False</property>
-		  <property name="justify">GTK_JUSTIFY_LEFT</property>
-		  <property name="wrap">False</property>
-		  <property name="selectable">False</property>
-		  <property name="xalign">0</property>
-		  <property name="yalign">0.5</property>
-		  <property name="xpad">0</property>
-		  <property name="ypad">0</property>
-		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-		  <property name="width_chars">-1</property>
-		  <property name="single_line_mode">False</property>
-		  <property name="angle">0</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">4</property>
-		  <property name="right_attach">5</property>
-		  <property name="top_attach">0</property>
-		  <property name="bottom_attach">1</property>
-		  <property name="x_options">fill</property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">5</property>
+		      <property name="right_attach">6</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
 
-	      <child>
-		<widget class="GtkLabel" id="label541">
-		  <property name="visible">True</property>
-		  <property name="label" translatable="yes">Pulses</property>
-		  <property name="use_underline">False</property>
-		  <property name="use_markup">False</property>
-		  <property name="justify">GTK_JUSTIFY_LEFT</property>
-		  <property name="wrap">False</property>
-		  <property name="selectable">False</property>
-		  <property name="xalign">0</property>
-		  <property name="yalign">0.5</property>
-		  <property name="xpad">0</property>
-		  <property name="ypad">0</property>
-		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-		  <property name="width_chars">-1</property>
-		  <property name="single_line_mode">False</property>
-		  <property name="angle">0</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">5</property>
-		  <property name="right_attach">6</property>
-		  <property name="top_attach">0</property>
-		  <property name="bottom_attach">1</property>
-		  <property name="x_options">fill</property>
-		  <property name="y_options"></property>
-		</packing>
-	      </child>
+		  <child>
+		    <widget class="GtkLabel" id="label704">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Pulses</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">6</property>
+		      <property name="right_attach">7</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
 
-	      <child>
-		<widget class="GtkTreeView" id="treeview_jumps_rj">
-		  <property name="visible">True</property>
-		  <property name="headers_visible">True</property>
-		  <property name="rules_hint">False</property>
-		  <property name="reorderable">False</property>
-		  <property name="enable_search">False</property>
-		  <property name="fixed_height_mode">False</property>
-		  <property name="hover_selection">False</property>
-		  <property name="hover_expand">False</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">1</property>
-		  <property name="right_attach">2</property>
-		  <property name="top_attach">1</property>
-		  <property name="bottom_attach">2</property>
-		  <property name="x_options"></property>
-		  <property name="y_options">fill</property>
-		</packing>
-	      </child>
+		  <child>
+		    <widget class="GtkLabel" id="label705">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Multi Chronopic</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">7</property>
+		      <property name="right_attach">8</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
 
-	      <child>
-		<widget class="GtkTreeView" id="treeview_runs">
-		  <property name="visible">True</property>
-		  <property name="headers_visible">True</property>
-		  <property name="rules_hint">False</property>
-		  <property name="reorderable">False</property>
-		  <property name="enable_search">False</property>
-		  <property name="fixed_height_mode">False</property>
-		  <property name="hover_selection">False</property>
-		  <property name="hover_expand">False</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">2</property>
-		  <property name="right_attach">3</property>
-		  <property name="top_attach">1</property>
-		  <property name="bottom_attach">2</property>
-		  <property name="x_options"></property>
-		  <property name="y_options">fill</property>
-		</packing>
-	      </child>
+		  <child>
+		    <widget class="GtkTreeView" id="treeview_jumps_rj">
+		      <property name="visible">True</property>
+		      <property name="headers_visible">True</property>
+		      <property name="rules_hint">False</property>
+		      <property name="reorderable">False</property>
+		      <property name="enable_search">False</property>
+		      <property name="fixed_height_mode">False</property>
+		      <property name="hover_selection">False</property>
+		      <property name="hover_expand">False</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">2</property>
+		      <property name="right_attach">3</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		      <property name="y_options">fill</property>
+		    </packing>
+		  </child>
 
-	      <child>
-		<widget class="GtkTreeView" id="treeview_runs_i">
-		  <property name="visible">True</property>
-		  <property name="headers_visible">True</property>
-		  <property name="rules_hint">False</property>
-		  <property name="reorderable">False</property>
-		  <property name="enable_search">False</property>
-		  <property name="fixed_height_mode">False</property>
-		  <property name="hover_selection">False</property>
-		  <property name="hover_expand">False</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">3</property>
-		  <property name="right_attach">4</property>
-		  <property name="top_attach">1</property>
-		  <property name="bottom_attach">2</property>
-		  <property name="x_options"></property>
-		  <property name="y_options">fill</property>
-		</packing>
-	      </child>
+		  <child>
+		    <widget class="GtkTreeView" id="treeview_runs">
+		      <property name="visible">True</property>
+		      <property name="headers_visible">True</property>
+		      <property name="rules_hint">False</property>
+		      <property name="reorderable">False</property>
+		      <property name="enable_search">False</property>
+		      <property name="fixed_height_mode">False</property>
+		      <property name="hover_selection">False</property>
+		      <property name="hover_expand">False</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">3</property>
+		      <property name="right_attach">4</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		      <property name="y_options">fill</property>
+		    </packing>
+		  </child>
 
-	      <child>
-		<widget class="GtkTreeView" id="treeview_rts">
-		  <property name="visible">True</property>
-		  <property name="headers_visible">True</property>
-		  <property name="rules_hint">False</property>
-		  <property name="reorderable">False</property>
-		  <property name="enable_search">False</property>
-		  <property name="fixed_height_mode">False</property>
-		  <property name="hover_selection">False</property>
-		  <property name="hover_expand">False</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">4</property>
-		  <property name="right_attach">5</property>
-		  <property name="top_attach">1</property>
-		  <property name="bottom_attach">2</property>
-		  <property name="x_options"></property>
-		  <property name="y_options">fill</property>
-		</packing>
-	      </child>
+		  <child>
+		    <widget class="GtkTreeView" id="treeview_runs_i">
+		      <property name="visible">True</property>
+		      <property name="headers_visible">True</property>
+		      <property name="rules_hint">False</property>
+		      <property name="reorderable">False</property>
+		      <property name="enable_search">False</property>
+		      <property name="fixed_height_mode">False</property>
+		      <property name="hover_selection">False</property>
+		      <property name="hover_expand">False</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">4</property>
+		      <property name="right_attach">5</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		      <property name="y_options">fill</property>
+		    </packing>
+		  </child>
 
-	      <child>
-		<widget class="GtkTreeView" id="treeview_pulses">
-		  <property name="visible">True</property>
-		  <property name="headers_visible">True</property>
-		  <property name="rules_hint">False</property>
-		  <property name="reorderable">False</property>
-		  <property name="enable_search">False</property>
-		  <property name="fixed_height_mode">False</property>
-		  <property name="hover_selection">False</property>
-		  <property name="hover_expand">False</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">5</property>
-		  <property name="right_attach">6</property>
-		  <property name="top_attach">1</property>
-		  <property name="bottom_attach">2</property>
-		  <property name="x_options"></property>
-		  <property name="y_options">fill</property>
-		</packing>
-	      </child>
+		  <child>
+		    <widget class="GtkTreeView" id="treeview_rts">
+		      <property name="visible">True</property>
+		      <property name="headers_visible">True</property>
+		      <property name="rules_hint">False</property>
+		      <property name="reorderable">False</property>
+		      <property name="enable_search">False</property>
+		      <property name="fixed_height_mode">False</property>
+		      <property name="hover_selection">False</property>
+		      <property name="hover_expand">False</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">5</property>
+		      <property name="right_attach">6</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		      <property name="y_options">fill</property>
+		    </packing>
+		  </child>
 
-	      <child>
-		<widget class="GtkTreeView" id="treeview_jumps">
-		  <property name="visible">True</property>
-		  <property name="headers_visible">True</property>
-		  <property name="rules_hint">False</property>
-		  <property name="reorderable">False</property>
-		  <property name="enable_search">False</property>
-		  <property name="fixed_height_mode">False</property>
-		  <property name="hover_selection">False</property>
-		  <property name="hover_expand">False</property>
-		</widget>
-		<packing>
-		  <property name="left_attach">0</property>
-		  <property name="right_attach">1</property>
-		  <property name="top_attach">1</property>
-		  <property name="bottom_attach">2</property>
-		  <property name="x_options"></property>
-		  <property name="y_options">fill</property>
-		</packing>
-	      </child>
-	    </widget>
-	    <packing>
-	      <property name="left_attach">1</property>
-	      <property name="right_attach">2</property>
-	      <property name="top_attach">1</property>
-	      <property name="bottom_attach">2</property>
-	      <property name="y_options">fill</property>
-	    </packing>
-	  </child>
+		  <child>
+		    <widget class="GtkTreeView" id="treeview_pulses">
+		      <property name="visible">True</property>
+		      <property name="headers_visible">True</property>
+		      <property name="rules_hint">False</property>
+		      <property name="reorderable">False</property>
+		      <property name="enable_search">False</property>
+		      <property name="fixed_height_mode">False</property>
+		      <property name="hover_selection">False</property>
+		      <property name="hover_expand">False</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">6</property>
+		      <property name="right_attach">7</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		      <property name="y_options">fill</property>
+		    </packing>
+		  </child>
 
-	  <child>
-	    <widget class="GtkVBox" id="vbox148">
-	      <property name="visible">True</property>
-	      <property name="homogeneous">False</property>
-	      <property name="spacing">4</property>
+		  <child>
+		    <widget class="GtkTreeView" id="treeview_mcs">
+		      <property name="visible">True</property>
+		      <property name="headers_visible">True</property>
+		      <property name="rules_hint">False</property>
+		      <property name="reorderable">False</property>
+		      <property name="enable_search">False</property>
+		      <property name="fixed_height_mode">False</property>
+		      <property name="hover_selection">False</property>
+		      <property name="hover_expand">False</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">7</property>
+		      <property name="right_attach">8</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		      <property name="y_options">fill</property>
+		    </packing>
+		  </child>
 
-	      <child>
-		<widget class="GtkLabel" id="label535">
-		  <property name="visible">True</property>
-		  <property name="label">
-</property>
-		  <property name="use_underline">False</property>
-		  <property name="use_markup">False</property>
-		  <property name="justify">GTK_JUSTIFY_LEFT</property>
-		  <property name="wrap">False</property>
-		  <property name="selectable">False</property>
-		  <property name="xalign">0.5</property>
-		  <property name="yalign">0.5</property>
-		  <property name="xpad">0</property>
-		  <property name="ypad">0</property>
-		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-		  <property name="width_chars">-1</property>
-		  <property name="single_line_mode">False</property>
-		  <property name="angle">0</property>
-		</widget>
-		<packing>
-		  <property name="padding">0</property>
-		  <property name="expand">False</property>
-		  <property name="fill">False</property>
-		</packing>
-	      </child>
+		  <child>
+		    <widget class="GtkTreeView" id="treeview_persons">
+		      <property name="visible">True</property>
+		      <property name="headers_visible">True</property>
+		      <property name="rules_hint">False</property>
+		      <property name="reorderable">False</property>
+		      <property name="enable_search">False</property>
+		      <property name="fixed_height_mode">False</property>
+		      <property name="hover_selection">False</property>
+		      <property name="hover_expand">False</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		      <property name="y_options">fill</property>
+		    </packing>
+		  </child>
 
-	      <child>
-		<widget class="GtkTreeView" id="treeview_persons">
-		  <property name="visible">True</property>
-		  <property name="headers_visible">True</property>
-		  <property name="rules_hint">False</property>
-		  <property name="reorderable">False</property>
-		  <property name="enable_search">False</property>
-		  <property name="fixed_height_mode">False</property>
-		  <property name="hover_selection">False</property>
-		  <property name="hover_expand">False</property>
+		  <child>
+		    <widget class="GtkLabel" id="label698">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">&lt;b&gt;Persons&lt;/b&gt;</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">True</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkTreeView" id="treeview_jumps">
+		      <property name="visible">True</property>
+		      <property name="headers_visible">True</property>
+		      <property name="rules_hint">False</property>
+		      <property name="reorderable">False</property>
+		      <property name="enable_search">False</property>
+		      <property name="fixed_height_mode">False</property>
+		      <property name="hover_selection">False</property>
+		      <property name="hover_expand">False</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		    </packing>
+		  </child>
 		</widget>
-		<packing>
-		  <property name="padding">0</property>
-		  <property name="expand">True</property>
-		  <property name="fill">True</property>
-		</packing>
 	      </child>
 	    </widget>
-	    <packing>
-	      <property name="left_attach">0</property>
-	      <property name="right_attach">1</property>
-	      <property name="top_attach">1</property>
-	      <property name="bottom_attach">2</property>
-	      <property name="y_options">fill</property>
-	    </packing>
 	  </child>
 	</widget>
 	<packing>
@@ -26530,13 +26569,13 @@ times</property>
 	    <packing>
 	      <property name="padding">0</property>
 	      <property name="expand">True</property>
-	      <property name="fill">True</property>
+	      <property name="fill">False</property>
 	    </packing>
 	  </child>
 	</widget>
 	<packing>
 	  <property name="padding">0</property>
-	  <property name="expand">True</property>
+	  <property name="expand">False</property>
 	  <property name="fill">True</property>
 	</packing>
       </child>
@@ -26565,7 +26604,7 @@ times</property>
 	<packing>
 	  <property name="padding">0</property>
 	  <property name="expand">False</property>
-	  <property name="fill">True</property>
+	  <property name="fill">False</property>
 	</packing>
       </child>
     </widget>
@@ -27002,7 +27041,7 @@ by you</property>
 		  <child>
 		    <widget class="GtkTable" id="table51">
 		      <property name="visible">True</property>
-		      <property name="n_rows">7</property>
+		      <property name="n_rows">8</property>
 		      <property name="n_columns">3</property>
 		      <property name="homogeneous">False</property>
 		      <property name="row_spacing">6</property>
@@ -27568,6 +27607,90 @@ by you</property>
 			  <property name="y_options"></property>
 			</packing>
 		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label706">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">MultiChronopic</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">7</property>
+			  <property name="bottom_attach">8</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label_multichronopic_server">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes"></property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">7</property>
+			  <property name="bottom_attach">8</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label_multichronopic_you">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes"></property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">2</property>
+			  <property name="right_attach">3</property>
+			  <property name="top_attach">7</property>
+			  <property name="bottom_attach">8</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
 		    </widget>
 		  </child>
 		</widget>
diff --git a/images/chronojump_320.png b/images/chronojump_320.png
index 89b54a7..2b5b9f1 100644
Binary files a/images/chronojump_320.png and b/images/chronojump_320.png differ
diff --git a/images/gesell_dbt.png b/images/gesell_dbt.png
index d39e437..f2f6305 100644
Binary files a/images/gesell_dbt.png and b/images/gesell_dbt.png differ
diff --git a/images/jump_max.png b/images/jump_max.png
new file mode 100644
index 0000000..8184ea0
Binary files /dev/null and b/images/jump_max.png differ
diff --git a/images/mini/gesell_dbt.png b/images/mini/gesell_dbt.png
index 1a63852..f29d1fc 100644
Binary files a/images/mini/gesell_dbt.png and b/images/mini/gesell_dbt.png differ
diff --git a/images/mini/jump_max.png b/images/mini/jump_max.png
new file mode 100644
index 0000000..0a1f2d4
Binary files /dev/null and b/images/mini/jump_max.png differ
diff --git a/images/mini/multiChronopic.png b/images/mini/multiChronopic.png
index 8839520..64794cc 100644
Binary files a/images/mini/multiChronopic.png and b/images/mini/multiChronopic.png differ
diff --git a/images/mini/reaction_time.png b/images/mini/reaction_time.png
new file mode 100644
index 0000000..04e65be
Binary files /dev/null and b/images/mini/reaction_time.png differ
diff --git a/images/multiChronopic.png b/images/multiChronopic.png
index 1793b3c..5c6fbc2 100644
Binary files a/images/multiChronopic.png and b/images/multiChronopic.png differ
diff --git a/images/reaction_time.png b/images/reaction_time.png
new file mode 100644
index 0000000..080bb76
Binary files /dev/null and b/images/reaction_time.png differ
diff --git a/images/svg/bosco_jumps.svg b/images/svg/bosco_jumps.svg
index 5f4dee6..c010622 100644
--- a/images/svg/bosco_jumps.svg
+++ b/images/svg/bosco_jumps.svg
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/";
-   xmlns:cc="http://web.resource.org/cc/";
+   xmlns:cc="http://creativecommons.org/ns#";
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
    xmlns:svg="http://www.w3.org/2000/svg";
    xmlns="http://www.w3.org/2000/svg";
@@ -9,7 +9,7 @@
    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
    height="500"
    id="svg1507"
-   inkscape:version="0.45"
+   inkscape:version="0.46"
    sodipodi:version="0.32"
    width="500"
    version="1.0"
@@ -33,15 +33,15 @@
      borderopacity="1.0"
      id="base"
      inkscape:current-layer="svg1507"
-     inkscape:cx="412.21323"
-     inkscape:cy="411.98008"
-     inkscape:pageopacity="0.0"
+     inkscape:cx="249.41916"
+     inkscape:cy="251.15186"
+     inkscape:pageopacity="1"
      inkscape:pageshadow="2"
      inkscape:window-height="691"
-     inkscape:window-width="1024"
+     inkscape:window-width="1022"
      inkscape:window-x="0"
      inkscape:window-y="25"
-     inkscape:zoom="2.6926626"
+     inkscape:zoom="0.74380693"
      pagecolor="#ffffff"
      showguides="true"
      inkscape:guide-bbox="true"
@@ -111,6 +111,13 @@
   </sodipodi:namedview>
   <defs
      id="defs1509">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 250 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="500 : 250 : 1"
+       inkscape:persp3d-origin="250 : 166.66667 : 1"
+       id="perspective2810" />
     <marker
        inkscape:stockid="TriangleInS"
        orient="auto"
@@ -234,8 +241,8 @@
      id="rect3163"
      width="105.68886"
      height="133.49869"
-     x="276.80402"
-     y="341.50131" />
+     x="238.98889"
+     y="358.43973" />
   <rect
      style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
      id="rect2479"
@@ -269,8 +276,8 @@
      id="rect13272"
      width="72.63607"
      height="113.81557"
-     x="157.04536"
-     y="357.29092" />
+     x="119.23024"
+     y="374.22934" />
   <rect
      style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
      id="rect13270"
@@ -837,16 +844,16 @@
   <text
      xml:space="preserve"
      style="font-size:16px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-     x="171.40369"
-     y="350.11691"
+     x="133.58856"
+     y="367.05533"
      id="text10098"><tspan
        sodipodi:role="line"
        id="tspan10100"
-       x="171.40369"
-       y="350.11691">RJ startIn</tspan></text>
+       x="133.58856"
+       y="367.05533">RJ startIn</tspan></text>
   <g
      id="g2720"
-     transform="translate(33.592437,27.836134)">
+     transform="translate(-4.2226893,44.77456)">
     <path
        id="path10104"
        d="M 162.96212,408.05366 L 162.96212,392.63003"
@@ -865,7 +872,7 @@
         <path
            style="fill:#000000;stroke:none"
            id="path10134"
-           d="M 95.872,81.671 C 118.422,81.671 136.706,63.387 136.706,40.835 C 136.706,18.284 118.422,0 95.872,0 C 73.319,0 55.038,18.284 55.038,40.835 C 55.038,63.387 73.319,81.671 95.872,81.671 z " />
+           d="M 95.872,81.671 C 118.422,81.671 136.706,63.387 136.706,40.835 C 136.706,18.284 118.422,0 95.872,0 C 73.319,0 55.038,18.284 55.038,40.835 C 55.038,63.387 73.319,81.671 95.872,81.671 z" />
         <path
            style="fill:#000000;stroke:none"
            id="path10136"
@@ -899,7 +906,7 @@
         <path
            style="fill:#000000;stroke:none"
            id="path10152"
-           d="M 95.872,81.671 C 118.422,81.671 136.706,63.387 136.706,40.835 C 136.706,18.284 118.422,0 95.872,0 C 73.319,0 55.038,18.284 55.038,40.835 C 55.038,63.387 73.319,81.671 95.872,81.671 z " />
+           d="M 95.872,81.671 C 118.422,81.671 136.706,63.387 136.706,40.835 C 136.706,18.284 118.422,0 95.872,0 C 73.319,0 55.038,18.284 55.038,40.835 C 55.038,63.387 73.319,81.671 95.872,81.671 z" />
         <path
            style="fill:#000000;stroke:none"
            id="path10154"
@@ -1345,7 +1352,7 @@
        y="314.91913">RJ</tspan></text>
   <g
      id="g3207"
-     transform="translate(78.256303,20.483193)">
+     transform="translate(40.441177,37.421619)">
     <g
        transform="translate(13.321559,160.03121)"
        id="g2780">
@@ -1360,7 +1367,7 @@
            transform="matrix(0.1406052,-1.499527e-2,1.499527e-2,0.1406052,182.19433,208.02859)"
            id="g2786">
           <path
-             d="M 95.872,81.671 C 118.422,81.671 136.706,63.387 136.706,40.835 C 136.706,18.284 118.422,0 95.872,0 C 73.319,0 55.038,18.284 55.038,40.835 C 55.038,63.387 73.319,81.671 95.872,81.671 z "
+             d="M 95.872,81.671 C 118.422,81.671 136.706,63.387 136.706,40.835 C 136.706,18.284 118.422,0 95.872,0 C 73.319,0 55.038,18.284 55.038,40.835 C 55.038,63.387 73.319,81.671 95.872,81.671 z"
              id="path2788"
              style="fill:#000000;stroke:none" />
           <path
@@ -1416,7 +1423,7 @@
         <path
            style="fill:#000000;stroke:none"
            id="path2911"
-           d="M 95.872,81.671 C 118.422,81.671 136.706,63.387 136.706,40.835 C 136.706,18.284 118.422,0 95.872,0 C 73.319,0 55.038,18.284 55.038,40.835 C 55.038,63.387 73.319,81.671 95.872,81.671 z " />
+           d="M 95.872,81.671 C 118.422,81.671 136.706,63.387 136.706,40.835 C 136.706,18.284 118.422,0 95.872,0 C 73.319,0 55.038,18.284 55.038,40.835 C 55.038,63.387 73.319,81.671 95.872,81.671 z" />
         <path
            style="fill:#000000;stroke:none"
            id="path2913"
@@ -1441,7 +1448,7 @@
         <path
            style="fill:#000000;stroke:none"
            id="path2818"
-           d="M 95.872,81.671 C 118.422,81.671 136.706,63.387 136.706,40.835 C 136.706,18.284 118.422,0 95.872,0 C 73.319,0 55.038,18.284 55.038,40.835 C 55.038,63.387 73.319,81.671 95.872,81.671 z " />
+           d="M 95.872,81.671 C 118.422,81.671 136.706,63.387 136.706,40.835 C 136.706,18.284 118.422,0 95.872,0 C 73.319,0 55.038,18.284 55.038,40.835 C 55.038,63.387 73.319,81.671 95.872,81.671 z" />
         <path
            style="fill:#000000;stroke:none"
            id="path2820"
@@ -1475,13 +1482,13 @@
   <text
      xml:space="preserve"
      style="font-size:16px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-     x="308.42969"
-     y="334.77344"
+     x="270.61456"
+     y="351.71185"
      id="text3110"><tspan
        sodipodi:role="line"
        id="tspan3112"
-       x="308.42969"
-       y="334.77344">Free</tspan></text>
+       x="270.61456"
+       y="351.71185">Free</tspan></text>
   <text
      xml:space="preserve"
      style="font-size:16px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
@@ -2012,4 +2019,144 @@
       </g>
     </g>
   </g>
+  <text
+     xml:space="preserve"
+     style="font-size:16px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+     x="449.77493"
+     y="332.83084"
+     id="text2812"><tspan
+       sodipodi:role="line"
+       id="tspan2814"
+       x="449.77493"
+       y="332.83084">Max</tspan></text>
+  <g
+     id="g3036"
+     transform="translate(-389.79218,341.18221)"
+     inkscape:export-filename="/home/xavier/informatica/progs_meus/chronojump/chronojump/images/mini/jump_max.png"
+     inkscape:export-xdpi="101.58866"
+     inkscape:export-ydpi="101.58866">
+    <g
+       transform="translate(574.42876,-147.0087)"
+       id="g2819">
+      <g
+         id="g2821">
+        <path
+           sodipodi:nodetypes="cccc"
+           id="path2823"
+           d="M 194.76769,221.77246 L 194.49048,247.7019 L 194.12151,270.92511 L 193.91346,286.44535"
+           style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:2.32092023;stroke-linecap:round;stroke-linejoin:round;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+        <g
+           transform="matrix(0.1406052,-1.499527e-2,1.499527e-2,0.1406052,182.19433,208.02859)"
+           id="g2825">
+          <path
+             d="M 95.872,81.671 C 118.422,81.671 136.706,63.387 136.706,40.835 C 136.706,18.284 118.422,0 95.872,0 C 73.319,0 55.038,18.284 55.038,40.835 C 55.038,63.387 73.319,81.671 95.872,81.671 z"
+             id="path2827"
+             style="fill:#000000;stroke:none" />
+          <path
+             d=""
+             id="path2829"
+             style="fill:#000000;stroke:none" />
+        </g>
+        <path
+           sodipodi:nodetypes="ccc"
+           id="path2831"
+           d="M 194.68091,221.79113 L 210.88738,224.48791 L 218.43351,207.85656"
+           style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.62464416;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      </g>
+      <path
+         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.62464404;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 190.0254,290.48733 L 201.25216,290.42139"
+         id="path2833" />
+    </g>
+    <g
+       transform="translate(578.42876,-147.64747)"
+       id="g2835">
+      <g
+         id="g2837"
+         transform="translate(207.64664,-0.6635752)">
+        <path
+           sodipodi:nodetypes="cccc"
+           id="path2839"
+           d="M 62.706424,200.8781 L 62.429209,226.80754 L 62.060243,250.03075 L 61.852188,265.55099"
+           style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:2.32092023;stroke-linecap:round;stroke-linejoin:round;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+        <g
+           transform="matrix(0.1406052,-1.499527e-2,1.499527e-2,0.1406052,50.133065,187.13423)"
+           id="g2841">
+          <path
+             d="M 95.872,81.671 C 118.422,81.671 136.706,63.387 136.706,40.835 C 136.706,18.284 118.422,0 95.872,0 C 73.319,0 55.038,18.284 55.038,40.835 C 55.038,63.387 73.319,81.671 95.872,81.671 z"
+             id="path2843"
+             style="fill:#000000;stroke:none" />
+          <path
+             d=""
+             id="path2845"
+             style="fill:#000000;stroke:none" />
+        </g>
+        <path
+           id="path2847"
+           d="M 60.50767,268.20638 L 63.38999,279.05704"
+           style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.62464404;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      </g>
+      <path
+         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.62464416;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 270.23303,199.95803 L 271.78134,178.63172 L 272.60915,162.00037"
+         id="path2849"
+         sodipodi:nodetypes="ccc" />
+    </g>
+    <path
+       id="path2851"
+       d="M 837.34888,79.902608 L 837.34888,64.478978"
+       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#008b00;stroke-width:3.71499991;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#TriangleOutS);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       id="path2853"
+       d="M 783.76083,95.14755 L 783.76083,110.57118"
+       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#008b00;stroke-width:3.71499991;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#TriangleOutS);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       id="path2855"
+       d="M 761.0115,145.39663 L 784.59065,145.32376"
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#006f8a;stroke-width:2.06560731;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       id="path2859"
+       d="M 796.51411,143.39506 L 808.1481,143.36481"
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.68355179;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="cccc"
+       id="path2861"
+       d="M 816.80897,106.01536 L 796.31353,120.80441 L 813.70521,126.42794 L 799.77975,140.24935"
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:2.40507388;stroke-linecap:round;stroke-linejoin:round;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <g
+       transform="matrix(0.1457033,-1.5538982e-2,1.5538982e-2,0.1457033,811.62779,97.104288)"
+       id="g2863">
+      <path
+         d="M 95.872,81.671 C 118.422,81.671 136.706,63.387 136.706,40.835 C 136.706,18.284 118.422,0 95.872,0 C 73.319,0 55.038,18.284 55.038,40.835 C 55.038,63.387 73.319,81.671 95.872,81.671 z"
+         id="path2865"
+         style="fill:#000000;stroke:none" />
+      <path
+         d=""
+         id="path2867"
+         style="fill:#000000;stroke:none" />
+    </g>
+    <path
+       sodipodi:nodetypes="ccc"
+       id="path2869"
+       d="M 818.64329,104.68602 L 816.72778,118.41974 L 826.59744,126.10844"
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.68355167;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       id="path2879"
+       d="M 792.39405,145.39663 L 815.9732,145.32376"
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#006f8a;stroke-width:2.06560731;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       id="path2881"
+       d="M 836.1261,145.39663 L 859.70525,145.32376"
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#006f8a;stroke-width:2.06560731;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <text
+       id="text2981"
+       y="132.11501"
+       x="801.41681"
+       style="font-size:8px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+       xml:space="preserve"><tspan
+         y="132.11501"
+         x="801.41681"
+         id="tspan2983"
+         sodipodi:role="line">?</tspan></text>
+  </g>
 </svg>
diff --git a/sqlite_diagrams/chronojump_sqlite.dia b/sqlite_diagrams/chronojump_sqlite.dia
index 50806fa..0aa86e2 100644
Binary files a/sqlite_diagrams/chronojump_sqlite.dia and b/sqlite_diagrams/chronojump_sqlite.dia differ
diff --git a/sqlite_diagrams/chronojump_sqlite.png b/sqlite_diagrams/chronojump_sqlite.png
index fe57d04..824ba50 100644
Binary files a/sqlite_diagrams/chronojump_sqlite.png and b/sqlite_diagrams/chronojump_sqlite.png differ
diff --git a/src/chronojump.cs b/src/chronojump.cs
index a5fcf21..18ee7ff 100644
--- a/src/chronojump.cs
+++ b/src/chronojump.cs
@@ -388,7 +388,6 @@ Console.WriteLine("--6--");
 	
 	private static void createBlankDBServer() {
 		Log.WriteLine("Creating blank database for server");
-		Log.WriteLine("Creating blank database for server2");
 		if(Sqlite.CheckFileServer())
 			Console.WriteLine("File already exists. Cannot create.");
 		else {
@@ -396,6 +395,10 @@ Console.WriteLine("--6--");
 			Sqlite.CreateFile();
 			Sqlite.CreateTables(true); //server
 			Console.WriteLine("Done! Exiting");
+			string myVersion = readVersion();
+			Console.WriteLine("CAUTION: client info about versionAvailable (on server): " + myVersion);
+			SqlitePreferences.Update ("availableVersion", myVersion, true); 
+			Console.WriteLine("Maybe you don't want to show this version on pings, change it to last stable published version");
 		}
 	}
 
@@ -557,7 +560,7 @@ Console.WriteLine("--6--");
 		return returnString;
 	}
 
-	private string readVersion() {
+	private static string readVersion() {
 		string version = "";
 		try  {
 			StreamReader reader = File.OpenText(Constants.FileNameVersion);
diff --git a/src/constants.cs b/src/constants.cs
index 6e1e5d4..5ae2531 100644
--- a/src/constants.cs
+++ b/src/constants.cs
@@ -42,7 +42,7 @@ public class Constants
 	public const string IubIndexFormula = "IUB (abk-cmj)/cmj *100";
 
 	//tests types
-	public enum TestTypes { JUMP, JUMP_RJ, RUN, RUN_I, RT, PULSE }
+	public enum TestTypes { JUMP, JUMP_RJ, RUN, RUN_I, RT, PULSE, MULTICHRONOPIC }
 
 	//sqlite tables
 	//instead of typing the tableName directly (that can crash if it's bad written and it's not detected by compiler)
@@ -114,6 +114,7 @@ public class Constants
 	};
 	
 	
+	public static string MultiChronopicName = "MultiChronopic";
 	public static string RunAnalysisName = "RunAnalysis"; //Josep Ma Padullés test
 	public static string TakeOffName = "TakeOff"; //translate (take off?)
 	public static string TakeOffWeightName = "TakeOffWeight"; //translate (take off?)
diff --git a/src/execute/multiChronopic.cs b/src/execute/multiChronopic.cs
index d9b9124..2b51483 100644
--- a/src/execute/multiChronopic.cs
+++ b/src/execute/multiChronopic.cs
@@ -61,6 +61,7 @@ public class MultiChronopicExecute : EventExecute
 	bool cp4StartedIn;
 
 	bool syncFirst;	
+	bool deleteFirst;	
 	private enum syncStates { NOTHING, CONTACTED, DONE } //done == released
 
 	static bool firstValue;
@@ -73,7 +74,7 @@ public class MultiChronopicExecute : EventExecute
 
 	//execution
 	public MultiChronopicExecute(EventExecuteWindow eventExecuteWin, int personID, string personName, int sessionID, string type, 
-			Chronopic cp, bool syncFirst, Gtk.Statusbar appbar, Gtk.Window app) {
+			Chronopic cp, bool syncFirst, bool deleteFirst, Gtk.Statusbar appbar, Gtk.Window app) {
 		this.eventExecuteWin = eventExecuteWin;
 		this.personID = personID;
 		this.personName = personName;
@@ -82,6 +83,7 @@ public class MultiChronopicExecute : EventExecute
 		
 		this.cp = cp;
 		this.syncFirst = syncFirst;
+		this.deleteFirst = deleteFirst;
 		
 		this.appbar = appbar;
 		this.app = app;
@@ -91,7 +93,7 @@ public class MultiChronopicExecute : EventExecute
 	}
 	
 	public MultiChronopicExecute(EventExecuteWindow eventExecuteWin, int personID, string personName, int sessionID, string type, 
-			Chronopic cp, Chronopic cp2, bool syncFirst, Gtk.Statusbar appbar, Gtk.Window app) {
+			Chronopic cp, Chronopic cp2, bool syncFirst, bool deleteFirst, Gtk.Statusbar appbar, Gtk.Window app) {
 		this.eventExecuteWin = eventExecuteWin;
 		this.personID = personID;
 		this.personName = personName;
@@ -101,6 +103,7 @@ public class MultiChronopicExecute : EventExecute
 		this.cp = cp;
 		this.cp2 = cp2;
 		this.syncFirst = syncFirst;
+		this.deleteFirst = deleteFirst;
 		
 		this.appbar = appbar;
 		this.app = app;
@@ -110,7 +113,7 @@ public class MultiChronopicExecute : EventExecute
 	}
 	
 	public MultiChronopicExecute(EventExecuteWindow eventExecuteWin, int personID, string personName, int sessionID, string type, 
-			Chronopic cp, Chronopic cp2, Chronopic cp3, bool syncFirst, Gtk.Statusbar appbar, Gtk.Window app) {
+			Chronopic cp, Chronopic cp2, Chronopic cp3, bool syncFirst, bool deleteFirst, Gtk.Statusbar appbar, Gtk.Window app) {
 		this.eventExecuteWin = eventExecuteWin;
 		this.personID = personID;
 		this.personName = personName;
@@ -121,6 +124,7 @@ public class MultiChronopicExecute : EventExecute
 		this.cp2 = cp2;
 		this.cp3 = cp3;
 		this.syncFirst = syncFirst;
+		this.deleteFirst = deleteFirst;
 		
 		this.appbar = appbar;
 		this.app = app;
@@ -130,7 +134,7 @@ public class MultiChronopicExecute : EventExecute
 	}
 
 	public MultiChronopicExecute(EventExecuteWindow eventExecuteWin, int personID, string personName, int sessionID, string type,
-			Chronopic cp, Chronopic cp2, Chronopic cp3, Chronopic cp4, bool syncFirst, Gtk.Statusbar appbar, Gtk.Window app) {
+			Chronopic cp, Chronopic cp2, Chronopic cp3, Chronopic cp4, bool syncFirst, bool deleteFirst, Gtk.Statusbar appbar, Gtk.Window app) {
 		this.eventExecuteWin = eventExecuteWin;
 		this.personID = personID;
 		this.personName = personName;
@@ -142,6 +146,7 @@ public class MultiChronopicExecute : EventExecute
 		this.cp3 = cp3;
 		this.cp4 = cp4;
 		this.syncFirst = syncFirst;
+		this.deleteFirst = deleteFirst;
 		
 		this.appbar = appbar;
 		this.app = app;
@@ -164,6 +169,12 @@ public class MultiChronopicExecute : EventExecute
 		cp4InStr = "";
 		cp4OutStr = "";
 		
+		if(type == Constants.RunAnalysisName) {
+			syncFirst = false;
+			deleteFirst = false;
+		}
+
+		
 		//initialize eventDone as a mc
 		eventDone = new MultiChronopic();
 	}
@@ -253,9 +264,8 @@ public class MultiChronopicExecute : EventExecute
 		}
 
 		firstValue = true;
-		writingStarted = false;
-			
-
+		//writingStarted = false;
+		
 		//start thread
 		if(chronopics > 0) {
 			thread = new Thread(new ThreadStart(waitEventPre));
@@ -304,9 +314,13 @@ public class MultiChronopicExecute : EventExecute
 		string outEqual = "";
 		
 		inStr = ""; outStr = "";
+		int runAnalysisTcCount = 0;
+
+		bool isFirstOut = true;
+		bool isFirstIn = true;
 
 		syncStates syncing = syncStates.DONE;
-		if(syncFirst) {
+		if(type != Constants.RunAnalysisName || syncFirst) {
 			syncing = syncStates.NOTHING;
 			syncMessage = Catalog.GetString("Press Test button in all Chronopics simultaneously.");
 			needShowSyncMessage = true;
@@ -341,19 +355,43 @@ public class MultiChronopicExecute : EventExecute
 						needShowSyncMessage = true;
 					}
 					else {
-						needSensitiveButtonFinish = true;
+						if(type != Constants.RunAnalysisName)
+							needSensitiveButtonFinish = true;
 
 						if(myPS == Chronopic.Plataforma.ON && myLS == States.OFF) {
-							double lastOut = timestamp/1000.0;
-							Log.WriteLine(cpNum.ToString() + " landed: " + lastOut.ToString());
-							outStr = outStr + outEqual + lastOut.ToString();
-							outEqual = "="; 
+							//this is for multiChronopic, not for runAnalysis
+							if(deleteFirst && isFirstOut)
+								isFirstOut = false;
+							else {
+								double lastOut = timestamp/1000.0;
+								Log.WriteLine(cpNum.ToString() + " landed: " + lastOut.ToString());
+								outStr = outStr + outEqual + lastOut.ToString();
+								outEqual = "="; 
+							}
+							/*
+							   if it's a runAnalysis, 
+							   should end when arrive at 2n photocell (controlled by cp1)
+							   */
+							if(cpNum == 1 && type == Constants.RunAnalysisName) {
+								runAnalysisTcCount ++;
+								if(runAnalysisTcCount == 2) {
+									success = true;
+									//better call also finish
+									//then all cps know about ending
+									finish = true; 
+								}
+							}
 						}
 						else if(myPS == Chronopic.Plataforma.OFF && myLS == States.ON) {
-							double lastIn = timestamp/1000.0;
-							Log.WriteLine(cpNum.ToString() + " jumped: " + lastIn.ToString());
-							inStr = inStr + inEqual + lastIn.ToString();
-							inEqual = "="; 
+							//this is for multiChronopic, not for runAnalysis
+							if(deleteFirst && isFirstIn)
+								isFirstIn = false;
+							else {
+								double lastIn = timestamp/1000.0;
+								Log.WriteLine(cpNum.ToString() + " jumped: " + lastIn.ToString());
+								inStr = inStr + inEqual + lastIn.ToString();
+								inEqual = "="; 
+							}
 						}
 
 						prepareEventGraphMultiChronopic = new PrepareEventGraphMultiChronopic(
@@ -382,13 +420,16 @@ public class MultiChronopicExecute : EventExecute
 		} while ( ! success && ! cancel && ! finish );
 	
 		if (finish) {
+			finishThisCp(cpNum);
+
 			//call write on gui/chronojump.cs, because if done in execute/MultiChronopic, 
 			//will be called n times if n chronopics are working
 			//write(false); //tempTable
 			
 			//event will be raised, and managed in chronojump.cs
-			fakeButtonFinished.Click();
-			finishThisCp(cpNum);
+			//only one call (that comes from first chronopic)
+			if(cpNum == 1)
+				fakeButtonFinished.Click();
 		}
 		if(cancel) {
 			//event will be raised, and managed in chronojump.cs
@@ -439,15 +480,15 @@ public class MultiChronopicExecute : EventExecute
 	maybe we come here four times, one for any chronopic,
 	best is to put one bool in order to only let on get inside
 	*/
-	bool writingStarted;
+	//bool writingStarted;
 
 	public override void MultiChronopicWrite(bool tempTable)
 	{
 		Log.WriteLine("----------WRITING A----------");
-		if(writingStarted)
-			return;
-		else
-			writingStarted = true; //only one execution can "get in"
+	//	if(writingStarted)
+	//		return;
+	//	else
+	//		writingStarted = true; //only one execution can "get in"
 		Log.WriteLine("----------WRITING B----------");
 
 		Console.WriteLine("cp1 In:" + cp1InStr);
@@ -489,7 +530,6 @@ public class MultiChronopicExecute : EventExecute
 
 
 			/* //TODO
-			//event will be raised, and managed in chronojump.cs
 			string myStringPush =   
 				//Catalog.GetString("Last jump: ") + 
 				personName + " " + 
diff --git a/src/exportSession.cs b/src/exportSession.cs
index 97b32a3..92b5750 100644
--- a/src/exportSession.cs
+++ b/src/exportSession.cs
@@ -35,6 +35,7 @@ public class ExportSession
 	protected string [] myRunsInterval;
 	protected string [] myReactionTimes;
 	protected string [] myPulses;
+	protected string [] myMCs;
 	protected Session mySession;
 	protected TextWriter writer;
 	protected static Gtk.Window app1;
@@ -169,6 +170,7 @@ public class ExportSession
 		myRunsInterval = SqliteRunInterval.SelectRuns(mySession.UniqueID, -1);
 		myReactionTimes = SqliteReactionTime.SelectReactionTimes(mySession.UniqueID, -1);
 		myPulses = SqlitePulse.SelectPulses(mySession.UniqueID, -1);
+		myMCs = SqliteMultiChronopic.SelectTests(mySession.UniqueID, -1);
 	}
 
 	protected virtual void printTitles(string title) {
@@ -197,6 +199,8 @@ public class ExportSession
 		printReactionTimes(Catalog.GetString("Reaction times"));
 		
 		printPulses(Catalog.GetString("Pulses"));
+		
+		printMCs(Catalog.GetString("MultiChronopic"));
 
 		printFooter();
 	}
@@ -666,6 +670,121 @@ public class ExportSession
 		}
 	}
 	
+	protected void printMCs(string title)
+	{
+		int dec=prefsDigitsNumber; //decimals
+		
+		ArrayList myData = new ArrayList(1);
+		bool isFirstHeader = true;
+		
+		if(myMCs.Length > 0) 
+			printTitles(title); 
+		
+		foreach (string testString in myMCs) {
+			myData = new ArrayList(1);
+
+			myData.Add( "\n" + 
+					Catalog.GetString("Person ID") + ":" +
+					Catalog.GetString("Person name") + ":" +
+					Catalog.GetString("MC ID") + ":" + 
+					Catalog.GetString("Type") + ":" + 
+					Catalog.GetString("Description") + ":" +
+					Catalog.GetString("Simulated") );
+
+			string [] myStr = testString.Split(new char[] {':'});
+			MultiChronopic mc = new MultiChronopic();
+			mc.UniqueID = Convert.ToInt32(myStr[1].ToString()); 
+			mc.PersonID = Convert.ToInt32(myStr[2].ToString()); 
+			mc.Type = myStr[4].ToString(); 
+			mc.Cp1StartedIn = Convert.ToInt32(myStr[5].ToString()); 
+			mc.Cp2StartedIn = Convert.ToInt32(myStr[6].ToString()); 
+			mc.Cp3StartedIn = Convert.ToInt32(myStr[7].ToString()); 
+			mc.Cp4StartedIn = Convert.ToInt32(myStr[8].ToString()); 
+			mc.Cp1InStr = myStr[9].ToString(); 
+			mc.Cp1OutStr = myStr[10].ToString(); 
+			mc.Cp2InStr = myStr[11].ToString(); 
+			mc.Cp2OutStr = myStr[12].ToString(); 
+			mc.Cp3InStr = myStr[13].ToString(); 
+			mc.Cp3OutStr = myStr[14].ToString(); 
+			mc.Cp4InStr = myStr[15].ToString(); 
+			mc.Cp4OutStr = myStr[16].ToString(); 
+			mc.Description = myStr[17].ToString(); 
+			mc.Simulated = Convert.ToInt32(myStr[18].ToString()); 
+
+			myData.Add (
+					mc.PersonID + ":" +    			
+					myStr[0] + ":" +  mc.UniqueID + ":" +  	//person.name, mc.uniqueID
+					mc.Type + " " + mc.GetCPsString()  + ":" +  		 	
+					Util.RemoveNewLine(mc.Description) + ":" + Util.NoYes(mc.Simulated.ToString())
+				   );
+			
+			writeData(myData);
+
+			myData = new ArrayList(1);
+		
+			string cols4 = ": : : :";
+			myData.Add( mc.DeleteCols(
+						" " + ":" + 
+						Catalog.GetString ("Time") + ":" +
+						Catalog.GetString ("State") + cols4 +
+						Catalog.GetString ("Change") + cols4 +
+						Catalog.GetString ("IN-IN") + cols4 + 
+						Catalog.GetString ("OUT-OUT") + cols4
+						, mc.CPs(), false)
+				  );
+
+			string titleStr = "CP1:CP2:CP3:CP4:";
+			myData.Add( mc.DeleteCols(
+						" " + ":" + 
+						" " + ":" +
+						titleStr + 
+						titleStr + 
+						titleStr + 
+						titleStr
+						, mc.CPs(), false)
+				  );
+
+			string [] averages = mc.Statistics(true, dec); //first boolean is averageOrSD
+			int count = 0;
+			myData.Add( mc.DeleteCols(
+						Catalog.GetString("AVG") + ": : " + cols4 + " " + cols4 + 
+						Util.RemoveZeroOrMinus(Util.TrimDecimals( averages[count++], dec )) + ":" +
+						Util.RemoveZeroOrMinus(Util.TrimDecimals( averages[count++], dec )) + ":" +
+						Util.RemoveZeroOrMinus(Util.TrimDecimals( averages[count++], dec )) + ":" +
+						Util.RemoveZeroOrMinus(Util.TrimDecimals( averages[count++], dec )) + ":" +
+						Util.RemoveZeroOrMinus(Util.TrimDecimals( averages[count++], dec )) + ":" +
+						Util.RemoveZeroOrMinus(Util.TrimDecimals( averages[count++], dec )) + ":" +
+						Util.RemoveZeroOrMinus(Util.TrimDecimals( averages[count++], dec )) + ":" +
+						Util.RemoveZeroOrMinus(Util.TrimDecimals( averages[count++], dec ))
+						, mc.CPs(), false)
+				  );
+
+			string [] sds = mc.Statistics(false, dec); //first boolean is averageOrSD
+			count = 0;
+			myData.Add( mc.DeleteCols(
+						Catalog.GetString("SD") + ": : " + cols4 + " " + cols4 + 
+						Util.RemoveZeroOrMinus(Util.TrimDecimals( sds[count++], dec )) + ":" +
+						Util.RemoveZeroOrMinus(Util.TrimDecimals( sds[count++], dec )) + ":" +
+						Util.RemoveZeroOrMinus(Util.TrimDecimals( sds[count++], dec )) + ":" +
+						Util.RemoveZeroOrMinus(Util.TrimDecimals( sds[count++], dec )) + ":" +
+						Util.RemoveZeroOrMinus(Util.TrimDecimals( sds[count++], dec )) + ":" +
+						Util.RemoveZeroOrMinus(Util.TrimDecimals( sds[count++], dec )) + ":" +
+						Util.RemoveZeroOrMinus(Util.TrimDecimals( sds[count++], dec )) + ":" +
+						Util.RemoveZeroOrMinus(Util.TrimDecimals( sds[count++], dec ))
+						, mc.CPs(), false)
+				  
+					);
+
+			ArrayList array = mc.AsArrayList(dec);
+			foreach(string row in array) 
+				myData.Add(mc.DeleteCols(row, mc.CPs(), true));
+			
+			
+			writeData(myData);
+			writeData("VERTICAL-SPACE");
+		}
+	}
+	
 	protected virtual void printFooter()
 	{
 	}
diff --git a/src/gui/chronojump.cs b/src/gui/chronojump.cs
index 5d00fa0..58e1ef1 100644
--- a/src/gui/chronojump.cs
+++ b/src/gui/chronojump.cs
@@ -106,6 +106,7 @@ public class ChronoJumpWindow
 	[Widget] Gtk.Button button_sj_l;
 	[Widget] Gtk.Button button_cmj;
 	[Widget] Gtk.Button button_abk;
+	[Widget] Gtk.Button button_jumps_max;
 	[Widget] Gtk.Button button_dj;
 	[Widget] Gtk.Button button_rocket;
 	[Widget] Gtk.Button button_take_off;
@@ -133,6 +134,7 @@ public class ChronoJumpWindow
 	[Widget] Gtk.Button button_reaction_time_execute;
 	[Widget] Gtk.Button button_pulse_free;
 	[Widget] Gtk.Button button_pulse_custom;
+	[Widget] Gtk.Button button_reaction_time;
 	//[Widget] Gtk.Button button_pulse_more;
 
 	//multiChronopic
@@ -152,6 +154,7 @@ public class ChronoJumpWindow
 	[Widget] Gtk.Image image_cp4_yes;
 	[Widget] Gtk.Image image_cp4_no;
 	[Widget] Gtk.CheckButton check_multi_sync;
+	[Widget] Gtk.CheckButton check_multi_delete_first;
 	
 	[Widget] Gtk.Button button_last;
 	[Widget] Gtk.Button button_rj_last;
@@ -362,8 +365,6 @@ public class ChronoJumpWindow
 		
 	EvaluatorWindow evalWin;
 	
-	//SessionUploadWindow sessionUploadWin;
-
 	static EventExecuteWindow eventExecuteWin;
 
 	//platform state variables
@@ -1665,12 +1666,12 @@ public class ChronoJumpWindow
 		// is for not confusing with the person treeviews that controls who does events
 		if (myTreeViewMultiChronopic.EventSelectedID == 0) {
 			myTreeViewMultiChronopic.Unselect();
-			showHideActionEventButtons(false, "MultiChronopic"); //hide
+			showHideActionEventButtons(false, Constants.MultiChronopicName); //hide
 		} else if (myTreeViewMultiChronopic.EventSelectedID == -1) {
 			myTreeViewMultiChronopic.SelectHeaderLine();
-			showHideActionEventButtons(true, "MultiChronopic");
+			showHideActionEventButtons(true, Constants.MultiChronopicName);
 		} else {
-			showHideActionEventButtons(true, "MultiChronopic"); //show
+			showHideActionEventButtons(true, Constants.MultiChronopicName); //show
 		}
 	}
 
@@ -1883,7 +1884,7 @@ public class ChronoJumpWindow
 		Log.WriteLine("Bye!");
     
 		if(simulated == false) {
-			sp.Close();
+			serialPortsClose();
 		}
 		
 		File.Delete(runningFileName);
@@ -1902,7 +1903,7 @@ public class ChronoJumpWindow
 		Log.WriteLine("Bye!");
     
 		if(simulated == false) {
-			sp.Close();
+			serialPortsClose();
 		}
 		
 		File.Delete(runningFileName);
@@ -2252,6 +2253,29 @@ public class ChronoJumpWindow
 	private void on_paste1_activate (object o, EventArgs args) {
 	}
 
+	private void serialPortsClose() {
+		sp.Close();
+
+		image_cp1_no.Show();
+		image_cp1_yes.Hide();
+		//close connection with other chronopics on multiChronopic
+		if(image_cp2_yes.Visible) {
+			sp2.Close();
+			image_cp2_no.Show();
+			image_cp2_yes.Hide();
+		}
+		if(image_cp3_yes.Visible) {
+			sp3.Close();
+			image_cp3_no.Show();
+			image_cp3_yes.Hide();
+		}
+		if(image_cp4_yes.Visible) {
+			sp4.Close();
+			image_cp4_no.Show();
+			image_cp4_yes.Hide();
+		}
+	}
+
 	void on_radiobutton_simulated (object o, EventArgs args)
 	{
 		Log.WriteLine(string.Format("RAD - simul. cpRunning: {0}", cpRunning));
@@ -2262,26 +2286,8 @@ public class ChronoJumpWindow
 
 			//close connection with chronopic if initialized
 			if(cpRunning) {
-				sp.Close();
-					
-				image_cp1_no.Show();
-				image_cp1_yes.Hide();
-				//close connection with other chronopics on multiChronopic
-				if(image_cp2_yes.Visible) {
-					sp2.Close();
-					image_cp2_no.Show();
-					image_cp2_yes.Hide();
-				}
-				if(image_cp3_yes.Visible) {
-					sp3.Close();
-					image_cp3_no.Show();
-					image_cp3_yes.Hide();
-				}
-				if(image_cp4_yes.Visible) {
-					sp4.Close();
-					image_cp4_no.Show();
-					image_cp4_yes.Hide();
-				}
+				serialPortsClose();
+
 				table_multi_chronopic_buttons.Sensitive = false;
 				combo_port_windows.Sensitive = false;
 				combo_port_linux.Sensitive = false;
@@ -2705,8 +2711,15 @@ public class ChronoJumpWindow
 			statsWin.ShowUpdateStatsButton();
 	}
 		
+	//mark to only get inside on_multi_chronopic_finished one time
+	bool multiFinishingByClickFinish;
 	private void on_finish_multi_clicked (object o, EventArgs args) 
 	{
+		if(multiFinishingByClickFinish)
+			return;
+		else
+			multiFinishingByClickFinish =  true;
+
 		currentEventExecute.Finish = true;
 		
 		//unhide event buttons for next event
@@ -2722,9 +2735,10 @@ public class ChronoJumpWindow
 	}
 		
 	//if user doesn't touch the platform after pressing "finish", sometimes it gets waiting a Read_event
-	//now the event finishes ok, and next will be ok, also	
+	//now the event finishes ok, and next will be ok
 	//
 	//not for multiChronopic:
+	
 	private void checkFinishTotally (object o, EventArgs args) 
 	{
 		if(currentEventExecute.TotallyFinished) 
@@ -2774,9 +2788,13 @@ public class ChronoJumpWindow
 				sep = ", ";
 			}
 
-			errorWin = ErrorWindow.Show(string.Format(Catalog.GetString("Please, touch the contact platform on Chronopic/s [{0}] for full finishing.\nThen press button\n"), cancelStr));
+			errorWin = ErrorWindow.Show(string.Format(
+						Catalog.GetString("Please, touch the contact platform on Chronopic/s [{0}] for full finishing.") + 
+						"\n" + Catalog.GetString("Then press this button:\n"), cancelStr));
 			errorWin.Button_accept.Clicked += new EventHandler(checkFinishMultiTotally);
 		} else {
+			Log.WriteLine("totallyFinished");
+			/*
 			//call write here, because if done in execute/MultiChronopic, will be called n times if n chronopics are working
 			currentEventExecute.MultiChronopicWrite(false);
 			currentMultiChronopic = (MultiChronopic) currentEventExecute.EventDone;
@@ -2784,7 +2802,7 @@ Console.WriteLine("W");
 		
 
 			//if this multichronopic has more chronopics than other in session, then reload treeview, else simply add
-			if(currentMultiChronopic.MaxCPs() != SqliteMultiChronopic.MaxCPs(currentSession.UniqueID)) {
+			if(currentMultiChronopic.CPs() != SqliteMultiChronopic.MaxCPs(currentSession.UniqueID)) {
 				treeview_multi_chronopic_storeReset();
 				fillTreeView_multi_chronopic();
 			} else
@@ -2792,10 +2810,11 @@ Console.WriteLine("W");
 Console.WriteLine("X");
 			
 			//since 0.7.4.1 when test is done, treeview select it. action event button have to be shown 
-			showHideActionEventButtons(true, "MultiChronopic"); //show
+			showHideActionEventButtons(true, Constants.MultiChronopicName); //show
 		
 			//unhide buttons for delete last test
 			sensitiveGuiYesEvent();
+			*/
 		}
 	}
 		
@@ -2828,6 +2847,8 @@ Console.WriteLine("X");
 //no abk_l button currently
 //		} else 	if(o == (object) button_abk_l) {
 //			currentEventType = new JumpType("ABKl");
+		} else 	if(o == (object) button_jumps_max) {
+			currentEventType = new JumpType("Max");
 		} else 	if(o == (object) button_dj) {
 			currentEventType = new JumpType("DJ");
 		} else 	if(o == (object) button_rocket) {
@@ -2880,6 +2901,8 @@ Console.WriteLine("X");
 		} else 	if(o == (object) button_run_interval_mtgug) {
 			currentEventType = new RunType("MTGUG");
 		//reactionTime
+		} else 	if(o == (object) button_reaction_time) {
+			currentEventType = new ReactionTimeType("reactionTime");
 		//pulse
 		} else 	if(o == (object) button_pulse_free) {
 			currentEventType = new PulseType("Free");
@@ -2887,9 +2910,9 @@ Console.WriteLine("X");
 			currentEventType = new PulseType("Custom");
 		//multiChronopic
 		} else 	if(o == (object) button_multi_chronopic_start) {
-			currentEventType = new MultiChronopicType("multiChronopic");
+			currentEventType = new MultiChronopicType(Constants.MultiChronopicName);
 		} else 	if(o == (object) button_run_analysis) {
-			currentEventType = new MultiChronopicType("runAnalysis");
+			currentEventType = new MultiChronopicType(Constants.RunAnalysisName);
 		}
 
 		changeTestImage(currentEventType.Type.ToString(), currentEventType.Name, currentEventType.ImageFileName);
@@ -2939,6 +2962,10 @@ Console.WriteLine("X");
 				myType = new JumpType(eventName);
 			else if (eventTypeString == EventType.Types.RUN.ToString()) 
 				myType = new RunType(eventName);
+			else if (eventTypeString == EventType.Types.REACTIONTIME.ToString()) 
+				myType = new ReactionTimeType(eventName);
+			else if (eventTypeString == EventType.Types.PULSE.ToString()) 
+				myType = new PulseType(eventName);
 			else if (eventTypeString == EventType.Types.MULTICHRONOPIC.ToString()) 
 				myType = new MultiChronopicType(eventName);
 			else Log.WriteLine("Error on eventTypeHasLongDescription");
@@ -4045,9 +4072,9 @@ Console.WriteLine("X");
 		Log.WriteLine("multi chronopic accepted");
 		
 		if(o == (object) button_multi_chronopic_start) 
-			currentMultiChronopicType = new MultiChronopicType("multiChronopic");
+			currentMultiChronopicType = new MultiChronopicType(Constants.MultiChronopicName);
 		else if(o == (object) button_run_analysis)
-			currentMultiChronopicType = new MultiChronopicType("runAnalysis");
+			currentMultiChronopicType = new MultiChronopicType(Constants.RunAnalysisName);
 
 		//used by cancel and finish
 		currentEventType = new MultiChronopicType();
@@ -4074,6 +4101,7 @@ Console.WriteLine("X");
 			); //-1: unlimited pulses (or changes)
 
 		eventExecuteWin.ButtonCancel.Clicked += new EventHandler(on_cancel_multi_clicked);
+		multiFinishingByClickFinish = false;
 		eventExecuteWin.ButtonFinish.Clicked += new EventHandler(on_finish_multi_clicked);
 		
 		//when user clicks on update the eventExecute window 
@@ -4082,12 +4110,6 @@ Console.WriteLine("X");
 		eventExecuteWin.ButtonUpdate.Clicked += new EventHandler(on_update_clicked);
 
 
-		/*
-		currentEventExecute = new MultiChronopicExecute(eventExecuteWin, currentPerson.UniqueID, currentPerson.Name, 
-				currentSession.UniqueID, currentPulseType.Name, pulseStep, totalPulses, 
-				cp, appbar2, app1, prefsDigitsNumber, volumeOn);
-				*/
-
 		bool syncNeeded = false;
 		if(currentMultiChronopicType.SyncNeeded && check_multi_sync.Active)
 			syncNeeded = true;
@@ -4096,46 +4118,70 @@ Console.WriteLine("X");
 			currentEventExecute = new MultiChronopicExecute(
 					eventExecuteWin, currentPerson.UniqueID, currentPerson.Name, 
 					currentSession.UniqueID, currentMultiChronopicType.Name, 
-					cp, syncNeeded, appbar2, app1);
+					cp, syncNeeded, check_multi_delete_first.Active, appbar2, app1);
 		else if(image_cp2_yes.Visible && image_cp3_no.Visible)
 			currentEventExecute = new MultiChronopicExecute(
 					eventExecuteWin, currentPerson.UniqueID, currentPerson.Name, 
 					currentSession.UniqueID, currentMultiChronopicType.Name,  
-					cp, cp2, syncNeeded, appbar2, app1);
+					cp, cp2, syncNeeded, check_multi_delete_first.Active, appbar2, app1);
 		else if(image_cp3_yes.Visible && image_cp4_no.Visible)
 			currentEventExecute = new MultiChronopicExecute(
 					eventExecuteWin, currentPerson.UniqueID, currentPerson.Name, 
 					currentSession.UniqueID, currentMultiChronopicType.Name,
-					cp, cp2, cp3, syncNeeded, appbar2, app1);
+					cp, cp2, cp3, syncNeeded, check_multi_delete_first.Active, appbar2, app1);
 		else if(image_cp4_yes.Visible)
 			currentEventExecute = new MultiChronopicExecute(
 					eventExecuteWin, currentPerson.UniqueID, currentPerson.Name, 
 					currentSession.UniqueID, currentMultiChronopicType.Name,
-					cp, cp2, cp3, cp4, syncNeeded, appbar2, app1);
+					cp, cp2, cp3, cp4, syncNeeded, check_multi_delete_first.Active, appbar2, app1);
 
 		//if(simulated)	
 		//	currentEventExecute.SimulateInitValues(rand);
 
 
+		//mark to only get inside on_multi_chronopic_finished one time
+		multiFinishing = false;
 		currentEventExecute.Manage();
 
 		currentEventExecute.FakeButtonFinished.Clicked += new EventHandler(on_multi_chronopic_finished);
 	}
 
+	bool multiFinishing;
 	private void on_multi_chronopic_finished (object o, EventArgs args) {
+		if(multiFinishing)
+			return;
+		else
+			multiFinishing = true;
+
 		currentEventExecute.FakeButtonFinished.Clicked -= new EventHandler(on_multi_chronopic_finished);
 
-/*		
 		if ( ! currentEventExecute.Cancel ) {
+Console.WriteLine("T");
+			/*
+			   on runAnalysis test, when cp1 ends, run ends,
+			   but cp2 is still waiting event
+			   with this will ask cp2 to press button
+			   solves problem with threads at ending
+			   */
+
+			on_finish_multi_clicked(o, args);
+Console.WriteLine("U");
+			//call write here, because if done in execute/MultiChronopic, will be called n times if n chronopics are working
+			currentEventExecute.MultiChronopicWrite(false);
 Console.WriteLine("V");
 			currentMultiChronopic = (MultiChronopic) currentEventExecute.EventDone;
 Console.WriteLine("W");
 			
-			myTreeViewMultiChronopic.Add(currentPerson.Name, currentMultiChronopic);
+			//if this multichronopic has more chronopics than other in session, then reload treeview, else simply add
+			if(currentMultiChronopic.CPs() != SqliteMultiChronopic.MaxCPs(currentSession.UniqueID)) {
+				treeview_multi_chronopic_storeReset();
+				fillTreeView_multi_chronopic();
+			} else
+				myTreeViewMultiChronopic.Add(currentPerson.Name, currentMultiChronopic);
 Console.WriteLine("X");
 			
 			//since 0.7.4.1 when test is done, treeview select it. action event button have to be shown 
-			showHideActionEventButtons(true, "MultiChronopic"); //show
+			showHideActionEventButtons(true, Constants.MultiChronopicName); //show
 		
 			//unhide buttons for delete last test
 			sensitiveGuiYesEvent();
@@ -4143,7 +4189,6 @@ Console.WriteLine("X");
 		
 		//unhide buttons that allow doing another test
 		sensitiveGuiEventDone();
-		*/
 	}
 		
 
@@ -4696,7 +4741,7 @@ Console.WriteLine("X");
 		appbar2.Push( 1, Catalog.GetString ( "Deleted multi chronopic" ));
 	
 		myTreeViewMultiChronopic.DelEvent(myTreeViewMultiChronopic.EventSelectedID);
-		showHideActionEventButtons(false, "MultiChronopic");
+		showHideActionEventButtons(false, Constants.MultiChronopicName);
 	}
 	
 
@@ -5142,7 +5187,7 @@ Console.WriteLine("X");
 			button_repair_selected_pulse.Sensitive = show;
 			success = true;
 		} 
-		if (type == "ALL" || type == "MultiChronopic") {
+		if (type == "ALL" || type == Constants.MultiChronopicName) {
 			button_edit_selected_multi_chronopic.Sensitive = show;
 			button_delete_selected_multi_chronopic.Sensitive = show;
 			success = true;
diff --git a/src/gui/dialogServerStats.cs b/src/gui/dialogServerStats.cs
index daf6fcb..3b811e0 100644
--- a/src/gui/dialogServerStats.cs
+++ b/src/gui/dialogServerStats.cs
@@ -47,6 +47,8 @@ public class DialogServerStats
 	[Widget] Gtk.Label label_rt_you;
 	[Widget] Gtk.Label label_pulses_server;
 	[Widget] Gtk.Label label_pulses_you;
+	[Widget] Gtk.Label label_multichronopic_server;
+	[Widget] Gtk.Label label_multichronopic_you;
 
 	[Widget] Gtk.Label label_date;
 
@@ -89,6 +91,9 @@ public class DialogServerStats
 				case "Pulses":
 					label_pulses_server.Text 	= s[1];
 				break;
+				case "MultiChronopic":
+					label_multichronopic_server.Text= s[1];
+				break;
 				default:
 					//do nothing
 				break;
@@ -122,6 +127,9 @@ public class DialogServerStats
 				case "Pulses":
 					label_pulses_you.Text 	= s[1];
 				break;
+				case "MultiChronopic":
+					label_multichronopic_you.Text= s[1];
+				break;
 				default:
 					//do nothing
 				break;
diff --git a/src/gui/eventExecute.cs b/src/gui/eventExecute.cs
index 554cb9a..e256f6e 100644
--- a/src/gui/eventExecute.cs
+++ b/src/gui/eventExecute.cs
@@ -1576,19 +1576,29 @@ public class EventExecuteWindow
 
 		for(int i=0; i < ticks; i++) { 
 			if(cpStart.Length > i) {
-				double x = multiChronopicGetX(ancho, Convert.ToDouble(cpStart[i]), timeOld, timeTotal);
-				pixmap.DrawLine(penStart, Convert.ToInt32(xOld), heightStart, Convert.ToInt32(x), heightStart);
-				timeOld += Convert.ToDouble(cpStart[i]);
-				xOld = x;
-				lastCpIsStart = true;
+				try {
+					double x = multiChronopicGetX(ancho, Convert.ToDouble(cpStart[i]), timeOld, timeTotal);
+					pixmap.DrawLine(penStart, Convert.ToInt32(xOld), heightStart, Convert.ToInt32(x), heightStart);
+					timeOld += Convert.ToDouble(cpStart[i]);
+					xOld = x;
+					lastCpIsStart = true;
+				} catch {
+					//solve problems if a string is empty or with old value
+					//sometimes happens at runAnalysis when there's only cp1
+				}
 			}
 
 			if(cpEnd.Length > i) {
-				double x = multiChronopicGetX(ancho, Convert.ToDouble(cpEnd[i]), timeOld, timeTotal);
-				pixmap.DrawLine(penEnd, Convert.ToInt32(xOld), heightEnd, Convert.ToInt32(x), heightEnd);
-				timeOld += Convert.ToDouble(cpEnd[i]);
-				xOld = x;
-				lastCpIsStart = false;
+				try {
+					double x = multiChronopicGetX(ancho, Convert.ToDouble(cpEnd[i]), timeOld, timeTotal);
+					pixmap.DrawLine(penEnd, Convert.ToInt32(xOld), heightEnd, Convert.ToInt32(x), heightEnd);
+					timeOld += Convert.ToDouble(cpEnd[i]);
+					xOld = x;
+					lastCpIsStart = false;
+				} catch {
+					//solve problems if a string is empty or with old value
+					//sometimes happens at runAnalysis when there's only cp1
+				}
 			}
 		}
 		
diff --git a/src/gui/server.cs b/src/gui/server.cs
index 2e363c5..72d00d6 100644
--- a/src/gui/server.cs
+++ b/src/gui/server.cs
@@ -48,6 +48,9 @@ public class SessionUploadPersonData {
 	public int pulsesU;
 	public int pulsesE;
 	public int pulsesS;
+	public int mcsU;
+	public int mcsE;
+	public int mcsS;
 	public string testTypes;
 	public string sports;
 
@@ -61,6 +64,7 @@ public class SessionUploadPersonData {
 			int runsIU, int runsIE, int runsIS, 
 			int rtsU, int rtsE, int rtsS, 
 			int pulsesU, int pulsesE, int pulsesS,
+			int mcsU, int mcsE, int mcsS,
 			string testTypes, string sports) {
 	}
 }
@@ -76,6 +80,7 @@ public class SessionUploadWindow {
 	private TreeStore store_ri;
 	private TreeStore store_rts;
 	private TreeStore store_pulses;
+	private TreeStore store_mcs;
 
 	[Widget] Gtk.TreeView treeview_persons;
 	[Widget] Gtk.TreeView treeview_jumps;
@@ -84,6 +89,7 @@ public class SessionUploadWindow {
 	[Widget] Gtk.TreeView treeview_runs_i;
 	[Widget] Gtk.TreeView treeview_rts;
 	[Widget] Gtk.TreeView treeview_pulses;
+	[Widget] Gtk.TreeView treeview_mcs;
 	
 	[Widget] Gtk.Label label_uploaded_test_types;
 	[Widget] Gtk.Label label_uploaded_sports;
@@ -114,7 +120,8 @@ public class SessionUploadWindow {
 				treeview_runs,
 				treeview_runs_i,
 				treeview_rts,
-				treeview_pulses
+				treeview_pulses,
+				treeview_mcs
 				);
 
 		store_persons 	= new TreeStore(typeof (string), typeof (string), typeof (string), typeof (string) );
@@ -124,6 +131,7 @@ public class SessionUploadWindow {
 		store_ri	= new TreeStore(typeof (string), typeof (string), typeof (string) );
 		store_rts	= new TreeStore(typeof (string), typeof (string), typeof (string) );
 		store_pulses	 = new TreeStore(typeof (string), typeof (string), typeof (string) );
+		store_mcs	 = new TreeStore(typeof (string), typeof (string), typeof (string) );
 
 		treeview_persons.Model = 	store_persons;
 		treeview_jumps.Model = 		store_j;
@@ -132,6 +140,7 @@ public class SessionUploadWindow {
 		treeview_runs_i.Model = 	store_ri;
 		treeview_rts.Model = 		store_rts;
 		treeview_pulses.Model = 	store_pulses;
+		treeview_mcs.Model = 		store_mcs;
 
 		label_thanks.Hide();
 		button_close.Sensitive = false;
@@ -149,7 +158,8 @@ public class SessionUploadWindow {
 	}
 	
 	private void createTreeViews (Gtk.TreeView treeview_persons, Gtk.TreeView treeview_jumps, Gtk.TreeView treeview_jumps_rj, 
-			Gtk.TreeView treeview_runs, Gtk.TreeView treeview_runs_i, Gtk.TreeView treeview_rts, Gtk.TreeView treeview_pulses) 
+			Gtk.TreeView treeview_runs, Gtk.TreeView treeview_runs_i, Gtk.TreeView treeview_rts, 
+			Gtk.TreeView treeview_pulses, Gtk.TreeView treeview_mcs) 
 	{
 		String [] personCols = {"ID", Catalog.GetString("Name"), "U", "E"};
 		String [] testCols = {"U", "E", "S"};
@@ -160,6 +170,7 @@ public class SessionUploadWindow {
 		createTreeView(treeview_runs_i, testCols, 1);
 		createTreeView(treeview_rts, testCols, 1);
 		createTreeView(treeview_pulses, testCols, 1);
+		createTreeView(treeview_mcs, testCols, 1);
 	}
 
 	private void createTreeView (Gtk.TreeView tv, String [] cols, int existsPos) {
@@ -184,6 +195,7 @@ public class SessionUploadWindow {
 		fillTest (Constants.TestTypes.RUN_I,	p.runsIU, p.runsIE, p.runsIS);
 		fillTest (Constants.TestTypes.RT,	p.rtsU, p.rtsE, p.rtsS);
 		fillTest (Constants.TestTypes.PULSE,	p.pulsesU, p.pulsesE, p.pulsesS);
+		fillTest (Constants.TestTypes.MULTICHRONOPIC,	p.mcsU, p.mcsE, p.mcsS);
 
 		if(p.testTypes.Length > 0) {
 			label_uploaded_test_types.Text = "<b>" + Catalog.GetString("Uploaded test type") + "</b>: " + p.testTypes;
@@ -237,6 +249,9 @@ public class SessionUploadWindow {
 			case Constants.TestTypes.PULSE:
 				store_pulses.AppendValues (u, e, s);
 				break;
+			case Constants.TestTypes.MULTICHRONOPIC:
+				store_mcs.AppendValues (u, e, s);
+				break;
 		}
 	}
 
diff --git a/src/jumpType.cs b/src/jumpType.cs
index 3605a4b..a1e3c87 100644
--- a/src/jumpType.cs
+++ b/src/jumpType.cs
@@ -39,7 +39,7 @@ public class JumpType : EventType
 	
 	public override bool FindIfIsPredefined() {
 		string [] predefinedTests = {
-			"Free", "SJ", "CMJ", "ABK", "Rocket",
+			"Free", "SJ", "CMJ", "ABK", "Max", "Rocket",
 			"SJl", "CMJl", "ABKl", "DJ",
 			"RJ(j)", "RJ(t)", "RJ(unlimited)",
 			"RJ(hexagon)", "triple jump"
@@ -64,7 +64,7 @@ public class JumpType : EventType
 		imageFileName = "";
 		
 		//if this changes, sqlite/jumpType.cs initialize tables should change
-		if(name == "Free" || name == "SJ" || name == "CMJ" || name == "ABK" || name == "Rocket") {
+		if(name == "Free" || name == "SJ" || name == "CMJ" || name == "ABK" || name == "Max" || name == "Rocket") {
 			startIn 	= true;
 			hasWeight 	= false;
 			isRepetitive 	= false;
@@ -93,6 +93,10 @@ public class JumpType : EventType
 			else if (name == "ABK") {
 				description	= Catalog.GetString("Abalakov Jump");
 				imageFileName = "jump_abk.png";
+			} else if (name == "Max") {
+				description	= Catalog.GetString("Maximum Jump");
+				longDescription	= "Maximum Jump (like Abalakov but with free technique)";
+				imageFileName = "jump_max.png";
 			} else if (name == "Rocket") {
 				description	= Catalog.GetString("Rocket Jump");
 				imageFileName = "jump_rocket.png";
diff --git a/src/multiChronopic.cs b/src/multiChronopic.cs
index 5a75f79..edd3f5d 100644
--- a/src/multiChronopic.cs
+++ b/src/multiChronopic.cs
@@ -101,7 +101,7 @@ public class MultiChronopic : Event
 		return SqliteMultiChronopic.Insert(dbconOpened, tableName, 
 				uniqueID.ToString(), 
 				personID, sessionID, 
-				"", //type
+				type, 
 				cp1StartedIn, cp2StartedIn, cp3StartedIn, cp4StartedIn,
 				cp1InStr, cp1OutStr,
 				cp2InStr, cp2OutStr,
@@ -405,6 +405,7 @@ public class MultiChronopic : Event
 		myData[count++] = getIndex(averageOrSD, cp2iiStr);
 		myData[count++] = getIndex(averageOrSD, cp3iiStr);
 		myData[count++] = getIndex(averageOrSD, cp4iiStr);
+		
 		myData[count++] = getIndex(averageOrSD, cp1ooStr);
 		myData[count++] = getIndex(averageOrSD, cp2ooStr);
 		myData[count++] = getIndex(averageOrSD, cp3ooStr);
@@ -423,7 +424,7 @@ public class MultiChronopic : Event
 					Util.GetNumberOfJumps(str, false)).ToString();
 	}
 
-	public int MaxCPs() {
+	public int CPs() {
 		if(cp3InStr == "" && cp3OutStr == "")
 			return 2;
 		else if(cp4InStr == "" && cp4OutStr == "")
@@ -432,6 +433,69 @@ public class MultiChronopic : Event
 			return 4;
 	}
 
+	public string GetCPsString () {
+		string cpsStr = "";
+		string sep = "";
+		if(this.cp1InStr.Length + this.cp1OutStr.Length > 0) {
+			cpsStr += sep + "1";
+			sep = ", ";
+		}
+		if(this.cp2InStr.Length + this.cp2OutStr.Length > 0) {
+			cpsStr += sep + "2";
+			sep = ", ";
+		}
+		if(CPs() >= 3 && this.cp3InStr.Length + this.cp3OutStr.Length > 0) {
+			cpsStr += sep + "3";
+			sep = ", ";
+		}
+		if(CPs() == 4 && this.cp4InStr.Length + this.cp4OutStr.Length > 0) {
+			cpsStr += sep + "4";
+			sep = ", ";
+		}
+		return cpsStr;
+	}
+
+	/*
+	   we pass maxCPs because treeviewMultiChronopic will use maxCPs in session (from sqliteMultiChronopic)
+	   but exportSession will use mc.CPs (cps of this multiChronopic)
+	   */
+	public string [] DeleteCols(string [] s1, int maxCPs, bool deleteSubRowId) {
+		/*
+		   deleteSubRowId is reffered to the "-1" at end of each row in treeview
+		   this is not used in exportSession, then this bools allows to delete it
+		   */
+
+		if(deleteSubRowId)
+			s1[19] = "";
+
+		if(maxCPs == 2) {
+			string [] s2 = new String[11+1];
+			for(int i=0, count=0; i < s1.Length; i++) {
+				if(i != 4 && i != 5 && i != 8 && i != 9 && i != 12 && i != 13 && i != 16 && i != 17)
+					s2[count++] = s1[i];
+			}
+			return s2;
+		}
+		else if(maxCPs == 3) {
+			string [] s2 = new String[15+1];
+			for(int i=0, count=0; i < s1.Length; i++) {
+				if(i != 5 && i != 9 && i != 13 && i != 17)
+					s2[count++] = s1[i];
+			}
+			return s2;
+		}
+		else //maxCPs == 4
+			return s1;
+	}
+	
+	//export session passes a string instead of a stringArray
+	public string DeleteCols(string s1, int maxCPs, bool deleteSubRowId) {
+		string [] strArr = s1.Split(new char[] {':'});
+		strArr = DeleteCols(strArr, maxCPs, deleteSubRowId);
+		return Util.StringArrayToString(strArr, ":");
+	}
+	
+
 
 	public int Cp1StartedIn {
 		get { return cp1StartedIn; }
diff --git a/src/multiChronopicType.cs b/src/multiChronopicType.cs
index 96040ee..4df9cc3 100644
--- a/src/multiChronopicType.cs
+++ b/src/multiChronopicType.cs
@@ -39,13 +39,13 @@ public class MultiChronopicType : EventType
 		this.name = name;
 		
 		//if this changes, sqlite/pulseType.cs initialize table should change
-		if(name == "multiChronopic") {
+		if(name == Constants.MultiChronopicName) {
 			syncNeeded = true;
 			imageFileName = "multiChronopic.png";
 			description = "";
 			longDescription = ""; 
 
-		} else if(name == "runAnalysis") {
+		} else if(name == Constants.RunAnalysisName) {
 			syncNeeded = false;
 			imageFileName = "run_analysis.png";
 			description = "";
diff --git a/src/reactionTimeType.cs b/src/reactionTimeType.cs
index f49e722..a406c0b 100644
--- a/src/reactionTimeType.cs
+++ b/src/reactionTimeType.cs
@@ -27,5 +27,13 @@ public class ReactionTimeType : EventType
 		type = Types.REACTIONTIME;
 	}
 	
+	public ReactionTimeType(string name) {
+		type = Types.REACTIONTIME;
+		this.name = name;
+		imageFileName = "reaction_time.png";
+		description = "";
+		longDescription = ""; 
+	}
+	
 }
 
diff --git a/src/server.cs b/src/server.cs
index f527be6..cbccce6 100644
--- a/src/server.cs
+++ b/src/server.cs
@@ -476,6 +476,35 @@ public class Server
 				sessionUploadPersonData.pulsesE = countE;
 				sessionUploadPersonData.pulsesS = countS;
 
+				//upload multiChronopic
+				countU = 0;					
+				countE = 0;					
+				countS = 0;					
+
+				string [] mcs = SqliteMultiChronopic.SelectTests(currentSession.UniqueID, person.UniqueID);
+				foreach(string mc in mcs) {
+					string [] js = mc.Split(new char[] {':'});
+					//select mc
+					MultiChronopic test = SqliteMultiChronopic.SelectMultiChronopicData(Convert.ToInt32(js[1])); //uniqueID
+					//fix it to server person, session keys
+					test.PersonID = person.ServerUniqueID;
+					test.SessionID = currentSession.ServerUniqueID;
+					//upload...
+					uCode = serverUploadTest(myServer, Constants.TestTypes.MULTICHRONOPIC, Constants.MultiChronopicTable, test);
+
+					if(uCode == Constants.UploadCodes.OK)
+						countU ++;
+					else if(uCode == Constants.UploadCodes.EXISTS)
+						countE ++;
+					else //SIMULATED
+						countS ++;
+				}
+
+				//other thread updates the gui:
+				sessionUploadPersonData.mcsU = countU;
+				sessionUploadPersonData.mcsE = countE;
+				sessionUploadPersonData.mcsS = countS;
+
 				needUpdateServerSession = true;
 				while(needUpdateServerSession) {
 					//wait until data is printed on the other thread
@@ -554,6 +583,10 @@ public class Server
 					Pulse pulse = (Pulse)myTest;
 					idAtServer = myServer.UploadPulse(pulse);
 					break;
+				case Constants.TestTypes.MULTICHRONOPIC :
+					MultiChronopic mc = (MultiChronopic)myTest;
+					idAtServer = myServer.UploadMultiChronopic(mc);
+					break;
 			}
 
 			
diff --git a/src/sqlite/jumpType.cs b/src/sqlite/jumpType.cs
index 0d6a980..c48771b 100644
--- a/src/sqlite/jumpType.cs
+++ b/src/sqlite/jumpType.cs
@@ -57,6 +57,7 @@ class SqliteJumpType : Sqlite
 			"CMJl:1:1:CMJ jump with weight", 
 			"ABK:1:0:ABK jump", 
 			"ABKl:1:1:ABK jump with weight", 
+			"Max:1:0:;Maximum jump", 
 			"DJ:0:0:DJ jump",
 			"Rocket:1:0:Rocket jump",
 			"TakeOff:0:0:Take off",
@@ -83,6 +84,7 @@ class SqliteJumpType : Sqlite
 		SqliteEvent.GraphLinkInsert (Constants.JumpTable, "CMJl", "jump_cmj_l.png", true);
 		SqliteEvent.GraphLinkInsert (Constants.JumpTable, "ABK", "jump_abk.png", true);
 		SqliteEvent.GraphLinkInsert (Constants.JumpTable, "ABKl", "jump_abk_l.png", true);
+		SqliteEvent.GraphLinkInsert (Constants.JumpTable, "Max", "jump_max.png", true);
 		SqliteEvent.GraphLinkInsert (Constants.JumpTable, "Rocket", "jump_rocket.png", true);
 		SqliteEvent.GraphLinkInsert (Constants.JumpTable, "DJ", "jump_dj.png", true);
 	}
@@ -122,7 +124,7 @@ class SqliteJumpType : Sqlite
 			"RJ(unlimited):1:0:1:-1:Jump unlimited until finish is clicked",
 			"RJ(hexagon):1:0:1:18:Reactive Jump on a hexagon until three full revolutions are done",
 			"triple jump:0:0:1:3:Triple jump",
-			"RunAnalysis:0:0:1:-1:Run between two photocells recording contact and flight times in contact platform/s. Until finish button is clicked."
+			//"RunAnalysis:0:0:1:-1:Run between two photocells recording contact and flight times in contact platform/s. Until finish button is clicked."
 		};
 		foreach(string myJumpType in iniJumpTypes) {
 			JumpRjTypeInsert(myJumpType, true);
diff --git a/src/sqlite/main.cs b/src/sqlite/main.cs
index a362b86..8fc06c5 100644
--- a/src/sqlite/main.cs
+++ b/src/sqlite/main.cs
@@ -72,7 +72,7 @@ class Sqlite
 	 * Important, change this if there's any update to database
 	 * Important2: if database version get numbers higher than 1, check if the comparisons with currentVersion works ok
 	 */
-	static string lastChronojumpDatabaseVersion = "0.69";
+	static string lastChronojumpDatabaseVersion = "0.70";
 
 	public Sqlite() {
 	}
@@ -844,11 +844,13 @@ class Sqlite
 			}
 			if(currentVersion == "0.65") {
 				dbcon.Open();
-				SqliteJumpType.JumpRjTypeInsert ("RunAnalysis:0:0:1:-1:Run between two photocells recording contact and flight times in contact platform/s. Until finish button is clicked.", true);
+				//now runAnalysis is a multiChronopic event
+				//SqliteJumpType.JumpRjTypeInsert ("RunAnalysis:0:0:1:-1:Run between two photocells recording contact and flight times in contact platform/s. Until finish button is clicked.", true);
 
 				SqlitePreferences.Update ("databaseVersion", "0.66", true); 
 				
-				Log.WriteLine("Converted DB to 0.66 (added RunAnalysis Reactive jump)"); 
+				//Log.WriteLine("Converted DB to 0.66 (added RunAnalysis Reactive jump)"); 
+				Log.WriteLine("Converted DB to 0.66 (done nothing)"); 
 				dbcon.Close();
 				currentVersion = "0.66";
 			}
@@ -889,7 +891,16 @@ class Sqlite
 				dbcon.Close();
 				currentVersion = "0.69";
 			}
-
+			if(currentVersion == "0.69") {
+				dbcon.Open();
+				SqliteJumpType.JumpTypeInsert ("Max:1:0:Maximum jump", true); 
+				SqliteEvent.GraphLinkInsert (Constants.JumpTable, "Max", "jump_max.png", true);
+				SqlitePreferences.Update ("databaseVersion", "0.70", true); 
+				
+				Log.WriteLine("Converted DB to 0.70 (added Maximum jump  test)"); 
+				dbcon.Close();
+				currentVersion = "0.70";
+			}
 
 		}
 
@@ -1013,10 +1024,11 @@ class Sqlite
 		SqliteCountry.initialize();
 		
 		//changes [from - to - desc]
+		//0.69 - 0.70 added Maximum jump  test
 		//0.68 - 0.69 added Gesell-DBT test
 		//0.67 - 0.68 added multiChronopic tests table
 		//0.66 - 0.67 added TakeOff jumps 
-		//0.65 - 0.66 added run analysis (JumpRj test (masked as run interval))
+		//0.65 - 0.66 added done nothing 
 		//0.64 - 0.65 added Sevaluator on client
 		//0.63 - 0.64 added margaria test
 		//0.62 - 0.63 added 'versionAvailable' to preferences
diff --git a/src/sqlite/personSession.cs b/src/sqlite/personSession.cs
index cc7cc2d..2f744e0 100644
--- a/src/sqlite/personSession.cs
+++ b/src/sqlite/personSession.cs
@@ -60,7 +60,7 @@ class SqlitePersonSession : Sqlite
 		       	" WHERE personID == " + personID + 
 			" AND sessionID == " + sessionID;
 		
-		Log.WriteLine(dbcmd.CommandText.ToString());
+		//Log.WriteLine(dbcmd.CommandText.ToString());
 		dbcmd.ExecuteNonQuery();
 
 		SqliteDataReader reader;
diff --git a/src/sqlite/server.cs b/src/sqlite/server.cs
index 9469a31..18478fb 100644
--- a/src/sqlite/server.cs
+++ b/src/sqlite/server.cs
@@ -201,6 +201,7 @@ class SqliteServer : Sqlite
 		stats.Add("RunsInterval:" + Sqlite.Count(Constants.RunIntervalTable, true).ToString());
 		stats.Add("ReactionTimes:" + Sqlite.Count(Constants.ReactionTimeTable, true).ToString());
 		stats.Add("Pulses:" + Sqlite.Count(Constants.PulseTable, true).ToString());
+		stats.Add("MultiChronopic:" + Sqlite.Count(Constants.MultiChronopicTable, true).ToString());
 		
 		dbcon.Close();
 
@@ -230,6 +231,7 @@ class SqliteServer : Sqlite
 		stats.Add("RunsInterval:" + Sqlite.CountCondition(Constants.RunIntervalTable, true, "simulated", ">", "0").ToString());
 		stats.Add("ReactionTimes:" + Sqlite.CountCondition(Constants.ReactionTimeTable, true, "simulated", ">", "0").ToString());
 		stats.Add("Pulses:" + Sqlite.CountCondition(Constants.PulseTable, true, "simulated", ">", "0").ToString());
+		stats.Add("MultiChronopic:" + Sqlite.CountCondition(Constants.MultiChronopicTable, true, "simulated", ">", "0").ToString());
 		
 		dbcon.Close();
 
diff --git a/src/treeViewMultiChronopic.cs b/src/treeViewMultiChronopic.cs
index 0966b18..c5b27d2 100644
--- a/src/treeViewMultiChronopic.cs
+++ b/src/treeViewMultiChronopic.cs
@@ -110,9 +110,8 @@ public class TreeViewMultiChronopic : TreeViewEvent
 		ArrayList array = mc.AsArrayList(pDN);
 		
 		string title;
-		//title = mc.Type; //currently ""
 
-		title = mc.Type + " CPs: " + getCpsString(mc);
+		title = mc.Type + " CPs: " + mc.GetCPsString();
 		title += "; n: " + array.Count.ToString();
 		if(mc.Simulated == Constants.Simulated)
 			title += " (s) ";
@@ -128,31 +127,9 @@ public class TreeViewMultiChronopic : TreeViewEvent
 		
 		myData[count++] = mc.Description;
 		myData[count++] = mc.UniqueID.ToString();
-		return deleteCols(myData, maxCPs);
+		return mc.DeleteCols(myData, maxCPs, false);
 	}
 	
-	private string getCpsString(MultiChronopic mc) {	
-		string cpsStr = "";
-		string sep = "";
-		if(mc.Cp1InStr.Length + mc.Cp1OutStr.Length > 0) {
-			cpsStr += sep + "1";
-			sep = ", ";
-		}
-		if(mc.Cp2InStr.Length + mc.Cp2OutStr.Length > 0) {
-			cpsStr += sep + "2";
-			sep = ", ";
-		}
-		if(maxCPs >= 3 && mc.Cp3InStr.Length + mc.Cp3OutStr.Length > 0) {
-			cpsStr += sep + "3";
-			sep = ", ";
-		}
-		if(maxCPs == 4 && mc.Cp4InStr.Length + mc.Cp4OutStr.Length > 0) {
-			cpsStr += sep + "4";
-			sep = ", ";
-		}
-		return cpsStr;
-	}
-
 	protected override int getNumOfSubEvents(System.Object myObject)
 	{
 		MultiChronopic mc = (MultiChronopic)myObject;
@@ -189,12 +166,12 @@ public class TreeViewMultiChronopic : TreeViewEvent
 			myData[count++] = "";
 
 		for(int i=0; i<8;i++) 
-			myData[count++] = cleanZeroOrMinus(Util.TrimDecimals( averages[i], pDN ));
+			myData[count++] = Util.RemoveZeroOrMinus(Util.TrimDecimals( averages[i], pDN ));
 
 		myData[count++] = ""; //desc
 		myData[count++] = "-1"; //mark to non select here, select first line 
 		
-		return deleteCols(myData, maxCPs);
+		return mc.DeleteCols(myData, maxCPs, false);
 	}
 
 	protected override string [] printSD(System.Object myObject, int cols) {
@@ -209,21 +186,13 @@ public class TreeViewMultiChronopic : TreeViewEvent
 			myData[count++] = "";
 		
 		for(int i=0; i<8;i++) 
-			myData[count++] = cleanZeroOrMinus(Util.TrimDecimals( sds[i], pDN ));
+			myData[count++] = Util.RemoveZeroOrMinus(Util.TrimDecimals( sds[i], pDN ));
 
 		myData[count++] = ""; //desc
 		myData[count++] = "-1"; //mark to non select here, select first line 
 		
-		return deleteCols(myData, maxCPs);
+		return mc.DeleteCols(myData, maxCPs, false);
 	}
-
-
-	private string cleanZeroOrMinus(string myValue) {
-		if(myValue == "0" || myValue == "-")
-			return "";
-		else
-			return myValue;
-	}	
 			
 	protected override string [] getSubLineToStore(System.Object myObject, int lineCount)
 	{
@@ -256,14 +225,15 @@ public class TreeViewMultiChronopic : TreeViewEvent
 
 			myData[count++] = ""; //description column
 			myData[count++] = "-1"; //mark to non select here, select first line 
-			return deleteCols(myData, maxCPs);
+			return mc.DeleteCols(myData, maxCPs, false);
 		} else {
 			ArrayList array = mc.AsArrayList(pDN);
-			return deleteCols( array[lineCount-1].ToString().Split(new char[] {':'} ), maxCPs );
+			return mc.DeleteCols( array[lineCount-1].ToString().Split(new char[] {':'} ), maxCPs, false );
 		}
 
 	}
 
+	/*
 	private string [] deleteCols(string [] s1, int maxCPs) {
 		if(maxCPs == 2) {
 			string [] s2 = new String[11+1];
@@ -283,7 +253,7 @@ public class TreeViewMultiChronopic : TreeViewEvent
 		}
 		else //maxCPs == 4
 			return s1;
-
 	}
+	*/
 	
 }
diff --git a/src/util.cs b/src/util.cs
index a6efa20..fe1d7cf 100644
--- a/src/util.cs
+++ b/src/util.cs
@@ -279,6 +279,14 @@ public class Util
 		return myStringBuilder.ToString();
 	}
 
+	public static string RemoveZeroOrMinus(string myString) 
+	{
+		if(myString == "0" || myString == "-")
+			return "";
+		else
+			return myString;
+	}
+
 	public static string ChangeEqualForColon(string myString) 
 	{
 		StringBuilder myStringBuilder = new StringBuilder(myString);
diff --git a/version.txt b/version.txt
index 4810611..cc02ea7 100644
--- a/version.txt
+++ b/version.txt
@@ -1 +1 @@
-0.8.3.2
+0.8.9.0



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