diff -ru -x CVS OSCx_orig/configure.ac OSCx/configure.ac
--- OSCx_orig/configure.ac	2006-03-13 18:02:44.000000000 -0500
+++ OSCx/configure.ac	2006-12-08 15:42:38.000000000 -0500
@@ -28,10 +28,8 @@
 echo ldflags "$LDFLAGS"
 
 # Checks for libraries.
-# FIXME: Replace `main' with a function in `-lc':
-AC_CHECK_LIB([c], [main])
-# FIXME: Replace `main' with a function in `-lm':
-AC_CHECK_LIB([m], [main])
+AC_CHECK_LIB([c], [printf])
+AC_CHECK_LIB([m], [cos])
 
 # Checks for header files.
 AC_HEADER_STDC
@@ -53,6 +51,21 @@
 # from augusts template
 
 dnl ------------------------------------------
+dnl ----  add PureData includes dir 
+dnl ----  usually /usr/local/include
+dnl ------------------------------------------
+AC_ARG_WITH(pd_dir, 
+	[  --with-pd-dir=path	pd header path (default=/usr/local/include) ], 
+	[
+	CPPFLAGS="$CPPFLAGS -I$withval"
+	CFLAGS="$CFLAGS -I$withval"
+	PDDIR="$withval"
+	echo
+	echo "pd dir is $withval"
+	echo
+	])
+
+dnl ------------------------------------------
 dnl  for each of the *-*-host's in the following, do the checking and then set your CFLAGS, CPPFLAGS and LDFLAGS
 dnl  CFLAGS get set for C code, CPPFLAGS for c++ code.  LDFLAGS is the linking flags for both c and c++
 dnl ------------------------------------------
@@ -116,7 +129,7 @@
 					 ;;
         *-*-darwin*)
                 CFLAGS="$CFLAGS -DUNIX -Wall -Wimplicit -Wunused -Wmissing-prototypes -O3 "
-					 LDFLAGS=" -bundle -bundle_loader ../../../pd/bin/pd -flat_namespace "
+					 LDFLAGS=" -bundle -bundle_loader $PDDIR/../bin/pd -flat_namespace "
 					 pd_suffix=pd_darwin
 					 LIBS="-lc -lm"
 					 ;;
@@ -138,20 +151,7 @@
 
 
 
-dnl ------------------------------------------
-dnl ----  add PureData includes dir 
-dnl ----  usually /usr/local/include
-dnl ------------------------------------------
-AC_ARG_WITH(pd_dir, 
-	[  --with-pd-dir=path	pd header path (default=/usr/local/include) ], 
-	[
-	CPPFLAGS="$CPPFLAGS -I$withval"
-	echo
-	echo "pd dir is $withval"
-	echo
-	])
-
-if test $prefix == NONE;
+if test $prefix = NONE;
 then
 	prefix=/usr/local
 fi
