Index: o/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/pojo/FacetSelection.java
===================================================================
--- /vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/pojo/FacetSelection.java	(revision 4518)
+++ 	(revision )
@@ -1,45 +1,0 @@
-/*
- * Copyright (C) 2014 CLARIN
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package eu.clarin.cmdi.vlo.pojo;
-
-import java.io.Serializable;
-import java.util.Collection;
-
-/**
- *
- * @author twagoo
- */
-public class FacetSelection implements Serializable {
-
-    private final String facetName;
-
-    private final Collection<String> values;
-
-    public FacetSelection(String facet, Collection<String> values) {
-        this.facetName = facet;
-        this.values = values;
-    }
-
-    public String getFacetName() {
-        return facetName;
-    }
-
-    public Collection<String> getValue() {
-        return values;
-    }
-
-}
Index: /vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/pojo/QueryFacetsSelection.java
===================================================================
--- /vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/pojo/QueryFacetsSelection.java	(revision 4518)
+++ /vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/pojo/QueryFacetsSelection.java	(revision 4519)
@@ -18,5 +18,7 @@
 
 import java.io.Serializable;
-import java.util.List;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
 
 /**
@@ -27,19 +29,62 @@
 
     private final String queryString;
-    private final List<FacetSelection> selection;
+    private final Map<String, Collection<String>> selection;
 
-    public QueryFacetsSelection(List<FacetSelection> selection) {
+    /**
+     * creates an empty selection (no string, no facet values)
+     */
+    public QueryFacetsSelection() {
+        this(null, Collections.<String, Collection<String>>emptyMap());
+    }
+
+    /**
+     * creates a selection without a query
+     *
+     * @param selection facet values selection map
+     */
+    public QueryFacetsSelection(Map<String, Collection<String>> selection) {
         this(null, selection);
     }
