Index: tapas/common/implementation/com/ether/JSONHelperImpl.java
===================================================================
--- tapas/common/implementation/com/ether/JSONHelperImpl.java	(revision 396)
+++ tapas/common/implementation/com/ether/JSONHelperImpl.java	(revision 399)
@@ -13,7 +13,9 @@
 import org.springframework.beans.factory.InitializingBean;
 
-import java.lang.reflect.TypeVariable;
+import java.util.AbstractCollection;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.List;
 import java.util.Map;
 
@@ -79,35 +81,49 @@
         {
             final JSONArray jsonArray = JSONArray.fromObject( json, _jsonConfig );
-            if( beanClass.isArray() )
+            final Class<? super T> superclass = beanClass.getSuperclass();
+            if( superclass.isAssignableFrom( AbstractCollection.class ) )
             {
-                final Class<?> componentType = beanClass.getComponentType();
-                //json.sf.net does not support Long[] or long[]
-                if( Long.class.equals( componentType ) || Long.TYPE.equals( componentType ) )
+                final Tapas tapas = new Tapas();
+                final List<Request> requests = new ArrayList<Request>();
+                for( final Object jsonElement : jsonArray )
                 {
-                    final Integer[] integers = (Integer[]) JSONArray.toArray( jsonArray, Integer.class );
-                    if( Long.class.equals( componentType ) )
-                    {
-                        final Long[] resultArray = new Long[integers.length];
-                        for( int i = 0; i < integers.length; ++i )
-                            resultArray[i] = integers[i].longValue();
-                        return (T) resultArray;
-                    }
-                    if( Long.TYPE.equals( componentType ) )
-                    {
-                        final long[] resultArray = new long[integers.length];
-                        for( int i = 0; i < integers.length; ++i )
-                            resultArray[i] = integers[i].longValue();
-                        return (T) resultArray;
-                    }
+                    final Request request = fromJSON( (JSON) jsonElement, Request.class );
+                    requests.add( request );
                 }
-                return (T) JSONArray.toArray( jsonArray, componentType );
+                tapas.setRequests( requests );
+                return (T) tapas;
             }
-            if( beanClass.isAssignableFrom( Collection.class ) )
-            {
-                final TypeVariable<Class<T>>[] typeParameters = beanClass.getTypeParameters();
-                if( null == typeParameters || typeParameters.length != 1 || null == typeParameters[0] )
-                    return (T) JSONArray.toCollection( jsonArray );
-                return (T) JSONArray.toCollection( jsonArray, typeParameters[0].getGenericDeclaration() );
-            }
+//
+//            if( beanClass.isArray() )
+//            {
+//                final Class<?> componentType = beanClass.getComponentType();
+//                //json.sf.net does not support Long[] or long[]
+//                if( Long.class.equals( componentType ) || Long.TYPE.equals( componentType ) )
+//                {
+//                    final Integer[] integers = (Integer[]) JSONArray.toArray( jsonArray, Integer.class );
+//                    if( Long.class.equals( componentType ) )
+//                    {
+//                        final Long[] resultArray = new Long[integers.length];
+//                        for( int i = 0; i < integers.length; ++i )
+//                            resultArray[i] = integers[i].longValue();
+//                        return (T) resultArray;
+//                    }
+//                    if( Long.TYPE.equals( componentType ) )
+//                    {
+//                        final long[] resultArray = new long[integers.length];
+//                        for( int i = 0; i < integers.length; ++i )
+//                            resultArray[i] = integers[i].longValue();
+//                        return (T) resultArray;
+//                    }
+//                }
+//                return (T) JSONArray.toArray( jsonArray, componentType );
+//            }
+//            if( beanClass.isAssignableFrom( Collection.class ) )
+//            {
+//                final TypeVariable<Class<T>>[] typeParameters = beanClass.getTypeParameters();
+//                if( null == typeParameters || typeParameters.length != 1 || null == typeParameters[0] )
+//                    return (T) JSONArray.toCollection( jsonArray );
+//                return (T) JSONArray.toCollection( jsonArray, typeParameters[0].getGenericDeclaration() );
+//            }
         }
         final JSONObject jsonObject = JSONObject.fromObject( json, _jsonConfig );
