diff -Naur tomato/release/src/router/rc/Makefile tomato121/release/src/router/rc/Makefile
--- tomato/release/src/router/rc/Makefile	2008-11-17 05:07:50.000000000 +1100
+++ tomato121/release/src/router/rc/Makefile	2008-04-23 18:44:53.000000000 +1000
@@ -13,6 +13,7 @@
 OBJS += listen.o redial.o led.o qos.o forward.o misc.o mtd.o
 OBJS += buttons.o restrict.o gpio.o sched.o
 #	heartbeat.o
+OBJS += snmpd.o pptp_client.o
 
 ifeq ($(TCONFIG_DDNS),y)
 OBJS += ddns.o
diff -Naur tomato/release/src/router/rc/pptp_client.c tomato121/release/src/router/rc/pptp_client.c
--- tomato/release/src/router/rc/pptp_client.c	1970-01-01 10:00:00.000000000 +1000
+++ tomato121/release/src/router/rc/pptp_client.c	2008-04-23 23:43:52.000000000 +1000
@@ -0,0 +1,80 @@
+/*
+  PPTP CLIENT start/stop and configuration for Tomato
+  by Jean-Yves Avenard (c) 2008
+*/
+
+#include "rc.h"
+
+
+void start_pptp_client(void)
+{
+  FILE *fd;
+  int ok, i;
+  char *p;
+
+  unlink("/etc/vpn/ip-down");
+  unlink("/etc/vpn/ip-up");
+  unlink("/etc/vpn/ip-vpn");
+  unlink("/etc/vpn/options.vpn");
+  unlink("/etc/vpn");
+  mkdir("/etc/vpn",0700);
+  symlink("/rom/etc/vpn/ip-down", "/etc/vpn/ip-down");
+  symlink("/rom/etc/vpn/ip-up", "/etc/vpn/ip-up");
+  symlink("/rom/etc/vpn/vpn", "/etc/vpn/vpn");
+
+  ok = 0;
+  if ( (fd = fopen("/etc/vpn/options.vpn", "w")) != NULL ) {
+    ok = 1;
+    fprintf(fd,"\n"
+	    "lock\n"
+	    "noauth\n"
+	    "nodetach\n"
+	    "refuse-eap\n"
+	    "lcp-echo-failure 3\n"
+	    "lcp-echo-interval 2\n"
+	    "persist\n");
+    i = nvram_get_int("pptp_client_peerdns"); //-1 or 0: enable, 1 disable
+    if (i != 1)
+      fprintf(fd,"usepeerdns\n");
+    fprintf(fd,"idle 0\n"
+	    "ip-up-script /etc/vpn/ip-up\n"
+	    "ip-down-script /etc/vpn/ip-down\n"
+	    "ipparam kelokepptpd\n");
+    if ((p = nvram_get("pptp_client_mtu")) == NULL)
+      p = "1450";
+    fprintf(fd,"mtu %s\n", p);
+    if ((p = nvram_get("pptp_client_mru")) == NULL)
+      p = "1450";
+    fprintf(fd,"mru %s\n", p);
+    if ((p = nvram_get("pptp_client_mppeopt")) != NULL)
+      fprintf("%s\n",p);
+    if ((p = nvram_get("pptp_client_username")) == NULL)
+      ok = 0;
+    else
+      fprintf(fd,"name %s\n", p);
+    if ((p = nvram_get("pptp_client_passwd")) == NULL)
+      ok = 0;
+    else
+      fprintf(fd,"password %s\n", p);
+    switch (get_wan_proto()) {
+    case WP_PPPOE:
+    case WP_PPTP:
+    case WP_L2TP:
+      p = "1";
+      break;
+    default:
+      p = "0";
+      break;
+    }
+    fprintf(fd,"unit %s\n", p);
+    fclose(fd);
+  }
+  if (ok)
+    xstart("/bin/sh","/etc/vpn/vpn","start");
+
+}
+
+void stop_pptp_client(void)
+{
+  xstart("/bin/sh","/etc/vpn/vpn","stop");
+}
diff -Naur tomato/release/src/router/rc/rc.h tomato121/release/src/router/rc/rc.h
--- tomato/release/src/router/rc/rc.h	2008-11-17 05:07:50.000000000 +1100
+++ tomato121/release/src/router/rc/rc.h	2008-08-20 01:32:47.000000000 +1000
@@ -291,6 +291,14 @@
 extern void start_sched(void);
 extern void stop_sched(void);
 
+// snmpd.c
+extern void start_snmpd(void);
+extern void stop_snmpd(void);
+
+// pptp_client.c
+extern void start_pptp_client(void);
+extern void stop_pptp_client(void);
+
 
 #ifdef TOMATO_SL
 // usb.c
diff -Naur tomato/release/src/router/rc/services.c tomato121/release/src/router/rc/services.c
--- tomato/release/src/router/rc/services.c	2008-11-17 05:07:51.000000000 +1100
+++ tomato121/release/src/router/rc/services.c	2008-08-20 01:32:47.000000000 +1000
@@ -689,6 +616,8 @@
 		create_passwd();
 		if (nvram_match("telnetd_eas", "1")) start_telnetd();
 		if (nvram_match("sshd_eas", "1")) start_sshd();
+		if (nvram_match("snmpd_run", "1")) start_snmpd();
+		if (nvram_match("pptp_client_enable", "1")) start_pptp_client();
 	}
 
 	start_syslog();
@@ -845,11 +774,25 @@
 		goto CLEAR;
 	}
 
+	if (strcmp(service, "snmpd") == 0) {
+		if (action & A_STOP) stop_snmpd();
+		if (action & A_START) start_snmpd();
+		goto CLEAR;
+	}
+
+	if (strcmp(service, "pptp_client") == 0) {
+		if (action & A_STOP) stop_pptp_client();
+		if (action & A_START) start_pptp_client();
+		goto CLEAR;
+	}
+
 	if (strcmp(service, "admin") == 0) {
 		if (action & A_STOP) {
 			stop_sshd();
 			stop_telnetd();
 			stop_httpd();
+			stop_snmpd();
+			stop_pptp_client();
 		}
 		stop_firewall(); start_firewall();		// always restarted
 		if (action & A_START) {
@@ -857,6 +800,8 @@
 			create_passwd();
 			if (nvram_match("telnetd_eas", "1")) start_telnetd();
 			if (nvram_match("sshd_eas", "1")) start_sshd();
+			if (nvram_match("snmpd_run", "1")) start_snmpd();
+			if (nvram_match("pptp_client_enable", "1")) start_pptp_client();
 		}
 		goto CLEAR;
 	}
diff -Naur tomato/release/src/router/rc/snmpd.c tomato121/release/src/router/rc/snmpd.c
--- tomato/release/src/router/rc/snmpd.c	1970-01-01 10:00:00.000000000 +1000
+++ tomato121/release/src/router/rc/snmpd.c	2008-04-23 02:10:10.000000000 +1000
@@ -0,0 +1,15 @@
+#include "rc.h"
+
+// -----------------------------------------------------------------------------
+
+void start_snmpd(void)
+{
+  unlink("/etc/snmpd.conf");
+  symlink("/rom/etc/snmpd.conf", "/etc/snmpd.conf");
+  xstart("snmpd","-c","/etc/snmpd.conf");
+}
+
+void stop_snmpd(void)
+{
+  killall("snmpd", SIGTERM);
+}
