Index: kernel/classes/datatypes/ezdate/ezdatetype.php
===================================================================
--- kernel/classes/datatypes/ezdate/ezdatetype.php	(revision 22004)
+++ kernel/classes/datatypes/ezdate/ezdatetype.php	(working copy)
@@ -74,6 +74,8 @@
     */
     function validateObjectAttributeHTTPInput( $http, $base, $contentObjectAttribute )
     {
+        $classAttribute = $contentObjectAttribute->contentClassAttribute();
+
         if ( $http->hasPostVariable( $base . '_date_year_' . $contentObjectAttribute->attribute( 'id' ) ) and
              $http->hasPostVariable( $base . '_date_month_' . $contentObjectAttribute->attribute( 'id' ) ) and
              $http->hasPostVariable( $base . '_date_day_' . $contentObjectAttribute->attribute( 'id' ) ) )
@@ -81,7 +83,6 @@
             $year  = $http->postVariable( $base . '_date_year_' . $contentObjectAttribute->attribute( 'id' ) );
             $month = $http->postVariable( $base . '_date_month_' . $contentObjectAttribute->attribute( 'id' ) );
             $day   = $http->postVariable( $base . '_date_day_' . $contentObjectAttribute->attribute( 'id' ) );
-            $classAttribute = $contentObjectAttribute->contentClassAttribute();
 
             if ( $year == '' or $month == '' or $day == '' )
             {
@@ -101,8 +102,13 @@
                 return $this->validateDateTimeHTTPInput( $day, $month, $year, $contentObjectAttribute );
             }
         }
-        else
-            return eZInputValidator::STATE_ACCEPTED;
+        else if ( !$classAttribute->attribute( 'is_information_collector' ) and $contentObjectAttribute->validateIsRequired() )
+        {
+            $contentObjectAttribute->setValidationError( ezi18n( 'kernel/classes/datatypes', 'Missing date input.' ) );
+            return eZInputValidator::STATE_INVALID;
+        }
+
+        return eZInputValidator::STATE_ACCEPTED;
     }
 
     /*!
Index: kernel/classes/datatypes/ezdatetime/ezdatetimetype.php
===================================================================
--- kernel/classes/datatypes/ezdatetime/ezdatetimetype.php	(revision 22004)
+++ kernel/classes/datatypes/ezdatetime/ezdatetimetype.php	(working copy)
@@ -136,6 +136,11 @@
                 return $this->validateDateTimeHTTPInput( $day, $month, $year, $hour, $minute, $second, $contentObjectAttribute );
             }
         }
+        else if ( !$classAttribute->attribute( 'is_information_collector' ) and $contentObjectAttribute->validateIsRequired() )
+        {
+            $contentObjectAttribute->setValidationError( ezi18n( 'kernel/classes/datatypes', 'Missing datetime input.' ) );
+            return eZInputValidator::STATE_INVALID;
+        }
         else
             return eZInputValidator::STATE_ACCEPTED;
     }
Index: kernel/classes/datatypes/ezemail/ezemailtype.php
===================================================================
--- kernel/classes/datatypes/ezemail/ezemailtype.php	(revision 22004)
+++ kernel/classes/datatypes/ezemail/ezemailtype.php	(working copy)
@@ -85,9 +85,9 @@
             $email = $http->postVariable( $base . '_data_text_' . $contentObjectAttribute->attribute( 'id' ) );
             $classAttribute = $contentObjectAttribute->contentClassAttribute();
 
-            $trimedEmail = trim( $email );
+            $trimmedEmail = trim( $email );
 
-            if ( $trimedEmail == "" )
+            if ( $trimmedEmail == "" )
             {
                 // we require user to enter an address only if the attribute is not an informationcollector
                 if ( !$classAttribute->attribute( 'is_information_collector' ) and
@@ -101,9 +101,15 @@
             else
             {
                 // if the entered address is not empty then we should validate it in any case
-                return $this->validateEMailHTTPInput( $trimedEmail, $contentObjectAttribute );
+                return $this->validateEMailHTTPInput( $trimmedEmail, $contentObjectAttribute );
             }
         }
+        else if ( !$classAttribute->attribute( 'is_information_collector' ) and $contentObjectAttribute->validateIsRequired() )
+        {
+            $contentObjectAttribute->setValidationError( ezi18n( 'kernel/classes/datatypes', 'Missing email input.' ) );
+            return eZInputValidator::STATE_INVALID;
+        }
+
         return eZInputValidator::STATE_ACCEPTED;
     }
 
@@ -131,9 +137,9 @@
             $email = $http->postVariable( $base . "_data_text_" . $contentObjectAttribute->attribute( "id" ) );
             $classAttribute = $contentObjectAttribute->contentClassAttribute();
 
-            $trimedEmail = trim( $email );
+            $trimmedEmail = trim( $email );
 
-            if ( $trimedEmail == "" )
+            if ( $trimmedEmail == "" )
             {
                 // if entered email is empty and required then return state invalid
                 if ( $contentObjectAttribute->validateIsRequired() )
@@ -148,7 +154,7 @@
             else
             {
                 // if entered email is not empty then we should validate it in any case
-                return $this->validateEMailHTTPInput( $trimedEmail, $contentObjectAttribute );
+                return $this->validateEMailHTTPInput( $trimmedEmail, $contentObjectAttribute );
             }
         }
         else
Index: kernel/classes/datatypes/ezinteger/ezintegertype.php
===================================================================
--- kernel/classes/datatypes/ezinteger/ezintegertype.php	(revision 22004)
+++ kernel/classes/datatypes/ezinteger/ezintegertype.php	(working copy)
@@ -130,11 +130,12 @@
     */
     function validateObjectAttributeHTTPInput( $http, $base, $contentObjectAttribute )
     {
+        $classAttribute = $contentObjectAttribute->contentClassAttribute();
+
         if ( $http->hasPostVariable( $base . "_data_integer_" . $contentObjectAttribute->attribute( "id" ) ) )
         {
             $data = $http->postVariable( $base . "_data_integer_" . $contentObjectAttribute->attribute( "id" ) );
             $data = str_replace(" ", "", $data );
-            $classAttribute = $contentObjectAttribute->contentClassAttribute();
 
             if ( $data == "" )
             {
@@ -153,6 +154,11 @@
                 return $this->validateIntegerHTTPInput( $data, $contentObjectAttribute, $classAttribute );
             }
         }
+        else if ( !$classAttribute->attribute( 'is_information_collector' ) and $contentObjectAttribute->validateIsRequired() )
+        {
+            $contentObjectAttribute->setValidationError( ezi18n( 'kernel/classes/datatypes', 'Input required.' ) );
+            return eZInputValidator::STATE_INVALID;
+        }
         else
             return eZInputValidator::STATE_ACCEPTED;
     }
