diff --git a/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/library/cef3.c b/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/library/cef3.c
index 0502b61..6f2203f 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/library/cef3.c
+++ b/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/library/cef3.c
@@ -23,7 +23,7 @@
 {
 	jint rc = 0;
 	CEF3_NATIVE_ENTER(env, that, callFuncInt_FUNC);
-	rc = (jint)((jint(CEF_CALLBACK*)())arg0)(arg1);
+	rc = (jint)((jint (CEF_CALLBACK*)())arg0)(arg1);
 	CEF3_NATIVE_EXIT(env, that, callFuncInt_FUNC);
 	return rc;
 }
@@ -35,7 +35,7 @@
 {
 	jintLong rc = 0;
 	CEF3_NATIVE_ENTER(env, that, callFuncPtr_FUNC);
-	rc = (jintLong)((jintLong(CEF_CALLBACK*)())arg0)(arg1);
+	rc = (jintLong)((jintLong (CEF_CALLBACK*)())arg0)(arg1);
 	CEF3_NATIVE_EXIT(env, that, callFuncPtr_FUNC);
 	return rc;
 }
@@ -53,7 +53,7 @@
 #else
 	CEF3_NATIVE_ENTER(env, that, callFuncVoid__JJ_FUNC);
 #endif
-	((void(CEF_CALLBACK*)())arg0)(arg1);
+	((void (CEF_CALLBACK*)())arg0)(arg1);
 #ifndef JNI64
 	CEF3_NATIVE_EXIT(env, that, callFuncVoid__II_FUNC);
 #else
@@ -74,7 +74,7 @@
 #else
 	CEF3_NATIVE_ENTER(env, that, callFuncVoid__JJJ_FUNC);
 #endif
-	((void(CEF_CALLBACK*)())arg0)(arg1, arg2);
+	((void (CEF_CALLBACK*)())arg0)(arg1, arg2);
 #ifndef JNI64
 	CEF3_NATIVE_EXIT(env, that, callFuncVoid__III_FUNC);
 #else
@@ -270,7 +270,7 @@
 #else
 	CEF3_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_cef3_cef_1base_1t_2JJ_FUNC);
 #endif
-	if (arg0) if ((lparg0 = getcef_base_tFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg0) if ((lparg0 = &_arg0) == NULL) goto fail;
 	memmove((void *)lparg0, (const void *)arg1, (size_t)arg2);
 fail:
 	if (arg0 && lparg0) setcef_base_tFields(env, arg0, lparg0);
@@ -295,7 +295,7 @@
 #else
 	CEF3_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_cef3_cef_1browser_1t_2JJ_FUNC);
 #endif
-	if (arg0) if ((lparg0 = getcef_browser_tFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg0) if ((lparg0 = &_arg0) == NULL) goto fail;
 	memmove((void *)lparg0, (const void *)arg1, (size_t)arg2);
 fail:
 	if (arg0 && lparg0) setcef_browser_tFields(env, arg0, lparg0);
@@ -320,7 +320,7 @@
 #else
 	CEF3_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_cef3_cef_1frame_1t_2JJ_FUNC);
 #endif
-	if (arg0) if ((lparg0 = getcef_frame_tFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg0) if ((lparg0 = &_arg0) == NULL) goto fail;
 	memmove((void *)lparg0, (const void *)arg1, (size_t)arg2);
 fail:
 	if (arg0 && lparg0) setcef_frame_tFields(env, arg0, lparg0);
@@ -345,7 +345,7 @@
 #else
 	CEF3_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_cef3_cef_1string_1t_2JJ_FUNC);
 #endif
