diff --git a/pallets/identity/src/lib.rs b/pallets/identity/src/lib.rs
index 2fa4febc8711cc15f61dfa22b53be1bc870d40be..567ebc9dfef3b06123aeb25e79dd2c52b8d286da 100644
--- a/pallets/identity/src/lib.rs
+++ b/pallets/identity/src/lib.rs
@@ -405,6 +405,7 @@ pub mod pallet {
         pub fn validate_identity(
             origin: OriginFor<T>,
             idty_index: T::IdtyIndex,
+            idty_rights: Vec<T::IdtyRight>,
         ) -> DispatchResultWithPostInfo {
             T::IdtyValidationOrigin::ensure_origin(origin.clone())?;
 
@@ -414,51 +415,25 @@ pub mod pallet {
                     IdtyStatus::ConfirmedByOwner => {
                         let _post_info = T::Membership::claim_membership_(origin, idty_index)?;
 
-                        let block_number = frame_system::pallet::Pallet::<T>::block_number();
-                        let removable_on = block_number + T::MaxNoRightPeriod::get();
-                        idty_value.removable_on = removable_on;
-                        idty_value.status = IdtyStatus::Validated;
-                        let name = idty_value.name.clone();
-
-                        <Identities<T>>::insert(idty_index, idty_value);
-                        <IdentitiesRemovableOn<T>>::append(
-                            removable_on,
-                            (idty_index, IdtyStatus::Validated),
-                        );
-                        Self::deposit_event(Event::IdtyValidated(name));
-                        T::OnIdtyChange::on_idty_change(idty_index, IdtyEvent::Validated);
-                        Ok(().into())
-                    }
-                    IdtyStatus::Validated | IdtyStatus::Expired => {
-                        Err(Error::<T>::IdtyAlreadyValidated.into())
-                    }
-                }
-            } else {
-                Err(Error::<T>::IdtyNotFound.into())
-            }
-        }
-        #[pallet::weight(0)]
-        pub fn validate_identity_and_add_rights(
-            origin: OriginFor<T>,
-            idty_index: T::IdtyIndex,
-            rights: Vec<T::IdtyRight>,
-        ) -> DispatchResultWithPostInfo {
-            T::IdtyValidationOrigin::ensure_origin(origin)?;
-
-            if let Ok(mut idty_value) = <Identities<T>>::try_get(idty_index) {
-                match idty_value.status {
-                    IdtyStatus::Created => Err(Error::<T>::IdtyNotConfirmedByOwner.into()),
-                    IdtyStatus::ConfirmedByOwner => {
                         idty_value.removable_on = T::BlockNumber::zero();
-                        idty_value.rights = rights.iter().map(|right| (*right, None)).collect();
+                        idty_value.rights =
+                            idty_rights.iter().map(|right| (*right, None)).collect();
                         idty_value.status = IdtyStatus::Validated;
                         let name = idty_value.name.clone();
                         let owner_key = idty_value.owner_key.clone();
 
                         <Identities<T>>::insert(idty_index, idty_value);
+                        if idty_rights.is_empty() {
+                            let block_number = frame_system::pallet::Pallet::<T>::block_number();
+                            let removable_on = block_number + T::MaxNoRightPeriod::get();
+                            <IdentitiesRemovableOn<T>>::append(
+                                removable_on,
+                                (idty_index, IdtyStatus::Validated),
+                            );
+                        }
                         Self::deposit_event(Event::IdtyValidated(name.clone()));
                         T::OnIdtyChange::on_idty_change(idty_index, IdtyEvent::Validated);
-                        for right in rights {
+                        for right in idty_rights {
                             Self::deposit_event(Event::IdtyAcquireRight(name.clone(), right));
                             if right.allow_owner_key() {
                                 T::OnRightKeyChange::on_right_key_change(
diff --git a/runtime/common/src/handlers.rs b/runtime/common/src/handlers.rs
index ce6f6753d4d9216c3463567f772f6d29c6444227..54406b331676a954c97451b0bb7afb8d1c049e09 100644
--- a/runtime/common/src/handlers.rs
+++ b/runtime/common/src/handlers.rs
@@ -106,7 +106,7 @@ impl<
         let total_weight = 0;
         if receiver_received_count == MIN_STRONG_CERT_FOR_UD {
             // total_weight += Identity::WeightInfo::add_right();
-            let _ = <pallet_identity::Pallet<Runtime>>::validate_identity_and_add_rights(
+            let _ = <pallet_identity::Pallet<Runtime>>::validate_identity(
                 frame_system::Origin::<Runtime>::Root.into(),
                 receiver,
                 sp_std::vec![IdtyRight::Ud],