diff --git a/src/web-cef3/web.cpp b/src/web-cef3/web.cpp
index 4a80a3449f81cf42b798b87f7c8ba0b20ccf642b..4e40ceeebc9137a00eeca973ad34591c68499bc5 100644
--- a/src/web-cef3/web.cpp
+++ b/src/web-cef3/web.cpp
@@ -89,6 +89,7 @@ class BrowserClient;
 
 class WebViewOpaque {
 public:
+	bool crashed;
 	CefRefPtr<RenderHandler> render;
 	CefRefPtr<CefBrowser> browser;
 	CefRefPtr<BrowserClient> view;
@@ -158,6 +159,25 @@ public:
 		return false;
 	}
 
+	virtual bool OnBeforePluginLoad(CefRefPtr<CefBrowser> browser, const CefString& url, const CefString& policy_url, CefRefPtr<CefWebPluginInfo> info) OVERRIDE {
+		char *name = cstring_to_c(info->GetName());
+		char *path = cstring_to_c(info->GetPath());
+		fprintf(logfile, "[WEBCORE] Forbade plugin %s from %s\n", name, path);
+		free(name);
+		free(path);
+		return true;
+	}
+
+	virtual void OnRenderProcessTerminated(CefRefPtr<CefBrowser> browser, TerminationStatus status) OVERRIDE {
+		if ((status == TS_ABNORMAL_TERMINATION) || (status == TS_PROCESS_WAS_KILLED) || (status == TS_PROCESS_CRASHED)) {
+			opaque->crashed = true;
+			WebEvent *event = new WebEvent();
+			event->kind = TE4_WEB_EVENT_END_BROWSER;
+			event->handlers = handlers;
+			push_event(event);
+		}
+	}
+
 	virtual bool OnBeforePopup(CefRefPtr<CefBrowser> browser,
 	                             CefRefPtr<CefFrame> frame,
 	                             const CefString& target_url,
@@ -314,12 +334,15 @@ void te4_web_new(web_view_type *view, int w, int h) {
 
 	CefWindowInfo window_info;
 	CefBrowserSettings browserSettings;
+	browserSettings.java = STATE_DISABLED;
+	browserSettings.plugins = STATE_DISABLED;
 	window_info.SetAsOffScreen(NULL);
 	window_info.SetTransparentPainting(true);
 	opaque->render = new RenderHandler(w, h);
 	opaque->view = new BrowserClient(opaque, opaque->render, view->handlers);
 	CefString curl("");
 	opaque->browser = CefBrowserHost::CreateBrowserSync(window_info, opaque->view.get(), curl, browserSettings);
+	opaque->crashed = false;
 
 	view->w = w;
 	view->h = h;
@@ -331,9 +354,13 @@ bool te4_web_close(web_view_type *view) {
 	WebViewOpaque *opaque = (WebViewOpaque*)view->opaque;
 	if (!view->closed) {
 		view->closed = true;
-		fprintf(logfile, "[WEBCORE] Destroying webview for browser\n");
-		opaque->browser->GetHost()->CloseBrowser(true);
-		fprintf(logfile, "[WEBCORE] Destroying send done\n");
+		if (opaque->crashed) {
+			fprintf(logfile, "[WEBCORE] Destroying webview but it was already crashed, doing nothing\n");
+		} else {
+			fprintf(logfile, "[WEBCORE] Destroying webview for browser\n");
+			opaque->browser->GetHost()->CloseBrowser(true);
+			fprintf(logfile, "[WEBCORE] Destroying send done\n");
+		}
 		return true;
 	}
 	return false;
diff --git a/src/web-external.h b/src/web-external.h
index bf1a837555cb4d41ad8da4d96dd98d1ccacc8443..6a1afc2b75a0ebee0208d0f63785f17c76151690 100644
--- a/src/web-external.h
+++ b/src/web-external.h
@@ -35,6 +35,7 @@ enum web_event_kind {
 	TE4_WEB_EVENT_LOADING,
 	TE4_WEB_EVENT_LOCAL_REQUEST,
 	TE4_WEB_EVENT_RUN_LUA,
+	TE4_WEB_EVENT_END_BROWSER,
 };
 
 typedef struct {