diff --git a/swig/corpus.i b/swig/corpus.i
new file mode 100644
index 0000000000000000000000000000000000000000..4d3f8df0cfcfcb59afc32ec46f94753beaaedc48
--- /dev/null
+++ b/swig/corpus.i
@@ -0,0 +1,33 @@
+#ifndef SWIG_LIBCORPUS2_CORPUS_I
+#define SWIG_LIBCORPUS2_CORPUS_I
+
+%module libcorpuscorpus
+%{
+  #include <libcorpus2_whole/corpus.h>
+%}
+
+%include "std_defs.i"
+%include "document.i"
+
+%template(CorpusPtr) boost::shared_ptr<Corpus2::whole::Corpus>;
+%template(ConstCorpusPtr) boost::shared_ptr<const Corpus2::whole::Corpus>;
+
+namespace Corpus2 {
+namespace whole {
+  class Corpus {
+  public:
+    Corpus(const std::string name = "");
+
+    void add_document(boost::shared_ptr<Document> document);
+
+    boost::shared_ptr<Document> next_document();
+    const std::vector<boost::shared_ptr<Document> > documents() const;
+  };
+} // whole ns
+} // Corpus2 ns
+
+using namespace std;
+using namespace Corpus2;
+using namespace Corpus2::whole;
+
+#endif /* SWIG_LIBCORPUS2_CORPUS_I */
diff --git a/swig/corpus2.i b/swig/corpus2.i
index b925343a152e6c2e05c8aac41b7588b225e4c181..e92d165458a60ca3116936329761673e9c5e8dc0 100644
--- a/swig/corpus2.i
+++ b/swig/corpus2.i
@@ -27,6 +27,8 @@
 %include "tokenreader.i"
 %include "tokenwriter.i"
 
+%include "corpus.i"
+
 %{
 #include <libcorpus2/util/settings.h>
 static void set_verbose(bool v) {