Index: /FCKeditor.Java/branches/2.4/src/main/java/net/fckeditor/FCKeditor.java
===================================================================
--- /FCKeditor.Java/branches/2.4/src/main/java/net/fckeditor/FCKeditor.java	(revision 1468)
+++ /FCKeditor.Java/branches/2.4/src/main/java/net/fckeditor/FCKeditor.java	(revision 1469)
@@ -38,11 +38,11 @@
 public class FCKeditor {
 
-	private FCKeditorConfigurations oConfig;
+	private FCKeditorConfig config;
 	private String instanceName;
 	private String value;
 	private String basePath;
-	private String toolbarSet;
-	private String width;
-	private String height;
+	private String toolbarSet = ConfigurationHandler.getFckEditorToolbarSet();
+	private String width = ConfigurationHandler.getFckEditorWidth();
+	private String height = ConfigurationHandler.getFckEditorHeight();
 
 	private HttpServletRequest request;
@@ -66,40 +66,36 @@
 	 *            initial value
 	 */
-	public FCKeditor(final HttpServletRequest request, final String instanceName,
-	        final String width, final String height, final String toolbarSet, final String value) {
+	public FCKeditor(final HttpServletRequest request,
+			final String instanceName, final String width, final String height,
+			final String toolbarSet, final String basePath) {
 		this.request = request;
+		this.instanceName = instanceName;
+		if (Utils.isNotEmpty(width))
+			this.width = width;
+		if (Utils.isNotEmpty(height))
+			this.height = height;
+		if (Utils.isNotEmpty(toolbarSet))
+			this.toolbarSet = toolbarSet;
 		// TODO muss das mit einem Slash abgeschlossen werden?
-		this.basePath = request.getContextPath() + ConfigurationHandler.getFckEditorDir() + "/";
-		this.instanceName = instanceName;
-
-		// set defaults, if required
-		this.value = (value == null) ? "" : value;
-		this.toolbarSet = (toolbarSet == null) ? ConfigurationHandler.getFckEditorToolbarSet()
-		        : toolbarSet;
-		this.width = (width == null) ? ConfigurationHandler.getFckEditorWidth() : width;
-		this.height = (height == null) ? ConfigurationHandler.getFckEditorHeight() : height;
-
-		oConfig = new FCKeditorConfigurations();
-	}
-
+		if (Utils.isNotEmpty(basePath))
+			this.basePath = request.getContextPath() + basePath;
+		else
+			this.basePath = request.getContextPath()
+					+ ConfigurationHandler.getFckEditorDir();
+
+		config = new FCKeditorConfig();
+	}
+	
 	/**
 	 * Just a wrapper to {@link FCKeditor}.
 	 * 
-	 * @param req
+	 * @param request
 	 *            request object
-	 * @param parInstanceName
+	 * @param instanceName
 	 *            unique name
 	 */
-	public FCKeditor(final HttpServletRequest req, final String parInstanceName) {
-		this(req, parInstanceName, null, null, null, null);
-	}
-
-	/**
-	 * Get the unique name of the editor
-	 * 
-	 * @return name
-	 */
-	public String getInstanceName() {
-		return instanceName;
+	@Deprecated
+	public FCKeditor(final HttpServletRequest request, final String instanceName) {
+		this(request, instanceName, null, null, null, null);
 	}
 
@@ -115,14 +111,4 @@
 
 	/**
-	 * Get the initial value to be edited.<br>
-	 * In HTML code
-	 * 
-	 * @return value
-	 */
-	public String getValue() {
-		return value;
-	}
-
-	/**
 	 * Set the initial value to be edited.<br>
 	 * In HTML code
@@ -133,13 +119,4 @@
 	public void setValue(String value) {
 		this.value = value;
-	}
-
-	/**
-	 * Get the dir where the FCKeditor files reside on the server
-	 * 
-	 * @return path
-	 */
-	public String getBasePath() {
-		return basePath;
 	}
 
@@ -158,13 +135,4 @@
 
 	/**
-	 * Get the name of the toolbar to display
-	 * 
-	 * @return toolbar name
-	 */
-	public String getToolbarSet() {
-		return toolbarSet;
-	}
-
-	/**
 	 * Set the name of the toolbar to display
 	 * 
@@ -177,13 +145,4 @@
 
 	/**
-	 * Get the width of the textarea
-	 * 
-	 * @return width
-	 */
-	public String getWidth() {
-		return width;
-	}
-
-	/**
 	 * Set the width of the textarea
 	 * 
@@ -193,13 +152,4 @@
 	public void setWidth(String value) {
 		width = value;
-	}
-
-	/**
-	 * Get the height of the textarea
-	 * 
-	 * @return height
-	 */
-	public String getHeight() {
-		return height;
 	}
 
@@ -221,6 +171,6 @@
 	 * @return configuration collection
 	 */
-	public FCKeditorConfigurations getConfig() {
-		return oConfig;
+	public FCKeditorConfig getConfig() {
+		return config;
 	}
 
@@ -231,6 +181,6 @@
 	 *            configuration collection
 	 */
-	public void setConfig(FCKeditorConfigurations value) {
-		oConfig = value;
+	public void setConfig(FCKeditorConfig value) {
+		config = value;
 	}
 
@@ -250,4 +200,10 @@
 		return createHtml();
 	}
+	
+	@Override
+	public String toString() {
+		
+		return createHtml();
+	}
 
 	/**
@@ -268,5 +224,5 @@
 
 			// create config html
-			String configStr = oConfig.getUrlParams();
+			String configStr = config.getUrlParams();
 			if (Utils.isNotEmpty(configStr))
 				// configStr = configStr.substring(1);
@@ -321,12 +277,3 @@
 		return (request != null) ? Compatibility.check(request.getHeader("user-agent")) : false;
 	}
-	
-	/**
-	 * Checks, if the Connector is enabled or not.
-	 * 
-	 * @return True, if the Connector is enabled, otherwise false.
-	 */
-	public boolean isConnectorEnabled() {
-		return ConfigurationHandler.isConnectorEnabled();
-	}
 }
Index: /FCKeditor.Java/branches/2.4/src/main/java/net/fckeditor/tags/ConfigTag.java
===================================================================
--- /FCKeditor.Java/branches/2.4/src/main/java/net/fckeditor/tags/ConfigTag.java	(revision 1469)
+++ /FCKeditor.Java/branches/2.4/src/main/java/net/fckeditor/tags/ConfigTag.java	(revision 1469)
@@ -0,0 +1,35 @@
+package net.fckeditor.tags;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.Tag;
+import javax.servlet.jsp.tagext.TagSupport;
+
+public class ConfigTag extends TagSupport {
+
+	private String param;
+	private String value;
+
+	private static final long serialVersionUID = -5282810094404700422L;
+
+	public void setParam(String param) {
+		this.param = param;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+
+	@Override
+	public int doStartTag() throws JspException {
+
+		Tag ancestor = findAncestorWithClass(this, EditorTag.class);
+		if (ancestor == null)
+			throw new JspException(
+					"the config tag can only be nested within an editor tag");
+		EditorTag editorTag = (EditorTag) ancestor;
+		editorTag.setConfigParam(param, value);
+		
+		return SKIP_BODY;
+	}
+
+}
Index: /FCKeditor.Java/branches/2.4/src/main/java/net/fckeditor/tags/ContentTag.java
===================================================================
--- /FCKeditor.Java/branches/2.4/src/main/java/net/fckeditor/tags/ContentTag.java	(revision 1469)
+++ /FCKeditor.Java/branches/2.4/src/main/java/net/fckeditor/tags/ContentTag.java	(revision 1469)
@@ -0,0 +1,30 @@
+package net.fckeditor.tags;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.BodyTagSupport;
+import javax.servlet.jsp.tagext.Tag;
+
+public class ContentTag extends BodyTagSupport {
+
+	private static final long serialVersionUID = 8640710306648001050L;
+	private Tag ancestor;
+
+	@Override
+	public int doStartTag() throws JspException {
+		ancestor = findAncestorWithClass(this, EditorTag.class);
+		if (ancestor == null)
+			throw new JspException(
+					"the content tag can only be nested within an editor tag");
+		return EVAL_BODY_BUFFERED;
+	}
+
+	@Override
+	public int doAfterBody() throws JspException {
+
+		EditorTag editorTag = (EditorTag) ancestor;
+		editorTag.setValue(getBodyContent().getString());
+
+		return SKIP_BODY;
+	}
+
+}
Index: /FCKeditor.Java/branches/2.4/src/main/java/net/fckeditor/tags/EditorTag.java
===================================================================
--- /FCKeditor.Java/branches/2.4/src/main/java/net/fckeditor/tags/EditorTag.java	(revision 1469)
+++ /FCKeditor.Java/branches/2.4/src/main/java/net/fckeditor/tags/EditorTag.java	(revision 1469)
@@ -0,0 +1,164 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ * 
+ * == BEGIN LICENSE ==
+ * 
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ * 
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ * 
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ * 
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ * 
+ * == END LICENSE ==
+ */
+
+package net.fckeditor.tags;
+
+import java.io.IOException;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.JspWriter;
+import javax.servlet.jsp.tagext.TagSupport;
+
+import net.fckeditor.FCKeditor;
+
+/**
+ * FCKeditor Tag class to access the
+ * {@linkplain net.fckeditor.FCKeditor container}.<br>
+ * <p>
+ * <b>Simple usage</b>:
+ * 
+ * <pre>
+ * &lt;FCK:editor
+ * 	instanceName=&quot;EditorAccessibility&quot;
+ * 	width=&quot;80%&quot;
+ * 	height=&quot;120&quot;
+ * 	toolbarSet=&quot;Accessibility&quot;
+ * &quot;&gt;This is another test. &lt;BR&gt;&lt;BR&gt;The &quot;Second&quot; row.&lt;/BR&gt;&lt;/FCK:editor&quot;&gt;
+ * </pre>
+ * 
+ * <p>
+ * In this example we set all the attribute for the fckedit tag.
+ * 
+ * <p>
+ * <b>Advanced usage of the tag</b>:
+ * 
+ * <pre>
+ * &lt;FCK:editor instanceName=&quot;EditorDefault&quot; basePath=&quot;/FCKeditor/&quot;
+ * 	styleNames=&quot;;Style 1;Style 2; Style 3&quot; 
+ * 	fontNames=&quot;;Arial;Courier New;Times New Roman;Verdana&quot; &gt;
+ * 	This is some &lt;B&gt;sample text&lt;/B&gt;.
+ * &lt;/FCK:editor&gt;
+ * </pre>
+ * 
+ * In this example we set the id and the basePath of the editor (since it is
+ * /FCKeditor/ we could have omitted it because it's already the default value).<br>
+ * Then we used the the optional attributes to set some advanced configuration
+ * settings.
+ */
+public class EditorTag extends TagSupport {
+
+	private static final long serialVersionUID = -173091731589866140L;
+
+	private String instanceName;
+	private String width;
+	private String height;
+	private String toolbarSet;
+	private String basePath;
+
+	/**
+	 * The underlying FCKeditor object
+	 * 
+	 */
+	private FCKeditor fckEditor;
+
+	public void setInstanceName(String instanceName) {
+		this.instanceName = instanceName;
+	}
+
+	/**
+	 * Set the width of the textarea
+	 * 
+	 * @param value
+	 *            width
+	 */
+	public void setWidth(String width) {
+		this.width = width;
+	}
+
+	/**
+	 * Set the height of the textarea
+	 * 
+	 * @param value
+	 *            height
+	 */
+	public void setHeight(String height) {
+		this.height = height;
+	}
+
+	/**
+	 * Set the name of the toolbar to display
+	 * 
+	 * @param value
+	 *            toolbar name
+	 */
+	public void setToolbarSet(String toolbarSet) {
+		this.toolbarSet = toolbarSet;
+	}
+
+	void setValue(String value) {
+		fckEditor.setValue(value);
+	}
+	
+	/**
+	 * Set the dir where the FCKeditor files reside on the server
+	 * 
+	 * @param value
+	 *            path
+	 */
+	public void setBasePath(String basePath) {
+		this.basePath = basePath;
+	}
+	
+	void setConfigParam(String param, String value) {
+		fckEditor.getConfig().put(param, value);
+	}
+
+	/**
+	 * Initialize the FCKeditor container and set attributes
+	 * 
+	 * @return EVAL_BODY_BUFFERED
+	 */
+	public int doStartTag() throws JspException {
+		fckEditor = new FCKeditor(
+				(HttpServletRequest) pageContext.getRequest(), instanceName,
+				width, height, toolbarSet, basePath);
+
+		return EVAL_BODY_INCLUDE;
+	}
+	
+	@Override
+	public int doEndTag() throws JspException {
+		
+		JspWriter out = pageContext.getOut();
+		
+		try {
+			out.println(fckEditor);
+		} catch (IOException ioe) {
+			throw new JspException(
+					"Error: IOException while writing to the user");
+		}
+		
+		
+		return EVAL_PAGE;
+	}
+
+}
Index: Keditor.Java/branches/2.4/src/main/java/net/fckeditor/tags/FCKeditorTag.java
===================================================================
--- /FCKeditor.Java/branches/2.4/src/main/java/net/fckeditor/tags/FCKeditorTag.java	(revision 1468)
+++ 	(revision )
@@ -1,704 +1,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- * 
- * == BEGIN LICENSE ==
- * 
- * Licensed under the terms of any of the following licenses at your
- * choice:
- * 
- *  - GNU General Public License Version 2 or later (the "GPL")
- *    http://www.gnu.org/licenses/gpl.html
- * 
- *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- *    http://www.gnu.org/licenses/lgpl.html
- * 
- *  - Mozilla Public License Version 1.1 or later (the "MPL")
- *    http://www.mozilla.org/MPL/MPL-1.1.html
- * 
- * == END LICENSE ==
- */
- 
-package net.fckeditor.tags;
-
-import java.io.IOException;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.JspWriter;
-import javax.servlet.jsp.tagext.BodyContent;
-import javax.servlet.jsp.tagext.BodyTagSupport;
-
-import net.fckeditor.FCKeditor;
-
-/**
- * FCKeditor Tag class to access the {@linkplain net.fckeditor.FCKeditor container}.<br>
- *<p>
- * <b>Simple usage</b>:
- * <pre>
- *	&lt;FCK:editor
- *		id="EditorAccessibility"
- *		width="80%"
- *		height="120"
- *		toolbarSet="Accessibility"
- *	"&gt;This is another test. &lt;BR&gt;&lt;BR&gt;The "Second" row.&lt;/BR&gt;&lt;/FCK:editor"&gt;
- * </pre>
- *
- *<p>In this example we set all the attribute for the fckedit tag.
- *
- *<p>
- *  <b>Advanced usage of the tag</b>:
- *  <pre>
- *	&lt;FCK:editor id="EditorDefault" basePath="/FCKeditor/"
- *		styleNames=";Style 1;Style 2; Style 3" 
- *		fontNames=";Arial;Courier New;Times New Roman;Verdana" &gt;
- *		This is some &lt;B&gt;sample text&lt;/B&gt;.
- *	&lt;/FCK:editor&gt;
- *  </pre>
- * In this example we set the id and the basePath of the editor (since it is /FCKeditor/
- * we could have omitted it because it's already the default value).<br>
- * Then we used the the optional attributes to set some advanced configuration settings.
- */
-public class FCKeditorTag extends BodyTagSupport  {
-	
-	private static final long serialVersionUID = -173091731589866140L;
-	private String id;
-	private String value = "";
-	private String basePath = null;
-	private String toolbarSet = null;
-	private String width = null;
-	private String height = null;
-	private String prependContextPath = null;
-	private String customConfigurationsPath = null;
-	private String editorAreaCSS = null;
-	private String baseHref = null;
-	private String skinPath = null;
-	private String pluginsPath = null;
-	private String fullPage = null;
-	private String debug = null;	
-	private String autoDetectLanguage = null;
-	private String defaultLanguage = null;
-	private String contentLangDirection = null;
-	private String enableXHTML = null;
-	private String enableSourceXHTML = null;
-	private String fillEmptyBlocks = null;
-	private String formatSource = null;
-	private String formatOutput = null;
-	private String formatIndentator = null;
-	private String geckoUseSPAN = null;
-	private String startupFocus = null;	
-	private String forcePasteAsPlainText = null;
-	private String forceSimpleAmpersand = null;
-	private String tabSpaces = null;
-	private String useBROnCarriageReturn = null;
-	private String toolbarStartExpanded = null;
-	private String toolbarCanCollapse = null;
-	private String fontColors = null;
-	private String fontNames = null;
-	private String fontSizes = null;
-	private String fontFormats = null;
-	private String stylesXmlPath = null;
-	private String linkBrowserURL = null;
-	private String imageBrowserURL = null;
-	private String flashBrowserURL = null;
-	private String linkUploadURL = null;
-	private String imageUploadURL = null;
-	private String flashUploadURL = null;
-	
-
-
-
-   /**
-     * The underlying FCKeditor object
-     *
-     */		
-	protected FCKeditor fcked = null;
-
-
-    /**
-     * Set the unique id of the editor
-     *
-     * @param value name
-     */	
-	public void setId(String value) {
-		id=value;
-	}
-
-    /**
-     * Set the dir where the FCKeditor files reside on the server
-     *
-     * @param value path
-     */		
-	public void setBasePath(String value) {
-		basePath=value;
-	}
-
-    /**
-     * Set the name of the toolbar to display
-     *
-     * @param value toolbar name
-     */		
-	public void setToolbarSet(String value) {
-		toolbarSet=value;
-	}
-
-    /**
-     * Set the width of the textarea
-     *
-     * @param value width
-     */		
-	public void setWidth(String value) {
-		width=value;
-	}
-
-    /**
-     * Set the height of the textarea
-     *
-     * @param value height
-     */		
-	public void setHeight(String value) {
-		height=value;
-	}
-	
-	public void setPrependContextPath(String value) throws JspException {
-		if(! value.equals("true") && ! value.equals("false"))
-			throw new JspException("prependContextPath attribute can only be true or false");
-		prependContextPath=value;
-	}
-
-	/**
-	 * Set the path of a custom file that can override some configurations.<br>
-	 * It is recommended to use absolute paths (starting with /), like "/myfckconfig.js".
-	 *
-	 * @param value path
-	 */
-	public void setCustomConfigurationsPath(String value) {
-		customConfigurationsPath=value;
-	}
-	
-
-	/**
-	 * Set the CSS styles file to be used in the editing area.<br>
-	 * In this way you can point to a file that reflects your web site styles.
-	 *
-	 * @param value path
-	 */
-	public void setEditorAreaCSS(String value) {
-		editorAreaCSS=value;
-	}
-	
-
-	/**
-	 * Base URL used to resolve links (on images, links, styles, etc.).<br>
-	 * For example, if BaseHref is set to 'http://www.fredck.com', an image that points to "/images/Logo.gif" will be interpreted by the editor as "http://www.fredck.com/images/Logo.gif", without touching the "src" attribute of the image.
-	 *
-	 * @param value URL
-	 */
-	public void setBaseHref(String value) {
-		baseHref=value;
-	}
-	
-	
-	/**
-	 * Sets the path to the skin (graphical interface settings) to be used by the editor.
-	 *
-	 * @param value path
-	 */
-	public void setSkinPath(String value) {
-		skinPath=value;
-	}
-	
-	
-	/**
-	 * Sets the base path used when looking for registered plugins.
-	 *
-	 * @param value path
-	 */
-	public void setPluginsPath(String value) {
-		pluginsPath=value;
-	}
-	
-	
-	/**
-	 * Enables full page editing (from &lt;HTML&gt; to &lt;/HTML&gt;).<br>
-	 * It also enables the "Page Properties" toolbar button.
-	 *
-	 * @param value true/false
-	 * @throws JspException if value is not true or false
-	 */
-	public void setFullPage(String value) throws JspException {
-		if(! value.equals("true") && ! value.equals("false"))
-			throw new JspException("fullPage attribute can only be true or false");
-		fullPage=value;
-	}
-	
-	
-	/**
-	 * Enables the debug window to be shown when calling the FCKDebug.Output() function.
-	 *
-	 * @param value true/false
-	 * @throws JspException if value is not true or false
-	 */
-	public void setDebug(String value) throws JspException {
-		if(! value.equals("true") && ! value.equals("false"))
-			throw new JspException("debug attribute can only be true or false");
-		debug=value;
-	}
-	
-	
-	/**
-	 * Tells the editor to automatically detect the user language preferences to adapt its interface language.<br>
-	 * With Internet Explorer, the language configured in the Windows Control Panel is used.<br>
-	 * With Firefox, the browser language is used.
-	 *
-	 * @param value true/false
-	 * @throws JspException if value is not true or false
-	 */
-	public void setAutoDetectLanguage(String value) throws JspException {
-		if(! value.equals("true") && ! value.equals("false"))
-			throw new JspException("autoDetectLanguage attribute can only be true or false: here was " + value);
-		autoDetectLanguage=value;
-	}
-	
-	
-	/**
-	 * Sets the default language used for the editor's interface localization.<br>
-	 * The default language is used when the AutoDetectLanguage options is disabled or when the user language is not available.
-	 *
-	 * @param value language code
-	 */
-	public void setDefaultLanguage(String value) {
-		defaultLanguage=value;
-	}
-	
-	
-	/**
-	 * Sets the direction of the editor area contents.<br>
-	 * The possible values are:
-	 * <ul>
-     * <li>ltr - Left to Right
-     * <li>rtl - Right to Left
-     * </ul>
-	 *
-	 * @param value ltr/rtl
-	 * @throws JspException if value is not ltr or rtl
-	 */
-	public void setContentLangDirection(String value) throws JspException {
-		if(! value.equals("true") && ! value.equals("false"))
-			throw new JspException("debug attribute can only be ltr or rtl");
-		contentLangDirection=value;
-	}
-	
-	
-	/**
-	 * Tells the editor to process the HTML source to XHTML on form post.
-	 *
-	 * @param value true/false
-	 * @throws JspException if value is not true or false
-	 */
-	public void setEnableXHTML(String value) throws JspException {
-		if(! value.equals("true") && ! value.equals("false"))
-			throw new JspException("enableXHTML attribute can only be true or false");
-		enableXHTML=value;
-	}
-	
-	
-	/**
-	 * Tells the editor to process the HTML source to XHTML when switching from WYSIWYG to Source view
-	 *
-	 * @param value true/false
-	 * @throws JspException if value is not true or false
-	 */
-	public void setEnableSourceXHTML(String value) throws JspException {
-		if(! value.equals("true") && ! value.equals("false"))
-			throw new JspException("enableSourceXHTML attribute can only be true or false");
-		enableSourceXHTML=value;
-	}
-	
-	
-	/**
-	 * Block elements (like P, DIV, H1, PRE, etc...) are forced to have content (a &amp;nbsp;).<br>
-	 * Empty blocks are "collapsed" by while browsing, so a empty &lt;p&gt;&lt;/p&gt; is not visible.<br>
-	 * While editing, the editor "expand" empty blocks so you can insert content inside then.<br>
-	 * Setting this option to "true" results useful to reflect the same output when browsing and editing.
-	 *
-	 * @param value true/false
-	 * @throws JspException if value is not true or false
-	 */
-	public void setFillEmptyBlocks(String value) throws JspException {
-		if(! value.equals("true") && ! value.equals("false"))
-			throw new JspException("fillEmptyBlocks attribute can only be true or false");
-		fillEmptyBlocks=value;
-	}
-	
-	
-	/**
-	 * The HTML shown by the editor, while switching from WYSIWYG to Source views, will be processed and formatted
-	 *
-	 * @param value true/false
-	 * @throws JspException if value is not true or false
-	 */
-	public void setFormatSource(String value) throws JspException {
-		if(! value.equals("true") && ! value.equals("false"))
-			throw new JspException("formatSource attribute can only be true or false");
-		formatSource=value;
-	}
-	
-	
-	/**
-	 * The output HTML generated by the editor will be processed and formatted.
-	 *
-	 * @param value true/false
-	 * @throws JspException if value is not true or false
-	 */
-	public void setFormatOutput(String value) throws JspException {
-		if(! value.equals("true") && ! value.equals("false"))
-			throw new JspException("formatOutput attribute can only be true or false");
-		formatOutput=value;
-	}
-	
-	/**
-	 * Sets the characters to be used when indenting the HTML source when formatting it.<BR>
-	 * Useful values are a sequence of spaces ('     ') or a tab char ('\t').
-	 *
-	 * @param value indentator
-	 */
-	public void setFormatIndentator(String value) {
-		formatIndentator=value;
-	}
-	
-	
-	/**
-	 * Tells Gecko browsers to use SPAN instead of &lt;B&gt;, &lt;I&gt; and &lt;U&gt; for bold, italic an underline
-	 *
-	 * @param value true/false
-	 * @throws JspException if value is not true or false
-	 */
-	public void setGeckoUseSPAN(String value) throws JspException {
-		if(! value.equals("true") && ! value.equals("false"))
-			throw new JspException("GeckoUseSPAN attribute can only be true or false");
-		geckoUseSPAN=value;
-	}
-	
-	
-	/**
-	 * Forces the editor to get the keyboard input focus on startup (page load)
-	 *
-	 * @param value true/false
-	 * @throws JspException if value is not true or false
-	 */
-	public void setStartupFocus(String value) throws JspException {
-		if(! value.equals("true") && ! value.equals("false"))
-			throw new JspException("startupFocus attribute can only be true or false");
-		startupFocus=value;
-	}
-	
-	
-	/**
-	 * Converts the clipboard contents to pure text on pasting operations
-	 *
-	 * @param value true/false
-	 * @throws JspException if value is not true or false
-	 */
-	public void setForcePasteAsPlainText(String value) throws JspException {
-		if(! value.equals("true") && ! value.equals("false"))
-			throw new JspException("forcePasteAsPlainText attribute can only be true or false");
-		forcePasteAsPlainText=value;
-	}
-	
-	
-	/**
-	 * Forces the ampersands (&) on tags attributes to not be converted to "&amp;amp;"<BR>
-	 * This conversion is a W3C requirement for XHTML, so it is recommended to leave this option to "false".
-	 *
-	 * @param value true/false
-	 * @throws JspException if value is not true or false
-	 */
-	public void setForceSimpleAmpersand(String value) throws JspException {
-		if(! value.equals("true") && ! value.equals("false"))
-			throw new JspException("forceSimpleAmpersand attribute can only be true or false");
-		forceSimpleAmpersand=value;
-	}
-	
-	
-	/**
-	 * Set the number of spaces (&amp;nbsp;) to be inserted when the user hits the "tab" key.<BR>
-	 * This is an Internet Explorer only feature. Other browsers insert spaces automatically by default.
-	 *
-	 * @param value number of spaces
-	 */
-	public void setTabSpaces(String value) {
-		tabSpaces=value;
-	}
-	
-	
-	/**
-	 * Inserts a &lt;BR&gt; tag when the user hits the "enter" key, instead of starting a new paragraph (&lt;P&gt; or &lt;DIV&gt;).<BR>
-	 * This is an Internet Explorer only feature. Other browsers insert the &lt;BR&gt; tag by default.
-	 *
-	 * @param value true/false
-	 * @throws JspException if value is not true or false
-	 */
-	public void setUseBROnCarriageReturn(String value)  throws JspException {
-		if(! value.equals("true") && ! value.equals("false"))
-			throw new JspException("useBROnCarriageReturn attribute can only be true or false");
-		useBROnCarriageReturn=value;
-	}
-	
-	
-	/**
-	 * The toolbar is Expanded on startup, otherwise it is Collapsed and the user must click on it to show it.
-	 *
-	 * @param value true/false
-	 * @throws JspException if value is not true or false
-	 */
-	public void setToolbarStartExpanded(String value)   throws JspException {
-		if(! value.equals("true") && ! value.equals("false"))
-			throw new JspException("ToolbarStartExpanded attribute can only be true or false");
-		toolbarStartExpanded=value;
-	}
-	
-	
-	/**
-	 * Tells the editor that the toolbar can be Collapsed/Expanded by the user when clicking the vertical bar placed on the left of it (on the right for "rtl" languages).
-	 *
-	 * @param value true/false
-	 * @throws JspException if value is not true or false
-	 */
-	public void setToolbarCanCollapse(String value)    throws JspException {
-		if(! value.equals("true") && ! value.equals("false"))
-			throw new JspException("ToolbarCanCollapse attribute can only be true or false");
-		toolbarCanCollapse=value;
-	}
-	
-	
-	/**
-	 * Sets the colors that must be shown in the colors panels (in the toolbar).
-	 *
-	 * @param value colors
-	 */
-	public void setFontColors(String value) {
-		fontColors=value;
-	}
-	
-	
-	/**
-	 * Sets the list of fonts to be shown in the "Font" toolbar command.
-	 *
-	 * @param value fonts
-	 */
-	public void setFontNames(String value) {
-		fontNames=value;
-	}
-	
-	
-	/**
-	 * Sets the list of font sizes to be shown in the "Size" toolbar command.
-	 *
-	 * @param value sizes
-	 */
-	public void setFontSizes(String value) {
-		fontSizes=value;
-	}
-	
-	
-	/**
-	 * Sets the list of formats to be shown in the "Format" toolbar command.
-	 *
-	 * @param value format list
-	 */
-	public void setFontFormats(String value) {
-		fontFormats=value;
-	}
-	
-	
-	/**
-	 * Sets the path to the XML file that has the definitions and rules of the styles used by the "Style" toolbar command
-	 *
-	 * @param value path
-	 */
-	public void setStylesXmlPath(String value) {
-		stylesXmlPath=value;
-	}
-	
-	
-	/**
-	 * Sets the URL of the page called when the user clicks the "Browse Server" button in the "Link" dialog window.<BR>
-	 * In this way, you can create your custom File Browser that is well integrated with your system.
-	 *
-	 * @param value path
-	 */
-	public void setLinkBrowserURL(String value) {
-		linkBrowserURL=value;
-	}
-	
-	
-	/**
-	 * Sets the URL of the page called when the user clicks the "Browse Server" button in the "Image" dialog window.<BR>
-	 * In this way, you can create your custom Image Browser that is well integrated with your system.
-	 *
-	 * @param value path
-	 */
-	public void setImageBrowserURL(String value) {
-		imageBrowserURL=value;
-	}
-
-	/**
-	 * Sets the URL of the page called when the user clicks the "Browse Server" button in the "Flash" dialog window.<BR>
-	 * In this way, you can create your custom Flash Browser that is well integrated with your system.
-	 *
-	 * @param value path
-	 */
-	public void setFlashBrowserURL(String value) {
-		flashBrowserURL=value;
-	}
-
-
-	/**
-	 * Sets the URL of the upload handler called when the user clicks the "Send it to server" button in the "Link" dialog window.<BR>
-	 * In this way, you can create your custom Link Uploader that is well integrated with your system.
-	 *
-	 * @param value path
-	 */
-	public void setLinkUploadURL(String value) {
-		linkUploadURL=value;
-	}
-
-
-	/**
-	 * Sets the URL of the upload handler called when the user clicks the "Send it to server" button in the "Image" dialog window.<BR>
-	 * In this way, you can create your custom Image Uploader that is well integrated with your system.
-	 *
-	 * @param value path
-	 */
-	public void setImageUploadURL(String value) {
-		imageUploadURL=value;
-	}
-
-
-	/**
-	 * Sets the URL of the upload handler called when the user clicks the "Send it to server" button in the "Flash" dialog window.<BR>
-	 * In this way, you can create your custom Flash Uploader that is well integrated with your system.
-	 *
-	 * @param value path
-	 */
-	public void setFlashUploadURL(String value) {
-		flashUploadURL=value;
-	}		
-
-
-	/**
-	 * Initialize the FCKeditor container and set attributes
-	 *
-	 * @return EVAL_BODY_BUFFERED
-	 */
-	public int doStartTag() throws JspException {
-		fcked=new FCKeditor((HttpServletRequest)pageContext.getRequest(),id);
-		if(toolbarSet!=null)
-			fcked.setToolbarSet(toolbarSet);
-		if(basePath!=null)
-			fcked.setBasePath(basePath);
-		if(width!=null)
-			fcked.setWidth(width);
-		if(height!=null)
-			fcked.setHeight(height);
-		if (customConfigurationsPath != null)
-			fcked.getConfig().put("CustomConfigurationsPath",customConfigurationsPath);
-		if (editorAreaCSS != null)
-			fcked.getConfig().put("EditorAreaCSS",editorAreaCSS);
-		if (baseHref != null)
-			fcked.getConfig().put("BaseHref",baseHref);
-		if (skinPath != null)
-			fcked.getConfig().put("SkinPath",skinPath);
-		if (pluginsPath != null)
-			fcked.getConfig().put("PluginsPath",pluginsPath);	
-		if (fullPage != null)
-			fcked.getConfig().put("FullPage",fullPage);
-		if (debug != null)
-			fcked.getConfig().put("Debug",debug);
-		if (autoDetectLanguage != null)
-			fcked.getConfig().put("AutoDetectLanguage",autoDetectLanguage);
-		if (defaultLanguage != null)
-			fcked.getConfig().put("DefaultLanguage",defaultLanguage);
-		if (contentLangDirection != null)
-			fcked.getConfig().put("ContentLangDirection",contentLangDirection);
-		if (enableXHTML != null)
-			fcked.getConfig().put("EnableXHTML",enableXHTML);
-		if (enableSourceXHTML != null)
-			fcked.getConfig().put("EnableSourceXHTML",enableSourceXHTML);
-		if (fillEmptyBlocks != null)
-			fcked.getConfig().put("FillEmptyBlocks",fillEmptyBlocks);
-		if (formatSource != null)
-			fcked.getConfig().put("FormatSource",formatSource);
-		if (formatOutput != null)
-			fcked.getConfig().put("FormatOutput",formatOutput);
-		if (formatIndentator != null)
-			fcked.getConfig().put("FormatIndentator",formatIndentator);
-		if (geckoUseSPAN != null)
-			fcked.getConfig().put("GeckoUseSPAN",geckoUseSPAN);
-		if (startupFocus != null)
-			fcked.getConfig().put("StartupFocus",startupFocus);
-		if (forcePasteAsPlainText != null)
-			fcked.getConfig().put("ForcePasteAsPlainText",forcePasteAsPlainText);
-		if (forceSimpleAmpersand != null)
-			fcked.getConfig().put("ForceSimpleAmpersand",forceSimpleAmpersand);
-		if (tabSpaces != null)
-			fcked.getConfig().put("TabSpaces",tabSpaces);
-		if (useBROnCarriageReturn != null)
-			fcked.getConfig().put("UseBROnCarriageReturn",useBROnCarriageReturn);
-		if (toolbarStartExpanded != null)
-			fcked.getConfig().put("ToolbarStartExpanded",toolbarStartExpanded);
-		if (toolbarCanCollapse != null)
-			fcked.getConfig().put("ToolbarCanCollapse",toolbarCanCollapse);
-		if (fontColors != null)
-			fcked.getConfig().put("FontColors",fontColors);
-		if (fontNames != null)
-			fcked.getConfig().put("FontNames",fontNames);
-		if (fontSizes != null)
-			fcked.getConfig().put("FontSizes",fontSizes);
-		if (fontFormats != null)
-			fcked.getConfig().put("FontFormats",fontFormats);
-		if (stylesXmlPath != null)
-			fcked.getConfig().put("StylesXmlPath",stylesXmlPath);
-		
-		String contextPath;
-		if (prependContextPath == null || prependContextPath.equals("true")) {
-			contextPath = ((HttpServletRequest) pageContext.getRequest()).getContextPath();
-		} else contextPath = "";
-		if (linkBrowserURL != null)
-			fcked.getConfig().put("LinkBrowserURL",contextPath+linkBrowserURL);
-		if (imageBrowserURL != null)
-			fcked.getConfig().put("ImageBrowserURL",contextPath+imageBrowserURL);
-		if (flashBrowserURL != null)
-			fcked.getConfig().put("FlashBrowserURL",contextPath+flashBrowserURL);
-		if (linkUploadURL != null)
-			fcked.getConfig().put("LinkUploadURL",contextPath+linkUploadURL);
-		if (imageUploadURL != null)
-			fcked.getConfig().put("ImageUploadURL",contextPath+imageUploadURL);
-		if (flashUploadURL != null)
-			fcked.getConfig().put("FlashUploadURL",contextPath+flashUploadURL);
-		
-		 return EVAL_BODY_BUFFERED;
-	}
-
-	/**
-	 * Retrive initial value to be edited and writes the HTML code in the page
-	 *
-	 * @return SKIP_BODY
-	 * @throws JspException if an error occurs while writing to the out buffer
-	 */	
-	public int doAfterBody()  throws JspException {
-			BodyContent body = getBodyContent();
-			JspWriter writer = body.getEnclosingWriter();
-			String bodyString = body.getString();
-			fcked.setValue(bodyString);
-			try {
-				writer.println(fcked.create());
-			}catch(IOException ioe) {
-				throw new JspException("Error: IOException while writing to the user");
-			}
-			
-			return SKIP_BODY;
-	}
-
-}
Index: /FCKeditor.Java/branches/2.4/src/main/resources/META-INF/FCKeditor.tld
===================================================================
--- /FCKeditor.Java/branches/2.4/src/main/resources/META-INF/FCKeditor.tld	(revision 1468)
+++ /FCKeditor.Java/branches/2.4/src/main/resources/META-INF/FCKeditor.tld	(revision 1469)
@@ -11,17 +11,9 @@
 	<tag>
 		<name>editor</name>
-		<tag-class>net.fckeditor.tags.FCKeditorTag</tag-class>
+		<tag-class>net.fckeditor.tags.EditorTag</tag-class>
 		<body-content>JSP</body-content>
 		<attribute>
-			<name>id</name>
+			<name>instanceName</name>
 			<required>true</required>
-		</attribute>
-		<attribute>
-			<name>basePath</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>toolbarSet</name>
-			<rtexprvalue>true</rtexprvalue>
 		</attribute>
 		<attribute>
@@ -34,148 +26,29 @@
 		</attribute>
 		<attribute>
-			<name>prependContextPath</name>
+			<name>toolbarSet</name>
 			<rtexprvalue>true</rtexprvalue>
 		</attribute>
-		<attribute>
-			<name>customConfigurationsPath</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>editorAreaCSS</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>baseHref</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>skinPath</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>pluginsPath</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>fullPage</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>debug</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>autoDetectLanguage</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>defaultLanguage</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>contentLangDirection</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>enableXHTML</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>enableSourceXHTML</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>fillEmptyBlocks</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>formatSource</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>formatOutput</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>formatIndentator</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>geckoUseSPAN</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>startupFocus</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>forcePasteAsPlainText</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>forceSimpleAmpersand</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>tabSpaces</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>useBROnCarriageReturn</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>toolbarStartExpanded</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>toolbarCanCollapse</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>fontColors</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>fontNames</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>fontSizes</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>fontFormats</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>stylesXmlPath</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>linkBrowserURL</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>imageBrowserURL</name>
-
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>flashBrowserURL</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>linkUploadURL</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>imageUploadURL</name>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>flashUploadURL</name>
+			<attribute>
+			<name>basePath</name>
 			<rtexprvalue>true</rtexprvalue>
 		</attribute>
 	</tag>
+	<tag>
+		<name>content</name>
+		<tag-class>net.fckeditor.tags.ContentTag</tag-class>
+		<body-content>JSP</body-content>
+	</tag>
+	<tag>
+		<name>config</name>
+		<tag-class>net.fckeditor.tags.ConfigTag</tag-class>
+		<body-content>empty</body-content>
+		<attribute>
+			<name>param</name>
+			<required>yes</required>
+		</attribute>
+			<attribute>
+			<name>value</name>
+			<required>yes</required>
+		</attribute>
+	</tag>
 </taglib>
Index: /FCKeditor.Java/branches/2.4/src/main/resources/net/fckeditor/handlers/default.properties
===================================================================
--- /FCKeditor.Java/branches/2.4/src/main/resources/net/fckeditor/handlers/default.properties	(revision 1468)
+++ /FCKeditor.Java/branches/2.4/src/main/resources/net/fckeditor/handlers/default.properties	(revision 1469)
@@ -8,11 +8,11 @@
 
 # default height of the editor
-fckeditor.height=200px
+fckeditor.height=200
 
 # default toolbar set of the editor
 fckeditor.toolbarset=Default
 
-# directory of the editor relative to the context root (starting / and no ending /)
-fckeditor.dir=/fckeditor
+# directory of the editor relative to the context root according to fckeditor.js (trailing slashes!)
+fckeditor.dir=/fckeditor/
 
 # base directory for the user files relative to the context root (starting / and no ending /)
Index: /FCKeditor.Java/branches/2.4/src/main/webapp/jsp/sample02.jsp
===================================================================
--- /FCKeditor.Java/branches/2.4/src/main/webapp/jsp/sample02.jsp	(revision 1468)
+++ /FCKeditor.Java/branches/2.4/src/main/webapp/jsp/sample02.jsp	(revision 1469)
@@ -43,8 +43,10 @@
 		<hr>
 		<form action="sampleposteddata.jsp" method="get" target="_blank">
-			<FCK:editor id="EditorDefault">
-				This is some <strong>sample text</strong>. You are using <a href="http://www.fredck.com/fckeditor/">FCKeditor</a>.
+			
+			<FCK:editor instanceName="EditorDefault">
+				<FCK:content>This is some <strong>sample text</strong>. You are using <a href="http://www.fredck.com/fckeditor/">FCKeditor</a>.</FCK:content>				
 			</FCK:editor>
-			<br>
+			
+			<br />
 			<input type="submit" value="Submit">
 		</form>
