 			{
 				trace("Got out of bound timestamp. Trying to recover...");
 
-				var lastSeg:HLSManifestSegment = segments[segments.length - 1];
-				if(segments.length >=4 )
-					lastSeg = segments[segments.length - 3];
+				var lastSeg:HLSManifestSegment = segments[Math.max(0, segments.length - 3)];
 
 				if(time < segments[0].startTime)
 				{
-					trace("Fell off oldest segment, going to end #" + segments[0].id)
+					trace("Fell off oldest segment, going to start #" + segments[0].id)
 					seq = segments[0].id;
 					//bumpedTime = true;
 				}

				return returnString;
			}
			
			if (lastSequence > segments[segments.length - 1].id || lastSequence < 0)
			{
				trace("==WARNING: lastSegmentIndex is greater than number of segments in last quality==");
				trace("lastSegmentIndex: " + lastSequence + " | max allowed index: " + segments[segments.length - 1].id);
				trace("Setting lastSegmentIndex to " + segments[segments.length - 1].id);
				lastSequence = segments[segments.length - 1].id;

				// Back off by one as it will get incremented later.
				lastSequence--;
			}
			
			var lastSeg:HLSManifestSegment = getSegmentBySequence(segments, lastSequence);
			return "/" + sequenceSkips + "/" + lastQuality + "/" +  (lastSeg ? lastSeg.continuityEra : 0);
		}
		

			reloadingManifest.addEventListener(Event.COMPLETE, onReloadComplete);
			reloadingManifest.addEventListener(IOErrorEvent.IO_ERROR, onReloadError);
			reloadingManifest.reload(manToReload);
		}
		
		private function onReloadError(event:Event):void
