VMEbus Frequently Asked Questions (FAQ)

Portions of this FAQ have been reprinted (with permission) from The VMEbus Handbook, 4th Edition by Wade D. Peterson. VITA 1997. For more details the user is directed to the handbook, or the VMEbus specification(s). Other items have been reprinted from the VITA Journal (with permission) VMEbus FAQ's article series by John Rynearson.

Introduction to VMEbus

VMEbus is a computer architecture. The term 'VME' stands for VERSAmodule Eurocard and was first coined in 1980 by the group of manufacturers who defined it. This group was composed of people from Motorola, Mostek and Signetics corporations who were cooperating to define the standard. The term 'bus' is a generic term describing a computer data path, hence the name VMEbus.

Actually, the origin of the term 'VME' has never been formally defined. Other widely used definitions are VERSAbus-E, VERSAmodule Europe and VERSAmodule European. However, the term 'Eurocard' tends to fit better, as VMEbus was originally a combination of the VERSAbus electrical standard, and the Eurocard mechanical form factor.

VERSAbus was first defined by Motorola Corporation in 1979 for its 68000 microprocessor. Initially, it competed with other buses such as Multibus™, STD Bus, S-100 and Q-bus. However, it is rarely used anymore.

The microcomputer bus industry began with the advent of the microprocessor, and in 1980 many buses were showing their age. Most worked well with only one or two types of microprocessors, had a small addressing range and were rather slow. The VMEbus architects were charged with defining a new bus that would be microprocessor independent, easily upgraded from 16 to 32-bit data paths, implement a reliable mechanical standard and allow independent vendors to build compatible products. No proprietary rights were assigned to the new bus, which helped stimulate third party product development. Anyone can make VMEbus products without any royalty fees or licenses.

Since much work was already done on VERSAbus it was used as a framework for the new standard. In addition, a mechanical standard based on the Eurocard format was chosen. Eurocard is a term which loosely describes a family of products based around the DIN 41612 and IEC 603-2 connector standards, the IEEE 1101 PC board standards and the DIN 41494 and IEC 297-3 rack standards. When VMEbus was first developed, the Eurocard format had been well established in Europe for several years. A large body of mechanical hardware such as card cages, connectors and sub-racks were readily available. The pin and socket connector scheme is more resilient to mechanical wear than older printed circuit board edge connectors.

The marriage of the VERSAbus electrical specification and the Eurocard format resulted in VMEbus Revision A. It was released in 1981.

The VMEbus specification has since been refined through revisions B, C, C.1, IEC 821, IEEE 1014-1987 and ANSI/VITA 1-1994. The ANSI, VITA, IEC and IEEE standards are important because they make VMEbus a publicly defined specification. Since no proprietary rights are assigned to it, vendors and users need not worry that their products will become obsolete at the whim of any single manufacturer.

Since its introduction, VMEbus has generated thousands of products and attracted hundreds of manufacturers of boards, mechanical hardware, software and bus interface chips. It continues to grow and support diverse applications such as industrial controls, military, telecommunications, office automation and instrumentation systems.

General VMEbus Features

Table 1 shows the general VMEbus features under the VME64 and VME64x specifications. A variety of other 'accessory' standards are also available with VMEbus products, but may not be mentioned in this FAQ. These include (but are not limited to) mezzanine modules, crossbar switches, serial channels and high-availability type products.

Table 1. General VMEbus Features






Transfer Mechanism

Asynchronous, with both multiplexed and non-multiplexed bus cycles.
There is no central synchronization clock.

Addressing Range

16, 24, 32, 40 or 64-bit
Address path width selected dynamically.

Data Path Width

8, 16, 24, 32 or 64-bit
Data path width selected dynamically.

Unaligned Data Transfers

Compatible with most popular microprocessors.

Error Detection

Using BERR* signal.

Parity Protection

There are no parity signals on the backplane, but parity protected boards are quite common.

Data Transfer Rate

0 - 500+ Mbyte/sec

See Table


7 levels
Priority interrupt system with 8, 16 or 32-bit STATUS/ID (interrupt vector).

Multiprocessing Capability

1 - 21 processors
Flexible bus arbitration with true peer-to-peer multiprocessing.

System Diagnostic

Using SYSFAIL* signal and VME64x test & maintenance bus.

Geographical Addressing

