diff --git a/wcclparser/main.cpp b/wcclparser/main.cpp
index 37c910c441e0ec79fe6457f0a3801f3b881a9f8f..4ba829ed1e231b203b1dd8f77458aa746c84b050 100644
--- a/wcclparser/main.cpp
+++ b/wcclparser/main.cpp
@@ -2,8 +2,10 @@
 
 #include <libwccl/values/strset.h>
 #include <libwccl/parser/Parser.h>
+#include <libcorpus2/tagsetmanager.h>
 
 #include <boost/bind.hpp>
+#include <boost/program_options.hpp>
 
 #include <antlr/MismatchedTokenException.hpp>
 // ----------------------------------------------------------------------------
@@ -120,9 +122,40 @@ bool process_line(const std::string& line, Parser& parser)
 	return false;
 }
 
-int main()
+int main(int argc, char** argv)
 {
-	Corpus2::Tagset tagset;
+	std::string tagset_load = "kipi";
+	bool quiet = false;
+	using boost::program_options::value;
+
+	boost::program_options::options_description desc("Allowed options");
+	desc.add_options()
+			("tagset,t", value(&tagset_load),
+			 "Tagset to use\n")
+			("quiet,q", value(&quiet)->zero_tokens(),
+			 "Suppress messages\n")
+			("help,h", "Show help")
+			;
+	boost::program_options::variables_map vm;
+	boost::program_options::positional_options_description p;
+	p.add("tagset", -1);
+
+	try {
+		boost::program_options::store(
+			boost::program_options::command_line_parser(argc, argv)
+			.options(desc).positional(p).run(), vm);
+	} catch (boost::program_options::error& e) {
+		std::cerr << e.what() << "\n";
+		return 2;
+	}
+	boost::program_options::notify(vm);
+
+	if (vm.count("help")) {
+		std::cout << desc << "\n";
+		return 1;
+	}
+
+	const Corpus2::Tagset& tagset = Corpus2::get_named_tagset(tagset_load);
 	Parser parser(tagset);
 
 	if (system("clear")) {