diff --git a/cmd/corpus/corpus.go b/cmd/corpus/corpus.go
index 52be4bf6727f19cdb49685339413141f2844d80f..0542867d9f513596e1be30bb49a551912f35fea3 100644
--- a/cmd/corpus/corpus.go
+++ b/cmd/corpus/corpus.go
@@ -15,6 +15,7 @@ var (
 	dbPath     = flag.String("db", "./db", "Path to the index")
 	doSearch   = flag.Bool("search", true, "Search for something (default)")
 	doIndex    = flag.Bool("index", false, "Index documents")
+	doDump     = flag.Bool("dump", false, "Dump index database")
 	limit      = flag.Int("limit", 20, "Limit number of search results")
 	noScores   = flag.Bool("no-score", false, "Hide score in results")
 	highlights = flag.Bool("highlights", false, "Show highlights from search results")
@@ -124,6 +125,8 @@ func main() {
 
 	if *doIndex {
 		runIndex(index, flag.Args())
+	} else if *doDump {
+		index.Dump()
 	} else {
 		runSearch(index, flag.Args())
 	}
diff --git a/index.go b/index.go
index 71bcde22b787327cbe2466214316efb8c857ff56..aa2ac84004ab9e397ba0409eef2ee9d13e457032 100644
--- a/index.go
+++ b/index.go
@@ -5,6 +5,7 @@ import (
 
 	"fmt"
 	"github.com/blevesearch/bleve"
+	"github.com/blevesearch/bleve/index/upside_down"
 	"github.com/rainycape/cld2"
 )
 
@@ -156,3 +157,15 @@ func (b *Index) Search(queryStr string, offset, limit int, highlights bool) (*bl
 func (b *Index) Close() {
 	b.index.Close()
 }
+
+func (b *Index) Dump() {
+	for rowOrErr := range b.index.DumpAll() {
+		switch rowOrErr := rowOrErr.(type) {
+		case error:
+			fmt.Printf("error dumping: %v\n", rowOrErr)
+		case upside_down.UpsideDownCouchRow:
+			fmt.Printf("%v\n", rowOrErr)
+			fmt.Printf("Key:   % -100x\nValue: % -100x\n\n", rowOrErr.Key(), rowOrErr.Value())
+		}
+	}
+}