Under VME64x

Live Insertion Capability

Using optional standards.

Control & Status Registers
(Plug & Play Support)

Under VME64 & VME64x

Mechanical Standard
3U single-height Eurocard
6U double-height Eurocard
9U (optional standard)
160 x 100 mm Eurocard
160 x 233 mm Eurocard
367 x 400 mm Eurocard

User Defined I/O

Through the Front Panel
and P2/J2 User Defined Pins

Conduction Cooled Version

Under IEEE 1101.2

Maximum Number of
Card Slots in Backplane

The number of cards is limited by how many boards, located on 0.8" centers, can be placed into a 19" rack panel.

VMEbus Applications

VMEbus is used in a wide variety of applications. In many cases, the VMEbus system design has been tailored to support specialized applications as well. Some of the most popular include:

In 1997 (the latest numbers available), the total market for VMEbus merchant boards was about $US 1.3B. This does not include backplanes, packaging, power supplies, software or captured markets. [Captured markets are those where companies build all or part of their own systems]. In 1997 the market for all board level products was about $US 2.4B. This gives VMEbus a market share of about 54% (by sales dollar). VMEbus enjoys the largest market share (by sales) than any other microcomputer bus type (including ISA, PCI, cPCI and others). In 1998 the VMEbus systems business was about $US 3.75B.

Original VMEbus (IEEE-1014-1987)

The original VMEbus specification (IEEE-1014-1987) has a robust set of features. These are just a subset of the current VMEbus offerings, but included:

Noteworthy functions include (up to) 32-bit address and data buses, multiprocessing capability and seven level interrupt protocol. Both the address and data buses can be dynamically configured (i.e. they change widths automatically). This allows system expansion as microcomputer technology grows. It also handles data transfer speeds to 40 Mbytes/second.

VMEbus uses a master-slave architecture. Functional modules called masters transfer data to and from functional modules called slaves. Since many masters can reside on the bus it is called a multiprocessing bus. Before a master can transfer data it must first acquire the bus using a central arbiter. This arbiter is part of a module called the system controller. Its function is to determine which master gets access to the bus. All bus activity takes place on five sub-buses. These are called the Data Transfer Bus, the Data Transfer Arbitration Bus, the Priority Interrupt Bus, the Utility bus and the Serial Bus.

VMEbus is an asynchronous bus. That means that there are no clocks used coordinate data transfers. Data is passed between modules using interlocked handshaking signals. The cycle speed of each transfer is set by the slowest module participating in the cycle.

