diff --git a/CHANGELOG.md b/CHANGELOG.md
index ac587db8..dca0c2d4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,18 @@
Rhai Release Notes
==================
+Version 1.11.0
+==============
+
+New features
+------------
+
+### Custom syntax with state
+
+* [`Engine::register_custom_syntax_with_state_raw`] is added. The custom syntax parser and implementation functions take on an additional parameter that holds a user-defined custom _state_ which should substantially simplify writing some custom parsers.
+* [`Engine::register_custom_syntax_raw`] is deprecated.
+
+
Version 1.10.0
==============
diff --git a/src/api/custom_syntax.rs b/src/api/custom_syntax.rs
index 26abf716..ad7e5b40 100644
--- a/src/api/custom_syntax.rs
+++ b/src/api/custom_syntax.rs
@@ -7,8 +7,8 @@ use crate::parser::ParseResult;
use crate::tokenizer::{is_valid_identifier, Token};
use crate::types::dynamic::Variant;
use crate::{
- reify, Engine, EvalContext, Identifier, ImmutableString, LexError, Position, RhaiResult,
- StaticVec,
+ reify, Dynamic, Engine, EvalContext, Identifier, ImmutableString, LexError, Position,
+ RhaiResult, StaticVec,
};
use std::ops::Deref;
#[cfg(feature = "no_std")]
@@ -39,19 +39,21 @@ pub mod markers {
/// A general expression evaluation trait object.
#[cfg(not(feature = "sync"))]
-pub type FnCustomSyntaxEval = dyn Fn(&mut EvalContext, &[Expression]) -> RhaiResult;
+pub type FnCustomSyntaxEval = dyn Fn(&mut EvalContext, &[Expression], &Dynamic) -> RhaiResult;
/// A general expression evaluation trait object.
#[cfg(feature = "sync")]
-pub type FnCustomSyntaxEval = dyn Fn(&mut EvalContext, &[Expression]) -> RhaiResult + Send + Sync;
+pub type FnCustomSyntaxEval =
+ dyn Fn(&mut EvalContext, &[Expression], &Dynamic) -> RhaiResult + Send + Sync;
/// A general expression parsing trait object.
#[cfg(not(feature = "sync"))]
pub type FnCustomSyntaxParse =
- dyn Fn(&[ImmutableString], &str) -> ParseResult