diff --git a/lib/sessions/downloader.pm b/lib/sessions/downloader.pm
index 0195c5e11a071bd15a8fd692e0d1bbb6918fad39..1f57e9ac9e4df55a2e941aebd7ab72f1e1ff922d 100644
--- a/lib/sessions/downloader.pm
+++ b/lib/sessions/downloader.pm
@@ -18,6 +18,7 @@ POE::Session->create(
         filename        => \&sessions::downloader::ddl::filename,
         signal_filename => \&sessions::downloader::ddl::signal_filename,
         signal_ddl      => \&sessions::downloader::ddl::signal_ddl,
+        signal_move     => \&sessions::downloader::ddl::signal_move,
         end_task        => \&sessions::downloader::ddl::end_task,
     },
 );
diff --git a/lib/sessions/downloader/ddl.pm b/lib/sessions/downloader/ddl.pm
index 05bb2685b68cf1b4208339ccc93b172de10110f6..9ae3b76c56a709d10be4c91e3fd390924241557a 100644
--- a/lib/sessions/downloader/ddl.pm
+++ b/lib/sessions/downloader/ddl.pm
@@ -93,7 +93,7 @@ sub signal_filename {
             "youtube-dl",
             "--restrict-filename",
             "-o",
-            $conf->{save_folder}."/".$conf->{save_format},
+            "/tmp/".$conf->{save_format},
             $heap->{ddl}->{pb}->{$id}->{url},
         ],
         StdoutEvent => "devnull",
@@ -120,6 +120,40 @@ sub signal_ddl {
 
     if ($status ne "0") {
         $log->error("error downloading $id : $status");
+        $kernel->yield("end_task");
+    }
+
+    # we actually download the content
+    $child = POE::Wheel::Run->new(
+        Program => [
+            "mv",
+            "/tmp/".$heap->{ddl}->{pb}->{$id}->{filename},
+            $conf->{save_folder}."/".$heap->{ddl}->{pb}->{$id}->{filename},
+        ],
+        StdoutEvent => "devnull",
+        StderrEvent => "devnull",
+    );
+    $kernel->sig_child($child->PID, "signal_move");
+
+    # we link playbot id to PID and url
+    $heap->{ddl}->{pb}->{$id}->{child} = $child->PID;
+
+    # we link wheel id to playbot id
+    $heap->{ddl}->{wid}->{$child->ID} = $id;
+    # we link PID to child object
+    $heap->{ddl}->{pid}->{$child->PID} = $child;
+}
+
+sub signal_move {
+    $log->debug("DDL");
+    my ($kernel, $heap, $pid, $status) = @_[KERNEL, HEAP, ARG1, ARG2];
+
+    my $child   = delete $heap->{ddl}->{pid}->{$pid};
+    my $id      = delete $heap->{ddl}->{wid}->{$child->ID};
+    $heap->{ddl}->{pb}->{$id}->{child} = undef;
+
+    if ($status ne "0") {
+        $log->error("error moving $id from tmp : $status");
     }
     else {
         eval {