diff --git a/buffruneio.go b/buffruneio.go
index 9e47ca2..41cab87 100644
--- a/buffruneio.go
+++ b/buffruneio.go
@@ -83,3 +83,28 @@
 	for ; rd.current != rd.buffer.Front(); rd.buffer.Remove(rd.current.Prev()) {
 	}
 }
+
+// Peek returns at most the next n runes, reading from the uderlying source if
+// needed. Does not move the current index. It includes EOF if reached.
+func (rd *Reader) Peek(n int) []rune {
+	res := make([]rune, 0, n)
+	cursor := rd.current
+	for i := 0; i < n; i++ {
+		if cursor == nil {
+			err := rd.feedBuffer()
+			if err != nil {
+				return res
+			}
+			cursor = rd.buffer.Back()
+		}
+		if cursor != nil {
+			r := cursor.Value.(rune)
+			res = append(res, r)
+			if r == EOF {
+				return res
+			}
+			cursor = cursor.Next()
+		}
+	}
+	return res
+}
diff --git a/buffruneio_test.go b/buffruneio_test.go
index 95946b6..f912149 100644
--- a/buffruneio_test.go
+++ b/buffruneio_test.go
@@ -5,6 +5,17 @@
 	"testing"
 )
 
+func assumeRunesArray(t *testing.T, expected []rune, got []rune) {
+	if len(expected) != len(got) {
+		t.Fatal("expected", len(expected), "runes, but got", len(got))
+	}
+	for i := 0; i < len(got); i++ {
+		if expected[i] != got[i] {
+			t.Fatal("expected rune", expected[i], "at index", i, "but got", got[i])
+		}
+	}
+}
+
 func assumeRune(t *testing.T, rd *Reader, r rune) {
 	gotRune, err := rd.ReadRune()
 	if err != nil {
@@ -82,3 +93,44 @@
 	assumeRune(t, rd, EOF)
 	rd.Forget()
 }
+
+func TestPeekEmpty(t *testing.T) {
+	s := ""
+	rd := NewReader(strings.NewReader(s))
+
+	runes := rd.Peek(1)
+	if len(runes) != 1 {
+		t.Fatal("incorrect number of runes", len(runes))
+	}
+	if runes[0] != EOF {
+		t.Fatal("incorrect rune", runes[0])
+	}
+}
+
+func TestPeek(t *testing.T) {
+	s := "a"
+	rd := NewReader(strings.NewReader(s))
+
+	runes := rd.Peek(1)
+	assumeRunesArray(t, []rune{'a'}, runes)
+
+	runes = rd.Peek(1)
+	assumeRunesArray(t, []rune{'a'}, runes)
+
+	assumeRune(t, rd, 'a')
+	runes = rd.Peek(1)
+	assumeRunesArray(t, []rune{EOF}, runes)
+
+	assumeRune(t, rd, EOF)
+}
+
+func TestPeekLarge(t *testing.T) {
+	s := "abcdefg"
+	rd := NewReader(strings.NewReader(s))
+
+	runes := rd.Peek(100)
+	if len(runes) != len(s)+1 {
+		t.Fatal("incorrect number of runes", len(runes))
+	}
+	assumeRunesArray(t, []rune{'a', 'b', 'c', 'd', 'e', 'f', 'g', EOF}, runes)
+}
