diff --git a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/alsa_dev.c b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/alsa_dev.c
index 31b3b06..efda319 100644
--- a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/alsa_dev.c
+++ b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/alsa_dev.c
@@ -1,4 +1,4 @@
-/* $Id: alsa_dev.c 4283 2012-10-12 06:19:32Z ming $ */
+/* $Id$ */
 /*
  * Copyright (C) 2009-2011 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2007-2009 Keystream AB and Konftel AB, All rights reserved.
diff --git a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/android_jni_dev.c b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/android_jni_dev.c
index 6025c8c..255663a 100644
--- a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/android_jni_dev.c
+++ b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/android_jni_dev.c
@@ -1,4 +1,4 @@
-/* $Id: android_jni_dev.c 4435 2013-03-11 06:32:58Z nanang $ */
+/* $Id$ */
 /* 
  * Copyright (C) 2012-2012 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2010-2012 Regis Montoya (aka r3gis - www.r3gis.fr)
diff --git a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/audiodev.c b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/audiodev.c
index c5cad7e..4ccce9f 100644
--- a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/audiodev.c
+++ b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/audiodev.c
@@ -1,4 +1,4 @@
-/* $Id: audiodev.c 4435 2013-03-11 06:32:58Z nanang $ */
+/* $Id$ */
 /* 
  * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
diff --git a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/audiotest.c b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/audiotest.c
index 82893f5..e874d56 100644
--- a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/audiotest.c
+++ b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/audiotest.c
@@ -1,4 +1,4 @@
-/* $Id: audiotest.c 3553 2011-05-05 06:14:19Z nanang $ */
+/* $Id$ */
 /* 
  * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
diff --git a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/bb10_dev.c b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/bb10_dev.c
index 91158b9..f1ad9a1 100644
--- a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/bb10_dev.c
+++ b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/bb10_dev.c
@@ -1,4 +1,4 @@
-/* $Id: bb10_dev.c 4512 2013-04-30 09:00:36Z bennylp $ */
+/* $Id$ */
 /*
  * Copyright (C) 2008-2012 Teluu Inc. (http://www.teluu.com)
  *
diff --git a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/coreaudio_dev.c b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/coreaudio_dev.c
index 725df40..3248f61 100644
--- a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/coreaudio_dev.c
+++ b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/coreaudio_dev.c
@@ -1,4 +1,4 @@
-/* $Id: coreaudio_dev.c 4527 2013-05-29 03:53:15Z ming $ */
+/* $Id$ */
 /*
  * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
  *
@@ -50,6 +50,12 @@
      */
     #define USE_AUDIO_ROUTE_CHANGE_PROP_LISTENER 0
 
+    /* Starting iOS SDK 7, Audio Session API is deprecated. */
+    #ifdef __IPHONE_7_0
+        #define USE_AUDIO_SESSION_API 0
+    #else
+        #define USE_AUDIO_SESSION_API 1
+    #endif
 #endif
 
 /* For Mac OS 10.5.x and earlier */
@@ -176,7 +182,7 @@
 				     pjmedia_dir dir,
 				     struct coreaudio_stream *strm,
 				     AudioUnit *io_unit);
-#if !COREAUDIO_MAC
+#if !COREAUDIO_MAC && USE_AUDIO_SESSION_API != 0
 static void interruptionListener(void *inClientData, UInt32 inInterruption);
 static void propListener(void *                 inClientData,
                          AudioSessionPropertyID inID,
@@ -236,7 +242,6 @@
     pj_status_t status;
 #if !COREAUDIO_MAC
     unsigned i;
-    OSStatus ostatus;
 #endif
 
     pj_list_init(&cf->streams);
@@ -283,6 +288,7 @@
  	cdi->info.default_samples_per_sec = 8000;
 
 	/* Set the device capabilities here */
+#if USE_AUDIO_SESSION_API != 0
  	cdi->info.caps = PJMEDIA_AUD_DEV_CAP_INPUT_LATENCY |
 			 PJMEDIA_AUD_DEV_CAP_OUTPUT_LATENCY |
 			 PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING |
@@ -292,6 +298,9 @@
  	cdi->info.routes = PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER |
 			   PJMEDIA_AUD_DEV_ROUTE_EARPIECE |
 			   PJMEDIA_AUD_DEV_ROUTE_BLUETOOTH;
+#else
+        cdi->info.caps = PJMEDIA_AUD_DEV_CAP_EC;
+#endif
 
 	PJ_LOG(4, (THIS_FILE, " dev_id %d: %s  (in=%d, out=%d) %dHz",
 		   i,
@@ -301,23 +310,30 @@
 		   cdi->info.default_samples_per_sec));
     }
 