diff -ru -x CVS OSCx_orig/src/dumpOSC.c OSCx/src/dumpOSC.c
--- OSCx_orig/src/dumpOSC.c	2006-10-19 00:13:27.000000000 -0400
+++ OSCx/src/dumpOSC.c	2006-12-07 18:52:07.000000000 -0500
@@ -253,13 +253,35 @@
 }
 
 static void *dumpOSC_new(t_symbol *compatflag,
-			 t_floatarg fportno) {
+			 int argc, t_atom* argv) {
   t_dumpOSC *x;
   struct sockaddr_in server;
   int clilen=sizeof(server);
   int sockfd;
-  int portno=fportno;
+  int portno=0;
   int udp = 1;
+  t_symbol *castgroup=NULL;
+
+  if (argc == 1) {
+	  if (argv[0].a_type==A_FLOAT)
+		  portno = (int)argv[0].a_w.w_float;
+	  else
+		  return NULL;
+  }
+
+  else if (argc == 2) {
+	  if (argv[0].a_type==A_SYMBOL)
+		  castgroup = argv[0].a_w.w_symbol;
+	  else
+		  return NULL;
+
+	  if (argv[1].a_type==A_FLOAT)
+		  portno = (int)argv[1].a_w.w_float;
+	  else
+		  return NULL;
+  }
+
+  else return NULL;
 
   //x->x_b = binbuf_new();
   //x->x_outat = binbuf_getvec(x->x_b);
@@ -278,6 +300,18 @@
   server.sin_addr.s_addr = INADDR_ANY;
   /* assign server port number */
   server.sin_port = htons((u_short)portno);
+
+  // ss 2006
+  if (castgroup) {
+	  struct ip_mreq mreq;
+	  mreq.imr_multiaddr.s_addr = inet_addr(castgroup->s_name);
+	  mreq.imr_interface.s_addr = htonl(INADDR_ANY);
+	  if (setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq)) < 0) {
+		  sys_sockerror("setsockopt");
+	  }
+  }
+
+
   /* name the socket */
   if (bind(sockfd, (struct sockaddr *)&server, sizeof(server)) < 0)
     {
@@ -339,8 +373,7 @@
 {
     dumpOSC_class = class_new(gensym("dumpOSC"),
     	(t_newmethod)dumpOSC_new, (t_method)dumpOSC_free,
-    	sizeof(t_dumpOSC), CLASS_NOINLET, A_DEFFLOAT, A_DEFFLOAT, 
-	    A_DEFSYM, 0);
+							  sizeof(t_dumpOSC), CLASS_NOINLET, A_GIMME, 0);
     class_sethelpsymbol(dumpOSC_class, gensym("dumpOSC-help.pd"));
 }
 
diff -ru -x CVS OSCx_orig/src/htmsocket.c OSCx/src/htmsocket.c
--- OSCx_orig/src/htmsocket.c	2005-08-30 16:54:05.000000000 -0400
+++ OSCx/src/htmsocket.c	2006-12-07 18:29:25.000000000 -0500
@@ -104,7 +104,7 @@
 
 /* open a socket for HTM communication to given  host on given portnumber */
 /* if host is 0 then UNIX protocol is used (i.e. local communication */
-void *OpenHTMSocket(char *host, int portnumber)
+void *OpenHTMSocket(char *host, int portnumber, unsigned char multicast_TTL)
 {
 	struct sockaddr_in  cl_addr;
 	#ifndef WIN32
@@ -229,7 +229,12 @@
 				
 				// enable broadcast: jdl ~2003
 				if(setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &oval, sizeof(int)) == -1) {
-				  perror("setsockopt");
+				  perror("setsockopt broadcast");
+				}
+
+				// set multicast Time-To-Live: ss
+				if(setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, &multicast_TTL, sizeof(multicast_TTL)) == -1) {
+				  perror("setsockopt TTL");
 				}
 
 				if(bind(sockfd, (struct sockaddr *) &cl_addr, sizeof(cl_addr)) < 0) {
@@ -253,6 +258,11 @@
 				  perror("setsockopt");
 				}
 
