diff --git a/libcorpus2/io/reader.h b/libcorpus2/io/reader.h
index 15adbbb62999eb523d74fe4cc7f9c9ce49a13e2c..c18a029735f2ea1a5d68918b08f305ebf6923f86 100644
--- a/libcorpus2/io/reader.h
+++ b/libcorpus2/io/reader.h
@@ -46,6 +46,9 @@ public:
 
 	virtual boost::shared_ptr<Chunk> get_next_chunk() = 0;
 
+	virtual void set_option(const std::string& /*option*/) {
+	}
+
 	const Tagset& tagset() {
 		return tagset_;
 	}
diff --git a/libcorpus2/io/xcesreader.cpp b/libcorpus2/io/xcesreader.cpp
index a33aeb46bdcaed9f6c11e5ca5d7d2c08fc909f7f..8d71c3586fbdcfc56e3d7d7d397fdbb1c5e8dbb5 100644
--- a/libcorpus2/io/xcesreader.cpp
+++ b/libcorpus2/io/xcesreader.cpp
@@ -89,4 +89,13 @@ XcesReaderImpl::~XcesReaderImpl()
 {
 }
 
+void XcesReader::set_option(const std::string& option)
+{
+	if (option == "loose") {
+		impl_->set_loose_tag_parsing(true);
+	} else if (option == "strict") {
+		impl_->set_loose_tag_parsing(false);
+	}
+}
+
 } /* end ns Corpus2 */
diff --git a/libcorpus2/io/xcesreader.h b/libcorpus2/io/xcesreader.h
index 004b62fd8f3fd112e0110d766039fbd89d7b2bbc..3260693f4a0da8d58711365661b6f86cb6d0b6a0 100644
--- a/libcorpus2/io/xcesreader.h
+++ b/libcorpus2/io/xcesreader.h
@@ -42,6 +42,8 @@ public:
 		return *is_;
 	}
 
+	void set_option(const std::string& option);
+
 protected:
 	void ensure_more();