Index: kernel/classes/datatypes/ezkeyword/ezkeywordtype.php
===================================================================
--- kernel/classes/datatypes/ezkeyword/ezkeywordtype.php	(revision 22004)
+++ kernel/classes/datatypes/ezkeyword/ezkeywordtype.php	(working copy)
@@ -82,15 +82,15 @@
     */
     function validateObjectAttributeHTTPInput( $http, $base, $contentObjectAttribute )
     {
+        $classAttribute = $contentObjectAttribute->contentClassAttribute();
+
         if ( $http->hasPostVariable( $base . '_ezkeyword_data_text_' . $contentObjectAttribute->attribute( 'id' ) ) )
         {
             $data = $http->postVariable( $base . '_ezkeyword_data_text_' . $contentObjectAttribute->attribute( 'id' ) );
-            $classAttribute = $contentObjectAttribute->contentClassAttribute();
 
             if ( $data == "" )
             {
-                if ( !$classAttribute->attribute( 'is_information_collector' ) and
-                     $contentObjectAttribute->validateIsRequired() )
+                if ( !$classAttribute->attribute( 'is_information_collector' ) and $contentObjectAttribute->validateIsRequired() )
                 {
                     $contentObjectAttribute->setValidationError( ezi18n( 'kernel/classes/datatypes',
                                                                          'Input required.' ) );
@@ -98,6 +98,11 @@
                 }
             }
         }
+        else if ( !$classAttribute->attribute( 'is_information_collector' ) and $contentObjectAttribute->validateIsRequired() )
+        {
+            $contentObjectAttribute->setValidationError( ezi18n( 'kernel/classes/datatypes', 'Input required.' ) );
+            return eZInputValidator::STATE_INVALID;
+        }
         return eZInputValidator::STATE_ACCEPTED;
     }
 
Index: kernel/classes/datatypes/ezmultiprice/ezmultipricetype.php
===================================================================
--- kernel/classes/datatypes/ezmultiprice/ezmultipricetype.php	(revision 22004)
+++ kernel/classes/datatypes/ezmultiprice/ezmultipricetype.php	(working copy)
@@ -94,6 +94,11 @@
                 }
             }
         }
