diff --git a/fmapp2/src/com/caf/fmradio/FMRadioService.java b/fmapp2/src/com/caf/fmradio/FMRadioService.java
index 71e59ed..c463f46 100644
--- a/fmapp2/src/com/caf/fmradio/FMRadioService.java
+++ b/fmapp2/src/com/caf/fmradio/FMRadioService.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009-2014, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2009-2015, The Linux Foundation. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -110,6 +110,7 @@
    private BroadcastReceiver mAudioBecomeNoisyListener = null;
    private boolean mOverA2DP = false;
    private BroadcastReceiver mFmMediaButtonListener;
+   private BroadcastReceiver mAirplaneModeChanged;
    private IFMRadioServiceCallbacks mCallbacks;
    private static FmSharedPreferences mPrefs;
    private boolean mHeadsetPlugged = false;
@@ -208,6 +209,7 @@
       registerRecordTimeout();
       registerDelayedServiceStop();
       registerFMRecordingStatus();
+      registerAirplaneModeStatusChanged();
       // registering media button receiver seperately as we need to set
       // different priority for receiving media events
       registerFmMediaButtonReceiver();
@@ -290,6 +292,10 @@
           unregisterReceiver(mFmRecordingStatus);
           mFmRecordingStatus = null;
       }
+      if (mAirplaneModeChanged != null) {
+          unregisterReceiver(mAirplaneModeChanged);
+          mAirplaneModeChanged = null;
+      }
       /* Since the service is closing, disable the receiver */
       fmOff();
 
@@ -348,6 +354,27 @@
          }
    }
 
+   public void registerAirplaneModeStatusChanged() {
+       if (mAirplaneModeChanged == null) {
+           mAirplaneModeChanged = new BroadcastReceiver() {
+               @Override
+               public void onReceive(Context context, Intent intent) {
+                   String action = intent.getAction();
+                   if (action.equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)) {
+                       Log.d(LOGTAG, "ACTION_AIRPLANE_MODE_CHANGED received");
+                       boolean state = intent.getBooleanExtra("state", false);
+                       if (state == true) {
+                           fmOff();
+                       }
+                   }
+               }
+           };
+           IntentFilter iFilter = new IntentFilter();
+           iFilter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
+           registerReceiver(mAirplaneModeChanged, iFilter);
+       }
+   }
+
      /**
      * Registers an intent to listen for ACTION_HEADSET_PLUG
      * notifications. This intent is called to know if the headset
