diff --git a/swig/libcorpustagset.i b/swig/libcorpustagset.i
index 1e581d7922f15e720d899a8b899bbdd3243dd297..daae5be9e4ace1bf7198e9195ddf48ce4b15de1b 100644
--- a/swig/libcorpustagset.i
+++ b/swig/libcorpustagset.i
@@ -16,6 +16,18 @@
 namespace Corpus2 {
   class Tagset {
   public:
+
+  enum ParseMode {
+    ParseCheckRequired = 1, /// Check for presence of required attributes
+    ParseAllowExtra = 2, /// Allow extra attributes
+    ParseCheckSingular = 4, /// Check tag singularity
+
+    ParseDefault = ParseCheckRequired, /// Default mode
+    ParseRequiredWithExtra = ParseCheckRequired | ParseAllowExtra,
+    ParseStrict = ParseCheckRequired | ParseCheckSingular,
+    ParseLoose = ParseAllowExtra
+  };
+
     Tagset();
     static Tagset from_data(const char*);
 
@@ -23,8 +35,8 @@ namespace Corpus2 {
     Tag parse_symbol(const std::string& s) const;
 
     /* --------------------------------------------------------------------- */
-    std::vector<Tag> parse_tag(const char* c, bool allow_extra) const;
-    Tag parse_simple_tag(const char* c, bool allow_extra) const;
+    std::vector<Tag> parse_tag(const char* c, ParseMode m = ParseDefault) const;
+    Tag parse_simple_tag(const char* c, ParseMode mode = ParseDefault) const;
     Tag make_ign_tag() const;
 
     /* --------------------------------------------------------------------- */