diff -ur nautilus.17b/doc/nautilus.1 nautilus.17b.new/doc/nautilus.1
--- nautilus.17b/doc/nautilus.1	Mon Jun 23 03:49:41 1997
+++ nautilus.17b.new/doc/nautilus.1	Tue Sep 19 13:35:02 2000
@@ -8,7 +8,7 @@
 .Sh SYNOPSIS
 .Nm nautilus
 {
-.Fl a | A | o
+.Fl a | A | o | O
 }
 .Op Fl c Ar coder
 .Op Fl e Ar cipher
@@ -76,6 +76,11 @@
 .Nm nautilus
 session
 
+.Fl O
+Originate a
+.Nm nautilus
+session without dialing i.e. while talking on the Phone
+
 .Fl p Ar port
    Serial port for direct modem connection
 
diff -ur nautilus.17b/init.c nautilus.17b.new/init.c
--- nautilus.17b/init.c	Mon Sep  7 05:38:00 1998
+++ nautilus.17b.new/init.c	Tue Sep 19 12:49:36 2000
@@ -42,6 +42,7 @@
     {"SPEED", CONFIG_TYPE_NUMBER, &params.port.speed},
     {"PORT", CONFIG_TYPE_STRING, &params.port.name},
     {"MODEM_INIT", CONFIG_TYPE_STRING, &params.modem.init},
+    {"MODEM_PREFIX", CONFIG_TYPE_STRING, &params.modem.prefix},
     {"MODEM_RESET", CONFIG_TYPE_STRING, &params.modem.reset},
     {"SND_IO", CONFIG_TYPE_UINT16, &params.msdos.snd_iobase},
     {"SND_IRQ", CONFIG_TYPE_UINT16, &params.msdos.snd_irq},
