 			{
 				var codeEditor:CodeEditor = new CodeEditor();
 				codeEditor.addEventListener(FlexEvent.CREATION_COMPLETE, function(event:Event):void {
-					linkBindableProperty(lv, event.target, 'text', 500, true)
+					if (!(lv is LinkableString) && JsonSynchronizer.available)
+						new JsonSynchronizer(lv, codeEditor, 'text');
+					else
+						linkBindableProperty(lv, event.target, 'text', 500, true)
 					
 					var eb:ExpandButton = ExpandButton.makeExpandable(codeEditor, false, 24);
 					eb.addEventListener(MouseEvent.CLICK, function(e:Event):void {


internal class JsonSynchronizer
{
	public static function available():Boolean
	{
		return ClassUtils.getClassDefinition('JSON') != null;
	}
	
	public function JsonSynchronizer(linkableVariable:ILinkableVariable, host:DisplayObject, prop:String)
	{
		this.lv = linkableVariable;
		this.host = host;
		this.prop = prop;
		
		getCallbackCollection(lv).addImmediateCallback(host, handleObject, true);
		BindingUtils.bindSetter(EventUtils.generateDelayedCallback(linkableVariable, handleJson, 500, true), this.host, this.prop);
	}
	
	public var JSON:Object = ClassUtils.getClassDefinition('JSON');
	public var lv:ILinkableVariable;
	public var host:Object;
	public var prop:String;
	
	private function handleObject():void
	{
		host[prop] = JSON.stringify(lv.getSessionState());
	}
	
	private function handleJson(value:* = null):void
	{
		lv.setSessionState(JSON.parse(value));
	}
}

			if (ln)
			{
				var input:IndentTextInput = new IndentTextInput();
				input.prompt = "number";
				input.translate = true;
				input.label = label;
				linkBindableProperty(ln, input, 'text', 250, true);
