--- a/src/utils/smallut.h
+++ b/src/utils/smallut.h
@@ -47,8 +47,10 @@
 
 extern int stringlowercmp(const string& alreadylower, const string& s2);
 extern int stringuppercmp(const string& alreadyupper, const string& s2); 
+
 extern void stringtolower(string& io);
 extern string stringtolower(const string& io);
+
 // Is one string the end part of the other ?
 extern int stringisuffcmp(const string& s1, const string& s2);
 
@@ -69,8 +71,8 @@
 struct DateInterval {
     int y1;int m1;int d1; int y2;int m2;int d2;
 };
-bool parsedateinterval(const string&s, DateInterval *di);
-int monthdays(int mon, int year);
+extern bool parsedateinterval(const string&s, DateInterval *di);
+extern int monthdays(int mon, int year);
 
 /**
  * Parse input string into list of strings. 
@@ -82,19 +84,13 @@
  * but so are the iso-8859-x and surely others. addseps do have to be 
  * single-bytes
  */
-extern bool stringToStrings(const string& s, list<string> &tokens, 
-                            const string& addseps = "");
-extern bool stringToStrings(const string& s, vector<string> &tokens, 
-                            const string& addseps = "");
-extern bool stringToStrings(const string& s, set<string> &tokens, 
-                            const string& addseps = "");
+template <class T> bool stringToStrings(const string& s, T &tokens, 
+					const string& addseps = "");
 
 /**
  * Inverse operation:
  */
-extern void stringsToString(const list<string> &tokens, string &s);
-extern void stringsToString(const vector<string> &tokens, string &s);
-extern void stringsToString(const set<string> &tokens, string &s);
+template <class T> void stringsToString(const T &tokens, string &s);
 
 /**
  * Split input string. No handling of quoting