-    /* Initialize the Audio Session */
-    ostatus = AudioSessionInitialize(NULL, NULL, interruptionListener, NULL);
-    if (ostatus != kAudioSessionNoError) {
-	PJ_LOG(4, (THIS_FILE,
-		   "Warning: cannot initialize audio session services (%i)",
-		   ostatus));
-    }
+#if USE_AUDIO_SESSION_API != 0
+    {
+        OSStatus ostatus;
 
-    /* Listen for audio routing change notifications. */
+        /* Initialize the Audio Session */
+        ostatus = AudioSessionInitialize(NULL, NULL, interruptionListener,
+                                         NULL);
+        if (ostatus != kAudioSessionNoError) {
+            PJ_LOG(4, (THIS_FILE,
+                       "Warning: cannot initialize audio session services (%i)",
+                       ostatus));
+        }
+
+        /* Listen for audio routing change notifications. */
 #if USE_AUDIO_ROUTE_CHANGE_PROP_LISTENER != 0
-    ostatus = AudioSessionAddPropertyListener(
-	          kAudioSessionProperty_AudioRouteChange,
-		  propListener, cf);
-    if (ostatus != kAudioSessionNoError) {
-	PJ_LOG(4, (THIS_FILE,
-		   "Warning: cannot listen for audio route change "
-		   "notifications (%i)", ostatus));
+        ostatus = AudioSessionAddPropertyListener(
+                      kAudioSessionProperty_AudioRouteChange,
+		      propListener, cf);
+        if (ostatus != kAudioSessionNoError) {
+            PJ_LOG(4, (THIS_FILE,
+                       "Warning: cannot listen for audio route change "
+                       "notifications (%i)", ostatus));
+        }
+#endif
     }
 #endif
 
@@ -340,7 +356,7 @@
     pj_assert(pj_list_empty(&cf->streams));
 
 #if !COREAUDIO_MAC
-#if USE_AUDIO_ROUTE_CHANGE_PROP_LISTENER != 0
+#if USE_AUDIO_SESSION_API != 0 && USE_AUDIO_ROUTE_CHANGE_PROP_LISTENER != 0
     AudioSessionRemovePropertyListenerWithUserData(
         kAudioSessionProperty_AudioRouteChange, propListener, cf);
 #endif
@@ -1058,7 +1074,7 @@
     return -1;
 }
 
-#if !COREAUDIO_MAC
+#if !COREAUDIO_MAC && USE_AUDIO_SESSION_API != 0
 static void propListener(void 			*inClientData,
 			 AudioSessionPropertyID	inID,
 			 UInt32                 inDataSize,
@@ -1223,7 +1239,7 @@
 				     AudioUnit *io_unit)
 {
     OSStatus ostatus;
-#if !COREAUDIO_MAC
+#if !COREAUDIO_MAC && USE_AUDIO_SESSION_API != 0
     UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord;
     /* We want to be able to open playback and recording streams */
     ostatus = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,
@@ -1699,7 +1715,7 @@
 		strm->param.input_latency_ms++;
 	    }
 	}
-#else
+#elif USE_AUDIO_SESSION_API != 0
 	Float32 latency, latency2;
 	UInt32 size = sizeof(Float32);
 
@@ -1747,7 +1763,7 @@
 		strm->param.output_latency_ms++;
 	    }
 	}
-#else
+#elif USE_AUDIO_SESSION_API != 0
 	Float32 latency, latency2;
 	UInt32 size = sizeof(Float32);
 
@@ -1765,6 +1781,7 @@
 #endif
 	*(unsigned*)pval = (++strm->param.output_latency_ms * 2);
 	return PJ_SUCCESS;
+#if COREAUDIO_MAC || USE_AUDIO_SESSION_API != 0
     } else if (cap==PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING &&
 	       (strm->param.dir & PJMEDIA_DIR_PLAYBACK))
     {
@@ -1783,7 +1800,7 @@
 	                                &size);
 	if (ostatus != noErr)
 	    return PJMEDIA_AUDIODEV_ERRNO_FROM_COREAUDIO(ostatus);
