hoops_stick.png

by_stickman_software.png

Basketball Scoring For PalmOS® Handhelds

main sum

Description

Hoops, the basketball scoring application for PalmOS® allows you to do real-time scoring of basketball games. Hoops is simple to use--the optimized one touch interface does the right thing, updating all stats necessary for each game event, allowing you to easily keep up with the fast pace of the game. Your selected individual stats are always displayed on-screen; a game summary, detailed team and individual stats are one button away.

Hoops runs on all PalmOS® devices with PalmOS® 3.0 or greater.

Download Hoops

Version 4.0 New Features

Standard Features

In the evaluation version of Hoops all features are available, but the playing time is recorded in minutes only, not minutes and seconds, and statistics will stop incrementing after reaching a count of five.


Purchase Hoops 4.0

The registered version of Hoops costs $19.99 for each registered device. To purchase Hoops use the buy now button:


Upgrade From Hoops 3.0

To purchase the upgrade to Hoops 3.0 Hoops visit Stickman Software Purchase Website.


Installing

Download Hoops
  1. Download hoops421.zip Some browsers (like Opera) may require that you right click and choose "Save Target".)
  2. Unzip Hoops421.zip.
  3. Install hoops.prc by double clicking the hoops.prc file in Windows Explorer, or using the Palm Install tool from the Start Menu or from the Palm Desktop.
  4. HotSync the Palm device.
  5. Run the Hoops application.
  6. The documentation is available in the subdirectory "doc" created when you unzip hoops421.zip.

Upgrading From Previous Versions of Hoops

To upgrade from any previous version of Hoops, first save any game data from your current version of Hoops using the export menu item.  Then delete Hoops from your Palm device using the delete menu in your application launcher.  Now install the hoops.prc from the hoops421.zip file.

Hoops4 uses a different format for saving and restoring data than previous versions. There is no support for restoring games from previous versions of Hoops into Hoops4.

Registering Hoops

To register Hoops and enable all its features, purchase Hoops at Handango.com. When you purchase, you will be asked to enter your Palm User ID. The Palm User ID (sometimes called the HotSync ID or name) is used to generate a registration code that you enter into Hoops using the Register menu item. The registration code is given to you when you purchase from Handango.com. If you purchase from stickmansoftware.com using Paypal, be sure to enter your Palm User ID in the "Enter Palm User ID" box on the Payment Review page.

You can find your Palm User ID by running the unregistered version of Hoops on your device and selecting "About" from the Hoops menu.  Scroll to the end of the about message and you will find your Palm User ID.

Quick Start

  1. Run Hoops.
  2. Use the Rosters menu selection to set up your rosters.
  3. Select New Game from the Game menu.
  4. Touch the Home Team button and select the home team roster.
  5. Touch the Visitor Team button and select the visiting team roster. If you are not scoring the visiting team, select "default" and Hoops will create a roster for you.
  6. Touch the OK button to leave the New Game screen.
  7. Select the starting lineup on the Substitutions screen that is displayed for the home team.
  8. Select the starting lineup on the Substitutions screen that is displayed for the visiting team.
  9. To change configuration (the period times, number of periods per game) select Configure from the Options menu.
  10. To enable prompts for assists, rebounds, and shot charting, select User Interface from the Configure menu.
  11. To start the clock, touch the page-up button or touch the clock on the screen.
  12. Have fun!

Using Hoops

main

The main screen of Hoops shows the application name hoops and the current game score at the top of the screen. The arrow pointing to a team name is the possession arrow--possession will go to that team on the next jump ball.

The main portion of the screen contains a legend line showing the statistics that may be recorded for the home team, followed by the names and statistics of the players currently in the game. This is followed by the same information for the visiting team.

When hoops is first run a new game named "default" is created, the home team is named "Home" and the visiting team named "Visitor". The default players are numbered with numbers normally not allowed in games. This allows you to begin scoring a game with default numbers, and rename the players as you go, and you probably won't get duplicate players.

Tapping on the hoops title or the menu silk button brings up the hoops menu. See Menu Functions below for detailed description of menu options.


The Hoops Rosters

Rosters are managed with the Roster Screen, accessed through the Rosters menu item.  A Hoops roster is a list containing first the team name, then a list of players for that team.  The team name is the first line of a roster, and then subsequent lines are player names and/or numbers.  If you wish to have the players sorted by number, build the player names with the number first.