diff -ur nautilus.17b/nautilus.h nautilus.17b.new/nautilus.h
--- nautilus.17b/nautilus.h	Mon Jan 18 09:20:16 1999
+++ nautilus.17b.new/nautilus.h	Tue Sep 19 12:50:23 2000
@@ -188,6 +188,7 @@
     struct modem_t {
 	unsigned speed;         /* modem connect speed */
 	char     init[128];     /* modem initialization string */
+	char     prefix[128];   /* modem dial prefix string */
 	char	 reset[128];	/* modem reset string */
     } modem;
     struct audio_t {
diff -ur nautilus.17b/ntp_modm.c nautilus.17b.new/ntp_modm.c
--- nautilus.17b/ntp_modm.c	Sun Aug  9 01:09:00 1998
+++ nautilus.17b.new/ntp_modm.c	Tue Sep 19 13:26:01 2000
@@ -31,6 +31,9 @@
 #define	PAUSE(ms)		usleep(ms*1000)
 #endif
 
+/* external variables */
+extern struct param_t params;           /* operating parameters */
+
 static char	*default_modem_port = NULL;
 static unsigned int default_modem_speed = 19200;
 static unsigned int connect_speed = 0;
@@ -140,12 +143,14 @@
  * This function will behave unpredictably if the modem initialization
  * string modem_init, or the phone number in phone, overflow the fixed
  * size internal string buf.
+ * secfone: fixed that by just clipping strings
  */
 
 static int
-Connect(char *phone, char *modem_init, void (*msg_cb)(char *msg))
+Connect(char *phone, char *modem_init, char *prefix, void (*msg_cb)(char *msg))
 {
-    char            buf[256];
+#define  BUFLEN  256
+    char buf[BUFLEN];
 
     WritePort("AT\r", 3);
     if (WaitFor("OK", 2, NULL) < 0) {
@@ -157,7 +162,7 @@
     PAUSE(100);                         /* wait 100ms */
     if (strlen(modem_init) != 0) {      /* config string defined? */
         strcpy(buf, "AT");
-        strcat(buf, modem_init);
+        strncat(buf, modem_init, BUFLEN-10);
         strcat(buf, "\r");
         WritePort(buf, strlen(buf));
         if (WaitFor("OK", 2, NULL) < 0) {
@@ -166,8 +171,11 @@
     }
     PAUSE(100);                 /* wait 100ms */
     strcpy(buf, "AT");
-    if (strlen(phone) != 0) {
-        sprintf(buf + strlen(buf), "DT%s\r", phone);
+    /* a phone number of more then 100 digits must be bogus - ignore */ 
+    if (strlen(phone) != 0 && strlen(phone) < (BUFLEN-10) ) {
+	strcat (buf," D"); 
+	strncat (buf,prefix,2); 
+        sprintf(buf + strlen(buf), " %s\r", phone);
     } else {
         strcat(buf, "D\r");
     }
@@ -256,7 +264,11 @@
 	}
     }
     else {
-        if (Connect(address, "V1", h->msg_cb) == -1) {
+        if (Connect(	address,
+			params.modem.init, 
+			params.modem.prefix,
+			h->msg_cb
+		    ) == -1) {
             errno = ENODEV;
             return -1;
         }
diff -ur nautilus.17b/nautilus.cfg nautilus.17b.new/nautilus.cfg
--- nautilus.17b/nautilus.cfg	Wed Jul 19 17:55:07 2000
+++ nautilus.17b.new/nautilus.cfg	Tue Sep 19 14:06:33 2000
@@ -4,6 +4,7 @@
 #SPEED (numeric)      - DTE baud rate
 #PORT (string)        - port name (e.g. COM2) (default is COM1 or /dev/modem)
 #MODEM_INIT (string)  - modem initialization string (don't include "AT")
+#MODEM_PREFIX (string)- modem dial prefix. "T" for tone dial,"D" for pulse dial
 #MODEM_RESET (string) - modem reset string (resets modem on program exit)
 #
 #SND_IO (numeric)     - i/o base address of sound card
@@ -48,6 +49,7 @@
 #SPEED = 38400		# specify default DTE speed
 ## USRobotics Sportster factory defaults minus compression/correction
 #MODEM_INIT = "&F1&M0&K0"
+#MODEM_PREFIX ="D"	#modem dial prefix. "T" for tone dial,"D" for pulse dial
 #MODEM_RESET = "S0=0"	# turn off auto answer on exit
 #SND_IO = 0x220		# specify I/O Base address of sound card
 #SND_IRQ = 5		# specify IRQ for sound card
diff -ur nautilus.17b/cli.c nautilus.17b.new/cli.c
--- nautilus.17b/cli.c	Tue Sep 19 14:09:22 2000
+++ nautilus.17b.new/cli.c	Tue Sep 19 14:37:57 2000
@@ -131,7 +131,7 @@
 	
     /* parse arguments */
 #if defined(unix)
-    while ((c = getopt(argc, argv, "aAhoixc:e:k:l:n:p:s:v")) != -1)
+    while ((c = getopt(argc, argv, "aAhoOixc:e:k:l:n:p:s:v")) != -1)
 #elif defined(_WIN32)
 	while ((c = getopt(argc, argv, "aAhoixc:e:j:k:l:n:v")) != -1)
 #else
@@ -149,6 +149,11 @@
 			exit(0);
 		case 'o':
 			params.mode = ORIGINATE;
+			params.orig_submode = DIAL;
+			break;
+		case 'O':
+			params.mode = ORIGINATE;
+			params.orig_submode = ATD_ONLY;
 			break;
 		case 'x':
 			vsound = FALSE;
@@ -243,8 +248,10 @@
 			usage();
 		}
 		else {
-			fprintf(stderr, "-o option requires argument.\n\n");
-			usage();
+			if ( params.orig_submode == DIAL){
+			    fprintf(stderr, "-o option requires argument.\n\n");
+			    usage();
+			}
 		}
 	}
 	else if ((params.mode == ANSWER) || (params.mode == AUTO_ANSWER)) {
diff -ur nautilus.17b/nautilus.h nautilus.17b.new/nautilus.h
--- nautilus.17b/nautilus.h	Tue Sep 19 14:09:22 2000
+++ nautilus.17b.new/nautilus.h	Tue Sep 19 14:39:20 2000
@@ -75,6 +75,7 @@
 /* Operating modes */
 enum modes { ORIGINATE, ANSWER, AUTO_ANSWER };	/* ORIGINATE _must_ be first! */
 enum flow { RECEIVE, TRANSMIT };
+enum o_submodes { DIAL, ATD_ONLY } ;
 
 /* Packet types */
 enum pkt_type { UDATA, RDATA, FILL, XMIT, RECV, UEOT, REOT, MAX_PACKET_TYPE };
@@ -167,6 +168,7 @@
 
 struct param_t {
     enum modes  mode;       /* startup mode */
+    enum o_submodes orig_submode; /* submode for originate */
     char    telno[64];      /* phone # to dial */
     char	hostname[64];	/* hostname of remote host */
     char	upgrade_file[64];/* name of upgrade info file to write to */
