diff --git a/tools/xen/scripts/mkxva b/tools/xen/scripts/mkxva
new file mode 100755
index 0000000..a595453
--- /dev/null
+++ b/tools/xen/scripts/mkxva
@@ -0,0 +1,366 @@
+#!/bin/bash
+#
+# Copyright (c) 2011 Citrix Systems, Inc.
+# Copyright 2011 OpenStack LLC.
+# Copyright (C) 2011 Nicira, Inc
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+#
+
+set -eu
+
+set -o xtrace
+
+VBOX_IMG=/output/packages/vbox-img
+
+usage() {
+    cat >&2 <<EOF
+$0 -o <output filenames> -t <types> -x <xml files> <fs-staging-dir> <fs-size-MiB> <tmpdir>
+  -o: Colon-separated list of output filenames (one for each type).
+  -p: Create a disk label and partition within the output image
+  -t: Colon-separated list of types of output file.  xva and ovf supported.
+  -x: XML filenames (one for each type)
+
+EOF
+    exit 1
+}
+
+# parse cmdline
+
+OPT_USE_PARTITION=
+OPT_TYPES=
+OPT_OUTPUT_FILES=
+OPT_XML_FILES=
+
+while getopts o:pt:x: o
+do case "$o" in
+    o)    OPT_OUTPUT_FILES=$(echo "$OPTARG" | sed -e 's/\s*:\s*/ /g')
+        ;;
+    p)    OPT_USE_PARTITION=1
+        ;;
+    t)    OPT_TYPES=$(echo "$OPTARG" | sed -e 's/\s*:\s*/ /g')
+        ;;
+    x)    OPT_XML_FILES=$(echo "$OPTARG" | sed -e 's/\s*:\s*/ /g')
+        ;;
+    [?])  usage
+        ;;
+    esac
+done
+shift $((OPTIND-1))
+
+[ $# -ne 3 ] && usage
+FS_STAGING="$1"
+FS_SIZE_MIB="$2"
+TMPDIR="$3"
+
+if [ "$UID" = "0" ]
+then
+  SUDO=
+else
+  SUDO=sudo
+fi
+
+if [ "$FS_SIZE_MIB" = "0" ]
+then
+    # Just create a dummy file.  This allows developers to bypass bits of
+    # the build by setting the size to 0.
+    touch $OPT_OUTPUT_FILES
+    exit 0
+fi
+
+# create temporary files and dirs
+FS_TMPFILE=$(mktemp "$TMPDIR/mkxva-fsimg-XXXXX")
+XVA_TARBALL_STAGING=$(mktemp -d "$TMPDIR/mkxva-tarball-staging-XXXXX")
+OVF_STAGING=$(mktemp -d "$TMPDIR/mkxva-ovf-staging-XXXXX")
+
+# Find udevsettle and udevtrigger on this installation
+if [ -x "/sbin/udevsettle" ] ; then
+    UDEVSETTLE="/sbin/udevsettle --timeout=30"
+elif [ -x "/sbin/udevadm" ] ; then
+    UDEVSETTLE='/sbin/udevadm settle'
+else
+    UDEVSETTLE='/bin/true'
+fi
+
+if [ -x "/sbin/udevtrigger" ] ; then
+    UDEVTRIGGER=/sbin/udevtrigger
+elif [ -x "/sbin/udevadm" ] ; then
+    UDEVTRIGGER='/sbin/udevadm trigger'
+else
+    UDEVTRIGGER=
+fi
+
+# CLEAN_ variables track devices and mounts that must be taken down
+# no matter how the script exits.  Loop devices are vulnerable to
+# exhaustion so we make every effort to remove them
+
+CLEAN_KPARTX=
+CLEAN_LOSETUP=
+CLEAN_MOUNTPOINT=
+
+cleanup_devices () {
+    if [ -n "$CLEAN_MOUNTPOINT" ] ; then
+        echo "Mountpoint $CLEAN_MOUNTPOINT removed on abnormal exit"
+        $SUDO umount "$CLEAN_MOUNTPOINT" || echo "umount failed"
+        rmdir "$CLEAN_MOUNTPOINT" || echo "rmdir failed"
+    fi
+    if [ -n "$CLEAN_KPARTX" ] ; then
+        echo "kpartx devices for $CLEAN_KPARTX removed on abnormal exit"
+        $SUDO kpartx -d "$CLEAN_KPARTX" || echo "kpartx -d failed"
+    fi
+    if [ -n "$CLEAN_LOSETUP" ] ; then
+        echo "Loop device $CLEAN_LOSETUP removed on abnormal exit"
+        $SUDO losetup -d "$CLEAN_LOSETUP" # Allow losetup errors to propagate
+    fi
+}
+
+trap "cleanup_devices" EXIT
+
+make_fs_inner () {
+    local staging="$1"
+    local output="$2"
+    local options="$3"
+    CLEAN_MOUNTPOINT=$(mktemp -d "$TMPDIR/mkfs-XXXXXX")
+
+    # copy staging dir contents to fs image
+    $SUDO mount $options "$output" "$CLEAN_MOUNTPOINT"
+    $SUDO tar -C "$staging" -c . | tar -C "$CLEAN_MOUNTPOINT" -x
+    $SUDO umount "$CLEAN_MOUNTPOINT"
+    rmdir "$CLEAN_MOUNTPOINT"
+    CLEAN_MOUNTPOINT=
+}
+
+# Turn a staging dir into an ext3 filesystem within a partition
+make_fs_in_partition () {
+    local staging="$1"
+    local output="$2"
+
+    # create new empty disk
+    dd if=/dev/zero of="$output" bs=1M count=$FS_SIZE_MIB
+    # Set up a loop device on the empty disk image
+    local loopdevice=$($SUDO losetup -f)
+    $SUDO losetup "$loopdevice" "$output"
+    CLEAN_LOSETUP="$loopdevice"
+    # Create a partition table and single partition.
+    # Start partition at sector 63 to allow space for grub
+    cat <<EOF
+Errors from sfdisk below are expected because the new disk is uninitialised
+  Expecting: sfdisk: ERROR: sector 0 does not have an msdos signature
+  Expecting: /dev/loop0: unrecognized partition table type
+EOF
+    $SUDO sfdisk -uS "$CLEAN_LOSETUP" <<EOF
+63 - - *
+EOF
+
+    # kpartx creates a device for the new partition
+    # in the form /dev/mapper/loop1p1
+    $SUDO kpartx -av "$CLEAN_LOSETUP"
+    CLEAN_KPARTX="$CLEAN_LOSETUP"
+    # Wait for the device to appear
+    $UDEVTRIGGER
+    $UDEVSETTLE  || echo "udev settle command return code non-zero"
+    # Infer the name of the partition device
+    local partition="${CLEAN_LOSETUP/dev/dev/mapper}p1"
+    # Set permissive privileges on the device
+    $SUDO chmod 0777 "$partition"
+    # Make an ext3 filesystem on the partition
+    /sbin/mkfs.ext3 -I 128 -m0 -F "$partition"
+    /sbin/e2label "$partition" vpxroot
+    make_fs_inner "$staging" "$partition" ""
+    
+    # Now run grub on the image we've created
+    CLEAN_MOUNTPOINT=$(mktemp -d "$TMPDIR/mkfs-XXXXXX")
+
+    # copy Set up[ grub files prior to installing grub within the image
+    $SUDO mount "$partition" "$CLEAN_MOUNTPOINT"
+    $SUDO cp $CLEAN_MOUNTPOINT/usr/share/grub/i386-redhat/* "$CLEAN_MOUNTPOINT/boot/grub"
+    kernel_version=$($SUDO chroot "$CLEAN_MOUNTPOINT" rpm -qv kernel | sed -e 's/kernel-//')
+    kernel_version_xen=$($SUDO chroot "$CLEAN_MOUNTPOINT" rpm -qv kernel-xen | sed -e 's/kernel-xen-//')
+    $SUDO cat > "$CLEAN_MOUNTPOINT/boot/grub/grub.conf" <<EOF
+default 0
+timeout 2
+
+title vmlinuz-$kernel_version (HVM)
+        root (hd0,0)
+        kernel /boot/vmlinuz-$kernel_version ro root=LABEL=vpxroot
+        initrd /boot/initrd-$kernel_version.img
+
+title vmlinuz-${kernel_version_xen}xen (PV)
+        root (hd0,0)
+        kernel /boot/vmlinuz-${kernel_version_xen}xen ro root=LABEL=vpxroot console=xvc0
+        initrd /boot/initrd-${kernel_version_xen}xen.img
+EOF
+
+    $SUDO umount "$CLEAN_MOUNTPOINT"
+    CLEAN_MOUNTPOINT=
+    
+    # Grub expects a disk with name /dev/xxxx with a first partition
+    # named /dev/xxxx1, so we give it what it wants using symlinks
+    # Note: /dev is linked to the real /dev of the build machine, so
+    # must be cleaned up
+    local disk_name="/dev/osxva$$bld"
+    local disk_part1_name="${disk_name}1"
+    rm -f "$disk_name"
+    rm -f "$disk_part1_name"
+    ln -s "$CLEAN_LOSETUP" "$disk_name"
+    ln -s "$partition" "$disk_part1_name"
+    
+    # Feed commands into the grub shell to setup the disk
+    grub --no-curses --device-map=/dev/null <<EOF
+device (hd0) $disk_name
+setup (hd0) (hd0,0)
+quit
+EOF
+    
+    # Cleanup
+    rm -f "$disk_name"
+    rm -f "$disk_part1_name"
+    $SUDO kpartx -dv "$CLEAN_KPARTX"
+    CLEAN_KPARTX=
+    $SUDO losetup -d "$CLEAN_LOSETUP"
+    CLEAN_LOSETUP=
+}
+
+# turn a staging dir into an ext3 filesystem image
+make_fs () {
+    local staging="$1"
+    local output="$2"
+
+    # create new empty fs
+    dd if=/dev/zero of="$output" bs=1M count=0 seek=$FS_SIZE_MIB
+    /sbin/mkfs.ext3 -m0 -F "$output"
+    /sbin/e2label "$output" vpxroot
+    make_fs_inner "$staging" "$output" "-oloop"
+}
+
+
+# split a virtual disk image into the format expected inside an xva file
+splitvdi () {
+    local diskimg="$1"
+    local outputdir="$2"
+    local rio="$3"
+
+    local n_bytes=$(stat --printf=%s "$diskimg")
+    local n_meg=$((($n_bytes+$((1024*1024 -1)))/$((1024*1024))))
+    local i=0
+    while [ $i -lt $n_meg ] ; do 
+	if [ $rio -eq 0 ] ; then
+		local file="$outputdir"/chunk-$(printf "%08d" $i)
+		dd if="$diskimg" of="$file" skip=$i bs=1M count=1 2>/dev/null
+		gzip "$file"
+	else
+		local file="$outputdir"/$(printf "%08d" $i)
+	        dd if="$diskimg" of="$file" skip=$i bs=1M count=1 2>/dev/null
+		local chksum=$(sha1sum -b "$file")
+		echo -n "${chksum/ */}" > "$file.checksum"
+	fi
+	i=$(($i + 1))
+    done
+}
+
+if [ -n "$OPT_USE_PARTITION" ] ; then
+    make_fs_in_partition "$FS_STAGING" "$FS_TMPFILE"
+else
+    make_fs "$FS_STAGING" "$FS_TMPFILE"
+fi
+
+VDI_SIZE=$(stat --format=%s "$FS_TMPFILE")
+
+make_xva () {
+    local output_file="$1"
+    local xml_file="$2"
+    local subdir
+    local rio
+
+    if [[ `cat $xml_file` =~ "<member>\s*<name>class</name>\s*<value>VDI</value>\s*</member>\s*<member>\s*<name>id</name>\s*<value>(Ref:[0-9]+)</value>" ]]
+    then
+        # it's a rio style xva
+        subdir="${BASH_REMATCH[1]}";
+        rio=1
+    else
+        # it's a geneva style xva
+        subdir="xvda"
+        rio=0
+    fi
+
+    cp "$xml_file" "$XVA_TARBALL_STAGING"/ova.xml
+    sed -i -e "s/@VDI_SIZE@/$VDI_SIZE/" "$XVA_TARBALL_STAGING"/ova.xml
+    mkdir "$XVA_TARBALL_STAGING/$subdir"
+    splitvdi "$FS_TMPFILE" "$XVA_TARBALL_STAGING/$subdir" "$rio"
+    TARFILE_MEMBERS=$(cd "$XVA_TARBALL_STAGING" && echo ova.xml $subdir/*)
+    tar -C "$XVA_TARBALL_STAGING" --format=v7 -c $TARFILE_MEMBERS -f "$output_file.tmp"
+    mv "$output_file.tmp" "$output_file"
+}
+
+make_ovf () {
+    local output_dir="$1"
+    local xml_file="$2"
+    local output_base=$(basename "$output_dir")
+    local disk="$output_dir/${output_base}.vmdk"
+    local manifest="$output_dir/${output_base}.mf"
+    local ovf="$output_dir/${output_base}.ovf"
+
+    mkdir -p "$output_dir"
+    rm -f "$disk"
+    $VBOX_IMG convert --srcfilename="$FS_TMPFILE" --dstfilename="$disk" \
+        --srcformat RAW --dstformat VMDK --variant Stream
+    chmod 0644 "$disk"
+
+    local n_bytes=$(stat --printf=%s "$disk")
+    cp "$xml_file" "$ovf"
+    sed -i -e "s/@MKXVA_DISK_FULLSIZE@/$VDI_SIZE/" "$ovf"
+    sed -i -e "s/@MKXVA_DISK_SIZE@/$n_bytes/" "$ovf"
+    sed -i -e "s/@MKXVA_DISK_MIB_SIZE@/$FS_SIZE_MIB/" "$ovf"
+    sed -i -e "s/@MKXVA_DISK_FILENAME@/${output_base}.vmdk/" "$ovf"
+
+    for to_sign in "$ovf" "$disk"
+    do
+	local sha1_sum=$(sha1sum "$to_sign" | cut -d' ' -f1)
+	echo "SHA1($(basename "$to_sign"))= $sha1_sum" >> $manifest
+    done
+}
+
+output_files="$OPT_OUTPUT_FILES"
+xml_files="$OPT_XML_FILES"
+# Iterate through the type list creating the relevant VMs
+for create_type in $OPT_TYPES
+do
+    # Shift one parameter from the front of the lists
+    create_output_file="${output_files%% *}"
+    output_files="${output_files#* }"
+    create_xml_file="${xml_files%% *}"
+    xml_files="${xml_files#* }"
+    echo "Creating $create_type appliance $create_output_file using metadata file $create_xml_file"
+
+    case "$create_type" in
+	xva)
+	    make_xva "$create_output_file" "$create_xml_file"
+	    ;;
+	ovf)
+	    make_ovf "$create_output_file" "$create_xml_file"
+	    ;;
+	*)
+	    echo "Unknown VM type '$create_type'"
+	    exit 1
+	    ;;
+    esac
+
+done
+
+
+# cleanup
+if [ -z "${DO_NOT_CLEANUP:-}" ] ; then 
+    rm -rf "$XVA_TARBALL_STAGING"
+    rm -f "$FS_TMPFILE"
+fi