Here is an example of a hoops roster:

My Team
1 Player1
2 Player2
3 Player3
4 Player4
5 Player5
6 Player6
7 Player7
8 Player8
9 Player9
10 Player10
11 Player11

Many scorekeepers want to list the players in numerical order to make it easy to find a player in the scorebook. To do this, enter the player's number first on the roster line, then their name on the same line. Hoops will sort the display of players in the game in numerical order.

Hoops maintains its own database of rosters that you enter, but you may also import MemoPad memos that are formatted as rosters. To do so, use the menu item "Import Memo" on the Rosters screen. Enter the name of the memo (this is the team name, the first line of the memo), and Hoops will import the roster. To access this roster, touch the "Open" button and select the roster by name.

You may find it easier to enter your rosters on your PC by creating them in the Palm Desktop MemoPad.

You may also delete rosters from Hoops by selecting "Delete Roster" from the Roster screen memo and selecting the roster to delete. This only deletes rosters from Hoops, rosters that are entered in the MemoPad are still available for importing. If two rosters are named the same, both will appear in the list, and the order will be consistent. So, to determine which to delete, open the first, determine if it is the one you want to delete, and if it is, then select the first one in the delete rosters list.

You may want to create your rosters using the MemoPad portion of the Palm Desktop. This makes typing and editing them easier. Then, in Hoops, select "Rosters", then in the Rosters screen, select "Import Memo" and type the name of the roster (the first line of the Memo, which should be your team name). Then, touch "Open" on the Rosters screen and open your imported roster.

Creating a New Game


new

To create a new game, select New Game from the menu. When you create a new game, the current game is automatically saved.  You can restore previously saved games using the Restore Game menu item. On the new game screen, touch the Home Team or Visitor Team buttons to select a team. There are two options, plus the list of teams currently in the Hoops Roster.

The New Team option allows you to create a new team roster from within hoops. When this option is selected, you are prompted for a team name, then taken to the Hoops Roster screen.  Create the new roster and select Save and then Quit.  When you again touch a team select button, the newly created team appears in the list.

The Temporary option tells Hoops to create a temporary roster for you while you simply supply the team name.  The roster will contain 10 players, numbered in numerical order from 60 through 69 if the home team, 80-89 if the visiting team. This is a quick way of setting up a team you are not interested in scoring in detail. It is also useful in creating a team for which you have no roster available. During game scoring you can use the rename function to correctly identify the players.

When you are done touch the "OK" button. A default name for the game is created using the first three letters of each team name and the current date.  Hoops will verify that the name is unique. If you wish, you can rename the game at this point. After setting the game name, the next two screens allow you to set the starting lineups of the two teams if you desire. By default, the first five players in the roster are listed as starters. You may simply dismiss these screens and configure the starting lineups later if you wish.


Scoring a Game

To record statistics simply tap the appropriate statistic and Hoops will "do the right thing". For example, if you tap the field goals made statistic for a player Hoops will increment the field goals made field, the field goals attempted field, update the total points for the player and update the game score line at the top of the screen. Tapping the field goals attempted field simply increments field goals attempted. The same method is used for entering free throws.

For three point goals, tapping the three point goals column pops up a list from which you select made or missed as appropriate. The three point goals column is updated, along with the points and score if "made" is selected.

The other three statistics columns (by default rebounds, assists and fouls) simply increment when tapped.

The rebounds stat is total rebounds and increments every time that a rebound-defined button is touched, but also is linked to the offensive rebounds stat such that when an offensive rebound is recorded, the rebounds stat also increments. This is the "normal" practice when reporting stats separately for offensive rebounds and rebounds in most newspapers. Hoops breaks out total rebounds, defensive and offensive rebounds in various statistics reports, but the default behavior in this version of Hoops is that the rebound stat displayed on the main screen or in the extended stats screen is total rebounds.

Extended Statistics

pts

Tapping the points field for a player pops up a dialog allowing you to record additional stats--blocks, turnovers, offensive rebounds, technicals and steals by default. This dialog shows the stats that are not displayed on the main screen, the totals of those stats for this player and the player's name.

To record a stat, touch the number for the stat or the name of the stat and Hoops will do the right thing. These stats behave identically to simple stats on the main screen, including the use of fix mode. This dialog is dismissed automatically when you touch a stat number. You can also dismiss it by touching the Cancel button.

