diff --git a/CHANGES.txt b/CHANGES.txt
index 9f11058..8762362 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -119,6 +119,8 @@
   OPTIMIZATIONS
 
   BUG FIXES
+  HCAT-270  HCatRecord SerDe does not handle List<Map> or List<List> or List<lazy primitive> correctly (khorgath via gates)
+
   HCAT-232. Dynamic Partitioning broken: keys set to HIVE_DEFAULT_PARTITION (mithun via gates)
 
   HCAT-229. bin/hcat should put hcatalog.jar into classpath (daiky via gates)
diff --git a/src/java/org/apache/hcatalog/data/HCatRecordSerDe.java b/src/java/org/apache/hcatalog/data/HCatRecordSerDe.java
index e2717de..f88afc1 100644
--- a/src/java/org/apache/hcatalog/data/HCatRecordSerDe.java
+++ b/src/java/org/apache/hcatalog/data/HCatRecordSerDe.java
@@ -225,7 +225,11 @@
     List l = loi.getList(f);
     ObjectInspector eloi = loi.getListElementObjectInspector();
     if (eloi.getCategory() == Category.PRIMITIVE){
-      return l;
+      List<Object> list = new ArrayList<Object>(l.size());
+      for(int i = 0; i < l.size(); i++){
+        list.add(((PrimitiveObjectInspector)eloi).getPrimitiveJavaObject(l.get(i)));
+      }
+      return list;
     } else if (eloi.getCategory() == Category.STRUCT){
       List<List<?>> list = new ArrayList<List<?>>(l.size());
       for (int i = 0 ; i < l.size() ; i++ ){
@@ -237,18 +241,18 @@
       for (int i = 0 ; i < l.size() ; i++ ){
         list.add(serializeList(l.get(i), (ListObjectInspector) eloi));
       }
+      return list;
     } else if (eloi.getCategory() == Category.MAP){
       List<Map<?,?>> list = new ArrayList<Map<?,?>>(l.size());
       for (int i = 0 ; i < l.size() ; i++ ){
         list.add(serializeMap(l.get(i), (MapObjectInspector) eloi));
       }
-      throw new SerDeException("HCatSerDe map type unimplemented");
+      return list;
     } else {
       throw new SerDeException(getClass().toString() 
           + " does not know what to do with fields of unknown category: "
           + eloi.getCategory() + " , type: " + eloi.getTypeName());
     }
-    return l;
   }
 
   /**
diff --git a/src/test/org/apache/hcatalog/data/TestHCatRecordSerDe.java b/src/test/org/apache/hcatalog/data/TestHCatRecordSerDe.java
index 9ad5864..9f88202 100644
--- a/src/test/org/apache/hcatalog/data/TestHCatRecordSerDe.java
+++ b/src/test/org/apache/hcatalog/data/TestHCatRecordSerDe.java
@@ -81,14 +81,26 @@
       c1_1.add(i2);
       c1.add(c1_1);
     rlist.add(c1);
+    List<Object> am = new ArrayList<Object>();
+      Map<String,String> am_1 = new HashMap<String,String>();
+        am_1.put("noo","haha");
+      am.add(am_1);
+    rlist.add(am);
+    List<Object> aa = new ArrayList<Object>();
+      List<String> aa_1 = new ArrayList<String>();
+        aa_1.add("bloo");
+        aa_1.add("bwahaha");
+      aa.add(aa_1);
+    rlist.add(aa);
 
     String typeString = 
         "tinyint,smallint,int,bigint,double,float,string,string,"
         + "struct<a:string,b:string>,array<int>,map<smallint,string>,boolean,"
-        + "array<struct<i1:int,i2:struct<ii1:array<int>,ii2:map<string,struct<iii1:int>>>>>";
+        + "array<struct<i1:int,i2:struct<ii1:array<int>,ii2:map<string,struct<iii1:int>>>>>,"
+        + "array<map<string,string>>,array<array<string>>";
     Properties props = new Properties();
     
-    props.put(Constants.LIST_COLUMNS, "ti,si,i,bi,d,f,s,n,r,l,m,b,c1");
+    props.put(Constants.LIST_COLUMNS, "ti,si,i,bi,d,f,s,n,r,l,m,b,c1,am,aa");
     props.put(Constants.LIST_COLUMN_TYPES, typeString);
 
     data.put(props, new DefaultHCatRecord(rlist));
