diff --git a/core/src/main/java/org/apache/mrql/ClassImporter.java b/core/src/main/java/org/apache/mrql/ClassImporter.java
index 8efc1ae..7835af7 100644
--- a/core/src/main/java/org/apache/mrql/ClassImporter.java
+++ b/core/src/main/java/org/apache/mrql/ClassImporter.java
@@ -17,7 +17,7 @@
  */
 package org.apache.mrql;
 
-import java.lang.reflect.Method;
+import java.lang.reflect.*;
 import org.apache.mrql.gen.*;
 import java.util.*;
 
@@ -46,11 +46,19 @@
         return false;
     }
 
-    private static Tree getType ( Class<?> c ) {
+    private static Tree getType ( Class<?> c, Type[] genTypes ) {
         String cn = c.getCanonicalName();
         Class<?>[] inf = c.getInterfaces();
         if (cn.equals("org.apache.mrql.MRData"))
             return new VariableLeaf("any");
+        if (cn.equals("org.apache.mrql.MR_list")) {
+            Class ec = ((Class)((ParameterizedType)genTypes[0]).getActualTypeArguments()[0]);
+            return new Node("list",new Trees(getType(ec,new Type[0])));
+        }
+        if (cn.equals("org.apache.mrql.MR_bag")) {
+            Class ec = ((Class)((ParameterizedType)genTypes[0]).getActualTypeArguments()[0]);
+            return new Node("bag",new Trees(getType(ec,new Type[0])));
+        }
         if (cn.startsWith("org.apache.mrql.MR_"))
             return new VariableLeaf(cn.substring(19));
         if (cn.equals("org.apache.mrql.Bag"))
@@ -69,9 +77,10 @@
     private static Trees signature ( Method m ) {
         Class<?> co = m.getReturnType();
         Class<?>[] cs = m.getParameterTypes();
-        Trees as = new Trees(getType(co));
+        Type[] gs = m.getGenericParameterTypes();
+        Trees as = new Trees(getType(co,new Type[]{m.getGenericReturnType()}));
         for (int i = 0; i < cs.length; i++)
-            as = as.append(getType(cs[i]));
+            as = as.append(getType(cs[i],gs));
         return as;
     }
 
diff --git a/core/src/main/java/org/apache/mrql/SystemFunctions.java b/core/src/main/java/org/apache/mrql/SystemFunctions.java
index 62fdd50..126d854 100644
--- a/core/src/main/java/org/apache/mrql/SystemFunctions.java
+++ b/core/src/main/java/org/apache/mrql/SystemFunctions.java
@@ -21,6 +21,18 @@
 import java.lang.Math;
 
 
+final class MR_bag<T> extends Bag {
+    public MR_bag ( int size ) {
+        super(size);
+    }
+}
+
+final class MR_list<T> extends Bag {
+    public MR_list ( int size ) {
+        super(size);
+    }
+}
+
 /** System functions must be from MRData to MRData */
 final public class SystemFunctions {
 
@@ -194,6 +206,29 @@
     public static MR_bool contains ( MR_string x, MR_string y ) { return new MR_bool(x.get().contains(y.get())); }
     public static MR_int length ( MR_string x ) { return new MR_int(x.get().length()); }
     public static MR_string substring ( MR_string x, MR_int b, MR_int e ) { return new MR_string(x.get().substring(b.get(),e.get())); }
+    public static MR_string replace ( MR_string x, MR_string from, MR_string to ) { return new MR_string(x.get().replace(from.get(),to.get())); }
+    public static MR_string replaceAll ( MR_string x, MR_string from, MR_string to ) { return new MR_string(x.get().replaceAll(from.get(),to.get())); }
+    public static MR_string replaceFirst ( MR_string x, MR_string from, MR_string to ) { return new MR_string(x.get().replaceFirst(from.get(),to.get())); }
+    public static MR_bool startsWith ( MR_string x, MR_string y ) { return new MR_bool(x.get().startsWith(y.get())); }
+    public static MR_string toLowerCase ( MR_string x ) { return new MR_string(x.get().toLowerCase()); }
+    public static MR_string toUpperCase ( MR_string x ) { return new MR_string(x.get().toUpperCase()); }
+    public static MR_string trim ( MR_string x ) { return new MR_string(x.get().trim()); }
+
+    public static MR_list<MR_string> split ( MR_string x, MR_string reg ) {
+        final String[] vs = x.get().split(reg.get());
+        MR_list<MR_string> l = new MR_list<MR_string>(vs.length);
+        for (String v: vs)
+            l.add(new MR_string(v));
+        return l;
+    };
+
+    public static MR_list<MR_string> split ( MR_string x, MR_string reg, MR_int n ) {
+        final String[] vs = x.get().split(reg.get(),n.get());
+        MR_list<MR_string> l = new MR_list<MR_string>(vs.length);
+        for (String v: vs)
+            l.add(new MR_string(v));
+        return l;
+    }
 
     public static MR_bool exists ( Bag s ) {
         return (s.iterator().hasNext()) ? true_value : false_value;
