diff --git a/src/io.cpp b/src/io.cpp
index 195060c2..684a757b 100644
--- a/src/io.cpp
+++ b/src/io.cpp
@@ -520,10 +520,22 @@ namespace Mist {
     nProxy.continueNegotiate(tid, myMeta, quickNegotiate);
   }
 
+  void InOutBase::continueNegotiate() {
+    nProxy.continueNegotiate(myMeta);
+  }
+
   negotiationProxy::negotiationProxy(){
     negTimer = 0;
   }
 
+  void negotiationProxy::continueNegotiate(DTSC::Meta & myMeta) {
+    for (std::map<unsigned int, DTSC::Track>::iterator it = myMeta.tracks.begin(); it != myMeta.tracks.end(); it++){
+      if (!trackState.count(it->first) || (trackState[it->first] != FILL_ACC  && trackState[it->first] != FILL_DEC)){
+        continueNegotiate(it->first, myMeta);
+      }
+    }
+  }
+
   void negotiationProxy::continueNegotiate(unsigned long tid, DTSC::Meta & myMeta, bool quickNegotiate) {
     if (!tid) {
       return;
diff --git a/src/io.h b/src/io.h
index 0ab55171..3e85b902 100644
--- a/src/io.h
+++ b/src/io.h
@@ -56,6 +56,8 @@ namespace Mist {
       std::string streamName;///< Name of the stream to connect to
 
       void continueNegotiate(unsigned long tid, DTSC::Meta & myMeta, bool quickNegotiate = false);
+      void continueNegotiate(DTSC::Meta & myMeta);
+
       uint32_t negTimer; ///< How long we've been negotiating, in packets.
   };
 
@@ -70,6 +72,7 @@ namespace Mist {
       virtual void bufferLivePacket(DTSC::Packet & packet);
     protected:
       void continueNegotiate(unsigned long tid, bool quickNegotiate = false);
+      void continueNegotiate();