docs: protected void layoutGroupVariables(DJGroup group, JRDesignGroup jgroup, int labelOffset) {
  		log.debug("Starting groups variables layout...");
  
  //		JRDesignBand headerBand = (JRDesignBand) jgroup.getGroupHeader();
  		JRDesignSection headerSection = (JRDesignSection) jgroup.getGroupHeaderSection();
  		JRDesignBand headerBand = (JRDesignBand) headerSection.getBandsList().get(0);
  		if (headerBand == null){
  			headerBand = new JRDesignBand();
  			headerSection.addBand(headerBand);
  //			jgroup.setGroupHeader(headerBand);
  		}
  
  		JRDesignSection footerSection = (JRDesignSection) jgroup.getGroupFooterSection();
  		JRDesignBand footerBand = (JRDesignBand) footerSection.getBandsList().get(0);
  		if (footerBand == null){
  			footerBand = new JRDesignBand();
  			footerSection.addBand(footerBand);
  //			jgroup.setGroupFooter(footerBand);
  		}
  
  		int headerOffset = 0;
  
  		//Show the current value above the column name
  		int yOffset = 0;
  		GroupLayout layout = group.getLayout();
  		//Only the value in header
  		PropertyColumn column = group.getColumnToGroupBy();
  
  		int height = group.getHeaderVariablesHeight()!= DynamicReportOptions.UNSET_VALUE
  		? group.getHeaderVariablesHeight()
  				:getReport().getOptions().getDetailHeight();
  
  		//VALUE_IN_HEADER,
  		//VALUE_IN_HEADER_WITH_HEADERS,
  		//VALUE_IN_HEADER_AND_FOR_EACH,
  		//VALUE_IN_HEADER_AND_FOR_EACH_WITH_HEADERS
  		if (layout.isShowValueInHeader() && layout.isHideColumn() && !layout.isShowColumnName()){
  			//textfield for the current value
  			JRDesignTextField currentValue = generateTextFieldFromColumn(column, height, group);
  			currentValue.setPositionType( PositionTypeEnum.FIX_RELATIVE_TO_TOP );
  
  			//The width will be all the page, except for the width of the header variables
              int headerVariablesWidth = getReport().getOptions().getPrintableWidth();
  
              if (!group.getHeaderVariables().isEmpty()){
              	DJGroupVariable leftmostcol = findLeftMostColumn(group.getHeaderVariables());
              	headerVariablesWidth = leftmostcol.getColumnToApplyOperation().getPosX();
              	if (groupLabelsPresent(group.getHeaderVariables())){
              		currentValue.setY(height);
              		currentValue.setHeight(getHeaderVariablesHeight(group));
              	}
              }
              currentValue.setWidth(headerVariablesWidth);
  
  			//fix the height depending on the font size
  //			currentValue.setHeight(FontHelper.getHeightFor(column.getStyle().getFont())); //XXX CAREFULL
  			yOffset += currentValue.getHeight();
  
  			//Move down existing elements in the band.
  			LayoutUtils.moveBandsElemnts(yOffset-1, headerBand); //Don't know why, but without the "-1" it wont show the headers
  
  			if (group.getLayout().isPrintHeaders()){
  				headerOffset += group.getHeaderHeight() + getReport().getOptions().getDetailHeight();
  			}
  
  			headerBand.addElement(currentValue);
  		}
  		//DEFAULT and DEFAULT_WITH_HEADER
  		else if (layout.isShowValueInHeader() && !layout.isHideColumn() && !layout.isShowColumnName()){
  			headerOffset = changeHeaderBandHeightForVariables(headerBand, group);
  			insertValueInHeader(headerBand, group, headerOffset);
  		}
  		//VALUE_IN_HEADER_WITH_HEADERS_AND_COLUMN_NAME
  		else if (layout.isShowValueInHeader() && layout.isHideColumn() && layout.isShowColumnName()){
  			//Create the element for the column name
  			JRDesignTextField columnNameTf = createColumnNameTextField(group, column);
  			columnNameTf.setY(columnNameTf.getY() + headerOffset);
  
  			//textfield for the current value
  			JRDesignTextField currentValue = generateTextFieldFromColumn(column, height, group);
  
  			//The width will be (width of the page) - (column name width)
  			currentValue.setWidth(getReport().getOptions().getPrintableWidth() - columnNameTf.getWidth());
  			//The x position for the current value is right next to the column name
  			currentValue.setX(columnNameTf.getWidth());
  
  			//fix the height depending on the font size
  			//fixes issue 2817859
  			//currentValue.setHeight(FontHelper.getHeightFor(column.getStyle().getFont()));
  			if (column.getStyle() != null && column.getStyle().getFont() != null)
  				currentValue.setHeight(FontHelper.getHeightFor(column.getStyle().getFont()));
  			columnNameTf.setHeight(currentValue.getHeight());
  
  			yOffset += currentValue.getHeight();
  
  			//Move down existing elements in the band.
  			LayoutUtils.moveBandsElemnts(yOffset, headerBand);
  
  			headerBand.addElement(columnNameTf);
  			headerBand.addElement(currentValue);
  		}
  
  		placeVariableInBand(group.getHeaderVariables(), group, jgroup, DJConstants.HEADER, headerBand, headerOffset);
  		placeVariableInBand(group.getFooterVariables(), group, jgroup, DJConstants.FOOTER, footerBand, labelOffset);
  	}