Team fouls are recorded automatically and displayed on the bottom line of the screen using the notation "H-#" for the home team, displayed on the left, and "V-#" for the visiting team, displayed on the right. If you have set up the game properly using the configuration screen, Hoops will prompt you at the proper time to clear the team fouls. You may also clear team fouls manually by touching either team foul button.

Bench Fouls

If you wish to add team fouls when you don't know the player to charge the foul to, select the menu item Bench Fouls. The dialog displayed allows you to record technical fouls charged to the bench, and increment team fouls without charging the foul to an individual player.

Since fix mode works in this screen, you can also use this to manually correct your team foul count if you find it inaccurate. Simply add team fouls if your count is too small, and use fix mode to decrement the count if it is too large.

Substitutions

sub

Tapping a team name on the main stat screen will display the substitutions screen for that team. The substitutions screen allows you to select via checkbox the players currently in the game. All players on the roster are shown on this screen. You can quickly clear the roster by using the Clear button.

The home team substitutions screen is also accessible by using the Calendar key (which is aligned under the home team fouls button). The visitor team substitutions screen is also accessible by using the Memo Pad key (which is aligned under the visitor team fouls button).

Pressing the clear button clears all the checkboxes. Sometimes this is the easiest way to handle mass substitutions.

If you press "OK" and have selected fewer than five players, Hoops will warn you, but allow you to continue. If you have selected more than 5 players, you must deselect players until 5 or fewer are selected before Hoops will allow you to leave the screen.

Quick Substitutions

Quick substitutions that replace one player with another may be made by touching the name of the player leaving the game. A list of all players on the team roster who are not playing is shown. Select the player that is going into the game and the team list will be redrawn in correct sorted order.

New Player is also a choice in this list. If you select New Player you can enter a player who is not currently on the roster. This player will be substituted for the player that was selected and the new player will be added to the roster.

The "Rename Player" choice allows you to change the name of the player selected. The change is recorded in the roster. No substitution is made in this case.


QuickButtons

The bottom line of the hoops screen has a series of buttons that allow quick access to information and actions during a game. From left to right they are:

Home Team Foul Button

The Home Team Foul button shows the current number of home team fouls. Touching it allows you to reset the team fouls manually if desired.

Fix Mode

When you make the inevitable mistake in scorekeeping, hoops allows you to correct it easily and at your convenience. As soon as possible following the error, select the fix mode button or press the Phone Book key. Fix mode is indicated by horizontal dotted lines drawn on the screen. When in fix mode, any stat button touched decrements that stat field and other appropriate fields instead of incrementing them. For example, touching the field goals made button decrements the field goals made field, the field goals attempted field, removes two points from the player's point total and two points from the teams point total. Very quick changes to mistakes may be made using fix mode to back out incorrect entries, then re-entering the correct data in normal mode. Fix mode also works in dialog boxes which have statistics such as the three-point goal list, the extended stats list selected from the points column and on the timeout screen and the bench fouls screen. If shot charting is active, when you use fix mode, the most recent shot of the type you have fixed (made or missed), is removed from the shot chart for the player.

To leave fix mode simply tap the fix mode button a second time.

Period Button

The period button is the third button from the left on the bottom line of the screen. It shows the current period number. Touching the period button allows you to reset the clock.

Clock

The game clock is displayed in the middle of the bottom line of the screen. The clock may be operated by touching the clock display with the stylus, or using either the page up or page down buttons on the handheld. When the display is touched or one of these buttons pressed, the clock behaves like a stopwatch--if stopped it is started, if started it is stopped. When the clock is running, it is highlighted in inverse video.

Game Summary

sum

Touching the Game button or the ToDo key brings up the game summary screen which allows you to access specific statistics on a team or player basis, view the period-by-period score and compare statistics using the statistics comparison window and view shot charts if you are using them. The period-by-period score changes format to properly display two-period or four-period games and adds up to two overtime periods if necessary. The current period and time remaining in the current period are shown on the title line.

The four buttons below the line score allow you to select what statistics are displayed in the scrollable statistics window below. The current statistics displayed and the teams or players referenced are displayed immediately below the buttons. You may scroll the statistics window using the scroll bar or the page up and page down keys on your handheld.

