--- a/src/rcldb/rcldb.cpp
+++ b/src/rcldb/rcldb.cpp
@@ -1607,11 +1607,11 @@
 vector<string> Db::getStemLangs()
 {
     LOGDEB(("Db::getStemLang\n"));
-    vector<string> dirs;
+    vector<string> langs;
     if (m_ndb == 0 || m_ndb->m_isopen == false)
-	return dirs;
-    dirs = StemDb::getLangs(m_basedir);
-    return dirs;
+	return langs;
+    langs = StemDb::getLangs(m_ndb->xrdb);
+    return langs;
 }
 
 /**
@@ -1620,9 +1620,9 @@
 bool Db::deleteStemDb(const string& lang)
 {
     LOGDEB(("Db::deleteStemDb(%s)\n", lang.c_str()));
-    if (m_ndb == 0 || m_ndb->m_isopen == false)
-	return false;
-    return StemDb::deleteDb(m_basedir, lang);
+    if (m_ndb == 0 || m_ndb->m_isopen == false || !m_ndb->m_iswritable)
+	return false;
+    return StemDb::deleteDb(m_ndb->xwdb, lang);
 }
 
 /**
@@ -1634,10 +1634,12 @@
 bool Db::createStemDb(const string& lang)
 {
     LOGDEB(("Db::createStemDb(%s)\n", lang.c_str()));
-    if (m_ndb == 0 || m_ndb->m_isopen == false)
-	return false;
-
-    return StemDb::createDb(m_ndb->xdb(), m_basedir, lang);
+    if (m_ndb == 0 || m_ndb->m_isopen == false || !m_ndb->m_iswritable) {
+	LOGERR(("createStemDb: db not open or not writable\n"));
+	return false;
+    }
+
+    return StemDb::createDb(m_ndb->xwdb, lang);
 }
 
 /**
@@ -1842,21 +1844,15 @@
     }
 };
 
-bool Db::stemExpand(const string &lang, const string &term, 
+bool Db::stemExpand(const string &langs, const string &term, 
 		    TermMatchResult& result, int max)
 {
-    vector<string> dirs(1, m_basedir);
-    dirs.insert(dirs.end(), m_extraDbs.begin(), m_extraDbs.end());
-    for (vector<string>::iterator it = dirs.begin(); it != dirs.end(); it++) {
-	vector<string> more;
-	StemDb::stemExpand(*it, lang, term, more);
-	LOGDEB1(("Db::stemExpand: Got %d from %s\n", 
-		 more.size(), it->c_str()));
-	result.entries.insert(result.entries.end(), more.begin(), more.end());
-	if (result.entries.size() >= (unsigned int)max)
-	    break;
-    }
-    LOGDEB1(("Db:::stemExpand: final count %d \n", result.size()));
+    if (m_ndb == 0 || m_ndb->m_isopen == false)
+	return false;
+    vector<string> exp;
+    if (!StemDb::stemExpand(m_ndb->xrdb, langs, term, exp))
+	return false;
+    result.entries.insert(result.entries.end(), exp.begin(), exp.end());
     return true;
 }