+				// set multicast Time-To-Live: ss 2006
+				if(setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, &multicast_TTL, sizeof(multicast_TTL)) == -1) {
+				  perror("setsockopt TTL");
+				}
+
 				if(bind(sockfd, (struct sockaddr *) &cl_addr, sizeof(cl_addr)) < 0) {
 					perror("could not bind\n");
 					close(sockfd);
diff -ru -x CVS OSCx_orig/src/htmsocket.h OSCx/src/htmsocket.h
--- OSCx_orig/src/htmsocket.h	2004-08-19 18:01:38.000000000 -0400
+++ OSCx/src/htmsocket.h	2006-12-07 17:38:01.000000000 -0500
@@ -38,7 +38,7 @@
 
 /* open a socket for HTM communication to given  host on given portnumber */
 /* if host is 0 then UNIX protocol is used (i.e. local communication) */
-void *OpenHTMSocket(char *host, int portnumber);
+void *OpenHTMSocket(char *host, int portnumber, unsigned char multicast_TTL);
 
 /* send a buffer of data over htm socket, returns TRUE on success.
  Note that udp sends rarely fail. UNIX sends fail if a kernal buffer overflows */
diff -ru -x CVS OSCx_orig/src/sendOSC.c OSCx/src/sendOSC.c
--- OSCx_orig/src/sendOSC.c	2006-10-19 00:13:27.000000000 -0400
+++ OSCx/src/sendOSC.c	2006-12-07 18:07:45.000000000 -0500
@@ -113,7 +113,7 @@
 void sendOSC_openbundle(t_sendOSC *x);
 static void sendOSC_closebundle(t_sendOSC *x);
 static void sendOSC_settypetags(t_sendOSC *x, t_float *f);
-static void sendOSC_connect(t_sendOSC *x, t_symbol *hostname, t_floatarg fportno);
+static void sendOSC_connect(t_sendOSC *x, t_symbol *s, int argc, t_atom *argv);
 void sendOSC_disconnect(t_sendOSC *x);
 static void sendOSC_sendtyped(t_sendOSC *x, t_symbol *s, int argc, t_atom *argv);
 void sendOSC_send(t_sendOSC *x, t_symbol *s, int argc, t_atom *argv);
@@ -187,16 +187,39 @@
    post("sendOSC.c: setting typetags %d",x->x_typetags);
  }
 
-static void sendOSC_connect(t_sendOSC *x, t_symbol *hostname, t_floatarg fportno)
+static void sendOSC_connect(t_sendOSC *x, t_symbol *s, int argc, t_atom *argv) // t_symbol *hostname, t_floatarg fportno, int argc, t_atom *argv)
 {
-	int portno = fportno;
+  float fportno=0;
+  t_symbol *hostname;
+  int portno = fportno;
+  unsigned char ttl=1;
   char *protocolStr;
-	/* create a socket */
+  /* create a socket */
+
+  if (argc < 2)
+	  return;
+
+  if (argv[0].a_type==A_SYMBOL)
+	  hostname = argv[0].a_w.w_symbol;
+  else
+	  return;
+
+  if (argv[1].a_type==A_FLOAT)
+	  portno = (int)argv[1].a_w.w_float;
+  else
+	  return;
+
+  if (argc >= 3) {
+	  if (argv[2].a_type==A_FLOAT)
+		  ttl = (unsigned char)argv[2].a_w.w_float;
+	  else
+		  return;
+  }
 
 	//	make sure handle is available
   if(x->x_htmsocket == 0)
   {
-		x->x_htmsocket = OpenHTMSocket(hostname->s_name, portno);
+		x->x_htmsocket = OpenHTMSocket(hostname->s_name, portno, ttl);
 		if (!x->x_htmsocket)
       post("sendOSC: Couldn't open socket: ");
     else
@@ -213,8 +236,8 @@
           protocolStr = "unknown";
           break;
 	  }
-      post("sendOSC: connected to port %s:%d (hSock=%d) protocol = %s", 
-        hostname->s_name, portno, x->x_htmsocket, protocolStr);
+      post("sendOSC: connected to port %s:%d (hSock=%d) protocol = %s ttl = %d", 
+        hostname->s_name, portno, x->x_htmsocket, protocolStr, ttl);
 			outlet_float(x->x_obj.ob_outlet, 1);
 		}
 	}
@@ -337,7 +360,7 @@
 			      (t_method)sendOSC_free,
 			      sizeof(t_sendOSC), 0, A_DEFFLOAT, 0);
     class_addmethod(sendOSC_class, (t_method)sendOSC_connect,
-		    gensym("connect"), A_SYMBOL, A_FLOAT, 0);
+		    gensym("connect"), A_GIMME, 0);
     class_addmethod(sendOSC_class, (t_method)sendOSC_disconnect,
 		    gensym("disconnect"), 0);
     class_addmethod(sendOSC_class, (t_method)sendOSC_settypetags,
