diff --git a/sys/include/ringbuffer.h b/sys/include/ringbuffer.h
index 97bccb554426f304877215b2dfdd554f31e22ea7..93522d08f052cdf9db96713c44a3470dbe12fa5b 100644
--- a/sys/include/ringbuffer.h
+++ b/sys/include/ringbuffer.h
@@ -12,6 +12,7 @@
  * @{
  * @file   ringbuffer.h
  * @author Kaspar Schleiser <kaspar@schleiser.de>
+ * @author René Kijewski <rene.kijewski@fu-berlin.de>
  * @}
  */
 
@@ -32,4 +33,17 @@ void ringbuffer_add(ringbuffer_t *rb, char *buf, int n);
 int ringbuffer_get_one(ringbuffer_t *rb);
 int ringbuffer_get(ringbuffer_t *rb, char *buf, int n);
 
+static inline int ringbuffer_empty(ringbuffer_t *rb)
+{
+    return rb->avail == 0;
+}
+
+static inline int ringbuffer_full(ringbuffer_t *rb)
+{
+    return rb->avail == rb->size;
+}
+
+int ringbuffer_peek_one(ringbuffer_t *rb);
+int ringbuffer_peek(ringbuffer_t *rb, char *buf, unsigned n);
+
 #endif /* __RINGBUFFER_H */
diff --git a/sys/lib/ringbuffer.c b/sys/lib/ringbuffer.c
index 85bd8a0d36322903ad1018b64e3b6f0ec42fd1d1..fc7055d8ff4e70e419b973932406f1633ae4c28d 100644
--- a/sys/lib/ringbuffer.c
+++ b/sys/lib/ringbuffer.c
@@ -75,3 +75,19 @@ int ringbuffer_get(ringbuffer_t *rb, char *buf, int n)
 
     return count;
 }
+
+int ringbuffer_peek_one(ringbuffer_t *rb)
+{
+    unsigned end = rb->end, start = rb->start, avail = rb->avail;
+    int result = ringbuffer_get_one(rb);
+    rb->end = end, rb->start = start, rb->avail = avail;
+    return result;
+}
+
+int ringbuffer_peek(ringbuffer_t *rb, char *buf, unsigned n)
+{
+    unsigned end = rb->end, start = rb->start, avail = rb->avail;
+    int result = ringbuffer_get(rb, buf, n);
+    rb->end = end, rb->start = start, rb->avail = avail;
+    return result;
+}