-	if (arg0) if ((lparg0 = getcef_string_tFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg0) if ((lparg0 = &_arg0) == NULL) goto fail;
 	memmove((void *)lparg0, (const void *)arg1, (size_t)arg2);
 fail:
 	if (arg0 && lparg0) setcef_string_tFields(env, arg0, lparg0);
diff --git a/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/library/cef3_structs.c b/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/library/cef3_structs.c
index 1666743..eb746df 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/library/cef3_structs.c
+++ b/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/library/cef3_structs.c
@@ -279,7 +279,7 @@
 typedef struct cef_browser_t_FID_CACHE {
 	int cached;
 	jclass clazz;
-	jfieldID get_host, can_go_back, go_back, can_go_forward, go_forward, is_loading, reload, reload_ignore_cache, stop_load, get_identifier, is_same, is_popup, has_document, get_main_frame, get_focused_frame, get_frame_byident, get_frame, get_frame_count, get_frame_identifiers, get_frame_names, send_process_message;
+	jfieldID get_host, can_go_back, go_back, can_go_forward, go_forward, is_loading, reload, reload_ignore_cache, stop_load, get_identifier, is_popup, has_document, get_main_frame, get_focused_frame, get_frame_byident, get_frame, get_frame_count, get_frame_identifiers, get_frame_names, send_process_message;
 } cef_browser_t_FID_CACHE;
 
 cef_browser_t_FID_CACHE cef_browser_tFc;
@@ -299,7 +299,6 @@
 	cef_browser_tFc.reload_ignore_cache = (*env)->GetFieldID(env, cef_browser_tFc.clazz, "reload_ignore_cache", I_J);
 	cef_browser_tFc.stop_load = (*env)->GetFieldID(env, cef_browser_tFc.clazz, "stop_load", I_J);
 	cef_browser_tFc.get_identifier = (*env)->GetFieldID(env, cef_browser_tFc.clazz, "get_identifier", I_J);
-	cef_browser_tFc.is_same = (*env)->GetFieldID(env, cef_browser_tFc.clazz, "is_same", I_J);
 	cef_browser_tFc.is_popup = (*env)->GetFieldID(env, cef_browser_tFc.clazz, "is_popup", I_J);
 	cef_browser_tFc.has_document = (*env)->GetFieldID(env, cef_browser_tFc.clazz, "has_document", I_J);
 	cef_browser_tFc.get_main_frame = (*env)->GetFieldID(env, cef_browser_tFc.clazz, "get_main_frame", I_J);
@@ -327,7 +326,6 @@
 	lpStruct->reload_ignore_cache = (void (CEF_CALLBACK *)(struct _cef_browser_t* self))(*env)->GetIntLongField(env, lpObject, cef_browser_tFc.reload_ignore_cache);
 	lpStruct->stop_load = (void (CEF_CALLBACK *)(struct _cef_browser_t* self))(*env)->GetIntLongField(env, lpObject, cef_browser_tFc.stop_load);
 	lpStruct->get_identifier = (int (CEF_CALLBACK *)(struct _cef_browser_t* self))(*env)->GetIntLongField(env, lpObject, cef_browser_tFc.get_identifier);
-	lpStruct->is_same = (int (CEF_CALLBACK *)(struct _cef_browser_t* self, struct _cef_browser_t* that))(*env)->GetIntLongField(env, lpObject, cef_browser_tFc.is_same);
 	lpStruct->is_popup = (int (CEF_CALLBACK *)(struct _cef_browser_t* self))(*env)->GetIntLongField(env, lpObject, cef_browser_tFc.is_popup);
 	lpStruct->has_document = (int (CEF_CALLBACK *)(struct _cef_browser_t* self))(*env)->GetIntLongField(env, lpObject, cef_browser_tFc.has_document);
 	lpStruct->get_main_frame = (struct _cef_frame_t* (CEF_CALLBACK *)(struct _cef_browser_t* self))(*env)->GetIntLongField(env, lpObject, cef_browser_tFc.get_main_frame);
@@ -355,7 +353,6 @@
 	(*env)->SetIntLongField(env, lpObject, cef_browser_tFc.reload_ignore_cache, (jintLong)lpStruct->reload_ignore_cache);
 	(*env)->SetIntLongField(env, lpObject, cef_browser_tFc.stop_load, (jintLong)lpStruct->stop_load);
 	(*env)->SetIntLongField(env, lpObject, cef_browser_tFc.get_identifier, (jintLong)lpStruct->get_identifier);
-	(*env)->SetIntLongField(env, lpObject, cef_browser_tFc.is_same, (jintLong)lpStruct->is_same);
 	(*env)->SetIntLongField(env, lpObject, cef_browser_tFc.is_popup, (jintLong)lpStruct->is_popup);
 	(*env)->SetIntLongField(env, lpObject, cef_browser_tFc.has_document, (jintLong)lpStruct->has_document);
 	(*env)->SetIntLongField(env, lpObject, cef_browser_tFc.get_main_frame, (jintLong)lpStruct->get_main_frame);
@@ -507,7 +504,7 @@
 typedef struct cef_settings_t_FID_CACHE {
 	int cached;
 	jclass clazz;
-	jfieldID size, single_process, browser_subprocess_path, multi_threaded_message_loop, command_line_args_disabled, cache_path, user_agent, product_version, locale, log_file, log_severity, release_dcheck_enabled, javascript_flags, auto_detect_proxy_settings_enabled, resources_dir_path, locales_dir_path, pack_loading_disabled, remote_debugging_port, uncaught_exception_stack_size, context_safety_implementation;
+	jfieldID size, single_process, browser_subprocess_path, multi_threaded_message_loop, command_line_args_disabled, cache_path, user_agent, product_version, locale, log_file, log_severity, javascript_flags, auto_detect_proxy_settings_enabled, resources_dir_path, locales_dir_path, pack_loading_disabled, remote_debugging_port;
 } cef_settings_t_FID_CACHE;
 
 cef_settings_t_FID_CACHE cef_settings_tFc;
@@ -527,15 +524,12 @@
 	cef_settings_tFc.locale = (*env)->GetFieldID(env, cef_settings_tFc.clazz, "locale", "Lorg/eclipse/swt/internal/cef3/cef_string_t;");
 	cef_settings_tFc.log_file = (*env)->GetFieldID(env, cef_settings_tFc.clazz, "log_file", "Lorg/eclipse/swt/internal/cef3/cef_string_t;");
 	cef_settings_tFc.log_severity = (*env)->GetFieldID(env, cef_settings_tFc.clazz, "log_severity", "I");
-	cef_settings_tFc.release_dcheck_enabled = (*env)->GetFieldID(env, cef_settings_tFc.clazz, "release_dcheck_enabled", "I");
 	cef_settings_tFc.javascript_flags = (*env)->GetFieldID(env, cef_settings_tFc.clazz, "javascript_flags", "Lorg/eclipse/swt/internal/cef3/cef_string_t;");
 	cef_settings_tFc.auto_detect_proxy_settings_enabled = (*env)->GetFieldID(env, cef_settings_tFc.clazz, "auto_detect_proxy_settings_enabled", "I");
 	cef_settings_tFc.resources_dir_path = (*env)->GetFieldID(env, cef_settings_tFc.clazz, "resources_dir_path", "Lorg/eclipse/swt/internal/cef3/cef_string_t;");
 	cef_settings_tFc.locales_dir_path = (*env)->GetFieldID(env, cef_settings_tFc.clazz, "locales_dir_path", "Lorg/eclipse/swt/internal/cef3/cef_string_t;");
 	cef_settings_tFc.pack_loading_disabled = (*env)->GetFieldID(env, cef_settings_tFc.clazz, "pack_loading_disabled", "I");
 	cef_settings_tFc.remote_debugging_port = (*env)->GetFieldID(env, cef_settings_tFc.clazz, "remote_debugging_port", "I");
-	cef_settings_tFc.uncaught_exception_stack_size = (*env)->GetFieldID(env, cef_settings_tFc.clazz, "uncaught_exception_stack_size", "I");
-	cef_settings_tFc.context_safety_implementation = (*env)->GetFieldID(env, cef_settings_tFc.clazz, "context_safety_implementation", "I");
 	cef_settings_tFc.cached = 1;
 }
 