The leftmost button is the "Home Team" button. Statistics selected with this button are displayed sorted for all players on the home team. The button is labeled with the home team's name.

The second button is the "Compare" button. Statistics selected with the "Compare" button are displayed as a comparison between the home and visiting teams.

The third button is the "Visitor Team" button. Statistics selected with this button are displayed sorted for all players on the visitor team. The button is labeled with the visitor team's name.

The fourth button is the "Player" button. Selecting this button first allows the selection of one of the teams by name, and then any player on the roster of that team. The statistics displayed are for that individual player. You may also select to display shot charts for individual players or a team if you have recorded them.  When the shot chart display is active, you may select another player from the same team by touching the player name button at the tope of the shot chart screen. See Shot Charts for how to do shot charting.

The Bench Fouls, and Time Outs windows are accessible as menu items on the Game Summary screen.

Visitor Team Foul Button

The visitor team foul button shows the current number of visitor team fouls. Touching it allows you to reset the team fouls manually if desired.

Time Outs

Access the time out screen through the Time Out menu item. To record a timeout, touch the appropriate type of timeout for the team.

Timeouts may be configured on the configuration screen. When an overtime period is entered, Hoops will prompt you for the proper number of timeouts for the overtime. Fix mode also works on the time out screen, allowing you to correct any errors.  The timeout screen records the period and time of the period at which each timeout in the game was taken.

Possession Arrow

The possession arrow is the small arrow between the home team's score and the visiting team's name. Touching either the home team name or the visiting team name on the score line will toggle the arrow to point the opposite direction.

Technical Fouls

Individual technical fouls are entered as extended stats by touching the "Pt" column and selecting "technical". Bench technical fouls are entered by using the Bench Fouls menu item. A dialog is shown that allows recording bench technical fouls. This dialog also allows the recording of additional team fouls if you don't know the individual player who committed the foul.

Overtime

Hoops will automatically go into overtime if the clock is reset and the period is greater than the configured number of periods per game. The overtime dialog allows setting the clock to the time for the overtime period, and buttons are available to set the number of full and 30-second timeouts for the overtime period. Hoops will handle up to 4 overtime periods. After that point, all subsequent scores are simply added to the fourth overtime period. The first two overtime periods are displayed on the Game Summary screen. Overtimes three and four are stored, but not displayed.

Customizing the View

On the main screen, the default listing includes FG, FGA, FT, FTA, TH (dialog for made or missed), R, A, F and PT. The extended stats listed when the points (Pt) column is touched are are offensive rebounds, steals, turnovers, blocks and technicals. The non-shooting stats may be customized by touching the column header and selecting the stat to be displayed in that column. For example, touching the 'R' column header pops up a list of statistics. The statistic you select becomes the statistic displayed and recorded in that column. When you change the displayed statistics, the list presented when you touch the points column is also changed so that it displays only those statistics not listed in other columns. The technical fouls statistic cannot be listed in a column.

When you select a statistic to be displayed, you can select a statistic already displayed in another column. When you do this, Hoops will swap the two columns. This is a quick way to move stats from column to column.

In Hoops4, you may also configure three point goals to be shown using the made-attempts method used for two point goals, and free throws to be show as free throws made with a dialog for made or missed. To do this, simply touch the 3G or FT legend label for the home team and select your choice. 

It is often easier to configure three point goals as made and missed since you can then record them with one touch during a game.  Using the extra touch for free throws is usually better since you have more time to record the results of a free throw.

Configuration

config

The configuration screen allows you to modify various aspects of the game to coincide with differing rules. The options are:

  1. Period Time: Set the number of minutes in each period.
  2. Periods per Game: Set the number of periods per game. This affects when overtime is entered, and the display on the game summary screen.
  3. Full Timeouts: Set the number of full timeouts for the game.
  4. 30-Second Timeouts: Set the number of 30-second timeouts for the game.
  5. Reset Team Fouls Period: Set this value to the period which, when entered, requires resetting the team foul count. For example, in most four-period games, set this to 3 to get a reminder to reset team fouls at the beginning of period 3.
  6. Team Fouls for Penalty: Set this to the number of team fouls required for a one-and-one penalty. When the teams fouls for a team reach this number, Hoops will advise you that the other team is now in the penalty situation.
  7. Double Penalty: Set this to the number of team fouls required for a two shot penalty. When the teams fouls for a team reach this number, Hoops will advise you that the other team is now in the double penalty situation. If your league does not have a double penalty, you can effectively disable this warning by entering a very large number (99 for example).
  8. Foul Out: Set this to the number of personal fouls allowed a player before the player is disqualified. Hoops will advise you when a player has fouled out on personal fouls.
  9. Technical Foul Out: Set this to the number of technical fouls allowed a player before the player is disqualified. Hoops will advise you when a player has fouled out on technical fouls.