+        else if ( $contentObjectAttribute->validateIsRequired() )
+        {
+            $contentObjectAttribute->setValidationError( ezi18n( 'kernel/classes/datatypes', 'Input required' ) );
+            return eZInputValidator::STATE_INVALID;
+        }
 
         return eZInputValidator::STATE_ACCEPTED;
     }
Index: kernel/classes/datatypes/ezobjectrelation/ezobjectrelationtype.php
===================================================================
--- kernel/classes/datatypes/ezobjectrelation/ezobjectrelationtype.php	(revision 22004)
+++ kernel/classes/datatypes/ezobjectrelation/ezobjectrelationtype.php	(working copy)
@@ -84,6 +84,12 @@
                 return eZInputValidator::STATE_INVALID;
             }
         }
+        else if ( $contentObjectAttribute->validateIsRequired() )
+        {
+            $contentObjectAttribute->setValidationError( ezi18n( 'kernel/classes/datatypes', 'Missing objectrelation input.' ) );
+            return eZInputValidator::STATE_INVALID;
+        }
+
         return eZInputValidator::STATE_ACCEPTED;
     }
 
Index: kernel/classes/datatypes/ezprice/ezpricetype.php
===================================================================
--- kernel/classes/datatypes/ezprice/ezpricetype.php	(revision 22004)
+++ kernel/classes/datatypes/ezprice/ezpricetype.php	(working copy)
@@ -91,6 +91,11 @@
                                                                  'Invalid price.' ) );
             return eZInputValidator::STATE_INVALID;
         }