-#else
+#elif USE_AUDIO_SESSION_API != 0
 	ostatus = AudioSessionGetProperty(
 		  kAudioSessionProperty_CurrentHardwareOutputVolume,
 		  &size, &volume);
@@ -1794,7 +1811,10 @@
 
 	*(unsigned*)pval = (unsigned)(volume * 100);
 	return PJ_SUCCESS;
+#endif
+
 #if !COREAUDIO_MAC
+#if USE_AUDIO_SESSION_API != 0
     } else if (cap==PJMEDIA_AUD_DEV_CAP_INPUT_ROUTE &&
 	       (strm->param.dir & PJMEDIA_DIR_CAPTURE))
     {
@@ -1836,6 +1856,7 @@
 	CFRelease(route);
 
 	return PJ_SUCCESS;
+#endif
     } else if (cap==PJMEDIA_AUD_DEV_CAP_EC) {
 	AudioComponentDescription desc;
 	OSStatus ostatus;
@@ -1887,8 +1908,35 @@
     }
 
 #else
+    if (cap==PJMEDIA_AUD_DEV_CAP_EC) {
+	AudioComponentDescription desc;
+	AudioComponent io_comp;
+        
+	desc.componentType = kAudioUnitType_Output;
+	desc.componentSubType = (*(pj_bool_t*)pval)?
+        kAudioUnitSubType_VoiceProcessingIO :
+        kAudioUnitSubType_RemoteIO;
+	desc.componentManufacturer = kAudioUnitManufacturer_Apple;
+	desc.componentFlags = 0;
+	desc.componentFlagsMask = 0;
+        
+	io_comp = AudioComponentFindNext(NULL, &desc);
+	if (io_comp == NULL)
+	    return PJMEDIA_AUDIODEV_ERRNO_FROM_COREAUDIO(-1);
+	strm->cf->io_comp = io_comp;
+	strm->param.ec_enabled = *(pj_bool_t*)pval;
+        
+        PJ_LOG(4, (THIS_FILE, "Using %s audio unit",
+                   (desc.componentSubType ==
+                    kAudioUnitSubType_RemoteIO? "RemoteIO":
+                    "VoiceProcessingIO")));
+        
+	return PJ_SUCCESS;
+    }
 
-    if ((cap==PJMEDIA_AUD_DEV_CAP_INPUT_LATENCY &&
+#if USE_AUDIO_SESSION_API != 0
+
+    else if ((cap==PJMEDIA_AUD_DEV_CAP_INPUT_LATENCY &&
 	 (strm->param.dir & PJMEDIA_DIR_CAPTURE)) ||
 	(cap==PJMEDIA_AUD_DEV_CAP_OUTPUT_LATENCY &&
 	 (strm->param.dir & PJMEDIA_DIR_PLAYBACK)))
@@ -1948,32 +1996,9 @@
 	}
 	strm->param.output_route = *(pjmedia_aud_dev_route*)pval;
 	return PJ_SUCCESS;
-    } else if (cap==PJMEDIA_AUD_DEV_CAP_EC) {
-	AudioComponentDescription desc;
-	AudioComponent io_comp;
-
-	desc.componentType = kAudioUnitType_Output;
-	desc.componentSubType = (*(pj_bool_t*)pval)?
-				kAudioUnitSubType_VoiceProcessingIO :
-				kAudioUnitSubType_RemoteIO;
-	desc.componentManufacturer = kAudioUnitManufacturer_Apple;
-	desc.componentFlags = 0;
-	desc.componentFlagsMask = 0;
-
-	io_comp = AudioComponentFindNext(NULL, &desc);
-	if (io_comp == NULL)
-	    return PJMEDIA_AUDIODEV_ERRNO_FROM_COREAUDIO(-1);
-	strm->cf->io_comp = io_comp;
-	strm->param.ec_enabled = *(pj_bool_t*)pval;
-
-        PJ_LOG(4, (THIS_FILE, "Using %s audio unit", 
-                              (desc.componentSubType ==
-                               kAudioUnitSubType_RemoteIO? "RemoteIO":
-                               "VoiceProcessingIO")));
-        
-	return PJ_SUCCESS;
     }
 #endif
+#endif
 
     return PJMEDIA_EAUD_INVCAP;
 }