-    
-    public QueryFacetsSelection(String query, List<FacetSelection> selection) {
+
+    /**
+     * creates a selection with a textual query and facet value selection
+     *
+     * @param query textual query
+     * @param selection facet values selection map
+     */
+    public QueryFacetsSelection(String query, Map<String, Collection<String>> selection) {
         this.queryString = query;
         this.selection = selection;
     }
 
-    public List<FacetSelection> getSelection() {
+    /**
+     *
+     * @return a facet -> values map representing the current selection
+     */
+    public Map<String, Collection<String>> getSelection() {
         return selection;
     }
 
+    /**
+     *
+     * @return the facets present in the current selection
+     */
+    public Collection<String> getFacets() {
+        return selection.keySet();
+    }
+
+    /**
+     *
+     * @param facet facet to get values for
+     * @return the selected values for the specified facet
+     */
+    public Collection<String> getSelectionValues(String facet) {
+        return selection.get(facet);
+    }
+
+    /**
+     *
+     * @return the current textual query, may be null in case of no query
+     */
     public String getQuery() {
         return queryString;
Index: /vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/FacetFieldsService.java
===================================================================
--- /vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/FacetFieldsService.java	(revision 4518)
+++ /vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/FacetFieldsService.java	(revision 4519)
@@ -18,5 +18,5 @@
 package eu.clarin.cmdi.vlo.service;
 
-import eu.clarin.cmdi.vlo.pojo.FacetSelection;
+import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
 import java.util.List;
 import org.apache.solr.client.solrj.response.FacetField;
@@ -28,5 +28,5 @@
 public interface FacetFieldsService {
     
-    List<FacetField> getFacetFields(List<FacetSelection> selection, String query);
+    List<FacetField> getFacetFields(QueryFacetsSelection selection);
     
     long getFacetFieldCount();
Index: /vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/SolrQueryFactory.java
===================================================================
--- /vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/SolrQueryFactory.java	(revision 4518)
+++ /vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/SolrQueryFactory.java	(revision 4519)
@@ -17,6 +17,5 @@
 package eu.clarin.cmdi.vlo.service;
 
-import eu.clarin.cmdi.vlo.pojo.FacetSelection;
-import java.util.List;
+import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
 import org.apache.solr.client.solrj.SolrQuery;
 
@@ -27,5 +26,5 @@
 public interface SolrQueryFactory {
 
-    SolrQuery createFacetQuery(List<FacetSelection> selection, String query);
+    SolrQuery createFacetQuery(QueryFacetsSelection selection);
     
     SolrQuery createCountFacetsQuery();
Index: /vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/impl/FacetFieldsDataProvider.java
===================================================================
--- /vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/impl/FacetFieldsDataProvider.java	(revision 4518)
+++ /vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/impl/FacetFieldsDataProvider.java	(revision 4519)
@@ -17,5 +17,4 @@
 package eu.clarin.cmdi.vlo.service.impl;
 
-import eu.clarin.cmdi.vlo.pojo.FacetSelection;
 import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
 import eu.clarin.cmdi.vlo.service.FacetFieldsService;
@@ -26,5 +25,4 @@
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
-import org.apache.wicket.model.PropertyModel;
 
 /**
@@ -35,22 +33,14 @@
 
     private final FacetFieldsService facetFieldService;
-    private final IModel<List<FacetSelection>> selectionModel;
-    private final IModel<String> searchQuery;
+    private final IModel<QueryFacetsSelection> selectionModel;
 
-    public FacetFieldsDataProvider(FacetFieldsService facetFieldService, IModel<QueryFacetsSelection> model) {
-        this(facetFieldService,
-                new PropertyModel<List<FacetSelection>>(model, "selection"),
-                new PropertyModel<String>(model, "query"));
-    }
-
-    public FacetFieldsDataProvider(FacetFieldsService facetFieldService, IModel<List<FacetSelection>> selectionModel, IModel<String> searchQuery) {
+    public FacetFieldsDataProvider(FacetFieldsService facetFieldService, IModel<QueryFacetsSelection> selectionModel) {
         this.facetFieldService = facetFieldService;
         this.selectionModel = selectionModel;
-        this.searchQuery = searchQuery;
     }
 
     @Override
     public Iterator<? extends FacetField> iterator(long first, long count) {
-        List<FacetField> facets = facetFieldService.getFacetFields(selectionModel.getObject(), searchQuery.getObject());
+        List<FacetField> facets = facetFieldService.getFacetFields(selectionModel.getObject());
         return facets.listIterator((int) first);
     }
Index: /vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/impl/SolrFacetFieldsService.java
===================================================================
--- /vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/impl/SolrFacetFieldsService.java	(revision 4518)
+++ /vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/impl/SolrFacetFieldsService.java	(revision 4519)
@@ -17,5 +17,5 @@
 package eu.clarin.cmdi.vlo.service.impl;
 
-import eu.clarin.cmdi.vlo.pojo.FacetSelection;
+import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
 import eu.clarin.cmdi.vlo.service.FacetFieldsService;
 import eu.clarin.cmdi.vlo.service.SearchResultsDao;
@@ -39,6 +39,6 @@
 
     @Override
-    public List<FacetField> getFacetFields(List<FacetSelection> selection, String query) {
-        return searchResultsDao.getFacets(queryFatory.createFacetQuery(selection, query));
+    public List<FacetField> getFacetFields(QueryFacetsSelection selection) {
+        return searchResultsDao.getFacets(queryFatory.createFacetQuery(selection));
     }
 
Index: /vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/impl/SolrQueryFactoryImpl.java
===================================================================
--- /vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/impl/SolrQueryFactoryImpl.java	(revision 4518)
+++ /vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/impl/SolrQueryFactoryImpl.java	(revision 4519)
@@ -20,8 +20,9 @@
 import eu.clarin.cmdi.vlo.config.VloConfig;
 import eu.clarin.cmdi.vlo.service.SolrQueryFactory;
-import eu.clarin.cmdi.vlo.pojo.FacetSelection;
+import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 import org.apache.solr.client.solrj.SolrQuery;
 import org.apache.solr.client.solrj.util.ClientUtils;
@@ -46,6 +47,7 @@
 
     @Override
-    public SolrQuery createFacetQuery(List<FacetSelection> selections, String queryString) {
-        SolrQuery query = getDefaultFacetQuery();
+    public SolrQuery createFacetQuery(QueryFacetsSelection queryFacetsSelections) {
+        final SolrQuery query = getDefaultFacetQuery();
+        final String queryString = queryFacetsSelections.getQuery();
 
         if (queryString == null) {
@@ -55,17 +57,17 @@
         }
 
-        if (selections != null) {
-            final List<String> encodedQueries = new ArrayList(selections.size());
-            for (FacetSelection selection : selections) {
-                final String facetName = selection.getFacetName();
-                final Collection<String> values = selection.getValue();
-                if (values != null) {
-                    for (String value : values) {
-                        encodedQueries.add(String.format("%s:%s", facetName, ClientUtils.escapeQueryChars(value)));
-                    }
+        Map<String, Collection<String>> selections = queryFacetsSelections.getSelection();
+
+        final List<String> encodedQueries = new ArrayList(selections.size()); // assuming every facet has one selection, most common scenario
+        for (Map.Entry<String, Collection<String>> selection : selections.entrySet()) {
+            final String facetName = selection.getKey();
+            final Collection<String> values = selection.getValue();
+            if (values != null) {
+                for (String value : values) {
+                    encodedQueries.add(String.format("%s:%s", facetName, ClientUtils.escapeQueryChars(value)));
                 }
             }
-            query.setFilterQueries(encodedQueries.toArray(new String[encodedQueries.size()]));
         }
+        query.setFilterQueries(encodedQueries.toArray(new String[encodedQueries.size()]));
         return query;
     }
Index: o/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/model/FacetSelectionModel.java
===================================================================
--- /vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/model/FacetSelectionModel.java	(revision 4518)
+++ 	(revision )
@@ -1,33 +1,0 @@
-/*
- * Copyright (C) 2014 CLARIN
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-package eu.clarin.cmdi.vlo.wicket.model;
-
-import eu.clarin.cmdi.vlo.pojo.FacetSelection;
-import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
-import org.apache.wicket.model.util.ListModel;
-
-/**
- *
- * @author twagoo
- */
-public class FacetSelectionModel extends ListModel<FacetSelection> {
-    
-    public FacetSelectionModel(QueryFacetsSelection queryFacetSelection){
-        super(queryFacetSelection.getSelection());
-    }
-}
Index: /vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/pages/FacetedSearchPage.java
===================================================================
--- /vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/pages/FacetedSearchPage.java	(revision 4518)
+++ /vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/pages/FacetedSearchPage.java	(revision 4519)
@@ -2,7 +2,6 @@
 
 import eu.clarin.cmdi.vlo.wicket.components.FacetsPanel;
-import eu.clarin.cmdi.vlo.pojo.FacetSelection;
 import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
-import java.util.Arrays;
+import java.util.Collection;
 import java.util.Collections;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
@@ -17,7 +16,6 @@
         super(parameters);
 
-        final FacetSelection languageSelection = new FacetSelection("language", Collections.singleton("Dutch"));
-
-        final QueryFacetsSelection selection = new QueryFacetsSelection(Arrays.asList(languageSelection));
+        final QueryFacetsSelection selection = new QueryFacetsSelection(
+                Collections.<String, Collection<String>>singletonMap("language", Collections.singleton("Dutch")));
 
         add(new FacetsPanel("facets", new Model<QueryFacetsSelection>(selection)));
Index: /vlo/branches/vlo-3.0/vlo-web-app/src/test/java/eu/clarin/cmdi/vlo/service/impl/SolrQueryFactoryImplTest.java
===================================================================
--- /vlo/branches/vlo-3.0/vlo-web-app/src/test/java/eu/clarin/cmdi/vlo/service/impl/SolrQueryFactoryImplTest.java	(revision 4518)
+++ /vlo/branches/vlo-3.0/vlo-web-app/src/test/java/eu/clarin/cmdi/vlo/service/impl/SolrQueryFactoryImplTest.java	(revision 4519)
@@ -18,8 +18,11 @@
 
 import eu.clarin.cmdi.vlo.config.VloConfig;
-import eu.clarin.cmdi.vlo.pojo.FacetSelection;
+import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import org.apache.solr.client.solrj.SolrQuery;
 import org.hamcrest.Matchers;
@@ -58,6 +61,7 @@
     @Test
     public void testCreateFacetQueryNoFacets() {
-        List<FacetSelection> selection = Collections.emptyList();
-        SolrQuery query = instance.createFacetQuery(selection, null);
+        // default constructor -> empty
+        QueryFacetsSelection selection = new QueryFacetsSelection();
+        SolrQuery query = instance.createFacetQuery(selection);
 
         // default: query selects all values 
@@ -74,12 +78,12 @@
     public void testCreateFacetQueryNoSelection() {
         // Facets are present but no values are selected
-        List<FacetSelection> selection = Arrays.asList(
-                new FacetSelection(
-                        "facet1",
-                        Collections.<String>emptyList()),
-                new FacetSelection(
-                        "facet2",
-                        Collections.<String>emptyList()));
-        SolrQuery query = instance.createFacetQuery(selection, null);
+        Map<String, Collection<String>> selection = new HashMap<String, Collection<String>>() {
+            {
+                put("facet1", Collections.<String>emptySet());
+                put("facet2", Collections.<String>emptyList());
+            }
+        };
+
+        SolrQuery query = instance.createFacetQuery(new QueryFacetsSelection(selection));
 
         // default: query selects all values 
@@ -96,15 +100,12 @@
     public void testCreateFacetQuerySelection() {
         // Some facets have one or more values selected
-        List<FacetSelection> selection = Arrays.asList(
-                new FacetSelection(
-                        "facet1",
-                        Arrays.asList("valueA")),
-                new FacetSelection(
-                        "facet2",
-                        Arrays.asList("valueB", "valueC")),
-                new FacetSelection(
-                        "facet3",
-                        Collections.<String>emptyList()));
-        SolrQuery query = instance.createFacetQuery(selection, null);
+        Map<String, Collection<String>> selection = new HashMap<String, Collection<String>>() {
+            {
+                put("facet1", Arrays.asList("valueA"));
+                put("facet2", Arrays.asList("valueB", "valueC"));
+                put("facet3", Collections.<String>emptyList());
+            }
+        };
+        SolrQuery query = instance.createFacetQuery(new QueryFacetsSelection(selection));
 
         // default: query selects all values 
@@ -124,9 +125,10 @@
     @Test
     public void testCreateFacetQuerySelectionAndQuery() {
-        List<FacetSelection> selection = Arrays.asList(
-                new FacetSelection(
-                        "facet1",
-                        Arrays.asList("valueA")));
-        SolrQuery query = instance.createFacetQuery(selection, "query string");
+        Map<String, Collection<String>> selection = new HashMap<String, Collection<String>>() {
+            {
+                put("facet1", Arrays.asList("valueA"));
+            }
+        };
+        SolrQuery query = instance.createFacetQuery(new QueryFacetsSelection("query string", selection));
 
         assertEquals(1, query.getFilterQueries().length);
Index: /vlo/branches/vlo-3.0/vlo-web-app/src/test/java/eu/clarin/cmdi/vlo/wicket/pages/TestFacetedSearchPage.java
===================================================================
--- /vlo/branches/vlo-3.0/vlo-web-app/src/test/java/eu/clarin/cmdi/vlo/wicket/pages/TestFacetedSearchPage.java	(revision 4518)
+++ /vlo/branches/vlo-3.0/vlo-web-app/src/test/java/eu/clarin/cmdi/vlo/wicket/pages/TestFacetedSearchPage.java	(revision 4519)
@@ -4,4 +4,5 @@
 import eu.clarin.cmdi.vlo.VloWicketApplication;
 import eu.clarin.cmdi.vlo.config.VloSpringConfig;
+import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
 import eu.clarin.cmdi.vlo.service.FacetFieldsService;
 import java.util.Arrays;
@@ -71,5 +72,5 @@
                 atLeast(1).of(facetFieldsService).getFacetFieldCount();
                 will(returnValue(2L));
-                oneOf(facetFieldsService).getFacetFields(with(any(List.class)), with(anyOf(aNull(String.class), any(String.class))));
+                oneOf(facetFieldsService).getFacetFields(with(any(QueryFacetsSelection.class)));
                 will(returnValue(Arrays.asList(new FacetField("language"), new FacetField("resource class"))));
             }