+        else if ( $contentObjectAttribute->validateIsRequired() )
+        {
+            $contentObjectAttribute->setValidationError( ezi18n( 'kernel/classes/datatypes', 'Input required.' ) );
+            return eZInputValidator::STATE_INVALID;
+        }
         else
         {
             return eZInputValidator::STATE_ACCEPTED;
Index: kernel/classes/datatypes/ezrangeoption/ezrangeoptiontype.php
===================================================================
--- kernel/classes/datatypes/ezrangeoption/ezrangeoptiontype.php	(revision 22004)
+++ kernel/classes/datatypes/ezrangeoption/ezrangeoptiontype.php	(working copy)
@@ -57,17 +57,18 @@
 
     function validateObjectAttributeHTTPInput( $http, $base, $contentObjectAttribute )
     {
+        $classAttribute = $contentObjectAttribute->contentClassAttribute();
+
         if ( $http->hasPostVariable( $base . "_data_rangeoption_name_" . $contentObjectAttribute->attribute( "id" ) ) and
              $http->hasPostVariable( $base . '_data_rangeoption_start_value_' . $contentObjectAttribute->attribute( 'id' ) ) and
              $http->hasPostVariable( $base . '_data_rangeoption_stop_value_' . $contentObjectAttribute->attribute( 'id' ) ) and
              $http->hasPostVariable( $base . '_data_rangeoption_step_value_' . $contentObjectAttribute->attribute( 'id' ) ) )
         {
-
             $name = $http->postVariable( $base . "_data_rangeoption_name_" . $contentObjectAttribute->attribute( "id" ) );
             $startValue = $http->postVariable( $base . '_data_rangeoption_start_value_' . $contentObjectAttribute->attribute( 'id' ) );
             $stopValue = $http->postVariable( $base . '_data_rangeoption_stop_value_' . $contentObjectAttribute->attribute( 'id' ) );
             $stepValue = $http->postVariable( $base . '_data_rangeoption_step_value_' . $contentObjectAttribute->attribute( 'id' ) );
-            $classAttribute = $contentObjectAttribute->contentClassAttribute();
+
             if ( $name == '' or
                  $startValue == '' or
                  $stopValue == '' or
@@ -84,6 +85,11 @@
                     return eZInputValidator::STATE_ACCEPTED;
             }
         }
+        else if ( !$classAttribute->attribute( 'is_information_collector' ) and $contentObjectAttribute->validateIsRequired() )
+        {
+            $contentObjectAttribute->setValidationError( ezi18n( 'kernel/classes/datatypes', 'Missing range option input.' ) );
+            return eZInputValidator::STATE_INVALID;
+        }
         else
         {
             return eZInputValidator::STATE_ACCEPTED;
Index: kernel/classes/datatypes/ezselection/ezselectiontype.php
===================================================================
--- kernel/classes/datatypes/ezselection/ezselectiontype.php	(revision 22004)
+++ kernel/classes/datatypes/ezselection/ezselectiontype.php	(working copy)
@@ -166,10 +166,11 @@
     */
     function validateObjectAttributeHTTPInput( $http, $base, $contentObjectAttribute )
     {
+        $classAttribute = $contentObjectAttribute->contentClassAttribute();
+
         if ( $http->hasPostVariable( $base . '_ezselect_selected_array_' . $contentObjectAttribute->attribute( 'id' ) ) )
         {
             $data = $http->postVariable( $base . '_ezselect_selected_array_' . $contentObjectAttribute->attribute( 'id' ) );
-            $classAttribute = $contentObjectAttribute->contentClassAttribute();
 
             if ( $data == "" )
             {
@@ -182,6 +183,11 @@
                 }
             }
         }
+        else if ( !$classAttribute->attribute( 'is_information_collector' ) && $contentObjectAttribute->validateIsRequired() )
+        {
+            $contentObjectAttribute->setValidationError( ezi18n( 'kernel/classes/datatypes', 'Input required.' ) );
+            return eZInputValidator::STATE_INVALID;
+        }
         return eZInputValidator::STATE_ACCEPTED;
     }
 
Index: kernel/classes/datatypes/ezstring/ezstringtype.php
===================================================================
--- kernel/classes/datatypes/ezstring/ezstringtype.php	(revision 22004)
+++ kernel/classes/datatypes/ezstring/ezstringtype.php	(working copy)
@@ -112,10 +112,11 @@
     */
     function validateObjectAttributeHTTPInput( $http, $base, $contentObjectAttribute )
     {
+        $classAttribute = $contentObjectAttribute->contentClassAttribute();
+
         if ( $http->hasPostVariable( $base . '_ezstring_data_text_' . $contentObjectAttribute->attribute( 'id' ) ) )
         {
             $data = $http->postVariable( $base . '_ezstring_data_text_' . $contentObjectAttribute->attribute( 'id' ) );
-            $classAttribute = $contentObjectAttribute->contentClassAttribute();
 
             if ( $data == "" )
             {
@@ -132,6 +133,11 @@
                 return $this->validateStringHTTPInput( $data, $contentObjectAttribute, $classAttribute );
             }
         }
+        else if ( !$classAttribute->attribute( 'is_information_collector' ) and $contentObjectAttribute->validateIsRequired() )
+        {
+            $contentObjectAttribute->setValidationError( ezi18n( 'kernel/classes/datatypes', 'Input required.' ) );
+            return eZInputValidator::STATE_INVALID;
+        }
         return eZInputValidator::STATE_ACCEPTED;
     }
 
Index: kernel/classes/datatypes/eztext/eztexttype.php
===================================================================
--- kernel/classes/datatypes/eztext/eztexttype.php	(revision 22004)
+++ kernel/classes/datatypes/eztext/eztexttype.php	(working copy)
@@ -100,6 +100,12 @@
                 }
             }
         }
+        else if ( !$classAttribute->attribute( 'is_information_collector' ) and $contentObjectAttribute->validateIsRequired() )
+        {
+            $contentObjectAttribute->setValidationError( ezi18n( 'kernel/classes/datatypes', 'Input required.' ) );
+            return eZInputValidator::STATE_INVALID;
+        }
+
         return eZInputValidator::STATE_ACCEPTED;
     }
 
Index: kernel/classes/datatypes/eztime/eztimetype.php
===================================================================
--- kernel/classes/datatypes/eztime/eztimetype.php	(revision 22004)
+++ kernel/classes/datatypes/eztime/eztimetype.php	(working copy)
@@ -104,6 +104,11 @@
                 return $this->validateTimeHTTPInput( $hours, $minute, $second, $contentObjectAttribute );
             }
         }
+        else if ( !$classAttribute->attribute( 'is_information_collector' ) and $contentObjectAttribute->validateIsRequired() )
+        {
+            $contentObjectAttribute->setValidationError( ezi18n( 'kernel/classes/datatypes', 'Time input required.' ) );
+            return eZInputValidator::STATE_INVALID;
+        }
         else
             return eZInputValidator::STATE_ACCEPTED;
     }
