+Buffer::References & Buffer::references(docstring const & label)
+{
+ if (d->parent_buffer)
+ return const_cast<Buffer *>(masterBuffer())->references(label);
+
+ RefCache::iterator it = d->ref_cache_.find(label);
+ if (it != d->ref_cache_.end())
+ return it->second.second;
+
+ static InsetLabel const * dummy_il = 0;
+ static References const dummy_refs;
+ it = d->ref_cache_.insert(make_pair(label, make_pair(dummy_il, dummy_refs))).first;
+ return it->second.second;
+}
+
+
+Buffer::References const & Buffer::references(docstring const & label) const
+{
+ return const_cast<Buffer *>(this)->references(label);
+}
+
+
+void Buffer::setInsetLabel(docstring const & label, InsetLabel const * il)
+{
+ masterBuffer()->d->ref_cache_[label].first = il;
+}
+
+
+InsetLabel const * Buffer::insetLabel(docstring const & label) const
+{
+ return masterBuffer()->d->ref_cache_[label].first;
+}
+
+
+void Buffer::clearReferenceCache() const
+{
+ if (!d->parent_buffer)
+ d->ref_cache_.clear();
+}
+
+