diff --git a/Demo/sgi/video/VFile.py b/Demo/sgi/video/VFile.py
index 46f8547..e6191ab 100755
--- a/Demo/sgi/video/VFile.py
+++ b/Demo/sgi/video/VFile.py
@@ -255,11 +255,6 @@
 
 	def setpf(self, pf):
 		if self.frozen: raise CallError
-##		if type(pf) is type(0):
-##			if pf == 0:
-##				pf = (1, 1)
-##			else:
-##				pf = (pf, pf)
 		if type(pf) is not type(()) or len(pf) <> 2: raise CallError
 		self.packfactor = pf
 		self.setderived()
@@ -707,10 +702,6 @@
 	#
 	# Write frame geometry info
 	#
-	if format in ('rgb', 'jpeg'):
-		packfactor = 0
-	elif packfactor == 0:
-		packfactor = 1
 	data = (width, height, packfactor)
 	fp.write(`data`+'\n')
 
diff --git a/Demo/sgi/video/Vaddcache.py b/Demo/sgi/video/Vaddcache.py
index d89a78a..4e5f0c3 100755
--- a/Demo/sgi/video/Vaddcache.py
+++ b/Demo/sgi/video/Vaddcache.py
@@ -1,4 +1,4 @@
-#! /usr/local/python
+#! /ufs/guido/bin/sgi/python
 
 # Add a cache to each of the files given as command line arguments
 
diff --git a/Demo/sgi/video/Vcopy.py b/Demo/sgi/video/Vcopy.py
index fb7afab..f9c954a 100755
--- a/Demo/sgi/video/Vcopy.py
+++ b/Demo/sgi/video/Vcopy.py
@@ -27,8 +27,8 @@
 	print '-h height  : output image height (default width*3/4 if -w used)'
 	print
 	print '-p pf      : new x and y packfactor (default unchanged)'
-	print '-x xpf     : new x packfactor (default 1 if -y used)'
-	print '-y ypf     : new y packfactor (default 1 if -x used)'
+	print '-x xpf     : new x packfactor (default unchanged)'
+	print '-y ypf     : new y packfactor (default unchanged)'
 	print
 	print '-m delta   : drop frames closer than delta msec (default 0)'
 	print '-r delta   : regenerate input time base delta msec apart'
@@ -112,8 +112,6 @@
 		sys.exit(2)
 
 	if xpf or ypf:
-		if not xpf: xpf = 1
-		if not ypf: ypf = 1
 		newpf = (xpf, ypf)
 
 	if newwidth or newheight:
@@ -148,7 +146,7 @@
 # Copy one file to another
 
 def process(infilename, outfilename):
-	global newwidth, newheight
+	global newwidth, newheight, newpf
 
 	try:
 		vin = VFile.BasicVinFile().init(infilename)
@@ -168,6 +166,8 @@
 		sys.stderr.write(outfilename + ': I/O error: ' + `msg` + '\n')
 		return 1
 
+	vin.printinfo()
+
 	vout.setinfo(vin.getinfo())
 
 	scale = 0
@@ -182,6 +182,10 @@
 			return 1
 
 	if newpf:
+		xpf, ypf = newpf
+		if not xpf: xpf = vin.xpf
+		if not ypf: ypf = vout.ypf
+		newpf = (xpf, ypf)
 		vout.setpf(newpf)
 		scale = 1
 
@@ -217,6 +221,7 @@
 	newwidth = newwidth / vout.xpf
 	newheight = newheight / vout.ypf
 
+	vout.printinfo()
 	vout.writeheader()
 
 	told = 0
@@ -241,11 +246,10 @@
 		told = tout
 		if newtype:
 			data = convert(data, inwidth, inheight)
-		if newwidth and newheight:
+		if scale:
 			data = imageop.scale(data, vout.bpp/8, \
 				  inwidth, inheight, newwidth, newheight)
-		if vin.upside_down <> vout.upside_down or \
-			  vin.mirror_image <> vout.mirror_image:
+		if flip:
 			x0, y0 = 0, 0
 			x1, y1 = newwidth-1, neheight-1
 			if vin.upside_down <> vout.upside_down:
diff --git a/Demo/sgi/video/Vinfo.py b/Demo/sgi/video/Vinfo.py
index 8d163a1..e0c9e8c 100755
--- a/Demo/sgi/video/Vinfo.py
+++ b/Demo/sgi/video/Vinfo.py
@@ -1,4 +1,4 @@
-#! /usr/local/python
+#! /ufs/guido/bin/sgi/python
 
 # Print some info about a CMIF movie file
 
