diff --git a/SAS/OTDB/sql/instanciateTree_func.sql b/SAS/OTDB/sql/instanciateTree_func.sql
index 9a5e75e8600055e1cdbee7a69451cb4681793180..0850fd2656c47566ebb2965bbf608eb35d77f041 100644
--- a/SAS/OTDB/sql/instanciateTree_func.sql
+++ b/SAS/OTDB/sql/instanciateTree_func.sql
@@ -42,31 +42,78 @@ CREATE OR REPLACE FUNCTION resolveVHparam(INT4, TEXT)
 		vNodeName	VARCHAR(200);
 		vParamName	VARCHAR(200);
 		vRemainder	VARCHAR(200);
+		vOrgArray	VARCHAR(200);
+		vElem		VARCHAR(100);
+		vAnswer		TEXT;
+		vIsArray	BOOLEAN;
+		vSize		INTEGER;
 		vRecord		RECORD;
 
 	BEGIN
---RAISE WARNING \'resolveVHparam(%,%)\', $1, $2;
-		vDotpos    := strpos($2, \'.\');
-		vNodeName  := substr($2, 3, vDotpos-3);
-		vParamName := substr($2, vDotpos+1);
+		vDotpos    := strpos($2, \'.\');					-- >>a.b.c or <<a
+		IF vDotpos < 1 THEN
+			RETURN $2;
+		END IF;
+		vNodeName  := substr($2, 3, vDotpos-3);				-- a
+		vParamName := substr($2, vDotpos+1);				-- b.c
 		vDotpos    := strpos(vParamName, \'.\');
 		IF vDotpos > 0 THEN
-		  vRemainder := substr(vParamName, vDotPos);
-		  vParamName := substr(vParamName, 1, vDotPos-1);
+		  vRemainder := substr(vParamName, vDotPos);		-- .c
+		  vParamName := substr(vParamName, 1, vDotPos-1);	-- b
 		ELSE
 		  vRemainder := \'\';
 		END IF;
---RAISE WARNING \'resolveVHparam: % : % : %\', vNodeName, vParamName, vRemainder;
+		-- does paramname end in [] ?
+		IF rtrim(vParamName, \'[]\') != vParamName THEN
+			vIsArray := true;
+			vParamName := rtrim(vParamName, \'[]\');
+		ELSE
+			vIsArray := false;
+		END IF;
 
+		-- Get parameter definition
 		SELECT	*
 		INTO	vRecord
 		FROM	getVICNodeDef ($1, vNodeName, vParamName);
+	
+		IF NOT FOUND THEN
+			RAISE EXCEPTION \'Parameter % from Node % not found\', vNodeName, vParamName;
+		END IF;
 
-		IF vRemainder = \'\' THEN
-			RETURN	vRecord.limits;
+		IF vIsArray THEN
+			IF vRemainder = \'\' THEN
+				-- calc size of array
+				RETURN	calcArraySize(vRecord.limits);
+			ELSE
+				-- reference array
+				-- create an array with same size as current vRecord.limits array
+				-- while rereferencing the elements of the vRecord.limits array.
+				vAnswer := \'[\';
+				vOrgArray := btrim(vRecord.limits, \'[] \');
+				vSize := calcArraySize(vRecord.limits);
+				FOR i IN 1..vSize LOOP
+					-- get clean name of element
+					vElem := btrim(split_part(vOrgArray, \',\', i), \' \');
+					-- make sure it begins with <<
+					IF substr(vElem,1,2) != \'<<\' THEN
+						vElem := \'<<\' || vElem;
+					END IF;
+					-- resolve value
+					vElem := resolveVHparam($1, vElem || vRemainder);
+					-- add to array
+					vAnswer := vAnswer || vElem || \',\';
+				END LOOP;
+				-- finish array and return result.
+				vAnswer := rtrim(vAnswer, \',\') || \']\';
+				RETURN	vAnswer;
+			END IF;
 		ELSE
-			vRecord.limits := vRecord.limits || vRemainder;
-			RETURN	resolveVHparam($1, vRecord.limits);
+			IF vRemainder = \'\' THEN
+				RETURN	vRecord.limits;
+			ELSE
+				vRecord.limits := vRecord.limits || vRemainder;
+				RETURN	resolveVHparam($1, vRecord.limits);
+			END IF;
 		END IF;
 	END;
 ' LANGUAGE plpgsql;
diff --git a/SAS/OTDB/sql/misc_func.sql b/SAS/OTDB/sql/misc_func.sql
index 98ac181db098c58a77cac88400216a05eb24226c..d9fa433263025c633d421cd40a15fc867323a8e0 100644
--- a/SAS/OTDB/sql/misc_func.sql
+++ b/SAS/OTDB/sql/misc_func.sql
@@ -210,3 +210,31 @@ CREATE OR REPLACE FUNCTION isReference(TEXT)
 	END;
 ' LANGUAGE plpgsql IMMUTABLE;
 
+--
+-- calcArraySize (arraystring)
+--
+-- Authorisation: n/a
+--
+-- Tables:	none
+--
+-- Types:	none
+--
+CREATE OR REPLACE FUNCTION calcArraySize(TEXT)
+  RETURNS TEXT AS '
+	DECLARE
+		vSize		INTEGER;
+		vArray		TEXT;
+
+	BEGIN
+		vArray := ltrim($1,\'[ \');
+		vArray := rtrim(vArray,\'] \');
+		vSize := 0;
+		WHILE length(vArray) > 0 LOOP
+			-- remove element
+			vArray := ltrim(vArray, \'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_ "[]{}+%<>.\');
+			vSize := vSize + 1;					-- count element
+			vArray := ltrim(vArray, \',\');		-- strip comma
+		END LOOP;
+		RETURN vSize;
+	END;
+' LANGUAGE plpgsql IMMUTABLE;
diff --git a/SAS/OTDB/test/tVTtree.in b/SAS/OTDB/test/tVTtree.in
index 09214fdcf77357958513c613f372b8424b2d4345..8c28911c5f3d8be39a650155f4613cc14cda46c8 100644
--- a/SAS/OTDB/test/tVTtree.in
+++ b/SAS/OTDB/test/tVTtree.in
@@ -138,6 +138,17 @@ par systemClock		I	dbl	   MHz	 	0	  0		200				-	'systemclock'
 par	channelWidth	I	dbl	   Hz		0	  0		762.939453125	-	'width of the channels'
 par	subbandWidth	I	dbl	   kHz		0	  0		195.3125		-	'width of the 512 subbands'
 
+# -- Clock160 --
+#       name        	vers    qual	constr. 			descr.
+#------------------------------------------------------------------------------
+node	Clock160 		1.0.0	test	'node constraint'	'160 MHz clock'
+
+#    name          dir. type   unit    prun.  vm    value   constr. descr.
+#------------------------------------------------------------------------------
+par systemClock		I	dbl	   MHz	 	0	  0		160				-	'systemclock'
+par	channelWidth	I	dbl	   Hz		0	  0		610.3515625   	-	'width of the channels'
+par	subbandWidth	I	dbl	   kHz		0	  0		156.25  		-	'width of the 512 subbands'
+
 # -- Observation --
 #       name        	vers    qual	constr. 			descr.
 #------------------------------------------------------------------------------
@@ -164,5 +175,6 @@ node	TopNode 	1.0.0	test	'node constraint'	'Toplevel node'
 #------------------------------------------------------------------------------
 uses	'Observation' 	1.0.0	test		0..1				"x"
 uses	'Clock200'		1.0.0	test		1					"x"
+uses	'Clock160'		1.0.0	test		1					"x"