diff --git a/common/src/main/java/ctbrec/recorder/download/hls/AbstractHlsDownload.java b/common/src/main/java/ctbrec/recorder/download/hls/AbstractHlsDownload.java
index 4428ddc9..fff1eac6 100644
--- a/common/src/main/java/ctbrec/recorder/download/hls/AbstractHlsDownload.java
+++ b/common/src/main/java/ctbrec/recorder/download/hls/AbstractHlsDownload.java
@@ -23,14 +23,8 @@ import java.time.Instant;
 import java.time.ZoneId;
 import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
+import java.util.*;
 import java.util.Map.Entry;
-import java.util.Optional;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorCompletionService;
 import java.util.concurrent.ExecutorService;
@@ -110,10 +104,6 @@ public abstract class AbstractHlsDownload extends AbstractDownload {
     protected abstract OutputStream getSegmentOutputStream(Segment segment) throws IOException;
 
     protected void segmentDownloadFinished(SegmentDownload segmentDownload) { // NOSONAR
-        if (Duration.between(lastSegmentDownload, Instant.now()).getSeconds() > MAX_SECONDS_WITHOUT_TRANSFER) {
-            LOG.info("No video data received for {} seconds. Stopping recording for model {}", MAX_SECONDS_WITHOUT_TRANSFER, model);
-            stop();
-        }
         lastSegmentDownload = Instant.now();
     }
 
@@ -121,6 +111,7 @@ public abstract class AbstractHlsDownload extends AbstractDownload {
 
     @Override
     public AbstractHlsDownload call() throws Exception {
+
         try {
             if (segmentPlaylistUrl == null) {
                 segmentPlaylistUrl = getSegmentPlaylistUrl(model);
@@ -146,6 +137,11 @@ public abstract class AbstractHlsDownload extends AbstractDownload {
                 recordingEvents.remove(0);
             }
 
+            if (Duration.between(lastSegmentDownload, Instant.now()).getSeconds() > MAX_SECONDS_WITHOUT_TRANSFER) {
+                LOG.info("No video data received for {} seconds. Stopping recording for model {}", MAX_SECONDS_WITHOUT_TRANSFER, model);
+                stop();
+                return this;
+            }
         } catch (ParseException e) {
             LOG.error("Couldn't parse HLS playlist for model {}\n{}", model, e.getInput(), e);
             stop();
@@ -235,7 +231,7 @@ public abstract class AbstractHlsDownload extends AbstractDownload {
         for (StreamSource streamSource : streamSources) {
             LOG.debug("{} src {}", model.getName(), streamSource);
         }
-        String url = null;
+        String url;
         if (model.getStreamUrlIndex() >= 0 && model.getStreamUrlIndex() < streamSources.size()) {
             // TODO don't use the index, but the bandwidth. if the bandwidth does not match, take the closest one
             StreamSource source = streamSources.get(model.getStreamUrlIndex());
@@ -275,7 +271,7 @@ public abstract class AbstractHlsDownload extends AbstractDownload {
         try (Response response = client.execute(request, config.getSettings().playlistRequestTimeout)) {
             if (response.isSuccessful()) {
                 consecutivePlaylistTimeouts = 0;
-                String body = response.body().string();
+                String body = Objects.requireNonNull(response.body()).string();
                 if (!body.contains("#EXTINF")) {
                     // no segments, empty playlist
                     return new SegmentPlaylist(segmentPlaylistUrl);