private boolean criteriaCheck3( String field, Ptg[] curRow, DB db )
	{
		boolean critRowMatch = false;
		// for each value check all the criteria in a row
		// multiple rows of criteria are combined 
		for( int x = 0; x < rows.length; x++ )
		{
			critRowMatch = true; // reset
			// for each row of criteria, iterate criteria cols
			for( String critField : colHeaders )
			{
				List r = getCriteria( x, critField );
				Iterator tx = r.iterator();
				int dv = db.getCol( critField );
				String valcheck = curRow[dv].getValue().toString();
				// this criteria row may pass/fail subsequent rows may pass/fail
				// only one has to pass OK to return true all crit in this row must pass
				while( tx.hasNext() && critRowMatch )
				{ // stop if row failure
					Ptg cv = ((Ptg) tx.next());
					String vc = cv.getValue().toString();

					if( !vc.equals( "" ) )
					{
						critRowMatch = matches( valcheck, vc );
						/* fast fail is not OK because we 
						 * may pass one row OR another
						 * AND criteria across criteria rows
						 * OR  criteria down cols
						 */
					}
				}
			}
			if( critRowMatch ) // fast succeed here, a row passed
			{
				return true;
			}
		}
		return critRowMatch;
	}