Index: modules/dnet-collector-plugins/trunk/src/main/java/eu/dnetlib/data/collector/plugins/rest/RestIterator.java
===================================================================
--- modules/dnet-collector-plugins/trunk/src/main/java/eu/dnetlib/data/collector/plugins/rest/RestIterator.java	(revision 58426)
+++ modules/dnet-collector-plugins/trunk/src/main/java/eu/dnetlib/data/collector/plugins/rest/RestIterator.java	(revision 58427)
@@ -64,7 +64,25 @@
 	private Queue<String> recordQueue = new PriorityBlockingQueue<String>();
 	private int discoverResultSize = 0;
 	private int pagination = 1;
+	private String resultOffsetParam;
 
+	/**
+	 * RestIterator class
+	 * 
+	 * compatible to version before 1.3.33
+	 * 
+	 * @param baseUrl
+	 * @param resumptionType
+	 * @param resumptionParam
+	 * @param resumptionXpath
+	 * @param resultTotalXpath
+	 * @param resultFormatParam
+	 * @param resultFormatValue
+	 * @param resultSizeParam
+	 * @param resultSizeValueStr
+	 * @param queryParams
+	 * @param entityXpath
+	 */
 	public RestIterator(
 			final String baseUrl,
 			final String resumptionType,
@@ -78,25 +96,25 @@
 			final String queryParams,
 			final String entityXpath
 	) {
-//		this.baseUrl = baseUrl;
-//		this.resumptionType = resumptionType;
-//		this.resumptionParam = resumptionParam;
-//		this.resultFormatValue = resultFormatValue;
-//		this.queryParams = queryParams;
-//		this.resultSizeValue = Integer.valueOf(resultSizeValueStr);
-//
-//		queryFormat = StringUtils.isNotBlank(resultFormatParam) ? "&" + resultFormatParam + "=" + resultFormatValue : "";
-//		querySize = StringUtils.isNotBlank(resultSizeParam) ? "&" + resultSizeParam + "=" + resultSizeValueStr : "";
-//
-//		try {
-//			initXmlTransformation(resultTotalXpath, resumptionXpath, entityXpath);
-//		} catch (Exception e) {
-//			throw new IllegalStateException("xml transformation init failed: " + e.getMessage());
-//		}
-//		initQueue();
-		this(baseUrl,resumptionType,resumptionParam,resumptionXpath,resultTotalXpath,resultFormatParam,resultFormatValue,resultSizeParam,resultSizeValueStr,queryParams,entityXpath,"", "");
+		this(baseUrl,resumptionType,resumptionParam,resumptionXpath,resultTotalXpath,resultFormatParam,resultFormatValue,resultSizeParam,resultSizeValueStr,queryParams,entityXpath,"", "","");
 	}
 
+	/** RestIterator class
+	 *  compatible to version 1.3.33
+	 * @param baseUrl
+	 * @param resumptionType
+	 * @param resumptionParam
+	 * @param resumptionXpath
+	 * @param resultTotalXpath
+	 * @param resultFormatParam
+	 * @param resultFormatValue
+	 * @param resultSizeParam
+	 * @param resultSizeValueStr
+	 * @param queryParams
+	 * @param entityXpath
+	 * @param authMethod
+	 * @param authToken
+	 */
 	public RestIterator(
 			final String baseUrl,
 			final String resumptionType,
@@ -112,6 +130,25 @@
 			final String authMethod,
 			final String authToken
 	) {
+		this(baseUrl,resumptionType,resumptionParam,resumptionXpath,resultTotalXpath,resultFormatParam,resultFormatValue,resultSizeParam,resultSizeValueStr,queryParams,entityXpath,"", "","");
+	}
+	
+	public RestIterator(
+			final String baseUrl,
+			final String resumptionType,
+			final String resumptionParam,
+			final String resumptionXpath,
+			final String resultTotalXpath,
+			final String resultFormatParam,
+			final String resultFormatValue,
+			final String resultSizeParam,
+			final String resultSizeValueStr,
+			final String queryParams,
+			final String entityXpath,
+			final String authMethod,
+			final String authToken,
+			final String resultOffsetParam
+	) {
 		this.baseUrl = baseUrl;
 		this.resumptionType = resumptionType;
 		this.resumptionParam = resumptionParam;
@@ -120,6 +157,7 @@
 		this.resultSizeValue = Integer.valueOf(resultSizeValueStr);
 		this.authMethod = authMethod;
 		this.authToken = authToken;
+		this.resultOffsetParam = resultOffsetParam;
 
 		queryFormat = StringUtils.isNotBlank(resultFormatParam) ? "&" + resultFormatParam + "=" + resultFormatValue : "";
 		querySize = StringUtils.isNotBlank(resultSizeParam) ? "&" + resultSizeParam + "=" + resultSizeValueStr : "";
@@ -255,8 +293,12 @@
 				for (String arrayUrlArgStr : arrayQUrlArgument) {
 					if (arrayUrlArgStr.startsWith(resumptionParam)) {
 						String[] resumptionKeyValue = arrayUrlArgStr.split("=");
-						urlOldResumptionSize = Integer.parseInt(resumptionKeyValue[1]);
-						log.debug("discover OldResumptionSize from Url: " + urlOldResumptionSize);
+						if(isInteger(resumptionKeyValue[1])) {
+							urlOldResumptionSize = Integer.parseInt(resumptionKeyValue[1]);
+							log.debug("discover OldResumptionSize from Url (int): " + urlOldResumptionSize);
+						} else {
+							log.debug("discover OldResumptionSize from Url (str): " + resumptionKeyValue[1]);
+						}
 					}
 				}
 
@@ -275,7 +317,7 @@
 				break;
 
 			case "pagination":
-			case "page":         // pagination, iterate over pages
+			case "page":         // pagination, iterate over page numbers
 				pagination += 1;
 				if (nodeList != null) {
 					discoverResultSize += nodeList.getLength();
@@ -287,30 +329,46 @@
 				resumptionStr = Integer.toString(resumptionInt);
 				break;
 
+			case "deep-cursor":   // size of result items unknown, iterate over items  (for supporting deep cursor in solr)
+				if (resultSizeValue < 2) {throw new CollectorServiceException("Mode: deep-cursor, Param 'resultSizeValue' is less than 2");}
+				if (resultOffsetParam.length() < 2) {throw new CollectorServiceException("Mode: deep-cursor, Param 'resultOffset' is less than 2");}
+
+				resumptionStr = xprResumptionPath.evaluate(resultNode);
+				queryParams.replace("cursor=*", "");
+				queryParams.replace("&&",  "&");
+				
+				resumptionStr += "&" + resultOffsetParam + "=" + Integer.toString(resumptionInt);
+				
+				log.debug("downloadPage().deep-cursor: resumptionStr=" + resumptionStr + " ; queryParams=" + queryParams);
+
+				break;
+			
 			default:        // otherwise: abort
 				// resultTotal = resumptionInt;
 				break;
 			}
 
-			if (resultTotal == -1) {
-				resultTotal = Integer.parseInt(xprResultTotalPath.evaluate(resultNode));
-				if (resumptionType.toLowerCase().equals("page")) { resultTotal += 1; }           // to correct the upper bound
-				log.info("resultTotal was -1 is now: " + resultTotal);
-			}
-			log.info("resultTotal: " + resultTotal);
-			log.info("resInt: " + resumptionInt);
-			if (resumptionInt <= resultTotal) {
-				nextQuery = baseUrl + "?" + queryParams + querySize + "&" + resumptionParam + "=" + resumptionStr + queryFormat;
-			} else
-				nextQuery = "";
-
-			log.debug("nextQueryUrl: " + nextQuery);
-			return nextQuery;
-
 		} catch (Exception e) {
 			log.error(e);
 			throw new IllegalStateException("collection failed: " + e.getMessage());
+		}			
+			
+		if (resultTotal == -1) {
+			resultTotal = Integer.parseInt(xprResultTotalPath.evaluate(resultNode));
+			if (resumptionType.toLowerCase().equals("page")) { resultTotal += 1; }           // to correct the upper bound
+			log.info("resultTotal was -1 is now: " + resultTotal);
 		}
