diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java
index 52e1e23..04a6d54 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java
@@ -229,7 +229,6 @@
     protected boolean                 hasRequiredFlagSet   = false;
     protected boolean                 encodeLabel          = true;
     private boolean                   creatingComponents   = false;
-    protected boolean                 processingValidators = false;
 
     public ControlTag()
     {
@@ -404,42 +403,6 @@
     }
 
     @Override
-    public void processDecodes(FacesContext context) 
-    {
-        if (helper.isInsideUIData())
-        {   // Check input controls
-            if (getChildCount()>1 && (getChildren().get(1) instanceof InputSeparatorComponent))
-            {   // Make sure all inputs are rendered
-                boolean hasChanged = false;
-                boolean readOnly = helper.isRecordReadOnly();
-                InputSeparatorComponent parent = (InputSeparatorComponent)getChildren().get(1);
-                // set rendered of children
-                for (UIComponent child : parent.getChildren())
-                {   // set rendered 
-                    boolean rendered = (child instanceof ValueOutputComponent) ? readOnly : !readOnly;
-                    if (child.isRendered()!=rendered)
-                    {   child.setRendered(rendered);
-                        hasChanged = true;
-                    }    
-                }
-                // give control chance to update
-                if (hasChanged && log.isDebugEnabled())
-                    log.debug("Changing UIInput readOnly state for {} to {}", helper.getColumnName(), readOnly);
-                // check record
-                helper.prepareData();
-                if (this.control==null)
-                    this.control = helper.getInputControl();
-                if (this.inpInfo==null)
-                    this.inpInfo = helper.getInputInfo(context);
-                // update state
-                this.control.updateInputState(parent, inpInfo, context, false);
-            }
-        }
-        // default
-        super.processDecodes(context);
-    }
-
-    @Override
     public void setRequired(boolean required)
     {
         super.setRequired(required);
@@ -578,35 +541,56 @@
         ControlSeparatorComponent inputSepTag = (ControlSeparatorComponent) getChildren().get(1);
         return this.control.getConvertedValue(inputSepTag, this.inpInfo, newSubmittedValue);
     }
-    
+
     @Override