User Interface Configuration

export

Various items can be configured within Hoops to give you additional assistance in scoring a game or provide additional statistical information. Hoops can prompt you for rebounds on missed shots, assists on made shots, and for shot charting.

To set these configurations, select the Gui Configuration item in the Options menu.

Rebound Prompts

When this is checked, Hoops will prompt with a list of players in the game following a missed shot.  Selecting a player will credit that player withe the proper rebound type, offensive or defensive.  Selecting a team will credit a team rebound.

Assist Prompts

When this is checked, Hoops will prompt with a list of the four players eligible for the assist following a made field goal.  Selecting a player credits an assist.

Shot Charts

export

Shot chart prompting has multiple levels of configuration.  First, selecting Shot Location Prompt enables shot charting.  Second, touch the Home or Visitor button to bring up the enable shot chart screen for the team you want to shot chart.  On this screen, check all the players for which you wish to do shot charting. Third, if you check Draw Player Shotchart on Prompt then Hoops will draw all the player's attempted and made shots when the prompt is given. 


Export Data

export

The Export Data menu item brings up the Export Statistics screen which allows you to save statistics for the current game in a variety of formats.

Select a team and a format, then press Export Data to Export the data.

The CSV Memo selection will save the data to a Memo Pad memo in CSV format suitable for importing into Excel or another spreadsheet.

The TAB Memo selection will save the data to a Memo Pad memo in TAB delimited format suitable for importing into Excel or another spreadsheet. This is particularly useful for Mac users.

See also using Excel for statistical analysis


Season Statistics

season

The Season Stats screen allows you to create and view season statistics for a team.  Initially you must touch the Load button to either create a new season stat database or load a previously created season stat database. 

When you select New, you are prompted for a name for the season stat database.  Following creation of the database, you can add games to it by touching the Add button and selecting a game by name and then a team.  When you add a game to a season database or when you load an existing season database, a list of the games that have been accumulated is shown.

You can view stats by player for the season database by touching Player and selecting the player.

You can view stats for a team sorted by player by touching Stats and selecting the statistic you wish.


Menu Functions

Tapping on the hoops title or touching the menu silk button drops down the hoops menu:

Hoops Menu

  1. Bench Fouls--Manage technical fouls charged to the bench and team fouls.
  2. Time Outs--Manage timeouts.
  3. Register--Pops up the registration dialog. Enter your registration code to enable the full functionality of hoops.
  4. About--A dialog box giving basic information about hoops.

Game Menu

  1. Clear Game--All stats in the existing game are cleared. Player names and team names are not changed.
  2. New Game--The existing game is saved and the new game screen is presented to allow you to select teams and create a new game.
  3. Export Data--Show the Export Data screen to allow exporting data in formats suitable for importing to Excel.
  4. Restore Game--Provides a list of saved games to reload.
  5. Delete Game--Provides a list of saved games to delete.
  6. Season StatsShows the Season Stats screen which allows you to build, maintain and view total and average statistics for a team for multiple games.

Options Menu

  1. Configure--Bring up the configuration screen which allows setting of various default values for Hoops.
  2. User Interface--Show the Gui Configuration screen to allow configuration of rebound prompts, assist prompts and shot charting.
  3. Player Shot Charts--Quick access to individual player shot chart configuration.

Tips

Don't try to do too much--besides being fun, scoring basketball is difficult, requires concentration and a good memory. Or else a really good spotter and the willingness to miss all the action while you enter stats! Watch the flow of the game and get good at remembering sequences of actions. Made shots are easy, but sequences of missed shots and rebounds are difficult. Watch and try to remember, then enter the data when the shot is finally made, or possession changes.

To start with, score only one team. For the second team, if you score, just score shooting and use only one player--this gives you team stats, which can be informative. Remember you can ignore foul out warnings.

