 			bottomSeparatorAlpha = .2;
 		}
 		
+		var dataGroup:DataGroup = parent as DataGroup;
+		var isLast:Boolean = (dataGroup && (itemIndex == dataGroup.numElements - 1));
+
+			
 		// draw separators
 		graphics.beginFill(topSeparatorColor, topSeparatorAlpha);
 		graphics.drawRect(0, 0, unscaledWidth, 1);
 		graphics.endFill();
 		
 		graphics.beginFill(bottomSeparatorColor, bottomSeparatorAlpha);
-		graphics.drawRect(0, unscaledHeight - 1, unscaledWidth, 1);
+		graphics.drawRect(0, unscaledHeight - (isLast ? 0 : 1), unscaledWidth, 1);
 		graphics.endFill();
 		
 		

            if (labelDisplay.isTruncated)
                labelDisplay.text = label;
		
			textHeight = labelDisplay.measuredTextSize.y;
        }

		var metrics:TextLineMetrics = labelDisplay.getLineMetrics(0);

		var ascentDelta:Number = textHeight - (metrics.ascent - 2); // We need the ascent that doesn't include the "slop"
		
        // text should take up the rest of the space width-wise, but only let it take up
        // its measured textHeight so we can position it later based on verticalAlign
        var labelWidth:Number = Math.max(viewWidth, 0);
        var labelHeight:Number = Math.max(Math.min(viewHeight + ascentDelta, textHeight), 0);
        setElementSize(labelDisplay, labelWidth, labelHeight);    
   
		var labelY:Number = 0;

		// Vertical align is calcuated differently for top/bottom/middle. To get as accurate as possible we
		// want to avoid calculations using the slop.  We only use it when we absolutely need it when
		// verticalAlign == "top".  
		if (verticalAlign == "top")
			labelY = paddingTop - (StyleableTextField.TEXT_HEIGHT_PADDING/2 + 3); // accounts for gutter and slop
		else if (verticalAlign == "bottom")
			labelY = viewHeight - (metrics.ascent + StyleableTextField.TEXT_HEIGHT_PADDING/2) + paddingTop; //viewHeight - (labelHeight - metrics.descent - metrics.leading) + paddingTop;
		else // if (verticalAlign == "middle")
			labelY = Math.round(.5 * (viewHeight - (textHeight - metrics.descent + StyleableTextField.TEXT_HEIGHT_PADDING))) + paddingTop;	
		// made "middle" last even though it's most likely so it is the default and if someone 
		// types "center", then it will still vertically center itself.

		setElementPosition(labelDisplay, paddingLeft, labelY);
		
        // attempt to truncate the text now that we have its official width
        labelDisplay.truncateToFit();
    }

    //--------------------------------------------------------------------------

                
                backgroundColor = alternatingColors[itemIndex % alternatingColors.length];
            }
			else
			{ 
				// don't draw background if it is the contentBackgroundColor. The
				// list skin handles the background drawing for us. 
				drawBackground = false;
			}

        }
        
        // draw backgroundColor
