diff -r bd90b71ba855 win32/PlatWin.cxx
--- a/win32/PlatWin.cxx	Fri Oct 03 09:37:00 2014 +1000
+++ b/win32/PlatWin.cxx	Fri Oct 03 21:02:24 2014 +1000
@@ -1599,7 +1599,10 @@
 		D2D1_RECT_F rcSource = {from.x, from.y, from.x + rc.Width(), from.y + rc.Height()};
 		pRenderTarget->DrawBitmap(pBitmap, rcDestination, 1.0f,
 			D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR, rcSource);
-		pRenderTarget->Flush();
+		hr = pRenderTarget->Flush();
+		if (FAILED(hr)) {
+			Platform::DebugPrintf("Failed Flush 0x%x\n", hr);
+		}
 		pBitmap->Release();
 	}
 }
diff -r bd90b71ba855 win32/ScintillaWin.cxx
--- a/win32/ScintillaWin.cxx	Fri Oct 03 09:37:00 2014 +1000
+++ b/win32/ScintillaWin.cxx	Fri Oct 03 21:02:24 2014 +1000
@@ -223,6 +223,7 @@
 #if defined(USE_D2D)
 	void EnsureRenderTarget();
 	void DropRenderTarget();
+	ID2D1DCRenderTarget *CreateDCRenderTarget(HDC hdc);
 #endif
 	HWND MainHWND();
 
@@ -492,6 +493,34 @@
 	}
 }
 
+ID2D1DCRenderTarget *ScintillaWin::CreateDCRenderTarget(HDC hdc) {
+	D2D1_RENDER_TARGET_PROPERTIES props = D2D1::RenderTargetProperties(
+		D2D1_RENDER_TARGET_TYPE_DEFAULT,
+		D2D1::PixelFormat(
+		DXGI_FORMAT_B8G8R8A8_UNORM,
+		D2D1_ALPHA_MODE_IGNORE),
+		0,
+		0,
+		D2D1_RENDER_TARGET_USAGE_NONE,
+		D2D1_FEATURE_LEVEL_DEFAULT
+		);
+	ID2D1DCRenderTarget *pDCRT = 0;
+	HRESULT hr = pD2DFactory->CreateDCRenderTarget(&props, &pDCRT);
+	if (SUCCEEDED(hr)) {
+		RECT rcWindow;
+		GetClientRect(MainHWND(), &rcWindow);
+		hr = pDCRT->BindDC(hdc, &rcWindow);
+		if (FAILED(hr)) {
+			Platform::DebugPrintf("BindDC failed 0x%x\n", hr);
+			pDCRT->Release();
+			return NULL;
+		}
+	} else {
+		Platform::DebugPrintf("CreateDCRenderTarget failed 0x%x\n", hr);
+	}
+	return pDCRT;
+}
+
 #endif
 
 HWND ScintillaWin::MainHWND() {
@@ -637,16 +666,35 @@
 		}
 	} else {
 #if defined(USE_D2D)
-		EnsureRenderTarget();
-		AutoSurface surfaceWindow(pRenderTarget, this);
-		if (surfaceWindow) {
-			pRenderTarget->BeginDraw();
-			Paint(surfaceWindow, rcPaint);
-			surfaceWindow->Release();
-			HRESULT hr = pRenderTarget->EndDraw();
-			if (hr == D2DERR_RECREATE_TARGET) {
-				DropRenderTarget();
-				paintState = paintAbandoned;
+		if (technology == 3) {
+			DropGraphics(false);
+			ID2D1DCRenderTarget *pDCRT = CreateDCRenderTarget(pps->hdc);
+			if (pDCRT) {
+				AutoSurface surfaceWindow(pDCRT, this);
+				if (surfaceWindow) {
+					pDCRT->BeginDraw();
+					Paint(surfaceWindow, rcPaint);
+					surfaceWindow->Release();
+					HRESULT hr = pDCRT->EndDraw();
+					if (FAILED(hr)) {
+						Platform::DebugPrintf("EndDraw failed 0x%x\n");
+						paintState = paintAbandoned;
+					}
+				}
+				pDCRT->Release();
+			}
+		} else {
+			EnsureRenderTarget();
+			AutoSurface surfaceWindow(pRenderTarget, this);
+			if (surfaceWindow) {
+				pRenderTarget->BeginDraw();
+				Paint(surfaceWindow, rcPaint);
+				surfaceWindow->Release();
+				HRESULT hr = pRenderTarget->EndDraw();
+				if (hr == D2DERR_RECREATE_TARGET) {
+					DropRenderTarget();
+					paintState = paintAbandoned;
+				}
 			}
 		}
 #endif
@@ -1405,6 +1453,7 @@
 		case SCI_SETTECHNOLOGY:
 			if ((wParam == SC_TECHNOLOGY_DEFAULT) || 
 				(wParam == SC_TECHNOLOGY_DIRECTWRITERETAIN) ||
+				(wParam == 3) ||
 				(wParam == SC_TECHNOLOGY_DIRECTWRITE)) {
 				if (technology != static_cast<int>(wParam)) {
 					if (static_cast<int>(wParam) > SC_TECHNOLOGY_DEFAULT) {
@@ -2541,7 +2590,7 @@
  * This paint will not be abandoned.
  */
 void ScintillaWin::FullPaint() {
-	if (technology == SC_TECHNOLOGY_DEFAULT) {
+	if ((technology == SC_TECHNOLOGY_DEFAULT) || (technology == 3)) {
 		HDC hdc = ::GetDC(MainHWND());
 		FullPaintDC(hdc);
 		::ReleaseDC(MainHWND(), hdc);
@@ -2566,15 +2615,30 @@
 		}
 	} else {
 #if defined(USE_D2D)
-		EnsureRenderTarget();
-		AutoSurface surfaceWindow(pRenderTarget, this);
-		if (surfaceWindow) {
-			pRenderTarget->BeginDraw();
-			Paint(surfaceWindow, rcPaint);
-			surfaceWindow->Release();
-			HRESULT hr = pRenderTarget->EndDraw();
-			if (hr == D2DERR_RECREATE_TARGET) {
-				DropRenderTarget();
+		if (technology == 3) {
+			DropGraphics(false);
+			ID2D1DCRenderTarget *pDCRT = CreateDCRenderTarget(hdc);
+			if (pDCRT) {
+				AutoSurface surfaceWindow(pDCRT, this);
+				if (surfaceWindow) {
+					pDCRT->BeginDraw();
+					Paint(surfaceWindow, rcPaint);
+					surfaceWindow->Release();
+					pDCRT->EndDraw();
+				}
+				pDCRT->Release();
+			}
+		} else {
+			EnsureRenderTarget();
+			AutoSurface surfaceWindow(pRenderTarget, this);
+			if (surfaceWindow) {
+				pRenderTarget->BeginDraw();
+				Paint(surfaceWindow, rcPaint);
+				surfaceWindow->Release();
+				HRESULT hr = pRenderTarget->EndDraw();
+				if (hr == D2DERR_RECREATE_TARGET) {
+					DropRenderTarget();
+				}
 			}
 		}
 #endif
