diff --git a/lib/modules/Thread.pmod b/lib/modules/Thread.pmod
index 85ebfe300df42748fb31a5d94a26b68cc8962581..1330cc1f1d1a200ae4fb6cec0eed6232191b63c7 100644
--- a/lib/modules/Thread.pmod
+++ b/lib/modules/Thread.pmod
@@ -132,7 +132,11 @@ optional class Fifo {
       ptr%=sizeof(buffer);
       num--;
     }else{
-      ret=buffer[ptr..]+buffer[..num-sizeof(ret)-1];
+      if (ptr+num < sizeof(buffer)) {
+	ret = buffer[ptr..ptr+num-1];
+      } else {
+	ret = buffer[ptr..]+buffer[..num-(sizeof(buffer)-ptr)-1];
+      }
       ptr=num=0;
       buffer=allocate(sizeof(buffer)); // Throw away any references.
     }