diff --git a/libcorpus2/tagsetparser.cpp b/libcorpus2/tagsetparser.cpp
index c75f6c0e2144f85e1d32bdd0ecf789ada7e00af3..6e71a6169cb293dbbef7816100c55107a10e1ee7 100644
--- a/libcorpus2/tagsetparser.cpp
+++ b/libcorpus2/tagsetparser.cpp
@@ -83,20 +83,25 @@ Tagset TagsetParser::load_ini(std::istream &is)
 
 	mask_t current_value = 1;
 	std::vector<std::string> vec;
+	idx_t current_attribute_index = 0;
 	foreach (const vmap_t::value_type v, vmap) {
+		mask_t attribute_mask = 0;
 		vec.push_back(v.first);
 		tagset.attribute_values_.resize(
 				tagset.attribute_values_.size() + 1);
 		foreach (const std::string& s, v.second) {
 			tagset.attribute_values_.back().push_back(current_value);
 			tagset.value_mask_to_attribute_index_.insert(
-					std::make_pair(current_value, vec.size() - 1));
+					std::make_pair(current_value, current_attribute_index));
 			tagset.string_to_value_mask_.insert(
 					std::make_pair(s, current_value));
 			tagset.value_mask_to_string_.insert(
 					std::make_pair(current_value, s));
+			attribute_mask |= current_value;
 			current_value <<= 1;
 		}
+		tagset.attribute_masks_.push_back(attribute_mask);
+		++current_attribute_index;
 	}
 	tagset.attribute_dict_.load_sorted_data(vec);