The maximum speed of asynchronous buses is limited by the propagation delay of signals across backplanes and through buffer ICs. A VMEbus backplane can be up to 500 mm (19.68") in length and can have relatively high inductive and capacitive loads on the signal traces. If VMEbus were synchronous, it would probably have a system clock speed of around 10 MHz. This allows about 100 nanoseconds for a signal to propagate from a master at one end of a bus, through the backplane and interface ICs, and then back again.

As we'll see shortly, the basic capabilities of VMEbus have been greatly expanded since its inception. These enhancements have taken the form of VME64, VME64x and VME320 technologies.


The most recent version of VMEbus is the ANSI/VITA 1-1994, which is also known as VME64. Since its approval in 1995, a variety of boards and chips have been introduced to support the new standard. As the next generation architecture for VMEbus, VME64 promises to extend the life of VMEbus well into the 21st century. The new standard offers a much-needed 'face-lift', with enhancements such as higher bandwidths, larger address spaces and easier-to-use cards.

VME64 is a mechanical and electrical 'superset' of the original IEEE 1014-1987 standard. It offers new features such as:

Actually, the term 'VME64' is something of a misnomer, as all VMEbus modules that conform to the IEEE-1014-1987 are now considered to be VME64 compliant (regardless of their data transfer capability). For example, a 16 or 32-bit CPU board designed under the older specification can be (correctly) identified as VME64 compatible.

All of the enhancements under VME64 and VME64x are optional. New products work in conjunction with older 'legacy' boards, thereby providing a smooth upgrade path for system integrators.

The VME64 Extensions (VME64x)

In 1997 the VITA Standards Organization (VSO) adopted a superset to the VME64 standard. The new standard is called the VME64 Extensions (VME64x). VME64x adds new capabilities such as:

The VME64x standard also lays the groundwork for the High Availability and Live Insertion (Hot Swap) VME64x standards. These are emerging standards, and will not be covered in great detail in this FAQ.

All legacy VME and VME64 modules are forward compatible to VME64x backplanes and sub-racks. That means that older bus modules can be plugged into newer systems.

In general, the reverse is also true. Bus modules designed to the VME64x standard are also backward compatible with older backplanes and subracks. For example, the new 160 pin connectors can be plugged into an older backplane. However, there are a few exceptions to this. For example, if a board requires the new +3.3 VDC power supplies, then it will not work in an older backplane (which does not have these power pins).

The VME64x standard describes many optional features. However, the standard insists that a minimum set of features be present on boards and backplanes before they are considered to be VME64x compliant. All of the other features in the standard are considered optional. For example, the minimum features that must be present on 6U modules include:

The minimum features that must be present on a 6U backplane include:


In 1997 a modified VMEbus architecture called VME320 was released by Arizona Digital, Inc. The VME320 architecture was designed for operation at over 320 Mbyte/second, and peak bandwidths of over 500 Mbyte/second. VME320 uses a new backplane design and bus protocol. It is a proprietary architecture, and the inventors claim to have patent protection on the backplane technology within the United States of America. However, VMEbus modules can be designed, built and sold without license.

The VME320 backplane uses a 'star' interconnection method to speed up the VMEbus backplane itself. All of the interconnections on the backplane are connected together at the middle slot of the backplane. In a nutshell, the idea behind this backplane is that the leading edges of signals, propagating from slot-to-slot, will effectively pass through only one slot on the way to their destination. This allows tighter skew delays on the backplane, thereby speeding up the system.

The VME320 concept uses a new bus protocol called 2eSST. The protocol allows VME320 compatible modules to interact at much higher speeds.

VMEbus Software

VMEbus has the largest software base of any computer architecture. That's quite a claim, but it is supported by the fact that there are over 103 known, commercial operating systems running on VMEbus. Other, proprietary operating systems are also known to exist. Table 2 shows just a few examples.

Table 2. Popular VMEbus Operating Systems

 UNIX Style OS


Real Time OS


Windows 3.1
Windows 95/98/NT 


The VMEbus standards themselves have little to say about software. However, there have been an increased emphasis on software standards within the VMEbus community. The Embedded Software Association (ESOFTA) also has additional information about these topics.

VMEbus Data Transfer Speeds

VMEbus is quite fast, especially in it's most recent manifestations. In fact, it is arguably the fastest of all of the popular microcomputer buses, and certainly the fastest among the 'big commercial backplane buses' (i.e. > 8 slots). Table 3 shows the typical, maximum data transfer speeds that can be achieved between VMEbus modules. The actual data transfer rate of a VMEbus module may be slower than that shown in the Table. The user is advised to contact the board manufacturer for more details.

Table 3. Maximum Data Transfer Speeds


Bus Cycle

Maximum Speed



40 Mbyte/sec



80 Mbyte/sec



160 Mbyte/sec



320 - 500+

For further information about the speed of VMEbus, click here.

The VMEbus Architecture

For the purposes of this FAQ, we'll describe the VMEbus architecture from the standpoint of the VME64 and VME64x standards. Furthermore, we'll use the nomenclature that's used in the standard(s).

The VMEbus architecture is generally described using a concept of functional modules. These functional modules are a conceptual tool. However, in some cases they also describe actual hardware. Table 4 describes all of the functional modules available on VMEbus.

Table 4. VMEbus Functional Modules

 Functional Module


Can initiate bus cycles on the Data Transfer Bus (DTB).

Can detect and participate in DTB cycles.

 Location Monitor
Monitors the DTB and asserts on-board signals if certain addresses are selected.

 Bus Timer
Measures how long a DTB cycle takes. If a cycle takes too long, it asserts BERR*. A type of watchdog timer.

Generates interrupt requests.

Responds to requests from interrupters.

IACK Daisy-chain Driver
Drives the IACK* daisy chain. Usually part of the slot 01 system controller module.

Used to request ownership of the DTB.

Monitors and grants ownership of the DTB.

System Clock Driver
Provides a stable, 16 MHz utility clock.

Power Monitor
Generates SYSRESET* and ACFAIL* signals.

The various functional modules communicate with each other over the five sub-buses shown in Table 5. The sub-buses are also a conceptual tool, and are often used in conjunction with each other.

Table 5. VMEbus Sub-buses



 Data Transfer Bus (DTB)
Used to pass address and data information.

 Data Transfer Arbitration Bus
Used to obtain ownership of the DTB.

 Priority Interrupt Bus
Used to pass interrupts between modules.

 Utility Bus
A collection of utility functions such as a system reset signal and a utility clock.

 Serial Bus
A two-wire serial bus.

Bus cycles are impressed upon the sub-buses. The standard VMEbus cycle is the READ/WRITE cycle, and can transfer 8, 16, 24 or 32-bits of data during every transaction. There are other bus cycles that are more specialized, or allow faster operation. These are summarized in Table 6.

Table 6. VMEbus Bus Cycles

 Bus Cycle


Data Transfer Bus Cycles

 Read/write Cycle
Basic data transfer cycle that is used to pass only one chunk of data on every bus cycle.

 Read-modify-write Cycle
An indivisible bus cycle that is used to pass semaphore information in multiprocessing systems.

 Block Transfer Cycle
A bus cycle that moves data in a 'block' or 'burst' fashion. Usually faster than read/write cycles.

 Multiplexed Block Transfer Cycles
Similar to the BLT cycle, except that the address and data lines are combined to form wide address and data buses. Includes MBLT and MD32 cycles.

Two-edge Cycles
Similar to the MBLT cycle, except that two-edge handshaking is used. Includes 2eVME and 2eSST cycles.

 Address-only cycle
A type of cycle that only broadcasts an address. Includes the ADO and ADOH cycles.

Data Transfer Arbitration Bus Cycles

Arbitration Cycle
Grants ownership of the bus.

Priority Interrupt Bus Cycles

IACK* Cycle
Method to pass interrupts across the backplane.

The VMEbus specification allows different address and data widths to be used based on an application requirement. While all combinations are possible, certain combinations are more common than others. For example, A16/D8(O) is common for simple I/O boards while A32/D32 and A32/D64 are common for high performance SBC modules. As stated earlier A24 is usually found only on older 6U modules and is quickly being replaced by A32.

During the various enhancements to the bus in VME64 and VME64x, additional cycles were added. This is possible because VMEbus uses something called address modifier codes to 'tag' each bus cycle. As new cycles are developed, they are tagged with a new address modifier code, thereby insuring compatibility between modules. Future bus cycles are also planned.

The VMEbus specification allows full peer-to-peer multiprocessor capabilities. This is done with a flexible bus arbitration scheme that allows up to 21 masters in each system. A central bus arbiter, which is located in the first slot in the backplane (and is part of the VMEbus system controller), determines which master may use the bus. Arbitration methods include priority, round-robin and other scheduling algorithms.

Mechanical Hardware

There are two mechanical form factors for VMEbus modules. These are called single and double height modules. The smallest is the single height module, and connects to the P1/J1 connector. Traditionally, these modules can generate or accept up to 24-bit address and 16-bit data transfers. However, larger address and data transfers can new be achieved with A40/MD32 and 2eVME cycles (which are allowed under VME64 and VME64x standards).

Single height modules are commonly used if space is limited. Because of their size, they are also more resilient to shock and vibration than double height boards.

The larger and more popular size VMEbus board is the double height module. These are electrically compatible with single height boards (which use only the P1/J1 connector). Traditionally, 6U modules can generate or accept up to 32-bit address and 32-bit data transfers. However, the VME64 and VME64x specifications have introduced wider, 64-bit transfers in the MBLT and 2eVME cycles.

Single and double height modules are sometimes referred to as 3U and 6U boards. The 'U' is a unit of measure for the front panel, where each 'U' is equal to 1.75 inches.

VMEbus closely follows the IEEE Standard for Mechanical Core Specifications for Microcomputers (IEEE 1101). This specification shows the dimensions for a variety of board sizes (up to 12U x 400 mm), as well as sub-racks and other enclosures. The IEEE 1101 was later superseded by the IEEE 1101.1-1991.

I/O cabling can be routed through the front panel of the module, or through the P2/J2 user defined I/O pins. Furthermore, the VME64x standard allows the use of a rear transition module. The rear transition module cards are defined by the IEEE 1101.11 standard.

Some manufacturers also offer triple height (9U) boards. Strictly speaking, these modules are not supported by the VME64 specification. However, some users choose to mount 3U, 6U and 9U boards into a single sub-rack. Most Eurocard packaging systems will support multiple card sizes in a single chassis. For example, an adapter can be used to install a 6U board into a 9U card slot.

A new specification for 9U x 400mm size Eurocards has been completed by the VITA Standards Organization. It is called the VITA 1.3-1999.

The use of two standard card sizes has proven to be one of the biggest features of VMEbus. Users that have tight space requirements or severe shock & vibration constraints may choose the single height module. Users that have the space can go with the larger and more popular 6U card.

VMEbus Backplanes

VMEbus backplanes are available in lengths between one and twenty-one slots. On standard backplanes, boards are located on 0.8" centers (i.e. 0.8" pitch). There are three general types of backplanes available:

