Index: TXM/trunk/org.txm.index.core/src/org/txm/index/core/functions/Index.java
===================================================================
--- TXM/trunk/org.txm.index.core/src/org/txm/index/core/functions/Index.java	(revision 3371)
+++ TXM/trunk/org.txm.index.core/src/org/txm/index/core/functions/Index.java	(revision 3372)
@@ -58,6 +58,7 @@
 import org.txm.searchengine.cqp.corpus.CorpusManager;
 import org.txm.searchengine.cqp.corpus.Property;
 import org.txm.searchengine.cqp.corpus.StructuralUnitProperty;
+import org.txm.searchengine.cqp.corpus.VirtualProperty;
 import org.txm.searchengine.cqp.corpus.WordProperty;
 import org.txm.searchengine.cqp.corpus.query.CQLQuery;
 import org.txm.searchengine.cqp.serverException.CqiServerError;
@@ -252,8 +253,10 @@
 			query += "["; //$NON-NLS-1$
 			for (int p = 0; p < nbProps; p++) {
 				
+				String test = null;
+				
 				if (props.get(p) instanceof StructuralUnitProperty) {
-					query += "_." + ((StructuralUnitProperty) props.get(p)).getFullName() + "=\""; //$NON-NLS-1$ //$NON-NLS-2$
+					test = "_." + ((StructuralUnitProperty) props.get(p)).getFullName() + "=\""; //$NON-NLS-1$ //$NON-NLS-2$
 					
 					for (int l = 0; l < nbLines; l++) {
 						line = lines.get(l);
@@ -262,10 +265,19 @@
 						s = CQLQuery.addBackSlash(s);
 						query += s + "|"; //$NON-NLS-1$
 					}
-					query = query.substring(0, query.length() - 1);
+					test = test.substring(0, query.length() - 1);
 					
-					query += "\""; //$NON-NLS-1$
+					test += "\""; //$NON-NLS-1$
+				}
+				else if (props.get(p) instanceof VirtualProperty) {
+					ArrayList<String> values = new ArrayList<>();
+					for (int l = 0; l < nbLines; l++) {
+						line = lines.get(l);
+						String s = line.getUnitsProperties().get(p).get(t);
+						values.add(s);
+					}
 					
+					test = ((VirtualProperty) props.get(p)).getCQLTest(values);
 				}
 				else if (props.get(p) instanceof WordProperty) {
 					ArrayList<String> values = new ArrayList<>();
@@ -275,15 +287,15 @@
 						values.add(s);
 					}
 					
-					String test = ((WordProperty) props.get(p)).getCQLTest(values);
-					if (test != null) {
-						query += test;
-					}
-				}
+					test = ((WordProperty) props.get(p)).getCQLTest(values);
+				} 
 				
-				if (p < nbProps - 1) {
+				if (test != null && p > 0) {
 					query += " & "; //$NON-NLS-1$
 				}
+				if (test != null) {
+					query += test;
+				}
 			}
 			
 			query += "] "; //$NON-NLS-1$
Index: TXM/trunk/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/WordProperty.java
===================================================================
--- TXM/trunk/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/WordProperty.java	(revision 3371)
+++ TXM/trunk/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/WordProperty.java	(revision 3372)
@@ -3,8 +3,6 @@
 import java.io.IOException;
 import java.util.List;
 
-import org.apache.commons.lang.math.IntRange;
-import org.txm.objects.Match;
 import org.txm.searchengine.cqp.clientExceptions.UnexpectedAnswerException;
 import org.txm.searchengine.cqp.corpus.query.CQLQuery;
 import org.txm.searchengine.cqp.corpus.query.MatchUtils;
@@ -88,11 +86,23 @@
 		return CorpusManager.getCorpusManager().getCqiClient().str2Id(this.getQualifiedName(), new String[] { value })[0];
 	}
 	
+	/**
+	 * 
+	 * @param value
+	 * @return the CQL inner word test in [] for a value
+	 */
 	public String getCQLTest(String value) {
+		
 		return this.getName() + "=\"" + CQLQuery.addBackSlash(value) + "\"";
 	}
 	
+	/**
+	 * 
+	 * @param value
+	 * @return the CQL inner word test in [] for several values
+	 */
 	public String getCQLTest(List<String> values) {
+		
 		StringBuilder sb = new StringBuilder();
 		sb.append(this.getName() + "=\""); //$NON-NLS-1$
 		for (int i = 0; i < values.size(); i++) {
@@ -107,13 +117,31 @@
 		return sb.toString();
 	}
 	
+	/**
+	 * 
+	 * @return all indexed values in the main corpus 
+	 * 
+	 * @throws UnexpectedAnswerException
+	 * @throws IOException
+	 * @throws CqiServerError
+	 */
 	public String[] getValues() throws UnexpectedAnswerException, IOException, CqiServerError {
+		
 		int n = CorpusManager.getCorpusManager().getCqiClient().lexiconSize(this.getQualifiedName());
 		int[] ids = MatchUtils.toPositions(0, n - 1);
 		return CorpusManager.getCorpusManager().getCqiClient().id2Str(this.getQualifiedName(), ids);
 	}
 	
+	/**
+	 * 
+	 * @return the number of indexed values in the main corpus 
+	 * 
+	 * @throws UnexpectedAnswerException
+	 * @throws IOException
+	 * @throws CqiServerError
+	 */
 	public int getNValues() throws UnexpectedAnswerException, IOException, CqiServerError {
+		
 		return CorpusManager.getCorpusManager().getCqiClient().lexiconSize(this.getQualifiedName());
 	};
 }
Index: TXM/trunk/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/VirtualProperty.java
===================================================================
--- TXM/trunk/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/VirtualProperty.java	(revision 3371)
+++ TXM/trunk/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/VirtualProperty.java	(revision 3372)
@@ -48,5 +48,16 @@
 	public static String fullnameToName(String fullname) {
 		return fullname.substring(1, fullname.length() - 1);
 	}
+	
+	@Override
+	public String getCQLTest(String value) {
+		return null;
+	}
+	
+	@Override
+	public String getCQLTest(List<String> values) {
+		return null;
+	}
+	
 }
 
