diff --git a/libcorpus2/tagset.cpp b/libcorpus2/tagset.cpp
index 8fbb29619c2d79235674e4323e5b5c46d46f79fe..e2407212cddf71ce9a6bb71ba589ad92240f493b 100644
--- a/libcorpus2/tagset.cpp
+++ b/libcorpus2/tagset.cpp
@@ -280,7 +280,12 @@ Tag Tagset::make_tag(idx_t pos_idx, mask_t values, bool allow_extra) const
 
 Tag Tagset::make_ign_tag() const
 {
+#ifndef _MSC_VER
 	mask_t ign_pos_mask = get_pos_mask("ign");
+#else //no const char* to std::string::const_iterator conversion
+	static const std::string ign("ign");
+	mask_t ign_pos_mask = get_pos_mask(ign);
+#endif
 	assert(ign_pos_mask.any());
 	return Tag(ign_pos_mask);
 }
diff --git a/libcorpus2/tagset.h b/libcorpus2/tagset.h
index 572e5b42b71eaade4cbd718cf2a8d1c7902b069d..a896d3481c53341309ea52bf34a3769b4d25b6b1 100644
--- a/libcorpus2/tagset.h
+++ b/libcorpus2/tagset.h
@@ -135,7 +135,11 @@ public:
 	 */
 	void parse_tag(const char* c, bool allow_extra,
 			boost::function<void (const Tag&)> sink) const {
+#ifndef _MSC_VER
 		parse_tag(std::make_pair(c, c + strlen(c)), allow_extra, sink);
+#else // no const char* to std::string::const_iterator conversion
+		parse_tag(std::string(c), allow_extra, sink);
+#endif
 	}
 
 	/**
@@ -174,7 +178,11 @@ public:
 	 * version.
 	 */
 	std::vector<Tag> parse_tag(const char* c, bool allow_extra) const {
+#ifndef _MSC_VER
 		return parse_tag(std::make_pair(c, c + strlen(c)), allow_extra);
+#else // no const char* to std::string::const_iterator conversion
+		return parse_tag(std::string(c), allow_extra);
+#endif
 	}
 
 	/**
@@ -201,8 +209,12 @@ public:
 	 * version.
 	 */
 	Tag parse_simple_tag(const char* c, bool allow_extra) const {
+#ifndef _MSC_VER
 		return parse_simple_tag(std::make_pair(c, c + strlen(c)),
 				allow_extra);
+#else // no const char* to std::string::const_iterator conversion
+		return parse_simple_tag(std::string(c), allow_extra);	
+#endif
 	}
 
 	/**