+		log.info("resultTotal: " + resultTotal);
+		log.info("resInt: " + resumptionInt);
+		if (resumptionInt <= resultTotal) {
+			nextQuery = baseUrl + "?" + queryParams + querySize + "&" + resumptionParam + "=" + resumptionStr + queryFormat;
+		} else
+			nextQuery = "";
+
+		log.debug("nextQueryUrl: " + nextQuery);
+		return nextQuery;
+
+
 	}
 
 	/**
@@ -395,5 +453,20 @@
 
 		return bufferStr;
 	}
+	
+	private boolean isInteger(String s) {
+		boolean isValidInteger = false;
+		try {
+			Integer.parseInt(s);
 
+			// s is a valid integer
+
+			isValidInteger = true;
+		} catch (NumberFormatException ex) {
+			// s is not an integer
+		}
+
+		return isValidInteger;
+	}
+
 }
Index: modules/dnet-collector-plugins/trunk/src/main/resources/eu/dnetlib/data/collector/plugins/applicationContext-dnet-modular-collector-plugins.xml
===================================================================
--- modules/dnet-collector-plugins/trunk/src/main/resources/eu/dnetlib/data/collector/plugins/applicationContext-dnet-modular-collector-plugins.xml	(revision 58426)
+++ modules/dnet-collector-plugins/trunk/src/main/resources/eu/dnetlib/data/collector/plugins/applicationContext-dnet-modular-collector-plugins.xml	(revision 58427)
@@ -191,9 +191,11 @@
                         <bean class="eu.dnetlib.data.collector.rmi.ProtocolParameter"
 							p:name="queryParams" />
                         <bean class="eu.dnetlib.data.collector.rmi.ProtocolParameter"
-							p:name="authMethod" />	
+							p:name="authMethod" p:optional="true" />	
 						<bean class="eu.dnetlib.data.collector.rmi.ProtocolParameter"
-							p:name="authToken" />	
+							p:name="authToken" p:optional="true" />	
+                        <bean class="eu.dnetlib.data.collector.rmi.ProtocolParameter"
+							p:name="resultOffsetParam" p:optional="true" />								
 						<bean class="eu.dnetlib.data.collector.rmi.ProtocolParameter"
 							p:name="entityXpath" />
 					</list>
Index: modules/dnet-collector-plugins/trunk/pom.xml
===================================================================
--- modules/dnet-collector-plugins/trunk/pom.xml	(revision 58426)
+++ modules/dnet-collector-plugins/trunk/pom.xml	(revision 58427)
@@ -7,7 +7,7 @@
 	</parent>
 	<groupId>eu.dnetlib</groupId>
 	<artifactId>dnet-collector-plugins</artifactId>
-	<version>1.3.34-SNAPSHOT</version>
+	<version>1.3.35-SNAPSHOT</version>
 	<scm>
 		<developerConnection>scm:svn:https://svn.driver.research-infrastructures.eu/driver/dnet45/modules/dnet-collector-plugins/trunk</developerConnection>
 	</scm>
