Welcome to the Core Java Bug List
There was no Sixth Edition Volume 2
How to Tell which Printing You Have
On the copyright page (facing the first page of the table of contents),
there is a printing history of the book. The printing history starts with a row
of numbers that -- at the first printing -- looks like this:
1 2 3 4 5 6 7 8 9 10
First printing, August 2004
At each subsequent printing, the sequence shifts. For example, in the fourth
printing:
4 5 6 7 8 9 10 11 12 13
Fourth printing, June 2005
In the errata below, we indicate the printing in which the error has been
fixed inside square brackets such as [4].
For example, suppose you have the fourth printing. Then you can
ignore all reports that are prefixed with [2], [3] or [4]. But you would
want to pay attention to all reports that are prefixed with [5] or higher or
that have no bracketed prefix at all.
Seventh Edition Volume 1 (JDK
5.0) 
- [2] Page xvi
- In the seventh line from the bottom, change "bugs fixes" to "bug
fixes".
- [6] Page 18
- Change "You can download them from
http://www.phptr.com/corejava." to "You can download them from
http://horstmann.com/corejava."
- [4] Page 25
- In the NOTE, change "Environnment" to "Environment".
- [6] Page 36
- Change “it simply displays the string We will not use 'Hello,
World'!” to “it simply displays the string We will
not use 'Hello, World!'” (i.e. move the ! inside the quotes to
match the program at the top of the page)
- [5] Page 40
- After "..you use a p, not an e, to denote the
exponent." add: "The exponent is specified in decimal and denotes a power
of two."
- Page 40
- Change NEGATIVE_ INFINITY to NEGATIVE_INFINITY
(without a space)
- [4] Page 41
- Change "an unused 2048 byte-range" to "a range of 2048 unused
values"
- [6] Page 56
- Change "Point your web browser to the docs/api/index.html
subdirectory of your JDK installation." to "Point your web browser to the
index.html file in the docs/api subdirectory of your
JDK installation."
- [6] Page 62, 123, 125, 465, 629, 630, 631, 640, 641, 642, 649, 681,
- Change "Boolean" to "boolean" (in monospace)
- [5] Page 62
- Remove the line "^ Converts to upper case 0XCAFE".
(This option was present in the Java 5 release candidate, but it was
later dropped.)
- [6] Page 63
- Change "You use two a two-letter format..." to "You use a two-letter
format..."
- [4] Page 64
- Last line of Table 3-7 (continued): Change E to Q.
- [2] Page 80 BigIntegerTest.java line 8
- Change Scanner.create to
new Scanner
- [4] Page 85
- Change System.out.print(" " + a[i]); to System.out.print("
" + args[i]);
- [4] Page 86
- Change "Initially that is just r itself, but ..." to
"Initially that is just r + 1, but..."
- [4] Page 89 CompoundInterest.java line 5
- Change final int STARTRATE
to final double STARTRATE
- [6] Page 95
- Change "Encapsulation (sometimes called data hiding) is a key concept
in working with objects. Formally, encapsulation is nothing more than
combining data and behavior in one package and hiding the implementation
of the data from the user of the object." to "Encapsulation (sometimes
called information hiding) is a key concept in working with
objects. Formally, encapsulation is nothing more than combining data and
behavior in one package and hiding the implementation details from
the user of the object."
- [4] Page 95
- Change "When you invoke a message on an object" to "When you invoke a
method on an object"
- [6] Page 96
- Change "Thus, a class depends on another class if its methods
manipulate objects of that class." to "Thus, a class depends on another
class if its methods use or manipulate objects of that class."
- [4] Page 104-106 CalendarTest.java
- The program prints an unsatisfactory calendar in locales whose first
day of the week is not Sunday. (In most parts of the world, the first day
of the week is considered Monday--after all, Saturday and Sunday are the
weekend.) The following changes
take care of this:
- [4] Page 105
- Change "For each day, we print a space if the day is < 10, then the
day, and then a * if the day equals the current day." to "The
current day is marked with a *."
- [6] Page 106
- In the Note, remove "and the hard-wired assumption that the week starts
on a Sunday"
- [6] Page 121
- Change "demonstate" to "demonstrate"
- [6] Page 128, 129
- Change "Booleans" to "boolean values" (note monospace)
- [6] Page 135
- Remove the sentence "The sole purpose of package nesting is to manage
unique names."
- [6] Page 141
- Change "Recall that you can import public classes only from other
packages." to "Recall that you can import only public classes from other
packages."
- [4] Page 141
- In the third line from the bottom, change "packages" to "package".
- [4] Page 143
- In the last line, change "set the warning border" to "set the warning
string".
- [6] Page 147
- Change "If you like, you can place hyperlinks to other classes or
methods anywhere in any of your comments." to "If you like, you can place
hyperlinks to other classes or methods anywhere in any of your
javadoc comments."
- [6] Page 155
- Remove "(that is, when i is 1 or 2)" and "(when i is 0)" , so that the
remaining clause is "either Employee or Manager".
- [6] Page 165
- Change "In particular, move common fields and methods (whether abstract
or not) to the abstract superclass." to "Move common fields and methods
(whether abstract or not) to the superclass (whether abstract or
not)."
- [6] Page 172
- In the numbered list, add 4. before "Compare the classes of
this and otherObject." Increment the following
numbers.
- [4] Page 172
- Remove "Judging from this evidence. . ." until the end of the note.
- [4] Page 173
- In Table 5-1, change the Hash Code column from 140207504 / 140013338 /
884756206 to 69609650 / 69496448 / -2141031506
- [4] Page 174
- In Table 5-2, change 3030 to 2556 (2x)
- [6] Page 179
- Change the last word on the page from "classed" to "called"
- [6] Page 180/181
- Change "relocation/tions/ting" to "reallocation/tions/ting"
(3x)
- [6] Page 181
- Change "(This is different from, and, of course, never larger than, the
array list’s capacity.)" to "(This is of course never larger than
the array list’s capacity.)"
- [6] Page 188
- Change "returns a new Integer object initialized to the
integer’s value, assuming the specified String represents"
to "returns a new Integer object initialized to the integer
whose digits are contained in the string s. The string must
represent" (2x)
- [4] Page 189
- Change
System.out.printf("%d %d", new Object[] { new Integer(d), "widgets" } );
to
System.out.printf("%d %s", new Object[] { new Integer(n), "widgets" } );
- [6] Page 191
- Remove "We discuss reflection in the next section."
- Page 193
- Change "all fields, operations, and constructors" to "all fields,
methods, and constructors"
- [6] Page 198
- Change the last line from
while (cl != Object.class);
to
while (cl != null);
- [6] Page 199
- Remove line 3 (import java.text.*;)
- [6] Page 201
- Change "arrayCopy" to "arraycopy"
- [6] Page 203/204
- Change "fundamental" to "primitive" (2x)
- [4] Page 206
- Change
System.out.printf("%10.4f | %10.4f%n" + y, x, y);
to
System.out.printf("%10.4f | %10.4f%n", x, y);
- [4] Page 207
- Remove code lines 42 and 43.
- [4] Page 215
- Change the first java.lang.Comparable API header to
java.lang.Comparable<T>. Remove the second
java.lang.Comparable<T> header.
- [4] Page 220 and 221
- In the clone methods, change
return super.clone();
to
return (Employee) super.clone();
- Page 221
- Change
public Object clone() throws CloneNotSupportedException
to
public Employee clone() throws CloneNotSupportedException
- [6] Page 228
- Change “Because the TalkingClock defines no
constructors” to “Because the TimePrinter class
defines no constructors”
- [4] Page 231
- In the NOTE, change
java ReflectionTest 'TalkingClock$TimePrinter'
to
java ReflectionTest TalkingClock\$TimePrinter
(that is, remove the quotes and add a backslash). Both methods work, but
the change matches the preceding text.
- [6] Page 233
- Change “Note that the TimePrinter class no longer needs
to store a beep instance variable. It simply refers to the parameter
variable of the method that contains the class definition.” to
“Note that the TalkingClock class no longer needs to store
a beep instance field. The actionPerformed method of
the TimePrinter class simply refers to the beep
parameter variable of the start method.”
- [4] Page 233 (2x) and 235 (1x)
- Change
Timer t = new Timer(1000, listener)
to
Timer t = new Timer(interval, listener)
- [4] Page 254
- Change /**import java.awt.* to import java.awt.*
- [6] Page 251
- Change frame.show(); to frame.setVisible(true);
- Page 281
- Change javax.swing.ImageIO to
javax.imageio.ImageIO
- [4] Page 330
- In the API note for getActionMap, change "keystrokes to action
keys" to "arbitrary objects to Action objects".
In the API note for getInputMap, change "action keys to action
objects" to "keystrokes to arbitrary objects"
- [4] Page 330
- Change released ctrl Y to ctrl released Y
- [4] Page 343
- Change "Each user interface has a wrapper class..." to "Each user
interface component has a wrapper class...".
- [4] Page 349
- Change "Finally, you add the individual buttons" to "Finally, you add
the panel"
- [4] Page 349
- The word add in "using the add method you have seen
before" is in the wrong font.
- [4] Page 353
- In the first API note, change int cols to int
columns
- [4] Page 360
- Remove code lines 66 - 68
- [4] Page 400
- Change the four code lines starting with
JSpinner timeSpinner
- to
JSpinner timeSpinner = new JSpinner(new
SpinnerDateModel(new Date(), null, null, Calendar.HOUR)
{
public void setCalendarField(int field) {}
});
- [4] Page 402
- Change code lines 75 - 78 to
JSpinner timeSpinner = new
JSpinner(new
SpinnerDateModel(new Date(), null, null, Calendar.HOUR)
{
public void setCalendarField(int field) {}
});
- [4] Page 405
- In the explanation for the maximum parameter of the
javax.swing.SpinnerDateModel constructor, change "The maximum
valid value, or null if no lower bound..." to "The maximum valid
value, or null if no upper bound..."
- [4] Page 412
- In the second line from the bottom, change JPopup to
JPopupMenu.
- [4] Page 422
- Below line 28, add a line
add(panel, BorderLayout.CENTER);
- [4] Page 432
- Change
panel.add(style, bold);
- to
panel.add(component, constraints);
- [6] Page 443
- The bulleted list is wrong (with different errors in two printings).
Here is the correct version:
- Connecting the west side of the component with the
west side of the container;
- Traversing the width of the component;
- Connecting the east side of the component with the
west side of the container.
- [4] Page 444
- Change
Spring.max(layout.getConstraints(faceLabel).getWidth(),
Spring.max(layout.getConstraints(sizeLabel).getWidth()));
to
Spring.max(layout.getConstraints(faceLabel).getWidth(),
layout.getConstraints(sizeLabel).getWidth()));
(i.e., remove the second Spring.Max()
- [4] Page 447
- Change "...to the given side of the start container" to "...to
the given side of the start component"
- [4] Page 457
- Change "The icon is a warning icon" to "The icon is a question
icon". Change WARNING_MESSAGE to
QUESTION_MESSAGE
- [6] Page 509
- Change “NOTE: The strings used when you define the parameters
with the param tag and those used in the getParameter method must match
exactly. In particular, both are case sensitive.” to “NOTE: A
case-insensitive comparison is used when matching the name
attribute value in the param tag and the argument of the
getParameter method.”
- [6] Page 522, 524
- Change
public Enumeration getApplets() { return null; }
to
public Enumeration<Applet> getApplets() { return null; }
and
public Iterator getStreamKeys() { return null; }
to
public Iterator<String> getStreamKeys() { return null; }
- Page 527
- Change
Main-Class: com/mycompany/mypkg/MainAppClass
to
Main-Class: com.mycompany.mypkg.MainAppClass
- [6] Page 547
- Change
defaultSettings.put("color.red", "0 50 50");
to
defaultSettings.put("color.red", "0");
- [4] Page 567
- Change se.setCause(e) to se.initCause(e)
- [4] Page 571
- Change the numbers after StackTraceTest.java: from 8 23 / 8 14
23 / 8 14 14 23 to 17 33 / 17 23 33 / 17 23 23 33
- [6] Page 602
- Change
java -Dcom.sun.management.jmxremote MyProgram.java
to
java -Dcom.sun.management.jmxremote MyProgram
- [6] Page 604
- Change void addXxxListener(XxxEvent) to void
addXxxListener(XxxListener).
- [4] Page 615
- Change "displays all instance fields of the evt variable" to
"displays all instance fields of the event variable"
- [4] Page 630
- In the second line of Table 12-2, change
b17a16a15... to
b17b16a15...
- [6] Page 632
- Change “The advantage of having the RandomAccessFile class
implement both DataInput and DataOutput is that this lets you use or
write methods whose argument types are the DataInput and DataOutput
interfaces.” to “The RandomAccessFile class
implements both DataInput and DataOutput. It is a good
idea to use these interfaces for method parameters.”
- [4] Page 634
- Change Set<String, CharSet> to Map<String,
CharSet>.
- [5] Page 639
- In the API description for CharBuffer decode(ByteBuffer
buffer), change "decodes the given character sequence ..." to
"decodes the given byte sequence"
- [4] Page 658
- In the second line from the bottom, change long int nbytes to
long nbytes.
- [4] Page 660
- Lines 76, 77 of the code should be
Raises the salary of this employee.
@param byPercent the percentage of the
raise
- [4] Page 667
- Change "The java.util.Date class defines its own
readObject/writeObject methods" to "The serializable
java.util.Date class defines its own
writeObject method". (The wording in the book was
correct, but it confused some readers into thinking that Date is
externalizable.)
- [4] Page 688
- In the documentation for createNewFile, change "automatically
creates" to "atomically creates".
- [4] Page 713
- In the second line of the section Generic Code and the Virtual
Machine, change "was even able compile" to "was even able to
compile".
- [4] Page 719
- In the third line from the top, change new
Pair<String>(10) to new
Pair<String>[10]
- [4] Page 720
- In the tenth line from the bottom, change
Pair<Employee> = ArrayAlg...
- to
Pair<Employee> result = ArrayAlg...
- [6] Page 723
- Change
void set(? super Manager)
? super Manager get()
to
void setFirst(? super Manager)
? super Manager getFirst()
- [6] Page 723
- Change "with any Manager object (or a subtype such as
Executive), but not with an Employee" to "with any
value of type Manager, Employee, or Object,
but not with a subtype value such as Executive."
- [6] Page 726
- Change “Of course, in this case, we were not compelled to use a
wildcard—there is nothing wrong with using a type parameter, as in
the swapHelper method.” to “Of course, in this case,
we were not compelled to use a wildcard. We could have directly
implemented <T> void swap(Pair<T> p) as a generic
method without wildcards.”
- [4] Page 735
- Add an entry
| enum |
an enumerated type |
3 |
- [6] Page 743
- Change "Boolean, 42, 46, 186, 735" to two entries
"boolean, 42, 46, 735" and "Boolean, 186"
- [6] Page 760
- Change "true or false, see Boolean" to "true or false,
see boolean"
Seventh Edition Volume 2 (JDK
5.0)
- [3] Page xvii
- In the second line from the bottom, change Example 5-8 to
Example 5-12
- [4] Page 3
- Change "inside the move method of the Ball class." to
"inside the addBall method of the BounceFrame
class".
- Page 12 BounceThread.java
- Remove these lines:
203. public static final int STEPS = 1000;
204. public static final int DELAY = 3;
- [3] Page 19
- Change "of its parent thread, that is, the thread that started it" to
"of the thread that constructed it"
- [2] Page 30
- Change "You must make sure that the thread cannot be interrupted
between the test and the insertion." to "You must make sure that no
other thread can modify the balance between the test and the
transfer action."
- [2] Page 40
- Remove the first four lines after Synchronized Blocks
"However, a Java object ... only one condition".
- [2] Page 41
- Apply boldface to synchronized (lock) and remove it from
System.out.println(. . .)
- [2] Page 42
- Change $1,200 to $200 and $1,300 to $300
- [2] Page 43
- In Figure 1-6, change 1200 to 200 and 1300 to 300
- [3] Page 49
- Change "The call Object head = q.poll(...) returns
true for 100 milliseconds ..." to "The call Object head =
q.poll(...) tries for 100 milliseconds ..."
- [2] Page 64
- In the code just above the API notes, change taks.size() to
tasks.size().
- [4] Page 100
- In the API notes for the remove method of
java.util.List<E>, change "removes and returns an element
at the specified position" to "removes and returns the element at
the specified position"
- [4] Page 100
- In the API notes for java.util.List<E>, add the
following before E set(int i, E element):
- E get(int i)
returns the element at the specified position.
- Page 110
- Change "construct a tree set" and "constructs a tree set" to
"constructs a priority queue".
- [3] Page 130 Code line 98
- Change
return offset < elements.length;
to
return offset < count;
- [4] Page 152, 153 ThreadedEchoServer.java
- Remove lines 43, 86. Change the following lines:
22. Runnable r = new ThreadedEchoHandler(incoming);
44. public ThreadedEchoHandler(Socket i)
47. incoming = i;
- [4] Page 166
- In the API note of void setConnectTimeout(int timeout)/int
getConnectTimeout(), change "...the read method of the
associated input stream..." to "...the connect method of
the associated input stream...". In the API note of void
setReadTimeout(int timeout)/int getReadTimeout(), change
"...the connect method of the associated input stream..." to
"...the read method of the associated input
stream...".
- Page 175
- The Scanner class wraps the InterruptedIOException.
For greater clarity, change
Scanner in = new Scanner(s.getInputStream()); String line =
in.nextLine();
to
InputStream in = s.getInputStream(); // read from
in
- [2] Page 229
- Change "gets a description of all tables in a catalog..." to
"returns a description of all tables in a catalog..."
- [2] Page 229
- Change "The catalog and schema parameters..." to "The
catalog and schemaPattern parameters..."
- [3] Page 240
- Change
stat.releaseSavepoint(svpt)
to
conn.releaseSavepoint(svpt)
- [2] Page 244
- In the last two rectangles in the bottom row of Figure 4-9, change
ou=people to ou=groups
- [4] Page 281
- Product.java is the wrong version. The companion code has the
correct version, but it is too long to fit in its entirety. Use this
abbreviated version:
import java.rmi.*;
public interface Product extends Remote
{
/**
Gets the description of this product.
@return the product description
*/
String getDescription() throws RemoteException;
final int MALE = 1;
final int FEMALE = 2;
final int BOTH = MALE + FEMALE;
}
- [4] Page 282
- ProductImpl.java is the wrong version. The companion code has
the correct version, but it is too long to fit in its entirety. Use this
abbreviated version:
import java.rmi.*;
import java.rmi.server.*;
public class ProductImpl extends UnicastRemoteObject implements Product
{
public ProductImpl(String n, int s, int age1, int age2, String h) throws RemoteException
{
name = n;
ageLow = age1;
ageHigh = age2;
sex = s;
hobby = h;
}
public boolean match(Customer c)
{
if (c.getAge() < ageLow || c.getAge() > ageHigh)
return false;
if (!c.hasHobby(hobby)) return false;
if ((sex & c.getSex()) == 0) return false;
return true;
}
public String getDescription() throws RemoteException
{
return "I am a " + name + ". Buy me!";
}
private String name, hobby;
private int ageLow, ageHigh, sex;
}
- [3] Page 293
- Change
name = (String) data.get();;
to
name = (String) data.get();
- [4] Page 294, 295
- ProductImpl.java is the wrong version. The companion code has
the correct version, but it is too long to fit in its entirety. Use this
abbreviated version:
import java.io.*;
import java.rmi.*;
import java.rmi.activation.*;
public class ProductImpl
extends Activatable
implements Product
{
/**
Constructs a product implementation
@param id the activation id
@param data the marshalled construction parameter (containing the product name)
*/
public ProductImpl(ActivationID id, MarshalledObject data)
throws RemoteException, IOException, ClassNotFoundException
{
super(id, 0);
name = (String) data.get();
System.out.println("Constructed " + name);
}
public String getDescription() throws RemoteException
{
return "I am a " + name + ". Buy me!";
}
private String name;
}
- [4] Page 296
- Change
static Remote register(ActivationDescriptor desc)
to
static Remote register(ActivationDesc desc)
- [4] Page 311
- Change
System.out.println(orb.object_to_string(impl));
to
System.out.println(orb.object_to_string(ref));
- [2] Page 334
- Remove the line
JLabel label = new JLabel();
- [4] Page 391
- Add return this; as the last line of
getTableCellRendererComponent so that the code looks like this:
class ColorTableCellRenderer extends JPanel implements TableCellRenderer
{
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column)
{
setBackground((Color) value);
if (hasFocus)
setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
else
setBorder(null);
return this;
}
}
- [2] Page 425
- Change "on the CD" to "in the companion code"
- [3] Page 439
- In Fig. 6-48, change the callout "minimize icon" to "maximize icon"
- [4] Page 443
- Change “The JDesktopPane class has no method to return
the selected frame. Instead, you must traverse all frames ...” to
“Traverse all frames ...”. (Actually, you can get the
selected frame by calling JDesktopPane.getSelectedFrame, but we
need its index.)
- [4] Page 462
- Change "... drawn by the CubicCurve3D class ..." to "... drawn
by the CubicCurve2D class ..."
- [3] Page 462
- Change "between 2180 and 180" to "between -180 and 180"
- Page 600
- Change DndConstants to DnDConstants
- Page 633
Change "For example, under Windows, it uses the ISO 8859-1 encoding
(also known as ISO Latin-1 or, among Windows programmers, as “ANSI
code”)." to "For example, under Windows, it uses the Windows 1252
encoding (which is similiar to ISO 8859-1) and is known among Windows
programmers, as “ANSI code”)."
- [3] Page 664
- Example 8-10: ChartBean2BeanInfo.java has the wrong file. The correct
file is
package com.horstmann.corejava;
import java.awt.*;
import java.beans.*;
/**
The bean info for the chart bean, specifying the
icons and the customizer.
*/
public class ChartBean2BeanInfo extends SimpleBeanInfo
{
public BeanDescriptor getBeanDescriptor()
{
return new BeanDescriptor(ChartBean2.class, ChartBean2Customizer.class);
}
public Image getIcon(int iconType)
{
String name = "";
if (iconType == BeanInfo.ICON_COLOR_16x16) name = "COLOR_16x16";
else if (iconType == BeanInfo.ICON_COLOR_32x32) name = "COLOR_32x32";
else if (iconType == BeanInfo.ICON_MONO_16x16) name = "MONO_16x16";
else if (iconType == BeanInfo.ICON_MONO_32x32) name = "MONO_32x32";
else return null;
return loadImage("ChartBean2_" + name + ".gif");
}
}
- [4] Page 705
- Change http://bugs.sun.com/developer/bugParade/bugs/4030988.html to
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4030988
- [4] Page 772
- Change
int outputSize= cipher.getOutputSize(inLength);
to
int outputSize= cipher.getOutputSize(blockSize);
- [3] Page 788
- In the fourth line from the bottom, change "the java.text
class" to "the java.text package"
- [3] Page 807
- In the 4th line from the bottom (excluding the CAUTION note), change
10.0E7 to 10.0E8.
- [4] Page 811
- Change java -encoding Big5 Myfile.java to javac
-encoding Big5 Myfile.java.
- [2] Page 833
- In line 17 of the code for HelloNative.h, change ifdef to
#ifdef
- [3] Page 836
- Change
... a format string "%w.pf" ...
to
... a format string "%w.pf"
...
(w and p should be Roman italic)
- [2] Page 861
- Change
jint ThrowNew(JNIEnv *env, jclass clazz, const char msg[])
to
jint ThrowNew(JNIEnv *env, jclass cl, const char msg[])
- [3] Page 878
- Change GetSuperClass to GetSuperclass
- [3] Page 927
- Change "XML Style Sheet Transformations" to "Extensible Stylesheet
Language Transformations"
- [4] Page 935
- In Figure 12-8, change the rightmost “XML Document” to
“Transformed Document (HTML, text, ...)”
Thanks to Joe Abounader, Jerry Agin, Stefan Alfbo, Stefan Badstübner,
Alan Bellanger, Bob Boritz, Eric Cauchon, Davide Cecchetto, Jerry Chen, Philip
Copp, Sandu Crasteti, Bernard Desruisseaux, Edward H. Fabrega, Gabriel Florit,
Angelo Furfaro, Dan Gamel, Mahesh Gopalan, Derek Haines, Patrick J. Henry,
Roger House, Elliott Hughes, Alessandro Iacopini, Jon Kendall, Sven
Kirsimäe, Jim Jennings, Geert Kloosterman, Jeffrey Knauth, Jason Leasure,
Mark Lawrence, Joyce Lee, James Litchfield, Bingwei Liu, Simon Margulies,
Miguel Martinez, Charlie Mason, Mick McCarthy, Carlos Montejo, Nick Morrott,
Michele Nesta, Elizabeth Norval, Evelyn Obaid, Peter Olsen, Petr Panteleyev,
Andrei Radu, Terry Roe, Avi Schwartz, Jeff Schwarz, Burak Sevindi, Juan Silva,
Russell Smith, Jigar Shah, William So, Thomas Stark, Mel Sumrell, Yves Thorrez,
Joe Toomey, Michael J. Young, Michael
Zeidler, and (your name might go here) for their bug reports!
Please report any remaining bugs in this edition on the bug report form.