@@ -571,7 +565,6 @@
 	if (lpObject1 != NULL) getcef_string_tFields(env, lpObject1, &lpStruct->log_file);
 	}
 	lpStruct->log_severity = (*env)->GetIntField(env, lpObject, cef_settings_tFc.log_severity);
-	lpStruct->release_dcheck_enabled = (*env)->GetIntField(env, lpObject, cef_settings_tFc.release_dcheck_enabled);
 	{
 	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, cef_settings_tFc.javascript_flags);
 	if (lpObject1 != NULL) getcef_string_tFields(env, lpObject1, &lpStruct->javascript_flags);
@@ -587,8 +580,6 @@
 	}
 	lpStruct->pack_loading_disabled = (*env)->GetIntField(env, lpObject, cef_settings_tFc.pack_loading_disabled);
 	lpStruct->remote_debugging_port = (*env)->GetIntField(env, lpObject, cef_settings_tFc.remote_debugging_port);
-	lpStruct->uncaught_exception_stack_size = (*env)->GetIntField(env, lpObject, cef_settings_tFc.uncaught_exception_stack_size);
-	lpStruct->context_safety_implementation = (*env)->GetIntField(env, lpObject, cef_settings_tFc.context_safety_implementation);
 	return lpStruct;
 }
 
@@ -624,7 +615,6 @@
 	if (lpObject1 != NULL) setcef_string_tFields(env, lpObject1, &lpStruct->log_file);
 	}
 	(*env)->SetIntField(env, lpObject, cef_settings_tFc.log_severity, (jint)lpStruct->log_severity);
