Index: /status
===================================================================
--- /status (revision 553)
+++ /status (revision 554)
@@ -10,5 +10,5 @@
 grabber         yahoo7web           0.11
 grabber         ten_website         0.05
-grabber         foxtel_swf          0.02
+grabber         foxtel_swf          0.03
 reconciler      reconciler_mk2      0.20
 postprocessor   imdb_augment_data   0.10
Index: /grabbers/foxtel_swf
===================================================================
--- /grabbers/foxtel_swf (revision 547)
+++ /grabbers/foxtel_swf (revision 554)
@@ -8,5 +8,5 @@
 
 my $progname = "foxtel_swf";
-my $version = "0.02";
+my $version = "0.03";
 
 use LWP::UserAgent;
@@ -571,4 +571,5 @@
 	my ($starttime, $stoptime) = @_;
 	my $curr_start, my $curr_stop;
+	my $consecutive_failures = 0;
 
 	&log("fetching program data for ".$d->{included_chan_count}." channels from lineup");
@@ -579,5 +580,16 @@
 		$curr_stop = $stoptime if ($curr_stop > $stoptime);
 
-		&get_programs($curr_start,$curr_stop);
+		my $success = &get_programs($curr_start,$curr_stop);
+		if (!$success) {
+			$consecutive_failures++;
+
+			if ($consecutive_failures >= 2) {
+				&log(" aborting fetching due to errors.");
+				$stats{aborted_fetching}++;
+				last;
+			}
+		} else {
+			$consecutive_failures = 0;
+		}
 
 		$curr_start = $curr_stop;
@@ -623,11 +635,24 @@
 	my $parsed_xml = XMLin($data);
 
-	die "Failed to retrieve valid GetSelectedPrograms\n"
-	  if (!defined $parsed_xml->{'soap:Body'}->{'GetSelectedProgramsResponse'}->{'GetSelectedProgramsResult'});
+	if (!defined $parsed_xml->{'soap:Body'}->{'GetSelectedProgramsResponse'}->{'GetSelectedProgramsResult'}) {
+		&log("Failed to retrieve valid GetSelectedPrograms");
+		$stats{failed_GetSelectedPrograms}++;
+		return 0;
+	}
+
 	my $ref = $parsed_xml->{'soap:Body'}->{'GetSelectedProgramsResponse'}->{'GetSelectedProgramsResult'};
 
 	# check for error response
-	die "SelectedPrograms page indicated failure code: ".$ref->{'ErrorStatus'}->{'content'}.": aborting!\n"
-	  if ($ref->{'ErrorStatus'}->{'content'} ne "OK");
+	if ($ref->{'ErrorStatus'}->{'content'} ne "OK") {
+		&log("SelectedPrograms page indicated failure code: ".$ref->{'ErrorStatus'}->{'content'}.": aborting!");
+		$stats{failed_SelectedPrograms_code}++;
+		return 0;
+	}
+
+	if (!defined $ref->{'EPGDetails'}->{'EPG'}) {
+		&log("no EPGDetails on page");
+		$stats{failed_no_EPGDetails}++;
+		return 0;
+	}
 
 	# gather up programmes
@@ -698,4 +723,5 @@
 	}
 
+	return 1;
 }
 
