diff --git a/Demo/sgi/video/LiveVideoIn.py b/Demo/sgi/video/LiveVideoIn.py
index 65e5317..920123d 100755
--- a/Demo/sgi/video/LiveVideoIn.py
+++ b/Demo/sgi/video/LiveVideoIn.py
@@ -54,7 +54,7 @@
 		# Initialize capture
 		v.SetSize(self.realwidth, self.realheight)
 		dummy = v.InitContinuousCapture(SV.RGB8_FRAMES, \
-			  self.realwidth, self.realheight, 2, 5)
+			  self.realwidth, self.realheight, 1, 5)
 		self.data = None
 		self.lpos = 0
 		return self
diff --git a/Demo/sgi/video/README b/Demo/sgi/video/README
index 335a108..5e14cff 100644
--- a/Demo/sgi/video/README
+++ b/Demo/sgi/video/README
@@ -57,6 +57,10 @@
 
 Vedit.py	interactive video editing program
 
+Vsend.py	unicast or multicast live video as UDP packets
+
+Vreceive.py	receive transmissions from Vsend
+
 
 These modules are used by the above programs:
 
@@ -64,6 +68,10 @@
 
 Viewer.py	two viewer classes used by Vedit
 
+LiveVideoIn.py	live video input class, used by Vsend
+
+LiveVideoOut.py	live video output class, used by Vsend and Vreceive
+
 
 The following are C programs, either for efficiency or because they
 need to link with a C library:
diff --git a/Demo/sgi/video/Vreceive.py b/Demo/sgi/video/Vreceive.py
index 8d7150e..415df59 100755
--- a/Demo/sgi/video/Vreceive.py
+++ b/Demo/sgi/video/Vreceive.py
@@ -5,17 +5,22 @@
 
 import sys
 import struct
-from socket import *
+from socket import *			# syscalls and support functions
+from SOCKET import *			# <sys/socket.h>
+from IN import *			# <netinet/in.h>
 import select
+import struct
 import gl, GL, DEVICE
 sys.path.append('/ufs/guido/src/video')
 import LiveVideoOut
+import regsub
+
+MYGROUP = '225.0.0.250'
+PORT = 5555
 
 PKTMAX = 16*1024
 WIDTH = 400
 HEIGHT = 300
-HOST = ''
-PORT = 5555
 
 def main():
 
@@ -23,6 +28,8 @@
 	if sys.argv[1:]:
 		port = eval(sys.argv[1])
 
+	s = opensocket(MYGROUP, port)
+
 	width, height = WIDTH, HEIGHT
 
 	gl.foreground()
@@ -36,9 +43,6 @@
 	lvo = LiveVideoOut.LiveVideoOut().init(wid, (x, y, width, height), \
 		width, height)
 
-	s = socket(AF_INET, SOCK_DGRAM)
-	s.bind(HOST, port)
-
 	ifdlist = [gl.qgetfd(), s.fileno()]
 	ofdlist = []
 	xfdlist = []
@@ -71,4 +75,35 @@
 
 	lvo.close()
 
+
+# Subroutine to create and properly initialize the receiving socket
+
+def opensocket(group, port):
+
+	# Create the socket
+	s = socket(AF_INET, SOCK_DGRAM)
+
+	# Bind the port to it
+	s.bind('', port)
+
+	# Allow multiple copies of this program on one machine
+	s.setsockopt(SOL_SOCKET, SO_REUSEPORT, 1) # (Not strictly needed)
+
+	# Look up the group once
+	group = gethostbyname(group)
+
+	# Ugly: construct binary group address
+	group_bytes = eval(regsub.gsub('\.', ',', group))
+	grpaddr = 0
+	for byte in group_bytes: grpaddr = (grpaddr << 8) | byte
+
+	# Construct struct mreq from grpaddr and ifaddr
+	ifaddr = INADDR_ANY
+	mreq = struct.pack('ll', grpaddr, ifaddr)
+
+	# Add group membership
+	s.setsockopt(IPPROTO_IP, IP_ADD_MEMBERSHIP, mreq)
+
+	return s
+
 main()
diff --git a/Demo/sgi/video/Vsend.py b/Demo/sgi/video/Vsend.py
index 32385f0..f38e965 100755
--- a/Demo/sgi/video/Vsend.py
+++ b/Demo/sgi/video/Vsend.py
@@ -7,16 +7,18 @@
 import time
 import struct
 from socket import *
+from SOCKET import *
 import gl, GL, DEVICE
 sys.path.append('/ufs/guido/src/video')
 import LiveVideoIn
 import LiveVideoOut
+import SV
 
 PKTMAX_UCAST = 16*1024 - 6
 PKTMAX_BCAST = 1450
 WIDTH = 400
 HEIGHT = 300
-HOST = '<broadcast>'
+HOST = '225.0.0.250' # Multicast address!
 PORT = 5555
 
 def main():
@@ -28,6 +30,8 @@
 	port = PORT
 	if sys.argv[1:]:
 		host = sys.argv[1]
+		if host == '-b':
+			host = '<broadcast>'
 		if sys.argv[2:]:
 			port = eval(sys.argv[2])
 
@@ -41,10 +45,13 @@
 	wid = gl.winopen('Vsend')
 	gl.keepaspect(WIDTH, HEIGHT)
 	gl.stepunit(8, 6)
+	gl.maxsize(SV.PAL_XMAX, SV.PAL_YMAX)
 	gl.winconstraints()
 	gl.qdevice(DEVICE.ESCKEY)
 	gl.qdevice(DEVICE.WINSHUT)
 	gl.qdevice(DEVICE.WINQUIT)
+	gl.qdevice(DEVICE.WINFREEZE)
+	gl.qdevice(DEVICE.WINTHAW)
 	width, height = gl.getsize()
 
 	x, y = gl.getorigin()
@@ -54,7 +61,9 @@
 	lvi = LiveVideoIn.LiveVideoIn().init(pktmax, width, height)
 
 	s = socket(AF_INET, SOCK_DGRAM)
-	s.allowbroadcast(1)
+	s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
+
+	frozen = 0
 
 	while 1:
 
@@ -63,6 +72,10 @@
 			if dev in (DEVICE.ESCKEY, \
 				DEVICE.WINSHUT, DEVICE.WINQUIT):
 				break
+			if dev == DEVICE.WINFREEZE:
+				frozen = 1
+			if dev == DEVICE.WINTHAW:
+				frozen = 0
 			if dev == DEVICE.REDRAW:
 				w, h = gl.getsize()
 				x, y = gl.getorigin()
@@ -83,7 +96,9 @@
 			continue
 
 		pos, data = rv
-		lvo.putnextpacket(pos, data)
+
+		if not frozen:
+			lvo.putnextpacket(pos, data)
 
 		hdr = struct.pack('hhh', pos, width, height)
 		s.sendto(hdr + data, (host, port))