Using the prompts available might be too much if you want to record lots of stats.  The prompts are useful, but they take time and can be a distraction.  Particularly shot charting for all players is difficult.  If you want shot charts for all players, then ignore floor stats while you learn.

Use the Page Up button on your handheld to start and stop the clock-it's easy to reach while holding the handheld and you don't have to look down from the game to use it.

  1. Configure fouls as an extended stat. There is a lot of time when a foul is called to update the foul using extended stats, and a quick summary of fouls can be obtained by touching the Game Summary button and selecting fouls.
  2. Build your rosters well before game time. Set up the starters at introduction time using the Substitutions screen. If you have to enter the roster at the game, you will be pressed for time. Barring that, take advantage of the default rosters for setup and rename the players when you know their numbers.
  3. On substitutions, use QuickSub when substituting one or two players, use the substitution screen when mass substitutions are made. Take advantage of the clear button on the substitution screen to sub everyone out, then add the players who are in.
  4. When using QuickSub, pay attention first to who is coming out of the game--that's the player you need to touch to start the substitution--then look for the player coming in.

Remember, when you use Hoops, all the other fans at the game will be envious, and will continually ask you for stats during the game.


Known Bugs and Undocumented Features

  1. If you make changes to the stats which affect scoring using fix mode, Hoops will decrement the current quarter score appropriately. If the stat you are fixing actually occurred in a previous quarter, then the quarter scores displayed by Hoops in the game summary will be incorrect. The total score and stats are all correct. You can actually cause a negative quarter score to be displayed by doing this.

    To avoid this problem, try to verify your stats during the quarter break before you reset the clock to change periods.

  2. In this release the season statistics are simple.  There is no testing for name matches when you add games.  Instead Hoops uses simple record alignment to accumulate statistics.  What this means is that if you use rosters that have the players ordered differently to score games and then accumulate them into season databases, Hoops will not match up the players by name. For example, if you scored a game where player #22 was the second player in the roster list and player #23 was third, and another game where player #23 was the second player in the roster list and player #22 was third (the orders of the players in the rosters is different), then the season stats for player #22 would include the first game for player #22 and the second game for player #23. As long as you don't mess with the order within the rosters, the stats are accurate.  You can add players and rename players without problem. Just don't move them around.


Enhancements/Suggestions?

If you have suggestions for improvements to Hoops, please email tthkbw.verizon.net.


Using Excel For Statistics Analysis

Hoops can save statistics for a game (see Export Data) in csv format suitable for import into Excel or OpenOffice Calc. Importing the data into the spreadsheet is manual, but simple:
  1. From Hoops on your PDA, save the team statistics in CSV format.
  2. HotSync the PDA, this copies the saved data to your PC. If you use Palm Desktop, the memo will appear in the Memo section of Palm Desktop. If you use Outlook, the memo will appear as a note in the notes section of Outlook.
  3. On your PC, open Palm Desktop (or Outlook if you sync to Outlook).
  4. Find the memo (Palm Desktop) or note (Outlook) that you saved.
  5. Select all the text in the memo or note using Ctrl-a (hold control key down and press 'a') or the mouse.
  6. Copy the text selected using Ctrl-c (hold control key down and press 'c')
  7. Open Excel.
  8. Use the mouse to select a cell at the location you wish to copy the data to.
  9. Type control-v (hold control key down and press 'v') to paste the data into the cell.
  10. Select "Text to Columns" from the "Data" menu in Excel. Select "Delimited" as the data type and go to the next dialog. In this dialog, be sure comma is selected as a delimiter. When it is, the view of your data in this window should align all the individual statistics in columns. Select next and then finish.

Your data should now be in columns including the stat labels as headers.

If you use OpenOffice Calc instead of Excel, you can still use the above procedure, but you must install the add-on "Text To Columns for Calc" to have the same functionality for converting the CSV data into columns. To install this add-on, follow the instructions here: how-to-convert-text-to-columns-in-openofficeorg-calc. Note that when you download the add-on, it is a zip file. Point to this zip file when you install using the menu item "Tools/Package Manager". In the dialog box, select "Add" and then select the "TextToColumns-20061003.uno.pkg.zip" file. Then close Calc and reopen. Now you will have an entry "Text to columns" under the menu item "Tools/Add-Ons".


Last changed: 2004 Dec 20