-	(*env)->SetIntField(env, lpObject, cef_settings_tFc.release_dcheck_enabled, (jint)lpStruct->release_dcheck_enabled);
 	{
 	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, cef_settings_tFc.javascript_flags);
 	if (lpObject1 != NULL) setcef_string_tFields(env, lpObject1, &lpStruct->javascript_flags);
@@ -640,8 +630,6 @@
 	}
 	(*env)->SetIntField(env, lpObject, cef_settings_tFc.pack_loading_disabled, (jint)lpStruct->pack_loading_disabled);
 	(*env)->SetIntField(env, lpObject, cef_settings_tFc.remote_debugging_port, (jint)lpStruct->remote_debugging_port);
-	(*env)->SetIntField(env, lpObject, cef_settings_tFc.uncaught_exception_stack_size, (jint)lpStruct->uncaught_exception_stack_size);
-	(*env)->SetIntField(env, lpObject, cef_settings_tFc.context_safety_implementation, (jint)lpStruct->context_safety_implementation);
 }
 #endif
 
diff --git a/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEF.java b/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEF.java
index e88ac56..6d3b122 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEF.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEF.java
@@ -48,7 +48,6 @@
 				cef_settings_t settings = new cef_settings_t();
 				settings.size = cef_settings_t.sizeof;
 				settings.multi_threaded_message_loop = 1;
-				settings.release_dcheck_enabled = 1; // TODO remove this before release to master
 				// TODO extract cef3_subprocess.exe from the jar appropriately, point at its extracted location
 			//	long /*int*/ subprocessPath = createCEFString("C:\\cef3-1180\\chromium\\src\\cef\\binary_distrib\\cef_binary_3.1180.None_windows\\Release\\cef3_subprocess.exe");
 				long /*int*/ subprocessPath = createCEFString("C:\\cef3bin-1180\\cef_binary_3.1180.823_windows\\Release\\cef3_subprocess.exe");
diff --git a/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEFBrowserProcessHandler.java b/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEFBrowserProcessHandler.java
index 68fd491..ec5be9a 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEFBrowserProcessHandler.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEFBrowserProcessHandler.java
@@ -18,14 +18,13 @@
 	int refCount = 1;
 
 public CEFBrowserProcessHandler() {
-	object = new CEF3Object (new int[] {0, 0, 0, 0, 0, 1, 1}) {
+	object = new CEF3Object (new int[] {0, 0, 0, 0, 0, 1}) {
 		public long /*int*/ method0(long /*int*/[] args) {return add_ref();}
 		public long /*int*/ method1(long /*int*/[] args) {return CEFBrowserProcessHandler.this.release();}
 		public long /*int*/ method2(long /*int*/[] args) {return get_refct();}
 		public long /*int*/ method3(long /*int*/[] args) {return get_proxy_handler();}
 		public long /*int*/ method4(long /*int*/[] args) {return on_context_initialized();}
 		public long /*int*/ method5(long /*int*/[] args) {return on_before_child_process_launch(args[0]);}
-		public long /*int*/ method6(long /*int*/[] args) {return on_render_process_thread_created(args[0]);}
 	};
 }
 
@@ -74,9 +73,4 @@
 	return 0;
 }
 
-long /*int*/ on_render_process_thread_created(long /*int*/ extra_info) {
-	if (Device.DEBUG) System.out.println("on_render_process_thread_created");
-	return 0;
-}
-
 }