-    public int getChildCount()
+    public void processDecodes(FacesContext context) 
     {
-        return (processingValidators ? 0 : super.getChildCount());
-    }
-    
-    @Override
-    public int getFacetCount()
-    {
-        return (processingValidators ? 0 : super.getFacetCount());
+        /*
+         * previous code moved to processValidators (below)
+         */
+        super.processDecodes(context);
     }
 
     @Override
     public void processValidators(FacesContext context)
     {
-        try {
-            processingValidators = helper.skipInputValidators();
-            super.processValidators(context);
-        } finally {
-            processingValidators = false;
+        // check UI-Data
+        if (helper.isInsideUIData())
+        {   // Check input controls
+            if (getChildCount()>1 && (getChildren().get(1) instanceof InputSeparatorComponent))
+            {   // Make sure all inputs are rendered
+                boolean hasChanged = false;
+                boolean readOnly = helper.isRecordReadOnly();
+                InputSeparatorComponent parent = (InputSeparatorComponent)getChildren().get(1);
+                // set rendered of children
+                for (UIComponent child : parent.getChildren())
+                {   // set rendered 
+                    boolean rendered = (child instanceof ValueOutputComponent) ? readOnly : !readOnly;
+                    if (child.isRendered()!=rendered)
+                    {   child.setRendered(rendered);
+                        hasChanged = true;
+                    }    
+                }
+                // give control chance to update
+                if (hasChanged && log.isDebugEnabled())
+                    log.debug("Changing UIInput readOnly state for {} to {}", helper.getColumnName(), readOnly);
+                // check record
+                helper.prepareData();
+                if (this.control==null)
+                    this.control = helper.getInputControl();
+                if (this.inpInfo==null)
+                    this.inpInfo = helper.getInputInfo(context);
+                // update state
+                this.control.updateInputState(parent, inpInfo, context, false);
+            }
         }
+        // process all validators (including children)
+        super.processValidators(context);
     }
 
     @Override
     public void validate(FacesContext context)
-    {   // free Validators lock
-        processingValidators = false;
-        // init state
+    {   // init state
         if (initState(context) == false)
             return;
         // get submitted value and validate
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/InputTag.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/InputTag.java
index 123a8eb..5cf4a8e 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/InputTag.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/InputTag.java
@@ -55,7 +55,6 @@
     protected InputControl            control              = null;
     protected InputControl.InputInfo  inpInfo              = null;
     protected boolean                 hasRequiredFlagSet   = false;
-    protected boolean                 processingValidators = false;
 
     /*
     private static int itemIdSeq = 0;
@@ -221,29 +220,6 @@
         // done
         return compId;
     }
-    
-    @Override
-    public void processDecodes(FacesContext context) 
-    {
-        if (helper.isInsideUIData())
-        {   // Check input controls
-            if (getChildCount()>0)
-            {   // Set readOnly and disabled for each row
-                boolean readOnly = helper.isRecordReadOnly();
-                setRenderInput(!readOnly);
-                // get control
-                helper.prepareData();
-                if (control==null)
-                    control = helper.getInputControl();
-                if (inpInfo==null)
-                    inpInfo = helper.getInputInfo(context);
-                // update control
-                control.updateInputState(this, inpInfo, context, false);
-            }
-        }
-        // default
-        super.processDecodes(context);
-    }
 
     @Override
     public void setRequired(boolean required)
@@ -282,35 +258,43 @@
         // parse and convert value
         return this.control.getConvertedValue(this, this.inpInfo, newSubmittedValue);
     }
-    
+
     @Override
-    public int getChildCount()
+    public void processDecodes(FacesContext context) 
     {
-        return (processingValidators ? 0 : super.getChildCount());
-    }
-    
-    @Override
-    public int getFacetCount()
-    {
-        return (processingValidators ? 0 : super.getFacetCount());
+        /*
+         * previous code moved to processValidators (below)
+         */
+        super.processDecodes(context);
     }
 
     @Override
     public void processValidators(FacesContext context)
     {
-        try {
-            processingValidators = helper.skipInputValidators();
-            super.processValidators(context);
-        } finally {
-            processingValidators = false;
+        // check UI-Data
+        if (helper.isInsideUIData())
+        {   // Check input controls
+            if (getChildCount()>0)
+            {   // Set readOnly and disabled for each row
+                boolean readOnly = helper.isRecordReadOnly();
+                setRenderInput(!readOnly);
+                // get control
+                helper.prepareData();
+                if (control==null)
+                    control = helper.getInputControl();
+                if (inpInfo==null)
+                    inpInfo = helper.getInputInfo(context);
+                // update control
+                control.updateInputState(this, inpInfo, context, false);
+            }
         }
+        // process all validators (including children)
+        super.processValidators(context);
     }
 
     @Override
     public void validate(FacesContext context)
-    {   // free Validators lock
-        processingValidators = false;
-        // init state
+    {   // init state
         if (initState(context) == false)
             return;
         // get submitted value and validate
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java
index b8a3b01..fca3d70 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java
@@ -672,11 +672,6 @@
         setInputStyleClass(input, styleClass);
     }
     
-    public boolean skipInputValidators()
-    {
-        return false;  /* was true: Undo change in order to clarify behaviour */
-    }
-    
     /**
      * Returns the value formated as a string
      * this is a simple default implementation that does no type-secific formatting
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
index c2d7625..9b9af08 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
@@ -1674,11 +1674,6 @@
         return this.insideUIData;
     }
     
-    public boolean skipInputValidators()
-    {
-        return (this.control!=null ? this.control.skipInputValidators() : false);
-    }
-    
     public void saveComponentId(UIComponent comp)
     {
         if (comp==null || comp.getId()==null)
diff --git a/pom.xml b/pom.xml
index 3ace06c..c6d64bb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -118,6 +118,7 @@
 							</execution>
 						</executions>
 					</plugin>
+					<!-- temporarily disable due to build problem 
 					<plugin>
 						<groupId>org.apache.maven.plugins</groupId>
 						<artifactId>maven-javadoc-plugin</artifactId>
@@ -130,6 +131,7 @@
 							</execution>
 						</executions>
 					</plugin>
+					 -->
 				</plugins>
 			</build>
 		</profile>
@@ -791,11 +793,13 @@
 				<artifactId>maven-jxr-plugin</artifactId>
 				<version>2.4</version>
 			</plugin>
-			<!-- maven-javadoc-plugin -->
+			<!-- maven-javadoc-plugin
+				 temporarily disable due to build problem 
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-javadoc-plugin</artifactId>
 			</plugin>
+			-->
 			<!-- maven-changelog-plugin -->
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
