diff --git a/decoder.go b/decoder.go
index <HASH>..<HASH> 100644
--- a/decoder.go
+++ b/decoder.go
@@ -5,6 +5,8 @@
 package schema
 
 import (
+	"bytes"
+	"encoding/csv"
 	"errors"
 	"fmt"
 	"reflect"
@@ -156,9 +158,30 @@ func (d *Decoder) decode(v reflect.Value, path string, parts []pathPart,
 				}
 				items = append(items, item)
 			} else {
-				// If a single value is invalid should we give up
-				// or set a zero value?
-				return ConversionError{path, key}
+				//Try CSV
+				reader := csv.NewReader(bytes.NewBufferString(value))
+				values, err := reader.Read() //Reads one record/line
+				if err != nil {              //Not CSV
+					// If a single value is invalid should we give up
+					// or set a zero value?
+					return ConversionError{path, key}
+				}
+				for _, value := range values {
+					if value == "" {
+						if d.zeroEmpty {
+							items = append(items, reflect.Zero(elemT))
+						}
+					} else if item := conv(value); item.IsValid() {
+						if isPtrElem {
+							ptr := reflect.New(elemT)
+							ptr.Elem().Set(item)
+							item = ptr
+						}
+						items = append(items, item)
+					} else {
+						return ConversionError{path, key}
+					}
+				}
 			}
 		}
 		value := reflect.Append(reflect.MakeSlice(t, 0, 0), items...)
Add last resort CSV decoder for slice types

This should work for most array types.  The only issue
I can think of off hand is the []string type.  Do we want to
break &foo=a,b,c&foo=d into ["a","b","c","d"] or ["a,b,c", "d"]?
For now that is the second option which should not break any
backwards compatability