Index: tapas/common/implementation/com/ether/Observation.java
===================================================================
--- tapas/common/implementation/com/ether/Observation.java	(revision 399)
+++ tapas/common/implementation/com/ether/Observation.java	(revision 399)
@@ -0,0 +1,19 @@
+package com.ether;
+
+import java.util.Date;
+
+public class Observation
+{
+
+    public Date getDate()
+    {
+        return _date;
+    }
+
+    public void setDate( final Date date )
+    {
+        _date = date;
+    }
+
+    private Date _date;
+}
Index: tapas/common/implementation/com/ether/Preference.java
===================================================================
--- tapas/common/implementation/com/ether/Preference.java	(revision 399)
+++ tapas/common/implementation/com/ether/Preference.java	(revision 399)
@@ -0,0 +1,85 @@
+package com.ether;
+
+import org.jetbrains.annotations.NotNull;
+
+public class Preference
+{
+    @NotNull
+    public String getFormat()
+    {
+        return _format;
+    }
+
+    public void setFormat( @NotNull final String format )
+    {
+        _format = format;
+    }
+
+    @NotNull
+    public String getRayleighExtinction()
+    {
+        return _rayleighExtinction;
+    }
+
+    public void setRayleighExtinction( @NotNull final String rayleighExtinction )
+    {
+        _rayleighExtinction = rayleighExtinction;
+    }
+
+    @NotNull
+    public String getH2oExtinction()
+    {
+        return _h2oExtinction;
+    }
+
+    public void setH2oExtinction( @NotNull final String h2oExtinction )
+    {
+        _h2oExtinction = h2oExtinction;
+    }
+
+    @NotNull
+    public String getO3Extinction()
+    {
+        return _o3Extinction;
+    }
+
+    public void setO3Extinction( @NotNull final String o3Extinction )
+    {
+        _o3Extinction = o3Extinction;
+    }
+
+    @NotNull
+    public String getO2Extinction()
+    {
+        return _o2Extinction;
+    }
+
+    public void setO2Extinction( @NotNull final String o2Extinction )
+    {
+        _o2Extinction = o2Extinction;
+    }
+
+    @NotNull
+    public String getCo2Extinction()
+    {
+        return _co2Extinction;
+    }
+
+    public void setCo2Extinction( @NotNull final String co2Extinction )
+    {
+        _co2Extinction = co2Extinction;
+    }
+
+    @NotNull
+    private String _format;
+    @NotNull
+    private String _rayleighExtinction;
+    @NotNull
+    private String _h2oExtinction;
+    @NotNull
+    private String _o3Extinction;
+    @NotNull
+    private String _o2Extinction;
+    @NotNull
+    private String _co2Extinction;
+}
Index: tapas/common/implementation/com/ether/Request.java
===================================================================
--- tapas/common/implementation/com/ether/Request.java	(revision 399)
+++ tapas/common/implementation/com/ether/Request.java	(revision 399)
@@ -0,0 +1,46 @@
+package com.ether;
+
+import org.jetbrains.annotations.NotNull;
+
+public class Request
+{
+    @NotNull
+    public Preference getPreference()
+    {
+        return _preference;
+    }
+
+    public void setPreference( @NotNull final Preference preference )
+    {
+        _preference = preference;
+    }
+
+    @NotNull
+    public Observation getObservation()
+    {
+        return _observation;
+    }
+
+    public void setObservation( @NotNull final Observation observation )
+    {
+        _observation = observation;
+    }
+
+    @NotNull
+    public String getAtmosphere()
+    {
+        return _atmosphere;
+    }
+
+    public void setAtmosphere( @NotNull final String atmosphere )
+    {
+        _atmosphere = atmosphere;
+    }
+
+    @NotNull
+    private Preference _preference;
+    @NotNull
+    private Observation _observation;
+    @NotNull
+    private String _atmosphere;
+}
Index: tapas/common/implementation/com/ether/Tapas.java
===================================================================
--- tapas/common/implementation/com/ether/Tapas.java	(revision 399)
+++ tapas/common/implementation/com/ether/Tapas.java	(revision 399)
@@ -0,0 +1,22 @@
+package com.ether;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.List;
+
+public class Tapas
+{
+    @NotNull
+    public List<Request> getRequests()
+    {
+        return _requests;
+    }
+
+    public void setRequests( @NotNull final List<Request> requests )
+    {
+        _requests = requests;
+    }
+
+    @NotNull
+    private List<Request> _requests;
+}
