diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
index 45bdb29..f650d9c 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
@@ -46,7 +46,6 @@
 import org.eclipse.compare.IStreamContentAccessor;
 import org.eclipse.compare.ITypedElement;
 import org.eclipse.compare.SharedDocumentAdapter;
-import org.eclipse.compare.internal.BufferedCanvas;
 import org.eclipse.compare.internal.ChangeCompareFilterPropertyAction;
 import org.eclipse.compare.internal.ChangePropertyAction;
 import org.eclipse.compare.internal.CompareContentViewerSwitchingPane;
@@ -431,9 +430,9 @@
 
 
 	// SWT widgets
-	private BufferedCanvas fAncestorCanvas;
-	private BufferedCanvas fLeftCanvas;
-	private BufferedCanvas fRightCanvas;
+	private Canvas fAncestorCanvas;
+	private Canvas fLeftCanvas;
+	private Canvas fRightCanvas;
 	private Canvas fScrollCanvas;
 	private ScrollBar fVScrollBar;
 	private Canvas fBirdsEyeCanvas;
@@ -2036,12 +2035,15 @@
 
 		// 1st row
 		if (fMarginWidth > 0) {
-			fAncestorCanvas= new BufferedCanvas(composite, SWT.NONE) {
+			fAncestorCanvas = new Canvas(composite, SWT.DOUBLE_BUFFERED);
+			fAncestorCanvas.addPaintListener(new PaintListener() {
+
 				@Override
-				public void doPaint(GC gc) {
-					paintSides(gc, fAncestor, fAncestorCanvas, false);
+				public void paintControl(PaintEvent e) {
+					paintSides(e.gc, fAncestor, fAncestorCanvas, false);
+
 				}
-			};
+			});
 			fAncestorCanvas.addMouseListener(
 				new MouseAdapter() {
 					@Override
@@ -2069,12 +2071,15 @@
 
 		// 2nd row
 		if (fMarginWidth > 0) {
-			fLeftCanvas= new BufferedCanvas(composite, SWT.NONE) {
+			fLeftCanvas = new Canvas(composite, SWT.DOUBLE_BUFFERED);
+			fLeftCanvas.addPaintListener(new PaintListener() {
+
 				@Override
-				public void doPaint(GC gc) {
-					paintSides(gc, fLeft, fLeftCanvas, false);
+				public void paintControl(PaintEvent e) {
+					paintSides(e.gc, fLeft, fLeftCanvas, false);
+
 				}
-			};
+			});
 			fLeftCanvas.addMouseListener(
 				new MouseAdapter() {
 					@Override
@@ -2129,12 +2134,15 @@
 		hsynchViewport(fRight.getSourceViewer(), fAncestor.getSourceViewer(), fLeft.getSourceViewer());
 
 		if (fMarginWidth > 0) {
-			fRightCanvas= new BufferedCanvas(composite, SWT.NONE) {
+			fRightCanvas = new Canvas(composite, SWT.DOUBLE_BUFFERED);
+			fRightCanvas.addPaintListener(new PaintListener() {
+
 				@Override
-				public void doPaint(GC gc) {
-					paintSides(gc, fRight, fRightCanvas, fSynchronizedScrolling);
+				public void paintControl(PaintEvent e) {
+					paintSides(e.gc, fRight, fRightCanvas, fSynchronizedScrolling);
+
 				}
-			};
+			});
 			fRightCanvas.addMouseListener(
 				new MouseAdapter() {
 					@Override
@@ -2159,13 +2167,17 @@
 			}
 		);
 
-		fBirdsEyeCanvas= new BufferedCanvas(composite, SWT.NONE) {
+		fBirdsEyeCanvas = new Canvas(composite, SWT.DOUBLE_BUFFERED);
+		fBirdsEyeCanvas.addPaintListener(new PaintListener() {
+
 			@Override
-			public void doPaint(GC gc) {
+			public void paintControl(PaintEvent e) {
 				updateVScrollBar(); // Update scroll bar here as initially viewport height is wrong
-				paintBirdsEyeView(this, gc);
+				paintBirdsEyeView((Canvas) e.widget, e.gc);
+
 			}
-		};
+		});
+
 		fBirdsEyeCanvas.addMouseListener(
 			new MouseAdapter() {
 				@Override
@@ -2441,12 +2453,18 @@
 	@Override
 	protected final Control createCenterControl(Composite parent) {
 		if (fSynchronizedScrolling) {
-			final Canvas canvas= new BufferedCanvas(parent, SWT.NONE) {
+
+
+			final Canvas canvas = new Canvas(parent, SWT.DOUBLE_BUFFERED);
+
+			canvas.addPaintListener(new PaintListener() {
+
 				@Override
-				public void doPaint(GC gc) {
-					paintCenter(this, gc);
+				public void paintControl(PaintEvent e) {
+					paintCenter((Canvas) e.widget, e.gc);
+
 				}
-			};
+			});
 			new HoverResizer(canvas, HORIZONTAL);
 
 			Cursor normalCursor= canvas.getDisplay().getSystemCursor(SWT.CURSOR_ARROW);
@@ -5136,17 +5154,17 @@
 		fInScrolling= false;
 
 		if (isThreeWay() && fAncestorCanvas != null)
-			fAncestorCanvas.repaint();
+			fAncestorCanvas.redraw();
 
 		if (fLeftCanvas != null)
-			fLeftCanvas.repaint();
+			fLeftCanvas.redraw();
 
 		Control center= getCenterControl();
-		if (center instanceof BufferedCanvas)
-			((BufferedCanvas) center).repaint();
+		if (center instanceof Canvas)
+			((Canvas) center).redraw();
 
 		if (fRightCanvas != null)
-			fRightCanvas.repaint();
+			fRightCanvas.redraw();
 	}
 
 	/*
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java
deleted file mode 100644
index 4b9fb26..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2017 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare.internal;
-
-import org.eclipse.jface.util.Util;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.widgets.Canvas;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * A Canvas which reduces flicker by drawing in an off screen buffer.
- */
-public abstract class BufferedCanvas extends Canvas {
-
-	/** The drawable for double buffering */
-	Image fBuffer;
-
-	public BufferedCanvas(Composite parent, int flags) {
-		super(parent, flags | SWT.NO_BACKGROUND);
-
-		addPaintListener(
-			event -> doubleBufferPaint(event.gc)
-		);
-
-		addDisposeListener(
-			e -> {
-				if (fBuffer != null) {
-					fBuffer.dispose();
-					fBuffer= null;
-				}
-			}
-		);
-	}
-
-	public void repaint() {
-		if (!isDisposed()) {
-			GC gc= new GC(this);
-			doubleBufferPaint(gc);
-			gc.dispose();
-			if (Util.isGtk()) {
-				redraw();
-			}
-		}
-	}
-
-	/*
-	 * Double buffer drawing.
-	 */
-	void doubleBufferPaint(GC dest) {
-
-		Point size= getSize();
-
-		if (size.x <= 1 || size.y <= 1) // we test for <= 1 because on X11 controls have initial size 1,1
-			return;
-
-		if (fBuffer != null) {
-			Rectangle r= fBuffer.getBounds();
-			if (r.width != size.x || r.height != size.y) {
-				fBuffer.dispose();
-				fBuffer= null;
-			}
-		}
-		if (fBuffer == null)
-			fBuffer= new Image(getDisplay(), size.x, size.y);
-
-		GC gc= new GC(fBuffer);
-		try {
-			gc.setBackground(getBackground());
-			gc.fillRectangle(0, 0, size.x, size.y);
-			doPaint(gc);
-		} finally {
-			gc.dispose();
-		}
-
-		dest.drawImage(fBuffer, 0, 0);
-	}
-
-	abstract public void doPaint(GC gc);
-}
