diff --git a/libwccl/lexicon/lexfilegrammar.g b/libwccl/lexicon/lexfilegrammar.g
index 19640c6667a661b29189388001097d2983f2fce4..ce3664818000e66f3eff7c68d0cb0d9cf31ecb56 100644
--- a/libwccl/lexicon/lexfilegrammar.g
+++ b/libwccl/lexicon/lexfilegrammar.g
@@ -53,10 +53,10 @@ private:
 ///////////////////////////////////////////////////////////////////////////////
 
 parse_lexicon_file
-	[const std::string& name]
+	[const std::string& name, const std::string& file_name]
 	returns [boost::shared_ptr<Lexicon> lex]
 {
-	lex.reset(new Lexicon(name));
+	lex.reset(new Lexicon(name, file_name));
 }
 	: (lexicon_entry [*lex])*
 	  EOF
diff --git a/libwccl/lexicon/lexicon.h b/libwccl/lexicon/lexicon.h
index c02f6284805c7901c2baa10cc4d5b5954e785d22..d691f4b3bf225271443f677c094c140a058dce14 100644
--- a/libwccl/lexicon/lexicon.h
+++ b/libwccl/lexicon/lexicon.h
@@ -14,8 +14,9 @@ class Lexicon : boost::noncopyable
 public: 
 	typedef boost::unordered_map<UnicodeString, UnicodeString> map_t;
 
-	Lexicon(const std::string& name)
-		: name_(name)
+	Lexicon(const std::string& name, const std::string& file_name)
+		: name_(name),
+		  file_name_(file_name_)
 	{
 		BOOST_ASSERT(!name_.empty());
 	}
@@ -40,6 +41,10 @@ public:
 		return name_;
 	}
 
+	std::string file_name() const {
+		return file_name_;
+	}
+
 	bool has_key(const UnicodeString& key) const {
 		return map_.find(key) != map_.end();
 	}
@@ -55,6 +60,7 @@ public:
 private:
 	map_t map_;
 	const std::string name_;
+	const std::string file_name_;
 };
 
 } /* end ns Wccl */
diff --git a/libwccl/lexicon/lexiconparser.cpp b/libwccl/lexicon/lexiconparser.cpp
index acb54cc41e804bc9e1afffaca47b02ebfa2a492a..578d322bf3bb69ea16c309bc652d3412306903d1 100644
--- a/libwccl/lexicon/lexiconparser.cpp
+++ b/libwccl/lexicon/lexiconparser.cpp
@@ -22,7 +22,7 @@ boost::shared_ptr<Lexicon> LexiconParser::parse_lexicon(
 
 	ANTLRLexiconLexer lexer(is);
 	ANTLRLexiconParser parser(lexer);
-	return parser.parse_lexicon_file(lexicon_name);
+	return parser.parse_lexicon_file(lexicon_name, filename);
 }
 
 } /* end ns Wccl */
diff --git a/libwccl/lexicon/lexicons.h b/libwccl/lexicon/lexicons.h
index 1fd0c5ff01b2975458de1a2ee69a4fcac4818dbf..96f4fa1b2d0f4499558df39a4750d87950698ea9 100644
--- a/libwccl/lexicon/lexicons.h
+++ b/libwccl/lexicon/lexicons.h
@@ -26,6 +26,10 @@ public:
 
 	void insert(const boost::shared_ptr<Lexicon>& lexicon);
 
+	const map_t& get_lexicons() const {
+		return lexicons_;
+	}
+
 private:
 	map_t lexicons_;
 };