@@ -2000,7 +2025,7 @@
 	    return PJMEDIA_AUDIODEV_ERRNO_FROM_COREAUDIO(ostatus);
     }
 
-#if !COREAUDIO_MAC
+#if !COREAUDIO_MAC && USE_AUDIO_SESSION_API != 0
     AudioSessionSetActive(true);
 #endif
     
@@ -2058,7 +2083,7 @@
     }
     pj_mutex_unlock(stream->cf->mutex);
 
-#if !COREAUDIO_MAC
+#if !COREAUDIO_MAC && USE_AUDIO_SESSION_API != 0
     if (should_deactivate)
 	AudioSessionSetActive(false);
 #endif
diff --git a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/errno.c b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/errno.c
index 5e93af8..a928485 100644
--- a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/errno.c
+++ b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/errno.c
@@ -1,4 +1,4 @@
-/* $Id: errno.c 4537 2013-06-19 06:47:43Z riza $ */
+/* $Id$ */
 /* 
  * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
  *
diff --git a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/legacy_dev.c b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/legacy_dev.c
index 45c6c5d..c189698 100644
--- a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/legacy_dev.c
+++ b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/legacy_dev.c
@@ -1,4 +1,4 @@
-/* $Id: legacy_dev.c 3553 2011-05-05 06:14:19Z nanang $ */
+/* $Id$ */
 /* 
  * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
  *
diff --git a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/null_dev.c b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/null_dev.c
index 6426641..01f1051 100644
--- a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/null_dev.c
+++ b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/null_dev.c
@@ -1,4 +1,4 @@
-/* $Id: null_dev.c 3553 2011-05-05 06:14:19Z nanang $ */
+/* $Id$ */
 /*
  * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
  *
diff --git a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/opensl_dev.c b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/opensl_dev.c
index 31d77f3..a77340b 100644
--- a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/opensl_dev.c
+++ b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/opensl_dev.c
@@ -1,4 +1,4 @@
-/* $Id: opensl_dev.c 4435 2013-03-11 06:32:58Z nanang $ */
+/* $Id$ */
 /* 
  * Copyright (C) 2012-2012 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2010-2012 Regis Montoya (aka r3gis - www.r3gis.fr)
diff --git a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/pa_dev.c b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/pa_dev.c
index fb745a9..bfaa5b5 100644
--- a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/pa_dev.c
+++ b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/pa_dev.c
@@ -1,4 +1,4 @@
-/* $Id: pa_dev.c 3553 2011-05-05 06:14:19Z nanang $ */
+/* $Id$ */
 /* 
  * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
diff --git a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/symb_aps_dev.cpp b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/symb_aps_dev.cpp
index 9b60ae1..6ff0856 100644
--- a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/symb_aps_dev.cpp
+++ b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/symb_aps_dev.cpp
@@ -1,4 +1,4 @@
-/* $Id: symb_aps_dev.cpp 4243 2012-08-31 11:42:17Z nanang $ */
+/* $Id$ */
 /* 
  * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
diff --git a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/symb_mda_dev.cpp b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/symb_mda_dev.cpp
index b4a6b9c..645ed39 100644
--- a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/symb_mda_dev.cpp
+++ b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/symb_mda_dev.cpp
@@ -1,4 +1,4 @@
-/* $Id: symb_mda_dev.cpp 3841 2011-10-24 09:28:13Z ming $ */
+/* $Id$ */
 /* 
  * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
diff --git a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/symb_vas_dev.cpp b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/symb_vas_dev.cpp
index 70fe3b3..ca421d2 100644
--- a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/symb_vas_dev.cpp
+++ b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/symb_vas_dev.cpp
@@ -1,4 +1,4 @@
-/* $Id: symb_vas_dev.cpp 4243 2012-08-31 11:42:17Z nanang $ */
+/* $Id$ */
 /* 
  * Copyright (C) 2009-2011 Teluu Inc. (http://www.teluu.com)
  *
diff --git a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/wmme_dev.c b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/wmme_dev.c
index 4ae4835..a73f247 100644
--- a/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/wmme_dev.c
+++ b/jni/pjproject-android/pjmedia/src/pjmedia-audiodev/wmme_dev.c
@@ -1,4 +1,4 @@
-/* $Id: wmme_dev.c 4537 2013-06-19 06:47:43Z riza $ */
+/* $Id$ */
 /* 
  * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
