diff --git a/prdoc/pr_6261.prdoc b/prdoc/pr_6261.prdoc
new file mode 100644
index 0000000000000000000000000000000000000000..20ee5563bcfd50b910c86a8b9561da8a41544704
--- /dev/null
+++ b/prdoc/pr_6261.prdoc
@@ -0,0 +1,13 @@
+# Schema: Polkadot SDK PRDoc Schema (prdoc) v1.0.0
+# See doc at https://raw.githubusercontent.com/paritytech/polkadot-sdk/master/prdoc/schema_user.json
+
+title: Add missing events to identity pallet
+
+doc:
+  - audience: Runtime Dev
+    description: |
+      Extrinsics from `pallet_identity` that were missing an event emission on success now emit one.
+
+crates:
+  - name: pallet-identity
+    bump: major
diff --git a/substrate/frame/identity/src/lib.rs b/substrate/frame/identity/src/lib.rs
index 11b43f958c4ebf3632f4a345cce5b546fbc2ee05..6a71e831cca1131d35053deb4277c59bcf4a95d2 100644
--- a/substrate/frame/identity/src/lib.rs
+++ b/substrate/frame/identity/src/lib.rs
@@ -421,6 +421,10 @@ pub mod pallet {
 		RegistrarAdded { registrar_index: RegistrarIndex },
 		/// A sub-identity was added to an identity and the deposit paid.
 		SubIdentityAdded { sub: T::AccountId, main: T::AccountId, deposit: BalanceOf<T> },
+		/// An account's sub-identities were set (in bulk).
+		SubIdentitiesSet { main: T::AccountId, number_of_subs: u32, new_deposit: BalanceOf<T> },
+		/// A given sub-account's associated name was changed by its super-identity.
+		SubIdentityRenamed { sub: T::AccountId, main: T::AccountId },
 		/// A sub-identity was removed from an identity and the deposit freed.
 		SubIdentityRemoved { sub: T::AccountId, main: T::AccountId, deposit: BalanceOf<T> },
 		/// A sub-identity was cleared, and the given deposit repatriated from the
@@ -591,6 +595,12 @@ pub mod pallet {
 				SubsOf::<T>::insert(&sender, (new_deposit, ids));
 			}
 
+			Self::deposit_event(Event::SubIdentitiesSet {
+				main: sender,
+				number_of_subs: new_subs as u32,
+				new_deposit,
+			});
+
 			Ok(Some(
 				T::WeightInfo::set_subs_old(old_ids.len() as u32) // P: Real number of old accounts removed.
 					// S: New subs added
@@ -992,7 +1002,9 @@ pub mod pallet {
 			let sub = T::Lookup::lookup(sub)?;
 			ensure!(IdentityOf::<T>::contains_key(&sender), Error::<T>::NoIdentity);
 			ensure!(SuperOf::<T>::get(&sub).map_or(false, |x| x.0 == sender), Error::<T>::NotOwned);
-			SuperOf::<T>::insert(&sub, (sender, data));
+			SuperOf::<T>::insert(&sub, (&sender, data));
+
+			Self::deposit_event(Event::SubIdentityRenamed { main: sender, sub });
 			Ok(())
 		}
 
diff --git a/substrate/frame/identity/src/tests.rs b/substrate/frame/identity/src/tests.rs
index a095085a81882075567b3d123fb8c7bf378c3af3..7bf5b2a727607e910bc7a2470c383aa236a18e35 100644
--- a/substrate/frame/identity/src/tests.rs
+++ b/substrate/frame/identity/src/tests.rs
@@ -273,6 +273,10 @@ fn editing_subaccounts_should_work() {
 
 		// rename first sub account
 		assert_ok!(Identity::rename_sub(RuntimeOrigin::signed(ten.clone()), one.clone(), data(11)));
+		System::assert_last_event(tests::RuntimeEvent::Identity(Event::SubIdentityRenamed {
+			main: ten.clone(),
+			sub: one.clone(),
+		}));
 		assert_eq!(SuperOf::<Test>::get(one.clone()), Some((ten.clone(), data(11))));
 		assert_eq!(SuperOf::<Test>::get(two.clone()), Some((ten.clone(), data(2))));
 		assert_eq!(Balances::free_balance(ten.clone()), 1000 - id_deposit - 2 * sub_deposit);
@@ -546,6 +550,13 @@ fn setting_subaccounts_should_work() {
 		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(ten.clone()), Box::new(ten_info)));
 		assert_eq!(Balances::free_balance(ten.clone()), 1000 - id_deposit);
 		assert_ok!(Identity::set_subs(RuntimeOrigin::signed(ten.clone()), subs.clone()));
+
+		System::assert_last_event(tests::RuntimeEvent::Identity(Event::SubIdentitiesSet {
+			main: ten.clone(),
+			number_of_subs: 1,
+			new_deposit: sub_deposit,
+		}));
+
 		assert_eq!(Balances::free_balance(ten.clone()), 1000 - id_deposit - sub_deposit);
 		assert_eq!(
 			SubsOf::<Test>::get(ten.clone()),