Each of these styles of backplanes are available in 3U and 6U form factors. Furthermore, there are many options available on VMEbus backplanes. Some of the more popular options include:

Multi-crate Operation

The maximum size of all VMEbus backplanes is 21 slots (19" width). The fundamental limits on the maximum length are how much drive current is available on each of the VMEbus boards, and the time delay down the backplane. If more slots are needed, there are generally two ways to handle the problem: (1) use a VMEbus-to-VMEbus bridge card set or (2) use a pair of 'reflective memory' cards. The bus-to-bus bridges essentially allow bus cycles on one backplane to appear on another. The reflective memory cards allow a memory segment on one backplane to appear on another. There are several vendors for each of these types of products.

Conduction Cooled VMEbus Modules

Another popular VMEbus card style is the conduction cooled module. These are used mainly in military and aerospace applications where convection cooling cannot be used. These allow heat to conduct through the printed circuit board or through a conduction plate on the backside. Special expanding card guides then transfer the heat through rails and then out to the chassis.

P1/J1 and P2/J2 Connectors

The VME64x specification describes three connectors for VMEbus modules. These are called the P0/J0, P1/J1 and P2/J2. The 'P' and 'J' nomenclature refers to the PLUG and JACK connectors, which reside on the bus module and backplane respectively.

Originally, all VMEbus products used a 96-pin DIN 41612 connector. These connectors are very reliable, are low cost, and are available from a variety of suppliers. The VME64 and VME64x standards now permit a new 160 pin connector, which is shown in Figure 1. The 160 pin connector has thirty-two additional pins located on both sides of the original DIN 41612 connector. These are designated as the 'z' and 'd' rows. The new connector was added for two reasons:

Four pre-charge pins are provided on the new connector. These form a make-first, break-last connection. This feature is intended for hot-swap boards, and are used to pre-charge bus interface circuitry.

These connectors are available from Harting Electronik and AMP Inc.

The 160 pin connector is completely optional in the VME64 standard. The connector itself is not needed to support any of the newly defined functions. For example, it is not needed to support the new sixty-four bit address and data cycles. However, in VME64x boards and racks the new connector is needed to support additional pins such as +3.3V power and geographical addressing.

The 160 pin connector is designed to allow full forward and backward compatibility: older legacy boards will fit into new backplanes (and vice-versa).

To see the pin assignment and signal descriptions for the P1/J1 and P2/J2 connectors, click here.

For a description of the P2/J2 user defined I/O pins, click here.

Figure 1. Enhanced 160-pin connector.


P0/J0 Connector

The VME64x standard allows the use of a 95 pin P0/J0 connector. This connector is placed between the P1/J1 and P2/J2 connectors.

The P0/J0 connector was added because of the higher I/O demands now placed on VMEbus systems. This is especially true in military and telecom applications. For example, in many applications the use of front panel cables are frowned upon because:

The P0/J0 connector conforms to the IEC 1076-4-101 standard. These connectors are available from AMP Inc., and ERNI components. Unlike the DIN 41612 connector family, they include specifications for mating impedance and maximum capacitance. This makes them an excellent choice for high speed signals.

The VME64x standard also allows the use of custom connectors in the region between the P1/J1 and P2/J2 connectors. For example, a coaxial cable or fiber-optic connector could be used. This practice is not recommended, as the board may not be compliant with VME64x backplanes. However, if a custom connector must be used, then the VME64x standard recommends that the front panel keying mechanism be installed to prevent installation of an incompatible module.

I/O from the P0/J0 connector can be routed:

At first glance it would appear that all of these options on the P0/J0 connector could lead to incompatibilities. However, this problem is no worse than on the P2/J2 user defined pins. Also, VME64x module keying can also be used to insure that VMEbus modules are placed into compatible backplane slots.

To see the pin assignment and signal descriptions for the P0/J0 connector, click here.

Mezzanine Modules

Mezzanine modules are a popular way to customize a VMEbus card. These cards generally fit on top of a common base board. This allows users to 'mix-and-match' the I/O functions that they need. The mezzanine modules have become very popular in recent years. That's because they save a great deal of hardware development time, and inventory. Software development is also faster and less expensive.

While the mezzanine module concept has been around for many years, the VMEbus mezzanine industry has been fragmented because of all of the types of mezzanine cards. This situation has improved steadily as new standards have been adopted. This FAQ will not attempt to describe all of the types of VMEbus mezzanine cards.

There is currently a plethora of mezzanine standards that are available. Currently, there are over 30 types available for VMEbus modules. However, two types of mezzanine modules seem to be gaining a substantial foothold. These are the CMC/PMC and IP (IndustryPack®) bus modules.

For example, the CMC/PMC form factor uses a common mechanical footprint for VME64, Multibus I, Multibus II, Futurebus+ and generic platforms. The CMC (or Common Mezzanine Card) part of the system describes the mechanical form factor, which is shown in Figure 2. Impressed upon the connectors is a local PCI (Peripheral Component Interconnect) bus, hence the name CMC/PMC.

Figure 2. Common Mezzanine Card (CMC) concept.


Where to Obtain Copies of the VMEbus Specification

Copies of the VMEbus specifications are available from a variety of sources. That's because VMEbus has undergone various revisions through different organizations.

ANSI/VITA 1-1994 (VME64), ANSI/VITA 1.1-1997 (VME64x) and Many Others

VMEbus International Trade Association (VITA)
7825 East Gelding Dr., Suite 104
Scottsdale, AZ USA 85260
TEL: (480) 951-8866; FAX: (480) 951-0720

ANSI Approved Versions

American National Standards Institute (ANSI)
11 West 42nd Street
New York, NY USA 10036
TEL: (212) 642-4900; FAX: (212) 398-0023

IEEE 1014-1987 (VMEbus) and IEEE 1101.XX Mechanical Standards

IEEE Service Center
Publications Sales Department
445 Hoes Lane; P.O. Box 1331
Piscataway, NJ USA 08855-1331
TEL: 800-678-4333

Retired and Obsolete Documents

Global Engineering Documents
15 Inverness Way East
Englewood, CO USA 80112
TEL: (303) 792-2181

Additional Information

Application Notes

For a list of VMEbus related application notes, click here.

New VMEbus Equipment Suppliers

A complete list of suppliers for VMEbus modules, backplanes, mechanical hardware, software, interface chips, standards, draft standards, books, training classes, marketing information and other related materials can be obtained from:

VMEbus International Trade Association (VITA)
7825 East Gelding Dr., Suite 104
Scottsdale, AZ USA 85260
TEL: (480) 951-8866; FAX: (480) 951-0720

Used VMEbus Equipment Suppliers

Used VMEbus equipment can be obtained from a variety of sources. The VMEbus USEnet newsgroup (see below) very often carries buy-and-sell classified ad postings. Also, online auction houses (such as ebay) very often have used VMEbus equipment for sale.

VMEbus Software Suppliers

A complete list of VMEbus software suppliers can be obtained from:

Embedded Software Association (ESOFTA)
7825 East Gelding Dr., Suite 104
Scottsdale, AZ USA 85260
TEL: (480) 991-4662; FAX: (480) 951-0720

USEnet Newsgroup

There is a VMEbus USEnet newsgroup at: comp.arch.bus.vmebus. The USEnet newsgroup is an open forum for VMEbus users to discuss problems, products and solutions.

Comments, Questions and Suggestions About this FAQ

This FAQ is maintained and edited by Wade D. Peterson of Silicore Corporation. Comments, questions and suggestions should be directed to wadep@silicore.net.

The editor wishes to express his thanks to the following people for their contribution to this FAQ:

This page last updated: December 5, 2000

© 2000 Wade D. Peterson. All rights reserved.