private MinuetoImage scaleInternal(double factorX, double factorY) {

		/* Reference to the destination image. */
		BufferedImage destinationBufferedImage;
		/* Reference to the affine transformation (the scale) */
		AffineTransform affineTransform;
		/* Reference to the GraphicPointer */
		Graphics2D graphics2DDestination;
		/* Resulting MinuetoImage */
		MinuetoImage	destinationImage;

		/* Set up the affine transformation needed to scale the image */
		affineTransform = new AffineTransform();
		/* Scale the image by dFacorX and factorY */
		affineTransform.scale(factorX, factorY);

		/* ADDED: Translate to Account for Negative Scaling Factors */
		if (factorX < 0 && factorY < 0) {
			affineTransform.translate(this.width * factorX, this.height * factorY);
		}
		else if(factorX < 0) {
			affineTransform.translate(this.width * factorX, 0);
		}
		else if(factorY < 0) {
			affineTransform.translate(0, this.height * factorY);
		}

		/* The translation normaly produces an unaccelerated buffered image.
		 * Instead, we produce an accelerated buffered for the result. */   	  
		/* Math.abs to allow for negative scaling factors */
		destinationBufferedImage = ImageTools.createImage((int) Math.abs(factorX*this.width), (int) Math.abs(factorY*this.height));
		/* Reference to the GraphicPointer of the destination image.*/
		graphics2DDestination = destinationBufferedImage.createGraphics();
		/* Draw the scaled image. */
		graphics2DDestination.drawImage(this.bufferedImage,affineTransform ,null);

		/* Set up the new MinuetoImage with the scaled image. */
		destinationImage = new MinuetoImage();
		destinationImage.setUpImage(destinationBufferedImage);

		return destinationImage;
	}