diff --git a/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEFRenderProcessHandler.java b/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEFRenderProcessHandler.java
index cb2953b..8d9610e 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEFRenderProcessHandler.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEFRenderProcessHandler.java
@@ -18,20 +18,18 @@
 	int refCount = 1;
 
 public CEFRenderProcessHandler() {
-	object = new CEF3Object (new int[] {0, 0, 0, 1, 0, 1, 1, 5, 3, 3, 5, 3, 3}) {
+	object = new CEF3Object (new int[] {0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3}) {
 		public long /*int*/ method0(long /*int*/[] args) {return add_ref();}
 		public long /*int*/ method1(long /*int*/[] args) {return CEFRenderProcessHandler.this.release();}
 		public long /*int*/ method2(long /*int*/[] args) {return get_refct();}
-		public long /*int*/ method3(long /*int*/[] args) {return on_render_thread_created(args[0]);}
+		public long /*int*/ method3(long /*int*/[] args) {return on_render_thread_created();}
 		public long /*int*/ method4(long /*int*/[] args) {return on_web_kit_initialized();}
 		public long /*int*/ method5(long /*int*/[] args) {return on_browser_created(args[0]);}
 		public long /*int*/ method6(long /*int*/[] args) {return on_browser_destroyed(args[0]);}
-		public long /*int*/ method7(long /*int*/[] args) {return on_before_navigation(args[0], args[1], args[2], (int)/*64*/args[3], (int)/*64*/args[4]);}
-		public long /*int*/ method8(long /*int*/[] args) {return on_context_created(args[0], args[1], args[2]);}
-		public long /*int*/ method9(long /*int*/[] args) {return on_context_released(args[0], args[1], args[2]);}
-		public long /*int*/ method10(long /*int*/[] args) {return on_uncaught_exception(args[0], args[1], args[2], args[3], args[4]);}
-		public long /*int*/ method11(long /*int*/[] args) {return on_focused_node_changed(args[0], args[1], args[2]);}
-		public long /*int*/ method12(long /*int*/[] args) {return on_process_message_received(args[0], (int)/*64*/args[1], args[2]);}
+		public long /*int*/ method7(long /*int*/[] args) {return on_context_created(args[0], args[1], args[2]);}
+		public long /*int*/ method8(long /*int*/[] args) {return on_context_released(args[0], args[1], args[2]);}
+		public long /*int*/ method9(long /*int*/[] args) {return on_focused_node_changed(args[0], args[1], args[2]);}
+		public long /*int*/ method10(long /*int*/[] args) {return on_process_message_received(args[0], (int)/*64*/args[1], args[2]);}
 	};
 }
 
@@ -63,7 +61,7 @@
 
 /* cef_render_process_handler_t */
 
-long /*int*/ on_render_thread_created(long /*int*/ extra_info) {
+long /*int*/ on_render_thread_created() {
 	if (Device.DEBUG) System.out.println("on_render_thread_created");
 	return 0;
 }
@@ -85,11 +83,6 @@
 	return 0;
 }
 
-long /*int*/ on_before_navigation(long /*int*/ browser, long /*int*/ frame, long /*int*/ request, int navigation_type, int is_redirect) {
-	if (Device.DEBUG) System.out.println("on_before_navigation (TODO)");
-	return 0;
-}
-	      
 long /*int*/ on_context_created(long /*int*/ browser, long /*int*/ frame, long /*int*/ context) {
 	if (Device.DEBUG) System.out.println("on_context_created (TODO)");
 	return 0;
@@ -100,11 +93,6 @@
 	return 0;
 }
 
-long /*int*/ on_uncaught_exception(long /*int*/ browser, long /*int*/ frame, long /*int*/ context, long /*int*/ exception, long /*int*/ stackTrace) {
-	if (Device.DEBUG) System.out.println("on_uncaught_exception");
-	return 0;
-}
-
 long /*int*/ on_focused_node_changed(long /*int*/ browser, long /*int*/ frame, long /*int*/ node) {
 	if (Device.DEBUG) System.out.println("on_focused_node_changed");
 	return 0;
diff --git a/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/internal/cef3/cef_browser_t.java b/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/internal/cef3/cef_browser_t.java
index 2016686..0132477 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/internal/cef3/cef_browser_t.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/internal/cef3/cef_browser_t.java
@@ -43,9 +43,6 @@
 	/** @field cast=(int (CEF_CALLBACK *)(struct _cef_browser_t* self)) */
 	public long /*int*/ get_identifier;
 	
-	/** @field cast="(int (CEF_CALLBACK *)(struct _cef_browser_t* self, struct _cef_browser_t* that))" */
-	public long /*int*/ is_same;
-	
 	/** @field cast=(int (CEF_CALLBACK *)(struct _cef_browser_t* self)) */
 	public long /*int*/ is_popup;
 	
diff --git a/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/internal/cef3/cef_settings_t.java b/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/internal/cef3/cef_settings_t.java
index 26104e9..17b9ffc 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/internal/cef3/cef_settings_t.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/internal/cef3/cef_settings_t.java
@@ -26,15 +26,12 @@
 	public cef_string_t locale = CEF.STRING_EMPTY;
 	public cef_string_t log_file = CEF.STRING_EMPTY;
 	public int log_severity;
-	public int release_dcheck_enabled;
 	public cef_string_t javascript_flags = CEF.STRING_EMPTY;
 	public int auto_detect_proxy_settings_enabled;
 	public cef_string_t resources_dir_path = CEF.STRING_EMPTY;
 	public cef_string_t locales_dir_path = CEF.STRING_EMPTY;
 	public int pack_loading_disabled;
 	public int remote_debugging_port;
-	public int uncaught_exception_stack_size;
-	public int context_safety_implementation;
 	  
 	public static final int sizeof = CEF3.cef_settings_t_sizeof ();
 }