Index: kernel/classes/datatypes/ezurl/ezurltype.php
===================================================================
--- kernel/classes/datatypes/ezurl/ezurltype.php	(revision 22004)
+++ kernel/classes/datatypes/ezurl/ezurltype.php	(working copy)
@@ -103,6 +103,11 @@
             // Remove all url-object links to this attribute.
             eZURLObjectLink::removeURLlinkList( $contentObjectAttribute->attribute( "id" ), $contentObjectAttribute->attribute('version') );
         }
+        else if ( $contentObjectAttribute->validateIsRequired() )
+        {
+            $contentObjectAttribute->setValidationError( ezi18n( 'kernel/classes/datatypes', 'Input required.' ) );
+            return eZInputValidator::STATE_INVALID;
+        }
         return eZInputValidator::STATE_ACCEPTED;
     }
 
Index: kernel/classes/datatypes/ezuser/ezusertype.php
===================================================================
--- kernel/classes/datatypes/ezuser/ezusertype.php	(revision 22004)
+++ kernel/classes/datatypes/ezuser/ezusertype.php	(working copy)
@@ -75,7 +75,11 @@
     */
     function validateObjectAttributeHTTPInput( $http, $base, $contentObjectAttribute )
     {
-        if ( $http->hasPostVariable( $base . "_data_user_login_" . $contentObjectAttribute->attribute( "id" ) ) )
+        if ( $http->hasPostVariable( $base . "_data_user_login_" . $contentObjectAttribute->attribute( "id" ) ) &&
+             $http->hasPostVariable( $base . "_data_user_login_" . $contentObjectAttribute->attribute( "id" ) ) &&
+             $http->hasPostVariable( $base . "_data_user_email_" . $contentObjectAttribute->attribute( "id" ) ) &&
+             $http->hasPostVariable( $base . "_data_user_password_" . $contentObjectAttribute->attribute( "id" ) ) &&
+             $http->hasPostVariable( $base . "_data_user_password_confirm_" . $contentObjectAttribute->attribute( "id" ) ) )
         {
             $classAttribute = $contentObjectAttribute->contentClassAttribute();
             $loginName = $http->postVariable( $base . "_data_user_login_" . $contentObjectAttribute->attribute( "id" ) );
@@ -158,6 +162,11 @@
                 }
             }
         }
+        else if ( $contentObjectAttribute->validateIsRequired() )
+        {
+            $contentObjectAttribute->setValidationError( ezi18n( 'kernel/classes/datatypes', 'Input required.' ) );
+            return eZInputValidator::STATE_INVALID;
+        }
         return eZInputValidator::STATE_ACCEPTED;
     }
 
@@ -169,9 +178,9 @@
         if ( $http->hasPostVariable( $base . "_data_user_login_" . $contentObjectAttribute->attribute( "id" ) ) )
         {
             $login = $http->postVariable( $base . "_data_user_login_" . $contentObjectAttribute->attribute( "id" ) );
-            $email = $http->postVariable( $base . "_data_user_email_" . $contentObjectAttribute->attribute( "id" ) );
-            $password = $http->postVariable( $base . "_data_user_password_" . $contentObjectAttribute->attribute( "id" ) );
-            $passwordConfirm = $http->postVariable( $base . "_data_user_password_confirm_" . $contentObjectAttribute->attribute( "id" ) );
+            $email = $http->hasPostVariable( $base . "_data_user_email_" . $contentObjectAttribute->attribute( "id" ) ) ? $http->postVariable( $base . "_data_user_email_" . $contentObjectAttribute->attribute( "id" ) ) : '';
+            $password = $http->hasPostVariable( $base . "_data_user_password_" . $contentObjectAttribute->attribute( "id" ) ) ? $http->postVariable( $base . "_data_user_password_" . $contentObjectAttribute->attribute( "id" ) ) : '';
+            $passwordConfirm = $http->hasPostVariable( $base . "_data_user_password_confirm_" . $contentObjectAttribute->attribute( "id" ) ) ? $http->postVariable( $base . "_data_user_password_confirm_" . $contentObjectAttribute->attribute( "id" ) ) : '';
 
             $contentObjectID = $contentObjectAttribute->attribute( "contentobject_id" );
 
@@ -183,7 +192,7 @@
 
             $ini = eZINI::instance();
             $generatePasswordIfEmpty = $ini->variable( "UserSettings", "GeneratePasswordIfEmpty" );
-            if (  $password == "" )
+            if ( $password == "" )
             {
                 if ( $generatePasswordIfEmpty == 'true' )
                 {
