public ResultSet getProfileWithMatchingTagAndUserRoles( String profileTag ) throws ServiceException {
		DataBinder binder = new DataBinder();
		binder.putLocal( m_shared.getConfig( "coSignSignatureProfileMetaField" ), profileTag );
		ResultSet rset = createResultSet( "QsignatureProfileID", binder );
		DataResultSet drset = new DataResultSet();
		drset.copy( rset );
		Report.debug( "bezzotechcosign", "Rows: " + drset.getNumRows(), null );
		if( drset.getNumRows() <= 0 ) {
			throw new ServiceException( "Unable to locate the Sign Request Profile: " + profileTag );
		}

		Vector userRoles = SecurityUtils.getRoleList( getUserData() );
		String packageStr = "";
		boolean found = false;
		do {
			String requiredRole = drset.getStringValueByName( "xCoSignRequiredSignatures" );
			for( int i = 0; i < userRoles.size(); i++ ) {
				UserAttribInfo uai = ( UserAttribInfo )userRoles.elementAt( i );
				Report.debug( "bezzotechcosign", "Required Roles: " + requiredRole + "\n\tRole: " +
						uai.m_attribName + "\n\ttest: " + requiredRole.indexOf( uai.m_attribName ), null );
				if( requiredRole.indexOf( uai.m_attribName ) >= 0 ) {
					if( found )
						throw new ServiceException( "The content " + m_binder.getLocal( "dDocName" ) +
								" has multiple signature profiles.  Please contact your administrator." );
					else
						found = true;
				}
			}
			if( !found ) {
				drset.deleteCurrentRow();
				Report.debug( "bezzotechcosign", "Deleted ResultSet Row: " + drset.toString(), null );
			}
			else
				drset.next();
			found = false;
			Report.debug( "bezzotechcosign", "Current: " + drset.getCurrentRow() + "\n\tRows: " +
					drset.getNumRows(), null );
		} while( drset.isRowPresent() );
		return drset;
	}