Index: trunk/FACT++/www/schedule/save.php
===================================================================
--- trunk/FACT++/www/schedule/save.php	(revision 17704)
+++ trunk/FACT++/www/schedule/save.php	(revision 17705)
@@ -130,4 +130,23 @@
 }
 
+// ================================================================
+
+$db = mysql_connect($dbhost,$dbuser,$dbpass);
+if (!$db)
+    die(mysql_error());
+
+if (!mysql_select_db($dbname, $db))
+    die(mysql_error());
+
+$query = "SELECT * FROM measurement";
+
+$sql = mysql_query($query);
+if (!$sql)
+    die(mysql_error());
+
+$measurements = array();
+while($row = mysql_fetch_assoc($sql))
+    $measurements[$row['fMeasurementKey']] = $row;
+
 // ----------------------------------------------------------------
 
@@ -144,11 +163,8 @@
 {
     $t = $row[0]; // time
-    $m = $row[1]; // measurement
-    $s = $row[2]; // source
-    $v = $row[3]; // value
-
-    // If there is a time set, remember the time, if not
-    // this is just a measurement within an observation
-    // so duplicate the time
+
+    // If there is a time set (first task in an observation),
+    // remember the time, if not this is just a measurement
+    // within an observation so duplicate the time
     if (!isset($t))
     {
@@ -173,8 +189,25 @@
     else
     {
+        // Check all but the last task in a measurement whether
+        // the are not unlimited
+        if ($last==$t)
+        {
+            if ($measurements[$m]['fIsUnlimited']==true)
+                die("Unlimited task '".$measurements[$m]['fMeasurement']."' detected before end of observation\n[".$last."|".($id-1)."]");
+        }
+
         if ($last>$t)
             die("Times not sequential\n[".$last."|".$t."]");
         $last = $t;
     }
+
+    $m = $row[1]; // measurement
+    $s = $row[2]; // source
+    $v = $row[3]; // value
+
+    if ($measurements[$m]['fNeedsSource']==true && $s==0)
+        die("Task '".$measurements[$m]['fMeasurement']."' needs source.\n[".$t."|".$id."]");
+    if ($measurements[$m]['fNeedsSource']!=true && $s>0)
+        die("Task '".$measurements[$m]['fMeasurement']."' must not have source.\n[".$t."|".$id."]");
 
     // Compile query
@@ -222,11 +255,4 @@
 // ================================================================
 
-$db = mysql_connect($dbhost,$dbuser,$dbpass);
-if (!$db)
-    die(mysql_error());
-
-if (!mysql_select_db($dbname, $db))
-    die(mysql_error());
-
 foreach ($queries as $query)
     if (!mysql_query($query))
