 				{
 					matrix = new Matrix();
 					matrix.identity();
-					matrix.translate( -1*Math.ceil(imageTransform.sx), -1*Math.ceil(imageTransform.sy) );
+					matrix.translate( -1*Math.round(imageTransform.sx), -1*Math.round(imageTransform.sy) );
 					
 					currentImageMap = new BitmapData(imageTransform.sw, imageTransform.sh);
 					currentImageMap.draw(fullImageMap, matrix);

				// single-step
				
				// final size including rotation
				var tw:Number = Math.ceil( Math.abs( Math.sin(angle)*imageTransform.dh ) + Math.abs( Math.cos(angle)*imageTransform.dw ) );
				var th:Number = Math.ceil( Math.abs( Math.sin(angle)*imageTransform.dw ) + Math.abs( Math.cos(angle)*imageTransform.dh ) );
				
				scaleX = imageTransform.dw/currentImageMap.width;
				scaleY = imageTransform.dh/currentImageMap.height;
				
				matrix = new Matrix();
				matrix.identity();
				matrix.translate( -1*Math.ceil(0.5*currentImageMap.width), -1*Math.ceil(0.5*currentImageMap.height) );
				matrix.rotate( angle );
				matrix.scale( scaleX, scaleY );
				matrix.translate( Math.ceil(0.5*tw), Math.ceil(0.5*th) );
				
				resizedImageMap = new BitmapData( tw , th );
				// resize with bilinear interpolation

						curWidth = 0.5*curWidth;
						curHeight = 0.5*curHeight;
						
						currentImageMap = new BitmapData( Math.round( curWidth ), Math.round( curHeight ) );
						
						// TODO: set smoothing to false (nearest neighbour) - it should work the same
						currentImageMap.draw(mapToScale, matrix, null, null, null, true );
