PA-RISC Operating Systems History
Different operating systems have been developed for PA-RISC computers since their inception. PA-RISC was originally conceived as an Unix computer and has been used for many commercial, research and later open source systems.
PA-RISC operating system history started in 1986 with Unix on PA-RISC: HP’s own HP-UX, still shipped today. The Infancy of PA-RISC operating systems from 1986 to 1991 featured mostly commercial Unix systems and BSD. This was followed by a short Growth in the PA-RISC ecosystem between 1991 and 1993 where PA-RISC expanded to other platforms such as Mach, OSF/1 and some commercial experiments (like Windows NT and NetWare).
Maturity of PA-RISC operating system was achieved from 1994 to the turn of the century, when PA-RISC extended its support to many different architectures from Unix, stable Mach and OSF/1 to novel platforms like HP-RT, mainframe systems and first open source. PA-RISC systems started their eventual Decline in 2000, after HP and others started their move to Itanium processors. Operating systems on PA-RISC stagnated and many were discontinued in the early 2000s, but finally open source on PA-RISC took off mid-2000s.
PA-RISC Infancy Growth Maturity Decline Year 86 87 88 89 90 91 92 93 94 95 96 97 98 99 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 HP-UX █░░█░░█░░█░░█░░█░░█░░░░░░░░█░░█░░█░░░░░░░░█░░█░░█░░░░░░░░█░░░░░█░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ NeXTSTEP ░░░█░░ SPP-UX █░░░░░░░░░░░█░░░░░░░ VOS,FTX █░░░░░░░░░░░█░░░░░░░░░░░░░░░░░░░ HPBSD █░░█░░░░░░░░█░░ Mach 3 ░░ Mach 4 ░░░░░░█░░ OSF/1 ░░█░░ ░░█░░█░░█░░ MkLinux ░░░░░ Linux ░░░░░░░░░░░░█░░░░░░░░█░░█░░█░░█░░█░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ OpenBSD ░░░░░░░░░░░░█░░█░░█░░█░░█░░█░░█░░█░░█░░█░░█░░█░░█░░█░░█░░█░░█░░█░░█░░█░░█░░█░ NetBSD ░░░░░█░░█░░ █░░█░░ █░░█ ░░░░░░█░░█░░█░░█░░█░░█░░█░░█░ QEMU ░░█░░░░░░░░░░░█░░█░░█░ HP-RT ░█░░█░░░░░░░░█░░ Windows NT ░░░░░░ NetWare ░░░░░░░░░░░ Year 86 87 88 89 90 91 92 93 94 95 96 97 98 99 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 █ major release ░ support and development
Infancy (I): Late 1980s
Unix: HP-UX
Unix was the standard operating system choice for PA-RISC computer and the main target for PA-RISC while developing it. HP 9000 were dedicated Unix servers and then workstations. Most operating systems for PA-RISC were either Unix implementations or variants of it.
HP developed and ported HP-UX, its commercial Unix offering, to PA-RISC very early on. Closely based on BSD Unix, HP-UX later on moved towards System V. Many of the Asian HP PA-RISC OEMs and clones also used HP-UX variants or own Unix implementations.
Another commercial, Unix-like operating system was NeXTSTEP, ported to PA-RISC during the 1990s RISC era in parallel to SPARC.
The story of HP-UX Unix began before PA-RISC with versions for the early HP 9000 lineup — the HP FOCUS systems. From the late 1980s on, HP-UX was available on the first PA-RISC server computers (800s), with HP-UX 1.0 or 2.0 the first release on PA-RISC in 1986 or 1987.
Many updates soon followed, even though versioning was a bit complicated during that sparsely documented time. In the 1980s, another HP-UX was released with 3.0.
Research: HPBSD
The premier PA-RISC research system was HPBSD from the University of Utah, a port of 4.3BSD and later 4.4BSD to early HP 9000 800 servers and 700 workstations. HPBSD was born on 68k-based systems in 1987 when Mike Hibler started a port of 4.3BSD to HP 9000 320 and 350 workstations at the University of Utah. Major development lasted until about 1991 with the final addition of Motorola 68040 support.
In 1989, Jeff Forys started work on a HP 9000 800 port based on the hybrid HP-UX/Mach kernel called HP Tut done as an experiment at HP Labs. By 1990, HPBSD was running on an 9000 835 and later that year solidly on PA-RISC. For a short period of time in 1989-90, Mt Xinu also worked on the PA-RISC port and produced the first usable part of it, the boot loader, late in 1989. HPBSD used this boot loader.
Research: HP Mach (Tut)
An internal HP research project was HP Tut from around 1988-89 to port HP-UX onto a Mach microkernel. The project apparently never suceeded far and moved on to merging parts of Mach 2.0 under HP-UX 2.0 to get something close to resembling Mach on PA-RISC. HP Tut was the basis for various other porting efforts and PA-RISC research projects within and outside of HP.
Growth (II) – 32-bit 1990s
Unix: HP-UX 7.0 to 9.0
Early HP-UX from the 1980s was followed by HP-UX 7.0 in 1990, the first version in a consistent numbering scheme. The first HP Unix release for both HP 9000 800 servers and new HP 9000 700 workstation was HP-UX 8.0, followed by 9.0 from the early 1990s, still strongly BSD-based. Releases were still not unified for 700 and 800 computers, with different minor releases specific to both.
Research: HPBSD 2.0
Starting in May 1991, Leigh Stoller ported HPBSD to the HP 9000 720 workstation, after which support for PA-RISC 1.0 and the 9000 800 platform was dropped.
The last major development to HPBSD was the addition of the 4.4BSD kernel filesystem and networking code and the 4.4BSD ANSI-compliant C library. Jeff Forys started this in 1992 and by 1993 all of the University of Utah HPBSD machines had been converted. This version was known as HPBSD 2.0. Since this merge included the NFS implementation done by Rick Macklem, all Sun-encumbered code could be eliminated.
In April 1993, a semi-formal release of HPBSD 2.0 was made to the 2-3 sites which had the necessary agreements with HP that were necessary to obtain HPBSD PA-RISC. After that, active development of HPBSD had pretty much stopped. As of Summer 1999, there were less than ten HPBSD machines left. The last efforts were HP-UX compatibility 10.20 for the JDK and a 3Com EISA 100 Mbit ethernet driver.
In 1990 another Mach project was spun off of HPBSD — the Mach 3/UX single server port for the 9000 835 sponsored by HP and primarily done by Bob Wheeler.
Research: Mach 3
Several ports of the Mach microkernel were undertaken during the early 1990s, with HP Tut using Mach 2.0 and the University of Utah trying Mach 3 and Mach 4. Porting efforts for OSF/1, the alliance Unix operating system from DEC, IBM, HP and others to compete with AT&T and Sun’s System V Unix, started around 1990.
The first Mach 3 port to PA-RISC was Mach 3/UX from the University of Utah around 1991, one of the first various Mach microkernel ports to PA-RISC. This project targeted a proper port of Mach to PA-RISC on HP 9000 835 servers, where the HP-internal HP Tut somehow failed. Mach 3/UX never got very far, but code wound up later in Mach 4/Lites and probably MK-PA from OSF.
All Mach on PA-RISC ports were never really used widely as production systems, but formed the basis for other research projects and later the BSD and Linux ports.
Research: OSF/1
HP ported OSF/1 to PA-RISC in an internal project around 1990, which was never widely available commercially. This port was superseded later in the mid-1990s by MK-PA from OSF RI, the Open Group Research Institute.
Research: Chorus
Another micro-kernel operating system was Chorus by INRIA with a development port to PA-RISC done in 1990-1991 at the Oregon Graduate Institute (OGI) for PA-RISC 1.0 HP 9000 834 servers (workstations
).
This port was based on Chorus v3.3/MiX v3.2.
Hardware support and functionality was limited, with apparently no network interfaces or disk devices
supported and console I/O depending on PDC and IODC routines.
Code from various earlier projects was used, including from HP-UX 2.0 and HP Tut, HP-UX on 2.0 Mach. A later project ported Chorus v3.4 to the 9000 720 workstation a popular target for OS/Unix porting efforts at that time.
Others: HP-RT
Another PA-RISC operating system by HP was HP-RT, a real-time operating system geared towards instrumentation use cases on HP 9000 740 series VME workstations that had a short-ish lifespan between 1993 and 1997, when customers migrated to new solutions and platforms more rapidly than anticipated.
HP-RT was derived from LynxOS, a real-time operating system, and developed for hard
real-time operating requirements.
HP added a native POSIX API and Unix features like protected address spaces, multiprocessing, and standard GUI
during development in the early 1990s.
HP-RT was sold as part of the HP-RT Developer’s Kit that included the 743rt and 744rt VME computers.
Others: Windows NT and NetWare
Besides well known commercial systems and research projects, some interesting operating systems were ported to PA-RISC. Forgotten since, Windows NT and NetWare were ported to PA-RISC in the 1990s as development projects.
Around 1993, HP started to pursue a Windows NT on PA-RISC port, after NT rose to (future) operating system prominence in the early 1990s. At the same time, HP extended PA-RISC for bi-endian byte ordering to better support mainstream operating systems. After Microsoft and HP development, there even was a closed presentation of Windows NT on PA-RISC, but nothing came out of it eventually.
The NetWare on PA-RISC porting effort was another serious undertaking, this time from HP and Novell to port Processor-Independent NetWare 4.1 (PIN) to HP 9000 and PA-RISC. NetWare on PA-RISC was targeted for a 1992-93 release on HP 9000 to broaden both NetWare’s and PA-RISC’s appeal in the network operating system market. HP pulled out of the project in 1994 after numerous delays at Novell, a major disappointment for both.
Maturity (III) – 1990s heydays
Unix: HP-UX 10.20, 11.00
The new HP-UX 10 was released a few years later in 1995, delayed for a year due to technical bugs. It was followed in quick sucession by HP-UX 10.10 (mostly ignored), 10.20 and 10.30. Due to feared Y2K issues in earlier versions, HP made HP-UX 10.20 available free of charge for HP 9000 owners for a while. A server-only 10.30 released followed in 1997, as were many Additional Core Enhancements (ACEs), that added workstation hardware support to HP-UX 10.20.
The modernized HP-UX 11.0 was released soon after, starting in 1997, with a true 64-bit kernel
with full 64-bit support for 64-bit computers but still support for many 32-bit PA-RISC systems.
There was supposedly scant support for workstations in the original 11.00 release that was developed by the HP Server division – to be added later with the EP and ACE in 1998 and 1999.
Unix: NeXTSTEP on PA-RISC
NeXTSTEP on PA-RISC was a commercial operating system based on Mach and BSD, with an Unix userland and modern GUI.
Introduced in 1989, NeXTSTEP originally supported custom NeXT computers (black
hardware, based on Motorola 68000) in the first few releases and pioneered many modern computer technologies such as the first web browser, UI concepts and an appstore.
NeXTSTEP releases 1.0 (0.9) to 3.0 in 1992 only supported black NeXT hardware.
Intel i386 support was added by NeXTSTEP 3.1 for white hardware
to broaden the supported user base.
With NeXTSTEP 3.3 the decision was made to support the new RISC architectures of the day with PA-RISC and SPARC.
NeXTSTEP was ported to PA-RISC with version 3.3, released in 1994, based on development work in version 3.2. NeXTSTEP/hppa was developed specifically for the HP 9000 712 pizzabox workstation, supported by HP with PA-RISC engineers who worked on the NeXTSTEP kernel in NeXT offices. The HP 712 workstation was the first NeXT RISC workstation, after NeXT abandoned its own RISC plans.
The porting effort to PA-RISC was supposedly easy – It's a simple recipe, we just need to change the processor.
For the porting effort, HP PA-RISC engineers worked at NeXT onsite. NeXT had experiences with PowerPC and Motorola 88000 but decided for PA-RISC as its first RISC port which "proved easier than the port to Intel". Praising the 712, "like Silicon Graphic's Indy platform, the Model 712 running NEXTSTEP provides all of the benefits of running a high-end UNIX operating system with an easy-to-use interface and powerful underlying."
Applications were supported through fat
binaries, which supported multiple architectures on NeXTSTEP.
Support for PA-RISC in NeXTSTEP was only brief and limited to a select set of 32-bit HP 9000 workstations in version 3.3, which was removed in the follow-on OPENSTEP 4.0.
NeXT and NeXTSTEP, while revolutionary in aspects, did not have much commercial success. OPENSTEP was supported until the late 1990s, which also included development of OPENSTEP APIs for Windows (NT), and a later acquisition by Apple. NeXTSTEP ideas and technologies lived on in Apple MacOS.
For the 1990s, NeXTSTEP on HP 9000 712 workstations was a rather unique and modern operating system experience compared to other Unix and RISC systems.
Other Unix
There were a few other notable operating systems ported to PA-RISC. HP’s own MPE business mainframe operating system was ported from the HP 3000 CISC platform to PA-RISC with MPE/XL and MPE/iX, with several releases from 1988 to 2002.
Several third-party Unix operating systems for PA-RISC mainframes were developed by companies for their own computers. This includes Convex SPP/UX, a heavily modified Mach-based operating system familiar to HP-UX for Exemplar SPP mainframes. Fault-tolerant Continuum servers from Stratus were also shipped with Unix, Stratus FTX, a System V Unix, or Stratos VOS, a transaction-processing oriented system.
In the mid-1990s, as part of the Precision RISC Organisation PA-RISC consortium, some Asian PA-RISC OEMs started selling their own PA-RISC computers. These either made use of licensed HP-UX versions or their own custom developed operating systems – like Hitachi with HI-UX/WE2 and HI-UX/MPP or Samsung with SS-UX.
Research: Mach 4
The University of Utah Flux Research Group ported the original Mach microkernel with a 4.4BSD-Lites server around 1994 to the PA-RISC architecture, based on the work of the Mach 3/UX project, and called it Mach 4/Lites. There was not much support provided and few enhancements made over the years, and it was quickly discontinued in favor of other projects both at Utah University and elsewhere, for example the MkLinux port. The project was seen from the beginning not as a complete operating system but rather as a snapshot for developers.
The operating system kernel is based on a Mach kernel, derived from CMU’s (Carnegie Mellon University) MK83 release, and is loosely referred to as Mach 4. It contains some initial work done at Utah as part of the ARPA-funded Fast and Flexible Mach Systems work. In particular it contains a prototype implementation of migrating threads and a basic framework for signature-based remote procedure calls, a fundamental component of the presentation/interface work. None of these features is used either by the Lites server or within the kernel itself.
Also included is additional code never integrated into Mach 4, that was part of Utah’s earlier Mach 3/UX and HPBSD ports or HP OSF/1. The former includes bus configuration and rudimentary device drivers for the CIO bus based workstations and servers as well as a remote kernel/task debugging facility developed by Convex. The latter includes some basic EISA support and alternative LAN drivers.
Research: OSF/1 (MK-PA)
The OSF Open Group Research Institute ported OSF/1 to PA-RISC in the mid-1990s as research project, focusing on 32-bit HP 9000 700 workstations and servers. Porting was supported by HP in some way. Research releases were MK6.0-PA in 1994, MK6.3-PA in July 1995 and MK7-PA and MK7.2-PA in 1996. OSF MK-PA was never released widely, but used for research purposes, including ARPA projects (including radar tracking). Obtaining MK-PA from OSF RI required an OSF/1 source license.
MK-PA as research project wanted to demonstrate PA-RISC as OSF RI reference platform, performance parity between HP-UX and MK based systems, HP-UX binary compatibility, high-speed networking capability.
The version of Mach 3 used by the OSF porting effort contained several of the Mach 4 enhancements of the University of Utah and probably used parts of the Mach 3/UX PA-RISC codebase. Parts of the MK-PA port itself were then used as base of the OSF port of Linux onto OSF Mach, MkLinux, which in turn was the base of several other PA-RISC porting efforts in the 2000s.
MkLinux on PA-RISC
Early Linux support on PA-RISC built upon the MkLinux research project from the mid-1990s by the Open Group/OSF, that ported a Linux kernel onto a Mach microkernel, which in turn built on the previous MK-PA OSF/1 port to PA-RISC.
MkLinux was a 1990s project led by Apple and Open Group Research Institute to port Linux hosted on top of a Mach microkernel (pmk1.1) to run an Apple PowerPC computers like PowerBooks. A research project between Open Group and OSF ported that system later to PA-RISC computers, supported by HP, with first PA-RISC development releases were in 1997.
MkLinux was the first free operating system that truly worked on PA-RISC hardware, in contrast to the various Mach ports, which suffered from unfinished development and a lot of bugs on PA-RISC. MkLinux on PA-RISC built on the previous OSF/1 MK-PA port and integrated parts from the PA-RISC kernel sources from the Utah University, including Mach 3/UX and Mach 4/Lites. MkLinux improved the underlying OSF PA-RISC/Mach kernel from MK-PA put a Linux 2.0 kernel as server personality on top, replacing BSD/Lites from the previous efforts. Included were X11R6 patches, the GNU ELF compiler and debugger and complete /usr and /var directories.
Decline (IV) – 64-bit in the 2000s
Unix: HP-UX 11.11 and 11i
The focus of HP-UX shifted with 11i to the newer lettered
(A-Class, B-Class) and rp/rx 64-bit and Itanium servers.
HP started developing the HP-UX kernel to support PA-RISC and Itanium already beginning in 1997, and apparently together with NEC and Hitachi, old PA-RISC co-conspirators.
HP-UX 11i v2 from 2003 then integrated PA-RISC and Itanium into a single operating system stream while HP-UX was focused more and more on specialized server roles – and stopped supporting most older
PA-RISC workstations and 32-bit servers too.
In the late 2000s, HP ported HP-UX in an internal project to Intel x86 as a hedge during the architecture and operating systems consolidation of that decade. Porting target was a HP development system with 16 Intel CPUs on four mainboards. Development was stopped soon after, as HP committed to HP-UX on IA64 and Windows.
Open Source: Linux on PA-RISC
A native Linux port to PA-RISC was started in 1999 and gained momentum when HP started helping with equipment and documentation in 1999. The main Linux port quickly superseded the earlier Mach-based MkLinux. Because of HP’s assistance, the machines targeted at that time were newer than what other ports supported, like the A180, B180 and 64-bit PA 2.0 systems.
PA-RISC support was included in the mainstream kernel, and shipped with Debian and Gentoo distributions as official ports. During the 2010s however, support declined and development was scaled back, resulting in the eventual removal of PA-RISC from official distributions. PA-RISC Linux still has the broadest support for systems and hardware from the current open source efforts.
Development
In the late 1990s, PA-RISC was the last big
RISC/Unix architecture without a proper Linux port, besides the limited Mach-based MkLinux.
This had multiple reasons – PA-RISC systems were not widely used in academia but had a stronger market share in the technical and industrial world, from which they did no escape for a longer time than others.
HP only reluctantly released technical documentation on their systems to the public in those times, which limited interest in and progress of development efforts.
Slow progress was made in 1999 with the initial start of the original Linux kernel on PA-RISC, as there was growing interest in these machines when more made their way into the second-hand market, and finally more documentation was released.
The Puffin Group
Early work on PA-RISC Linux started in 1999 with the help of The Puffin Group, which later employed several kernel and toolchain developers. Development was at first directed towards 32-bit systems; later on, with the help of HP, more modern machines were made available to developers, resulting in better hardware and 64-bit support.
Puffin Group developed much of the initial PA-RISC compiler and tool chain work.
HP support
In late 1999, HP started supporting and sponsoring PA-RISC Linux and the Puffin Group, in parallel to its Itanium (ia64) Linux undertakings. Earlier ports like Mach and MkLinux did not support newer 64-bit PA-RISC 2.0 computers, and had limited support for only SOM, not ELF binaries.
HP supported the port with developers, code, opening up PA-RISC documentation and sponsoring actual HP 9000 computers. Several important parts of the Linux kernel PA-RISC support were written by HP employees in the project. HP’s support activites were channeled through the new Open Source Solutions Operation unit.
HP distributed HP 9000 PA-RISC computers to developer groups – there were at least HP 9000 A180 and A400 servers used for development. Most PA-RISC work was integrated around 2001 into Linux 2.3 with the majority committed into Linux 2.4, which booted. Stable support depended on solid PA-RISC support in gcc compiler and toolchain, which was added in gcc 2.95.
The port reached a stable state in the late 2000s and Linux distributions like Debian started to pick PA-RISC into their ports tree.
ESIEE (Contributed by Thibaut Varene)
The PA-RISC Linux port effort at the French network of graduate schools ESIEE started in 1999 with Thierry Simonnet, then managing the General IT Resources Service at ESIEE. In 2000, Simonnet decided to get students involved and started a case study as part of their school curriculum. The study was conducted in parallel by HP Labs, who sponsored the effort of the school, being a long time partner. This enabled the students to acquire skills, the study was completed in 2001 and presented at Linux Expo Debian 1 Conference.
With its increasing success, the initial case study spawned into a larger project that was open to students on their free time or as part of their classes, and more joined what was to be called the PATeam. From 2001 to the end of 2003, the team was very active in PA-RISC development for the Linux kernel and writing drivers and improving overall stability. From 2004, ESIEE gradually reduced its support for the project.
Open Source: OpenBSD and NetBSD on hppa
Open source operating systems on PA-RISC really started with the various mid-1990s ports of Mach (Mach 3, Mach 4 at University of Utah), which laid the groundwork for more modern and complete open source systems of the 2000s. Mainstream Linux and OpenBSD both started around 1998 to port their codebase systems to PA-RISC.
Work on an OpenBSD on PA-RISC, OpenBSD/hppa, was started by the late Michael Shalayeff in NYC around 1998, with very little available documentation and support. Mickey based his OpenBSD porting work mostly on information and code gleaned from the 1990s Mach porting efforts Lites/HPPA and MkLinux. OpenBSD/hppa progressed in the early 2000s but remained unstable due to several low-level bugs, fixed only later after close interaction with the recent NetBSD/hp700 undertaking from Matt Fredette.
The first more or less complete OpenBSD/hppa release was version 3.5 in 2004, still with limitations of many unsupported machines and I/O devices. Significant work on the OpenBSD/hppa boot loader was undertaken by Miod Vallat. PA-RISC has been supported in OpenBSD on most 32-bit workstation, some 64-bit workstations and some servers since then. An OpenBSD/hppa64 port to support PA-RISC 2.0 computers in 64-bit mode was planned for a long time by Michael Shalayeff and tentatively started in 2007, but was discontinued after 2016.
NetBSD/hppa a free, open source Unix-like operating system, has been supporting PA-RISC computers since 2005.
NetBSD on PA-RISC was called NetBSD/hp700 until the 7.0 release in 2015, and is now supported as a Tier II
port.
Early NetBSD/hp700 was based on Michael Shalayeff’s OpenBSD/hppa kernel of the early 2000s and improved and fixed several bugs.
Code was shared frequently and NetBSD on PA-RISC has been based on OpenBSD PA-RISC code since the mid-2000s.
Further reading
For more technical information see the PA-RISC Operating Systems page, with details on release timelines and introduction dates on the PA-RISC Timeline.
- PA-RISC Linux Project History, PA-RISC Linux Wiki, OLD NEWS, 2024
- HPBSD: Utah’s 4.3bsd port for HP9000 series machines Original homepage of the HPBSD project. Mike Hibler (July 1999: University of Utah)
- The Utah PA-RISC Code Snapshot Original webpage of the project. Mike Hibler (2002: University of Utah)
- MK-PA: An HP-UX compatible microkernel based Operating System, The Open Group (1998) archive.org
- MK-PA Project Update, James Loveluck (1996: The Open Group) archive.org
- OSF MK 7.2, OSF RI (1997: archive.org, accessed February 2018)
- HEWLETT-PACKARD PUTS OSF/1 ON HOLD AS IT MERGES DOMAIN WITH HP-UX, Computer Business Review, March 22, 1992
- MkLinux - Linux on the OSF Microkernel, The Open Group (1997, archived by CIRR 1999, current mirror MkLinux.org accessed 2022)
- MkLinux for HP PA-RISC, The Open Group (1997, archived by CIRR 1999, current mirror MkLinux.org accessed 2022)
- Release Notes for MkLinux on HP PA-RISC, The Open Group (1997, archived by CIRR 1999, current mirror MkLinux.org accessed 2022)
- Sun and NeXT throw open the doors to industry-standard object-oriented computing and Technical Implications, NeXTWORLD 1993 February
- The scariest boot loader code, OpenBSD stories, Miod Vallat (December 2025)
The HPBSD and Mach entries were taken from the original Utah webpage, modified, with permission from Mike Hibler.
