Index: pjproject/trunk/pjsip/src/pjsip-simple/evsub.c
===================================================================
--- pjproject/trunk/pjsip/src/pjsip-simple/evsub.c	(revision 2821)
+++ pjproject/trunk/pjsip/src/pjsip-simple/evsub.c	(revision 2822)
@@ -1379,8 +1379,19 @@
     }
 
-    if (dlgsub == dlgsub_head) {
+    /* Note: 
+     *  the second condition is for http://trac.pjsip.org/repos/ticket/911 
+     */
+    if (dlgsub == dlgsub_head ||
+	(dlgsub->sub && 
+	    pjsip_evsub_get_state(dlgsub->sub)==PJSIP_EVSUB_STATE_TERMINATED))
+    {
+	const char *reason_msg = 
+	    (dlgsub == dlgsub_head ? "Subscription Does Not Exist" :
+	     "Subscription already terminated");
+
 	/* This could be incoming request to create new subscription */
 	PJ_LOG(4,(THIS_FILE, 
-		  "Subscription not found for %.*s, event=%.*s;id=%.*s",
+		  "%s for %.*s, event=%.*s;id=%.*s",
+		  reason_msg,
 		  (int)tsx->method.name.slen,
 		  tsx->method.name.ptr,
@@ -1394,8 +1405,9 @@
 	    pjsip_method_cmp(&tsx->method, &pjsip_notify_method)==0)
 	{
-	    pj_str_t reason = pj_str("Subscription Does Not Exist");
+	    pj_str_t reason;
 	    pjsip_tx_data *tdata;
 	    pj_status_t status;
 
+	    pj_cstr(&reason, reason_msg);
 	    status = pjsip_dlg_create_response(dlg, 
 					       event->body.tsx_state.src.rdata, 
Index: pjproject/trunk/tests/pjsua/scripts-sipp/uas-subscribe-late-notify.xml
===================================================================
--- pjproject/trunk/tests/pjsua/scripts-sipp/uas-subscribe-late-notify.xml	(revision 2822)
+++ pjproject/trunk/tests/pjsua/scripts-sipp/uas-subscribe-late-notify.xml	(revision 2822)
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- This program is free software; you can redistribute it and/or      -->
+<!-- modify it under the terms of the GNU General Public License as     -->
+<!-- published by the Free Software Foundation; either version 2 of the -->
+<!-- License, or (at your option) any later version.                    -->
+<!--                                                                    -->
+<!-- This program is distributed in the hope that it will be useful,    -->
+<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of     -->
+<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the      -->
+<!-- GNU General Public License for more details.                       -->
+<!--                                                                    -->
+<!-- You should have received a copy of the GNU General Public License  -->
+<!-- along with this program; if not, write to the                      -->
+<!-- Free Software Foundation, Inc.,                                    -->
+<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
+<!--                                                                    -->
+<!-- Late NOTIFY scenario:                       			-->
+<!--  - UAC sends SUBSCRIBE, we reply with 200				-->
+<!--  - we send NOTIFY, expect 200					-->
+<!--  - UAC sends SUBSCRIBE, we ignore					-->
+<!--  - we send NOTIFY							-->
+<!-- See http://trac.pjsip.org/repos/ticket/911                         -->
+<!--                                                                    -->
+
+<scenario name="Late NOTIFY">
+  <!-- By adding rrs="true" (Record Route Sets), the route sets         -->
+  <!-- are saved and used for following messages sent. Useful to test   -->
+  <!-- against stateful SIP proxies/B2BUAs.                             -->
+  <recv request="SUBSCRIBE" crlf="true">
+    <action>
+	<ereg regexp=".*" search_in="hdr" header="From" assign_to="3"/>
+	<ereg regexp="sip:(.*)>" search_in="hdr" header="Contact" assign_to="4,5"/>
+        <assign assign_to="4" variable="5" />
+    </action>
+  </recv>
+
+
+  <!-- The '[last_*]' keyword is replaced automatically by the          -->
+  <!-- specified header if it was present in the last message received  -->
+  <!-- (except if it was a retransmission). If the header was not       -->
+  <!-- present or if no message has been received, the '[last_*]'       -->
+  <!-- keyword is discarded, and all bytes until the end of the line    -->
+  <!-- are also discarded.                                              -->
+  <!--                                                                  -->
+  <!-- If the specified header was present several times in the         -->
+  <!-- message, all occurences are concatenated (CRLF seperated)        -->
+  <!-- to be used in place of the '[last_*]' keyword.                   -->
+
+  <send>
+    <![CDATA[
+
+      SIP/2.0 200 OK
+      [last_Via:]
+      [last_From:]
+      [last_To:];tag=[call_number]
+      [last_Call-ID:]
+      [last_CSeq:]
+      Contact: <sip:sipp@[local_ip]:[local_port]>
+      Content-Length: 0
+      Expires: 60
+    ]]>
+  </send>
+
+  <send retrans="500">
+    <![CDATA[
+      NOTIFY sip:[$5] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=z9hG4bKPj01
+      From: sipp <sip:sipp@[local_ip]>;tag=[call_number]
+      To[$3]
+      Call-ID: [call_id]
+      Cseq: 1 NOTIFY
+      Contact: sip:sipp@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Event: presence
+      Subscription-State: active;expires=50
+      Content-Type: application/pidf+xml
+
+      <?xml version="1.0" encoding="UTF-8"?>
+      <presence xmlns="urn:ietf:params:xml:ns:pidf" xmlns:op="urn:oma:xml:prs:pidf:oma-pres" entity="sip:moto_red@ptt.intra.genaker.net">
+       <tuple id="17415d5738f332a64a2f1d8cfb4ab0a5">
+         <status>
+            <basic>open</basic>
+         </status>
+         <op:willingness>
+            <op:basic>closed</op:basic>
+         </op:willingness>
+         <op:barring-state>active</op:barring-state>
+            <op:service-description>
+              <op:service-id>org.openmobilealliance:PoC-session</op:service-id>
+              <op:version>1.0</op:version>
+            </op:service-description>
+       </tuple>
+      </presence>
+    ]]>
+  </send>
+
+   <recv response="200">
+   </recv>
+
+  <recv request="SUBSCRIBE" crlf="true">
+  </recv>
+
+  <!--  UAC sends SUBSCRIBE, we do nothing -->
+  <send>
+    <![CDATA[
+
+      SIP/2.0 408 Timeout Bo
+      [last_Via:]
+      [last_From:]
+      [last_To:];tag=[call_number]
+      [last_Call-ID:]
+      [last_CSeq:]
+      Contact: <sip:sipp@[local_ip]:[local_port]>
+      Content-Length: 0
+      Expires: 60
+    ]]>
+  </send>
+
+
+  <!-- <pause milliseconds="32070"/> -->
+
+  <!-- Now send late NOTIFY -->
+  <send retrans="500">
+    <![CDATA[
+      NOTIFY sip:[$5] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=z9hG4bKPj02
+      From: sipp <sip:sipp@[local_ip]>;tag=[call_number]
+      To[$3]
+      Call-ID: [call_id]
+      Cseq: 2 NOTIFY
+      Contact: sip:sipp@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Event: presence
+      Subscription-State: terminated;reason=timeout
+      Content-Length: 0
+    ]]>
+  </send>
+
+   <recv response="481">
+   </recv>
+
+
+  <!-- definition of the response time repartition table (unit is ms)   -->
+  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+  <!-- definition of the call length repartition table (unit is ms)     -->
+  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
+
