diff --git a/CHANGES.md b/CHANGES.md
index 6f40a758fc..a928db9279 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -20,6 +20,7 @@ Build 🧱:
  -
 
 Other changes:
+ - Use `Context#getSystemService` extension function provided by `core-ktx` (#1702)
  - Hide Flair settings, this is not implemented yet.
  - Rename package `im.vector.riotx.attachmentviewer` to `im.vector.lib.attachmentviewer`
  - Rename package `im.vector.riotx.multipicker` to `im.vector.lib.multipicker`
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/network/NetworkCallbackStrategy.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/network/NetworkCallbackStrategy.kt
index a639c61678..d014f1549b 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/network/NetworkCallbackStrategy.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/network/NetworkCallbackStrategy.kt
@@ -22,6 +22,7 @@ import android.content.IntentFilter
 import android.net.ConnectivityManager
 import android.net.Network
 import android.os.Build
+import androidx.core.content.getSystemService
 import timber.log.Timber
 import javax.inject.Inject
 
@@ -53,7 +54,7 @@ internal class FallbackNetworkCallbackStrategy @Inject constructor(private val c
 internal class PreferredNetworkCallbackStrategy @Inject constructor(context: Context) : NetworkCallbackStrategy {
 
     private var hasChangedCallback: (() -> Unit)? = null
-    private val conn = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+    private val conn = context.getSystemService<ConnectivityManager>()!!
     private val networkCallback = object : ConnectivityManager.NetworkCallback() {
 
         override fun onLost(network: Network) {
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/network/NetworkInfoReceiver.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/network/NetworkInfoReceiver.kt
index 645329628b..b54fa2b389 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/network/NetworkInfoReceiver.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/network/NetworkInfoReceiver.kt
@@ -24,6 +24,7 @@ import android.content.Context
 import android.content.Intent
 import android.net.ConnectivityManager
 import android.net.NetworkInfo
+import androidx.core.content.getSystemService
 import javax.inject.Inject
 
 internal class NetworkInfoReceiver @Inject constructor() : BroadcastReceiver() {
@@ -31,7 +32,7 @@ internal class NetworkInfoReceiver @Inject constructor() : BroadcastReceiver() {
     var isConnectedCallback: ((Boolean) -> Unit)? = null
 
     override fun onReceive(context: Context, intent: Intent) {
-        val conn = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+        val conn = context.getSystemService<ConnectivityManager>()!!
         val networkInfo: NetworkInfo? = conn.activeNetworkInfo
         isConnectedCallback?.invoke(networkInfo?.isConnected ?: false)
     }
diff --git a/vector/src/debug/java/im/vector/app/features/debug/DebugMenuActivity.kt b/vector/src/debug/java/im/vector/app/features/debug/DebugMenuActivity.kt
index 349ee977de..c1a631b1ee 100644
--- a/vector/src/debug/java/im/vector/app/features/debug/DebugMenuActivity.kt
+++ b/vector/src/debug/java/im/vector/app/features/debug/DebugMenuActivity.kt
@@ -19,11 +19,11 @@ package im.vector.app.features.debug
 import android.app.Activity
 import android.app.NotificationChannel
 import android.app.NotificationManager
-import android.content.Context
 import android.content.Intent
 import android.os.Build
 import androidx.core.app.NotificationCompat
 import androidx.core.app.Person
+import androidx.core.content.getSystemService
 import butterknife.OnClick
 import im.vector.app.R
 import im.vector.app.core.di.ActiveSessionHolder
@@ -83,7 +83,7 @@ class DebugMenuActivity : VectorBaseActivity() {
 
     @OnClick(R.id.debug_test_notification)
     fun testNotification() {
-        val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
+        val notificationManager = getSystemService<NotificationManager>()!!
 
         // Create channel first
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
@@ -95,7 +95,7 @@ class DebugMenuActivity : VectorBaseActivity() {
                     )
 
             channel.description = "Channel description"
-            (getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager).createNotificationChannel(channel)
+            notificationManager.createNotificationChannel(channel)
 
             val channel2 =
                     NotificationChannel(
@@ -105,7 +105,7 @@ class DebugMenuActivity : VectorBaseActivity() {
                     )
 
             channel2.description = "Channel description 2"
-            (getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager).createNotificationChannel(channel2)
+            notificationManager.createNotificationChannel(channel2)
         }
 
         val builder = NotificationCompat.Builder(this, "CHAN")
diff --git a/vector/src/fdroid/java/im/vector/app/fdroid/features/settings/troubleshoot/TestBackgroundRestrictions.kt b/vector/src/fdroid/java/im/vector/app/fdroid/features/settings/troubleshoot/TestBackgroundRestrictions.kt
index b3c972ae8b..3e053d7fec 100644
--- a/vector/src/fdroid/java/im/vector/app/fdroid/features/settings/troubleshoot/TestBackgroundRestrictions.kt
+++ b/vector/src/fdroid/java/im/vector/app/fdroid/features/settings/troubleshoot/TestBackgroundRestrictions.kt
@@ -15,9 +15,9 @@
  */
 package im.vector.app.fdroid.features.settings.troubleshoot
 
-import android.content.Context
 import android.net.ConnectivityManager
 import androidx.appcompat.app.AppCompatActivity
+import androidx.core.content.getSystemService
 import androidx.core.net.ConnectivityManagerCompat
 import im.vector.app.R
 import im.vector.app.core.resources.StringProvider
@@ -29,7 +29,7 @@ class TestBackgroundRestrictions @Inject constructor(private val context: AppCom
     : TroubleshootTest(R.string.settings_troubleshoot_test_bg_restricted_title) {
 
     override fun perform() {
-        (context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager).apply {
+        context.getSystemService<ConnectivityManager>()!!.apply {
             // Checks if the device is on a metered network
             if (isActiveNetworkMetered) {
                 // Checks user’s Data Saver settings.
diff --git a/vector/src/fdroid/java/im/vector/app/fdroid/receiver/AlarmSyncBroadcastReceiver.kt b/vector/src/fdroid/java/im/vector/app/fdroid/receiver/AlarmSyncBroadcastReceiver.kt
index 44d437fe39..08b81ec3e2 100644
--- a/vector/src/fdroid/java/im/vector/app/fdroid/receiver/AlarmSyncBroadcastReceiver.kt
+++ b/vector/src/fdroid/java/im/vector/app/fdroid/receiver/AlarmSyncBroadcastReceiver.kt
@@ -26,6 +26,7 @@ import android.os.PowerManager
 import androidx.core.content.ContextCompat
 import im.vector.app.core.di.HasVectorInjector
 import im.vector.app.core.services.VectorSyncService
+import androidx.core.content.getSystemService
 import im.vector.matrix.android.internal.session.sync.job.SyncService
 import timber.log.Timber
 
@@ -42,7 +43,7 @@ class AlarmSyncBroadcastReceiver : BroadcastReceiver() {
         }
 
         // Acquire a lock to give enough time for the sync :/
-        (context.getSystemService(Context.POWER_SERVICE) as PowerManager).run {
+        context.getSystemService<PowerManager>()!!.run {
             newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "riotx:fdroidSynclock").apply {
                 acquire((10_000).toLong())
             }
@@ -74,7 +75,7 @@ class AlarmSyncBroadcastReceiver : BroadcastReceiver() {
             }
             val pIntent = PendingIntent.getBroadcast(context, REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT)
             val firstMillis = System.currentTimeMillis() + delay
-            val alarmMgr = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
+            val alarmMgr = context.getSystemService<AlarmManager>()!!
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                 alarmMgr.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, firstMillis, pIntent)
             } else {
@@ -86,7 +87,7 @@ class AlarmSyncBroadcastReceiver : BroadcastReceiver() {
             Timber.v("Cancel alarm")
             val intent = Intent(context, AlarmSyncBroadcastReceiver::class.java)
             val pIntent = PendingIntent.getBroadcast(context, REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT)
-            val alarmMgr = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
+            val alarmMgr = context.getSystemService<AlarmManager>()!!
             alarmMgr.cancel(pIntent)
         }
     }
diff --git a/vector/src/main/java/im/vector/app/core/extensions/View.kt b/vector/src/main/java/im/vector/app/core/extensions/View.kt
index d8156d5857..7ec86d3508 100644
--- a/vector/src/main/java/im/vector/app/core/extensions/View.kt
+++ b/vector/src/main/java/im/vector/app/core/extensions/View.kt
@@ -16,12 +16,12 @@
 
 package im.vector.app.core.extensions
 
-import android.content.Context
 import android.view.View
 import android.view.inputmethod.InputMethodManager
+import androidx.core.content.getSystemService
 
 fun View.hideKeyboard() {
-    val imm = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as? InputMethodManager
+    val imm = context?.getSystemService<InputMethodManager>()
     imm?.hideSoftInputFromWindow(windowToken, 0)
 }
 
@@ -29,6 +29,6 @@ fun View.showKeyboard(andRequestFocus: Boolean = false) {
     if (andRequestFocus) {
         requestFocus()
     }
-    val imm = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as? InputMethodManager
+    val imm = context?.getSystemService<InputMethodManager>()
     imm?.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
 }
diff --git a/vector/src/main/java/im/vector/app/core/files/FileSaver.kt b/vector/src/main/java/im/vector/app/core/files/FileSaver.kt
index eb68110995..c4acbb5e65 100644
--- a/vector/src/main/java/im/vector/app/core/files/FileSaver.kt
+++ b/vector/src/main/java/im/vector/app/core/files/FileSaver.kt
@@ -23,6 +23,7 @@ import android.net.Uri
 import android.os.Build
 import android.provider.MediaStore
 import androidx.annotation.WorkerThread
+import androidx.core.content.getSystemService
 import arrow.core.Try
 import okio.buffer
 import okio.sink
@@ -85,7 +86,7 @@ fun addEntryToDownloadManager(context: Context,
                 null
             }
         } else {
-            val downloadManager = context.getSystemService(Context.DOWNLOAD_SERVICE) as? DownloadManager
+            val downloadManager = context.getSystemService<DownloadManager>()
             @Suppress("DEPRECATION")
             downloadManager?.addCompletedDownload(title, description, true, mimeType, file.absolutePath, file.length(), true)
             return null
diff --git a/vector/src/main/java/im/vector/app/core/hardware/HardwareInfo.kt b/vector/src/main/java/im/vector/app/core/hardware/HardwareInfo.kt
index 0dae558f00..dac9102a93 100644
--- a/vector/src/main/java/im/vector/app/core/hardware/HardwareInfo.kt
+++ b/vector/src/main/java/im/vector/app/core/hardware/HardwareInfo.kt
@@ -23,6 +23,7 @@ import android.hardware.Camera
 import android.hardware.camera2.CameraCharacteristics
 import android.hardware.camera2.CameraManager
 import android.os.Build
+import androidx.core.content.getSystemService
 import javax.inject.Inject
 
 class HardwareInfo @Inject constructor(
@@ -36,7 +37,7 @@ class HardwareInfo @Inject constructor(
             return Camera.getNumberOfCameras() > 0
         }
 
-        val manager = context.getSystemService(Context.CAMERA_SERVICE) as CameraManager? ?: return Camera.getNumberOfCameras() > 0
+        val manager = context.getSystemService<CameraManager>() ?: return Camera.getNumberOfCameras() > 0
 
         return manager.cameraIdList.any {
             val lensFacing = manager.getCameraCharacteristics(it).get(CameraCharacteristics.LENS_FACING)
diff --git a/vector/src/main/java/im/vector/app/core/hardware/vibrator.kt b/vector/src/main/java/im/vector/app/core/hardware/vibrator.kt
index 64a7886c2c..2746fde18a 100644
--- a/vector/src/main/java/im/vector/app/core/hardware/vibrator.kt
+++ b/vector/src/main/java/im/vector/app/core/hardware/vibrator.kt
@@ -20,9 +20,10 @@ import android.content.Context
 import android.os.Build
 import android.os.VibrationEffect
 import android.os.Vibrator
+import androidx.core.content.getSystemService
 
 fun vibrate(context: Context, durationMillis: Long = 100) {
-    val vibrator = context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator? ?: return
+    val vibrator = context.getSystemService<Vibrator>() ?: return
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
         vibrator.vibrate(VibrationEffect.createOneShot(durationMillis, VibrationEffect.DEFAULT_AMPLITUDE))
     } else {
diff --git a/vector/src/main/java/im/vector/app/core/services/CallRingPlayer.kt b/vector/src/main/java/im/vector/app/core/services/CallRingPlayer.kt
index 68d5a9a260..b14a097eb6 100644
--- a/vector/src/main/java/im/vector/app/core/services/CallRingPlayer.kt
+++ b/vector/src/main/java/im/vector/app/core/services/CallRingPlayer.kt
@@ -21,6 +21,7 @@ import android.media.AudioAttributes
 import android.media.AudioManager
 import android.media.MediaPlayer
 import android.os.Build
+import androidx.core.content.getSystemService
 import im.vector.app.R
 import timber.log.Timber
 
@@ -33,7 +34,7 @@ class CallRingPlayer(
     private var player: MediaPlayer? = null
 
     fun start() {
-        val audioManager: AudioManager = applicationContext.getSystemService(Context.AUDIO_SERVICE) as AudioManager
+        val audioManager = applicationContext.getSystemService<AudioManager>()!!
         player?.release()
         player = createPlayer()
 
diff --git a/vector/src/main/java/im/vector/app/core/services/VectorSyncService.kt b/vector/src/main/java/im/vector/app/core/services/VectorSyncService.kt
index 425ec9a23a..bfba27e77d 100644
--- a/vector/src/main/java/im/vector/app/core/services/VectorSyncService.kt
+++ b/vector/src/main/java/im/vector/app/core/services/VectorSyncService.kt
@@ -21,6 +21,7 @@ import android.app.PendingIntent
 import android.content.Context
 import android.content.Intent
 import android.os.Build
+import androidx.core.content.getSystemService
 import im.vector.app.R
 import im.vector.app.core.extensions.vectorComponent
 import im.vector.app.features.notifications.NotificationUtils
@@ -64,7 +65,7 @@ class VectorSyncService : SyncService() {
     }
 
     private fun removeForegroundNotification() {
-        val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
+        val notificationManager = getSystemService<NotificationManager>()!!
         notificationManager.cancel(NotificationUtils.NOTIFICATION_ID_FOREGROUND_SERVICE)
     }
 
@@ -75,7 +76,7 @@ class VectorSyncService : SyncService() {
             PendingIntent.getService(this, 0, newIntent(this, sessionId), 0)
         }
         val firstMillis = System.currentTimeMillis() + delay
-        val alarmMgr = getSystemService(Context.ALARM_SERVICE) as AlarmManager
+        val alarmMgr = getSystemService<AlarmManager>()!!
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
             alarmMgr.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, firstMillis, pendingIntent)
         } else {
diff --git a/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt b/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt
index 22bae5e296..61adc11706 100644
--- a/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt
+++ b/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt
@@ -35,6 +35,7 @@ import androidx.browser.customtabs.CustomTabsIntent
 import androidx.browser.customtabs.CustomTabsSession
 import androidx.core.content.ContextCompat
 import androidx.core.content.FileProvider
+import androidx.core.content.getSystemService
 import androidx.fragment.app.Fragment
 import im.vector.app.BuildConfig
 import im.vector.app.R
@@ -375,7 +376,7 @@ private fun saveMediaLegacy(context: Context, mediaMimeType: String?, title: Str
             }
             val savedFile = saveFileIntoLegacy(file, downloadDir, outputFilename)
             if (savedFile != null) {
-                val downloadManager = context.getSystemService(Context.DOWNLOAD_SERVICE) as? DownloadManager
+                val downloadManager = context.getSystemService<DownloadManager>()
                 downloadManager?.addCompletedDownload(
                         savedFile.name,
                         title,
diff --git a/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt b/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt
index 88bbe24f88..1f2263889c 100644
--- a/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt
+++ b/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt
@@ -30,6 +30,7 @@ import android.provider.Settings
 import android.widget.Toast
 import androidx.annotation.StringRes
 import androidx.appcompat.app.AppCompatActivity
+import androidx.core.content.getSystemService
 import androidx.fragment.app.Fragment
 import im.vector.app.R
 import im.vector.app.features.notifications.NotificationUtils
@@ -47,7 +48,7 @@ import im.vector.app.features.notifications.NotificationUtils
 fun isIgnoringBatteryOptimizations(context: Context): Boolean {
     // no issue before Android M, battery optimisations did not exist
     return Build.VERSION.SDK_INT < Build.VERSION_CODES.M
-            || (context.getSystemService(Context.POWER_SERVICE) as PowerManager?)?.isIgnoringBatteryOptimizations(context.packageName) == true
+            || context.getSystemService<PowerManager>()?.isIgnoringBatteryOptimizations(context.packageName) == true
 }
 
 fun isAirplaneModeOn(context: Context): Boolean {
@@ -84,7 +85,7 @@ fun requestDisablingBatteryOptimization(activity: Activity, fragment: Fragment?,
  * @param text    the text to copy
  */
 fun copyToClipboard(context: Context, text: CharSequence, showToast: Boolean = true, @StringRes toastMessage: Int = R.string.copied_to_clipboard) {
-    val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
+    val clipboard = context.getSystemService<ClipboardManager>()!!
     clipboard.setPrimaryClip(ClipData.newPlainText("", text))
     if (showToast) {
         context.toast(toastMessage)
diff --git a/vector/src/main/java/im/vector/app/features/call/CallAudioManager.kt b/vector/src/main/java/im/vector/app/features/call/CallAudioManager.kt
index 2bde718a9c..306b9e6e75 100644
--- a/vector/src/main/java/im/vector/app/features/call/CallAudioManager.kt
+++ b/vector/src/main/java/im/vector/app/features/call/CallAudioManager.kt
@@ -22,6 +22,7 @@ import android.bluetooth.BluetoothProfile
 import android.content.Context
 import android.content.pm.PackageManager
 import android.media.AudioManager
+import androidx.core.content.getSystemService
 import im.vector.app.core.services.WiredHeadsetStateReceiver
 import im.vector.matrix.android.api.session.call.MxCall
 import timber.log.Timber
@@ -55,9 +56,9 @@ class CallAudioManager(
 
     init {
         executor.execute {
-            audioManager = applicationContext.getSystemService(Context.AUDIO_SERVICE) as AudioManager
+            audioManager = applicationContext.getSystemService()
         }
-        val bm = applicationContext.getSystemService(Context.BLUETOOTH_SERVICE) as? BluetoothManager
+        val bm = applicationContext.getSystemService<BluetoothManager>()
         val adapter = bm?.adapter
         Timber.d("## VOIP Bluetooth adapter $adapter")
         bluetoothAdapter = adapter
diff --git a/vector/src/main/java/im/vector/app/features/call/VectorCallActivity.kt b/vector/src/main/java/im/vector/app/features/call/VectorCallActivity.kt
index aa1005e32d..80a1dd7057 100644
--- a/vector/src/main/java/im/vector/app/features/call/VectorCallActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/call/VectorCallActivity.kt
@@ -28,6 +28,7 @@ import android.view.View
 import android.view.Window
 import android.view.WindowManager
 import androidx.appcompat.app.AlertDialog
+import androidx.core.content.getSystemService
 import androidx.core.view.ViewCompat
 import androidx.core.view.isInvisible
 import androidx.core.view.isVisible
@@ -458,7 +459,7 @@ class VectorCallActivity : VectorBaseActivity(), CallControlsView.InteractionLis
             )
         }
 
-        with(getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager) {
+        with(getSystemService<KeyguardManager>()!!) {
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                 requestDismissKeyguard(this@VectorCallActivity, null)
             }
diff --git a/vector/src/main/java/im/vector/app/features/call/WebRtcPeerConnectionManager.kt b/vector/src/main/java/im/vector/app/features/call/WebRtcPeerConnectionManager.kt
index edc74fffc6..051492ac04 100644
--- a/vector/src/main/java/im/vector/app/features/call/WebRtcPeerConnectionManager.kt
+++ b/vector/src/main/java/im/vector/app/features/call/WebRtcPeerConnectionManager.kt
@@ -20,6 +20,7 @@ import android.content.Context
 import android.hardware.camera2.CameraManager
 import android.os.Build
 import androidx.annotation.RequiresApi
+import androidx.core.content.getSystemService
 import im.vector.app.ActiveSessionDataSource
 import im.vector.app.core.services.BluetoothHeadsetReceiver
 import im.vector.app.core.services.CallService
@@ -480,7 +481,7 @@ class WebRtcPeerConnectionManager @Inject constructor(
                         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                             val restarter = CameraRestarter(cameraInUse?.name ?: "", callContext.mxCall.callId)
                             callContext.cameraAvailabilityCallback = restarter
-                            val cameraManager = context.getSystemService(Context.CAMERA_SERVICE) as CameraManager
+                            val cameraManager = context.getSystemService<CameraManager>()!!
                             cameraManager.registerAvailabilityCallback(restarter, null)
                         }
                     }
@@ -792,7 +793,7 @@ class WebRtcPeerConnectionManager @Inject constructor(
 
         currentCall?.cameraAvailabilityCallback?.let { cameraAvailabilityCallback ->
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-                val cameraManager = context.getSystemService(Context.CAMERA_SERVICE) as CameraManager
+                val cameraManager = context.getSystemService<CameraManager>()!!
                 cameraManager.unregisterAvailabilityCallback(cameraAvailabilityCallback)
             }
         }
@@ -1048,8 +1049,7 @@ class WebRtcPeerConnectionManager @Inject constructor(
                 // re-start the capture
                 // TODO notify that video is enabled
                 videoCapturer?.startCapture(currentCaptureMode.width, currentCaptureMode.height, currentCaptureMode.fps)
-                (context.getSystemService(Context.CAMERA_SERVICE) as? CameraManager)
-                        ?.unregisterAvailabilityCallback(this)
+                context.getSystemService<CameraManager>()?.unregisterAvailabilityCallback(this)
             }
         }
     }
diff --git a/vector/src/main/java/im/vector/app/features/call/telecom/TelecomUtils.kt b/vector/src/main/java/im/vector/app/features/call/telecom/TelecomUtils.kt
index 5601f769d1..819a1f6c0a 100644
--- a/vector/src/main/java/im/vector/app/features/call/telecom/TelecomUtils.kt
+++ b/vector/src/main/java/im/vector/app/features/call/telecom/TelecomUtils.kt
@@ -18,11 +18,12 @@ package im.vector.app.features.call.telecom
 
 import android.content.Context
 import android.telephony.TelephonyManager
+import androidx.core.content.getSystemService
 
 object TelecomUtils {
 
     fun isLineBusy(context: Context): Boolean {
-        val telephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as? TelephonyManager
+        val telephonyManager = context.getSystemService<TelephonyManager>()
                 ?: return false
         return telephonyManager.callState != TelephonyManager.CALL_STATE_IDLE
     }
diff --git a/vector/src/main/java/im/vector/app/features/home/ShortcutsHandler.kt b/vector/src/main/java/im/vector/app/features/home/ShortcutsHandler.kt
index 5d27f8ca69..4d13e52d22 100644
--- a/vector/src/main/java/im/vector/app/features/home/ShortcutsHandler.kt
+++ b/vector/src/main/java/im/vector/app/features/home/ShortcutsHandler.kt
@@ -20,6 +20,7 @@ import android.content.Context
 import android.content.pm.ShortcutManager
 import android.graphics.Bitmap
 import android.os.Build
+import androidx.core.content.getSystemService
 import androidx.core.content.pm.ShortcutInfoCompat
 import androidx.core.content.pm.ShortcutManagerCompat
 import androidx.core.graphics.drawable.IconCompat
@@ -96,7 +97,7 @@ class ShortcutsHandler @Inject constructor(
         // We can only disabled pinned shortcuts with the API, but at least it will prevent the crash
         if (ShortcutManagerCompat.isRequestPinShortcutSupported(context)) {
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
-                context.getSystemService(ShortcutManager::class.java)
+                context.getSystemService<ShortcutManager>()
                         ?.let {
                             it.disableShortcuts(it.pinnedShortcuts.map { pinnedShortcut -> pinnedShortcut.id })
                         }
diff --git a/vector/src/main/java/im/vector/app/features/notifications/NotificationUtils.kt b/vector/src/main/java/im/vector/app/features/notifications/NotificationUtils.kt
index c42b7ea635..2b070e540e 100755
--- a/vector/src/main/java/im/vector/app/features/notifications/NotificationUtils.kt
+++ b/vector/src/main/java/im/vector/app/features/notifications/NotificationUtils.kt
@@ -35,6 +35,7 @@ import androidx.core.app.NotificationManagerCompat
 import androidx.core.app.RemoteInput
 import androidx.core.app.TaskStackBuilder
 import androidx.core.content.ContextCompat
+import androidx.core.content.getSystemService
 import androidx.core.graphics.drawable.IconCompat
 import androidx.fragment.app.Fragment
 import im.vector.app.BuildConfig
@@ -853,7 +854,7 @@ class NotificationUtils @Inject constructor(private val context: Context,
         }
 
         // We cannot use NotificationManagerCompat here.
-        val setting = (context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager).currentInterruptionFilter
+        val setting = context.getSystemService<NotificationManager>()!!.currentInterruptionFilter
 
         return setting == NotificationManager.INTERRUPTION_FILTER_NONE
                 || setting == NotificationManager.INTERRUPTION_FILTER_ALARMS
diff --git a/vector/src/main/java/im/vector/app/features/rageshake/RageShake.kt b/vector/src/main/java/im/vector/app/features/rageshake/RageShake.kt
index 763fde101a..31b15c76d0 100644
--- a/vector/src/main/java/im/vector/app/features/rageshake/RageShake.kt
+++ b/vector/src/main/java/im/vector/app/features/rageshake/RageShake.kt
@@ -21,6 +21,7 @@ import android.hardware.Sensor
 import android.hardware.SensorManager
 import androidx.appcompat.app.AlertDialog
 import androidx.appcompat.app.AppCompatActivity
+import androidx.core.content.getSystemService
 import com.squareup.seismic.ShakeDetector
 import im.vector.app.R
 import im.vector.app.core.hardware.vibrate
@@ -41,7 +42,7 @@ class RageShake @Inject constructor(private val activity: AppCompatActivity,
     var interceptor: (() -> Unit)? = null
 
     fun start() {
-        val sensorManager = activity.getSystemService(AppCompatActivity.SENSOR_SERVICE) as? SensorManager ?: return
+        val sensorManager = activity.getSystemService<SensorManager>() ?: return
 
         shakeDetector = ShakeDetector(this).apply {
             setSensitivity(vectorPreferences.getRageshakeSensitivity())
@@ -94,8 +95,7 @@ class RageShake @Inject constructor(private val activity: AppCompatActivity,
          * Check if the feature is available
          */
         fun isAvailable(context: Context): Boolean {
-            return (context.getSystemService(AppCompatActivity.SENSOR_SERVICE) as? SensorManager)
-                    ?.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) != null
+            return context.getSystemService<SensorManager>()?.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) != null
         }
     }
 }