diff --git a/lib/dtsc.cpp b/lib/dtsc.cpp
index 9e937d8d..f73f73c3 100644
--- a/lib/dtsc.cpp
+++ b/lib/dtsc.cpp
@@ -35,6 +35,7 @@ unsigned int DTSC::Stream::getTime(){
 /// \arg buffer The std::string buffer to attempt to parse.
 bool DTSC::Stream::parsePacket(std::string & buffer){
   uint32_t len;
+  static bool syncing = false;
   if (buffer.length() > 8){
     if (memcmp(buffer.c_str(), DTSC::Magic_Header, 4) == 0){
       len = ntohl(((uint32_t *)buffer.c_str())[1]);
@@ -63,12 +64,21 @@ bool DTSC::Stream::parsePacket(std::string & buffer){
       buffer.erase(0, len+8);
       while (buffers.size() > buffercount){buffers.pop_back();}
       advanceRings();
+      syncing = false;
       return true;
     }
     #if DEBUG >= 2
-    std::cerr << "Error: Invalid DTMI data: " << buffer.substr(0, 4) << std::endl;
+    if (!syncing){
+      std::cerr << "Error: Invalid DTMI data detected - re-syncing" << std::endl;
+      syncing = true;
+    }
     #endif
-    buffer.erase(0, 1);
+    size_t magic_search = buffer.find(Magic_Packet);
+    if (magic_search == std::string::npos){
+      buffer.clear();
+    }else{
+      buffer.erase(0, magic_search);
+    }
   }
   return false;
 }