diff --git a/ChangeLog b/ChangeLog
index b961d4f3af11b0edc0b5fc8ee9b078693e09051b..34f2cb512741ec2f6d8151a14ec29266be3fd648 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2005-11-10  Kevin P. Fleming  <kpfleming@digium.com>
 
+	* pbx.c: remove apps that were deprecated before 1.0 was released (issue #5673)
+
+	* apps/app_striplsd.c, apps/app_substring.c: remove apps that were deprecated before 1.0 was released (issue #5673)
+
 	* include/asterisk/lock.h (PTHREAD_MUTEX_RECURSIVE_NP): work around header problems on Cygwin (issue #5668)
 
 	* pbx/pbx_ael.c: handle switch default cases inside macros properly (issue #5354)
diff --git a/apps/Makefile b/apps/Makefile
index 58118590d1df5c33d228345b59fab3ae8bc5508a..12d503245931fef02a9dc72092396559bbf73d25 100755
--- a/apps/Makefile
+++ b/apps/Makefile
@@ -15,8 +15,8 @@ APPS=app_dial.so app_playback.so app_voicemail.so app_directory.so app_mp3.so\
      app_system.so app_echo.so app_record.so app_image.so app_url.so app_disa.so \
      app_adsiprog.so app_getcpeid.so app_milliwatt.so \
      app_zapateller.so app_setcallerid.so app_festival.so \
-     app_queue.so app_senddtmf.so app_parkandannounce.so app_striplsd.so \
-     app_setcidname.so app_lookupcidname.so app_substring.so app_macro.so \
+     app_queue.so app_senddtmf.so app_parkandannounce.so \
+     app_setcidname.so app_lookupcidname.so app_macro.so \
      app_authenticate.so app_softhangup.so app_lookupblacklist.so \
      app_waitforring.so app_privacy.so app_db.so app_chanisavail.so \
      app_enumlookup.so app_transfer.so app_setcidnum.so app_cdr.so \
diff --git a/apps/app_striplsd.c b/apps/app_striplsd.c
deleted file mode 100755
index 29968d402437edf3cb19f4d4aebe48e21ebf55ee..0000000000000000000000000000000000000000
--- a/apps/app_striplsd.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Asterisk -- An open source telephony toolkit.
- *
- * Copyright (C) 1999 - 2005, Digium, Inc.
- *
- * Mark Spencer <markster@digium.com>
- *
- * See http://www.asterisk.org for more information about
- * the Asterisk project. Please do not directly contact
- * any of the maintainers of this project for assistance;
- * the project provides a web site, mailing lists and IRC
- * channels for your use.
- *
- * This program is free software, distributed under the terms of
- * the GNU General Public License Version 2. See the LICENSE file
- * at the top of the source tree.
- */
-
-/*! \file
- *
- * \brief striplsd: Strip trailing digits app
- * 
- * \ingroup applications
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/types.h>
-
-#include "asterisk.h"
-
-ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
-
-#include "asterisk/file.h"
-#include "asterisk/logger.h"
-#include "asterisk/channel.h"
-#include "asterisk/pbx.h"
-#include "asterisk/module.h"
-#include "asterisk/lock.h"
-
-static char *tdesc = "Strip trailing digits";
-
-static char *descrip =
-"  StripLSD(count): Strips the trailing  'count'  digits  from  the  channel's\n"
-"associated extension. For example, the  number  5551212 when stripped with a\n"
-"count of 4 would be changed to 555.  The PBX will continue processing at the\n""next priority for the *new* extension.\n"
-"  So, for  example, if  priority 3 of 5551212  is  StripLSD 4, the next step\n"
-"executed will be priority 4 of 555.  If you switch into an  extension which\n"
-"has no first step, the PBX will treat it as though the user dialed an\n"
-"invalid extension.\n";
-
-static char *app = "StripLSD";
-
-static char *synopsis = "Strip Least Significant Digits";
-
-STANDARD_LOCAL_USER;
-
-LOCAL_USER_DECL;
-
-static int striplsd_exec(struct ast_channel *chan, void *data)
-{
-	char newexten[AST_MAX_EXTENSION] = "";
-	int maxbytes = 0;
-	int stripcount = 0;
-	int extlen = strlen(chan->exten);
-	struct localuser *u;
-
-	LOCAL_USER_ADD(u);
-
-	maxbytes = sizeof(newexten) - 1;
-	if (data) {
-		stripcount = atoi(data);
-	}
-	if (!stripcount) {
-		ast_log(LOG_DEBUG, "Ignoring, since number of digits to strip is 0\n");
-		LOCAL_USER_REMOVE(u);
-		return 0;
-	}
-	if (extlen > stripcount) {
-		if (extlen - stripcount <= maxbytes) {
-			maxbytes = extlen - stripcount;
-		}
-		strncpy(newexten, chan->exten, maxbytes);
-	}
-	strncpy(chan->exten, newexten, sizeof(chan->exten)-1);
-
-	LOCAL_USER_REMOVE(u);
-
-	return 0;
-}
-
-int unload_module(void)
-{
-	int res;
-
-	res = ast_unregister_application(app);
-
-	STANDARD_HANGUP_LOCALUSERS;
-
-	return res;	
-}
-
-int load_module(void)
-{
-	return ast_register_application(app, striplsd_exec, synopsis, descrip);
-}
-
-char *description(void)
-{
-	return tdesc;
-}
-
-int usecount(void)
-{
-	int res;
-	STANDARD_USECOUNT(res);
-	return res;
-}
-
-char *key()
-{
-	return ASTERISK_GPL_KEY;
-}
diff --git a/apps/app_substring.c b/apps/app_substring.c
deleted file mode 100755
index 9771df98d6211b6068304edcf7350bc2159fbfa3..0000000000000000000000000000000000000000
--- a/apps/app_substring.c
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Asterisk -- An open source telephony toolkit.
- *
- * Copyright (C) 1999 - 2005, Digium, Inc.
- *
- * Mark Spencer <markster@digium.com>
- *
- * See http://www.asterisk.org for more information about
- * the Asterisk project. Please do not directly contact
- * any of the maintainers of this project for assistance;
- * the project provides a web site, mailing lists and IRC
- * channels for your use.
- *
- * This program is free software, distributed under the terms of
- * the GNU General Public License Version 2. See the LICENSE file
- * at the top of the source tree.
- */
-
-/*! \file
- *
- * \brief substr
- *
- * \ingroup applications
- * \todo Deprecate this application in 1.3dev
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/types.h>
-
-#include "asterisk.h"
-
-ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
-
-#include "asterisk/file.h"
-#include "asterisk/logger.h"
-#include "asterisk/channel.h"
-#include "asterisk/pbx.h"
-#include "asterisk/module.h"
-#include "asterisk/pbx.h"
-#include "asterisk/lock.h"
-
-static char *tdesc = "(Deprecated) Save substring digits in a given variable";
-
-static char *descrip =
-"  (Deprecated, use ${variable:a:b} instead)\n"
-"\n"
-"  SubString(variable=string_of_digits|count1|count2): Assigns the substring\n"
-"of string_of_digits to a given variable. Parameter count1 may be positive\n"
-"or negative. If it's positive then we skip the first count1 digits from the\n"
-"left. If it's negative, we move count1 digits counting from the end of\n"
-"the string to the left. Parameter count2 implies how many digits we are\n"
-"taking from the point that count1 placed us. If count2 is negative, then\n"
-"that many digits are omitted from the end.\n"
-"For example:\n"
-"exten => _NXXXXXX,1,SubString,test=2564286161|0|3\n"
-"assigns the area code (3 first digits) to variable test.\n"
-"exten => _NXXXXXX,1,SubString,test=2564286161|-7|7\n"
-"assigns the last 7 digits to variable test.\n"
-"exten => _NXXXXXX,1,SubString,test=2564286161|0|-4\n" 
-"assigns all but the last 4 digits to variable test.\n" 
-"If there are no parameters it'll return with -1.\n"
-"If there wrong parameters it go on and return with 0\n";
-
-static char *app = "SubString";
-
-static char *synopsis = "(Deprecated) Save substring digits in a given variable";
-
-STANDARD_LOCAL_USER;
-
-LOCAL_USER_DECL;
-
-static int substring_exec(struct ast_channel *chan, void *data)
-{
-  char newexten[AST_MAX_EXTENSION] = "";
-  char *count1, *count2;
-  char *first, *second, *stringp;
-  struct localuser *u;
-
-  LOCAL_USER_ADD(u);
-
-  stringp=alloca(strlen(data)+1);
-  ast_log(LOG_WARNING, "The use of Substring application is deprecated. Please use ${variable:a:b} instead\n");
-  strncpy(stringp,data,strlen(data));
-  if (strchr(stringp,'|')&&strchr(stringp,'=')) {
-    int icount1,icount2;
-    first=strsep(&stringp,"=");
-    second=strsep(&stringp,"|");
-    count1=strsep(&stringp,"|");
-    count2=strsep(&stringp,"\0");
-    if (!first || !second || !count1 || !count2) {
-      ast_log(LOG_DEBUG, "Ignoring, since there is no argument: variable or string or count1 or count2\n");
-      LOCAL_USER_REMOVE(u);
-      return 0;
-    }
-    icount1=atoi(count1);
-    icount2=atoi(count2);
-	if (icount2<0) {
-	  icount2 = icount2 + strlen(second);
-    }
-    if (abs(icount1)>strlen(second)) {
-      ast_log(LOG_WARNING, "Limiting count1 parameter because it exceeds the length of the string\n");
-      if (icount1>=0)
-        icount1=strlen(second);
-      else
-        icount1=0;
-    }
-    if ((icount1<0 && icount2>-icount1) || (icount1>=0 && icount1+icount2>strlen(second))) {
-      ast_log(LOG_WARNING, "Limiting count2 parameter because it exceeds the length of the string\n");
-      if (icount1>=0)
-      	icount2=strlen(second)-icount1;
-      else
-      	icount2=strlen(second)+icount1;
-    }
-    if (first&&second) {
-      if (icount1>=0)
-        strncpy(newexten,second+icount1,icount2);
-      else
-        strncpy(newexten,second+strlen(second)+icount1,icount2);
-      pbx_builtin_setvar_helper(chan,first,newexten);
-    }
-  } else {
-    ast_log(LOG_DEBUG, "Ignoring, no parameters\n");
-  }
-
-  LOCAL_USER_REMOVE(u);
-
-  return 0;
-}
-
-int unload_module(void)
-{
-	int res;
-
-	res = ast_unregister_application(app);
-
-	STANDARD_HANGUP_LOCALUSERS;
-
-	return res;	
-}
-
-int load_module(void)
-{
-	return ast_register_application(app, substring_exec, synopsis, descrip);
-}
-
-char *description(void)
-{
-	return tdesc;
-}
-
-int usecount(void)
-{
-	int res;
-	STANDARD_USECOUNT(res);
-	return res;
-}
-
-char *key()
-{
-	return ASTERISK_GPL_KEY;
-}
diff --git a/pbx.c b/pbx.c
index 0cd7ac2fa6e04dbb94dc50189f241ab6d091b8c6..90518f76325ea8436f8f638a5f2e0b7a63b564ef 100755
--- a/pbx.c
+++ b/pbx.c
@@ -187,9 +187,6 @@ struct ast_hint {
 
 int ast_pbx_outgoing_cdr_failed(void);
 
-static int pbx_builtin_prefix(struct ast_channel *, void *);
-static int pbx_builtin_suffix(struct ast_channel *, void *);
-static int pbx_builtin_stripmsd(struct ast_channel *, void *);
 static int pbx_builtin_answer(struct ast_channel *, void *);
 static int pbx_builtin_goto(struct ast_channel *, void *);
 static int pbx_builtin_hangup(struct ast_channel *, void *);
@@ -355,15 +352,6 @@ static struct pbx_builtin {
 	"variables or functions without having any effect." 
 	},
 
-	{ "Prefix", pbx_builtin_prefix, 
-	"Prepend digits to the current extension",
-	"  Prefix(digits): This application will insert the specified digits to the\n"
-	"beginning of the current extension. Call processing will then continue at\n"
-	"the next priority, but at the new extension.\n"
-	"  For example, if priority 3 of extension 1212 is Prefix(555), the next step\n"
-	"executed will be priority 4 of 5551212.\n"
-	},
-
 	{ "Progress", pbx_builtin_progress,
 	"Indicate progress",
 	"  Progress(): This application will request that in-band progress information\n"
@@ -485,26 +473,6 @@ static struct pbx_builtin {
 	"Set for more information.\n"
 	},
 
-	{ "StripMSD", pbx_builtin_stripmsd,
-	"Strip leading digits",
-	"  StripMSD(count): Strips the leading 'count' digits from the channel's\n"
-	"associated extension. For example, the number 5551212 when stripped with a\n"
-	"count of 3 would be changed to 1212. The channel will continue dialplan\n"
-	"execution at the next priority for the *new* extension.\n"
-	"  So, for example, if priority 3 of 5551212 is StripMSD 3, the next step\n"
-	"executed will be priority 4 of 1212.\n"
-	},
-
-	{ "Suffix", pbx_builtin_suffix, 
-	"Append trailing digits",
-	"  Suffix(digits): Appends the digit string specified by digits to the\n"
-	"channel's associated extension. For example, the number 555 when suffixed\n"
-	"with '1212' will become 5551212. The channel will continune dialplan execution\n"
-	"at the next priority for the *new* extension.\n"
-	"  So, for example, if priority 3 of 555 is Suffix 1212, the next step\n"
-	"executed will be priority 4 of 5551212.\n"
-	},
-
 	{ "Wait", pbx_builtin_wait, 
 	"Waits for some time", 
 	"  Wait(seconds): This application waits for a specified number of seconds.\n"
@@ -5492,51 +5460,6 @@ static int pbx_builtin_hangup(struct ast_channel *chan, void *data)
 	return -1;
 }
 
-static int pbx_builtin_stripmsd(struct ast_channel *chan, void *data)
-{
-	char newexten[AST_MAX_EXTENSION] = "";
-
-	if (!data || !atoi(data)) {
-		ast_log(LOG_DEBUG, "Ignoring, since number of digits to strip is 0\n");
-		return 0;
-	}
-	if (strlen(chan->exten) > atoi(data)) {
-		ast_copy_string(newexten, chan->exten + atoi(data), sizeof(newexten));
-	}
-	ast_copy_string(chan->exten, newexten, sizeof(chan->exten));
-	return 0;
-}
-
-static int pbx_builtin_prefix(struct ast_channel *chan, void *data)
-{
-	char newexten[AST_MAX_EXTENSION];
-
-	if (ast_strlen_zero(data)) {
-		ast_log(LOG_DEBUG, "Ignoring, since there is no prefix to add\n");
-		return 0;
-	}
-	snprintf(newexten, sizeof(newexten), "%s%s", (char *)data, chan->exten);
-	ast_copy_string(chan->exten, newexten, sizeof(chan->exten));
-	if (option_verbose > 2)
-		ast_verbose(VERBOSE_PREFIX_3 "Prepended prefix, new extension is %s\n", chan->exten);
-	return 0;
-}
-
-static int pbx_builtin_suffix(struct ast_channel *chan, void *data)
-{
-	char newexten[AST_MAX_EXTENSION];
-
-	if (ast_strlen_zero(data)) {
-		ast_log(LOG_DEBUG, "Ignoring, since there is no suffix to add\n");
-		return 0;
-	}
-	snprintf(newexten, sizeof(newexten), "%s%s", chan->exten, (char *)data);
-	ast_copy_string(chan->exten, newexten, sizeof(chan->exten));
-	if (option_verbose > 2)
-		ast_verbose(VERBOSE_PREFIX_3 "Appended suffix, new extension is %s\n", chan->exten);
-	return 0;
-}
-
 static int pbx_builtin_gotoiftime(struct ast_channel *chan, void *data)
 {
 	int res=0;