diff --git a/README b/README
deleted file mode 100644
index b5f810a..0000000
--- a/README
+++ /dev/null
@@ -1,196 +0,0 @@
-OpenFlow Testing Framework
-July, 2010
-Last updated January 2013
-
-Copyright (c) 2010 The Board of Trustees of The Leland Stanford 
-Junior University
-
-License
-+++++++
-
-    The software included with this distribution is subject to the
-    OpenFlow Switching License as given in the included file LICENSE.
-    Details are also available at:
-
-    http://www.openflow.org/wp/legal
-
-    Other software referenced in this distribution is subject to its
-    respective license.
-
-Introduction
-++++++++++++
-
-    This test framework is meant to exercise a candidate OpenFlow
-    switch (the device/switch under test, DUT or SUT).  It provides a
-    connection like a controller to which the switch connects and it 
-    controls data plane ports, sending and receiving packets, which 
-    should be connected to the switch.
-
-    For information on writing new tests or making improvements to
-    the test framework see the file DEVELOPING.
-
-Getting OFTest
-++++++++++++++
-
-    You can check out OFTest with git with the following command:
-
-    git clone git://github.com/floodlight/oftest
- 
-Quick Start
-+++++++++++
-
-    You need to have Python and Scapy installed on your system.
-    See 'Pre-requisites' below.
-
-    Make sure your switch is running and trying to connect to a
-    controller on the machine where you're running oft (normally port
-    6653).  See below regarding run_switch.py for a script that starts 
-    up a software switch on the test host.
-
-    Currently, switches must be running version 1.0 of OpenFlow. 
-
-      # git clone git://github.com/floodlight/oftest
-      # cd oftest
-         Make sure the switch you want to test is running --
-         see (4) below for the reference switch example.
-      # ./oft --list
-      # sudo ./oft basic.Echo
-      # sudo ./oft --verbose --log-file=""
-      # sudo ./oft basic -i 1@veth1 -i 2@veth3
-
-Longer Start
-++++++++++++
-
-    1.  Pre-requisites:
-        * An OF switch instance to test (see 4 below)
-        * Root privilege on host running oft
-        * Switch running OpenFlow 1.0 and attempting to connect 
-          to a controller on the machine running oft.
-        * Python 2.5 or 2.6.  You can run platforms using eth interfaces
-          with Python 2.4.  Python 2.7 may work.
-        * oftest checked out (called <oftest> here)
-        * scapy installed:  http://www.secdev.org/projects/scapy/
-          'sudo apt-get install scapy' should work on Debian.
-        * pypcap installed:  http://code.google.com/p/pypcap/ (optional)
-          'sudo apt-get install python-pypcap' should work on Debian.
-          Tests using VLAN tags may fail without pypcap.
-        * tcpdump installed (optional, but scapy will complain if it's
-          not there)
-        * Doxygen and doxypy for document generation (optional)
-        * lint for source checking (optional)
-
-    2.  Start the switch to test
-        The switch must be running and actively attempting to 
-        connect to a controller on the test host at the port number
-        used by oft (6653 by default, or specified as --port=<n> as
-        an argument to oft).
-
-        If you're new to the test environment and want to check its 
-        sanity, you can do the following.  This requires that
-        your host kernel supports virtual ethernet interfaces.  This
-        is best done in a window separate from where you will run oft.
- 
-        4A. Check out openflow (preferably at the same level as oftest):
-            git clone git://openflowswitch.org/openflow.git
-        4B. cd openflow; ./boot.sh; ./configure; make
-        4C. cd ../oftest
-        4D. Run the switch startup script:
-            sudo ./run_switch.py; Now you can run oft (see below).
-        4F. Use --help to see command line switches.  If you use a port
-            number other than the default, make sure you use the same
-            one for the switch as for oft.
-        4E. Use control-C to terminate the switch daemons.
-        4F. To clean up the virtual ethernet interfaces, use
-            sudo rmmod veth
-
-        New tools allow you to run an OVS instance as well.  See
-        oftest/tools/ovs-ctl.  You will need to install a version of
-        openvswitch.  See http://openvswitch.org/.
-
-    3.  Run oft (requires sudo to control the dataplane)
-        cd <oftest>
-        sudo ./oft --help
-
-Important Notes
-+++++++++++++++
-
-    1.  If you're running into issues with transactions, and it appears that
-    OpenFlow messages aren't quite right, start by looking at any length
-    fields in the packets.  You can use wireshark on the loopback interface
-    as well as the dataplane ethernet interfaces.
-
-    2.  If tests dealing with VLANs fail unexpectedly then try installing
-    pypcap (see Longer Start above).
-
-Platforms
-+++++++++
-
-    The "platform" is a configuration file (written in Python) that
-    tells OFTest how to send packets to and receive packets from the
-    dataplane of the switch.
-    
-    The default platform uses Linux ethernet interfaces and is configured with
-    the -i option. Pass the option as "-i ofport@interface", for example
-    "-i 1@eth1". If no -i options are given the the default configuration
-    uses veths and is compatible with the refrence switch.
-
-    You can add your own platform, say gp104, by adding a file gp104.py to the
-    platforms directory that defines the function platform_config_update and then
-    use the parameter --platform=gp104 on the command line. You can also use the
-    --platform-dir option to change which directory is searched.
-
-    IMPORTANT: That file should define a function platform_config_update which
-    takes a configuration dictionary as an argument and updates it for the
-    current run.  In particular, it should set up config["port_map"] with
-    the proper map from OF port numbers to OF interface names.
-
-Helpful Note: Recovering From Crash
-+++++++++++++++++++++++++++++++++++
-
-    If the test script, oft, becomes unresponsive, you may find that
-    ^C does not break out of the script.  In this case you have two
-    options:
-
-    * Use ^Z to interrupt the script and return to the shell prompt.
-    * Start another terminal window to the same machine.
-
-    In either case, you then need to kill the process that is hung.
-    Use the following commands:
-
-        me@host> ps aux | grep oft
-        root         4  0.0      S<   Jul07   0:00 [ksoftirqd/0]
-        ...
-        root     14066  3.2      Tl   09:27   0:00 python ./oft ...
-        me       14074  0.0      R+   09:28   0:00 grep oft
-
-        me@host> sudo kill -9 14066
-
-    where 14066 is the process ID of the hung process.  (Replace it
-    with the PID for your process.)
-
-    This is still preliminary work and there are bugs in the framework
-    that need to be ironed out.  Please report any issues to
-    dtalayco@stanford.edu.
-
-Using CentOS/RHEL
-+++++++++++++++++
-
-    CentOS/RHEL have two challenges:  they are very tied to Python 2.4
-    (and Scapy requires Python 2.5 for its latest version) and they
-    require a kernel upgrade to use veth pairs for local platform
-    testing.  
-
-    If you only need to control eth interfaces for a remote platform,
-    you can use CentOS/RHEL without major disruption.  The key is to 
-    download scapy-1.2 from the following link:
-
-    wget http://hg.secdev.org/scapy/raw-file/v1.2.0.2/scapy.py
-
-    See: http://www.dirk-loss.de/scapy-doc/installation.html#installing-scapy-v1-2
-    for more info.
-
-    Copy scapy.py to /usr/lib/python2.4/site-packages
-
-    If you hit an error related to importing scapy.all, you just need
-    to change the import to refer to scapy (not scapy.all).  See
-    examples in parse.py for example.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..8790d26
--- /dev/null
+++ b/README.md
@@ -0,0 +1,155 @@
+OFTest OpenFlow Testing Framework
+
+---
+
+# Introduction
+
+OFTest is a Python based OpenFlow switch test framework and collection of test cases. It is based on unittest, which is included in the standard Python distribution.
+
+This document is meant to provide an introduction to the framework, discuss the basics of running tests and to provide examples of how to add tests.
+
+For information on writing new tests or making improvements to the test framework see the file [DEVELOPING](DEVELOPING.md).
+
+---
+
+# How It Works
+
+OFTest is meant to exercise a candidate OpenFlow switch (henceforth the device under test (DUT) or switch under test (SUT)). Below is the "horseshoe" disagram for OFTest that demonstrates the interaction between OFTest and SUT.
+
+![OFTest Architecture](docs/images/oftest_arch.png)
+
+As you can see, the SUT is in the middle. The test fixture, the OFTest server, connects to both the control plane and the data plane of the SUT. It coordinates OpenFlow commands with data plane stimulus and monitoring.
+
+Some additional info on OFTest:
+
+ * OFTests starts with the very basics of OpenFlow, but provides a framework for development of more complicated tests.
+ * It was used as the primary vehicle for validating OpenFlow 1.1 (see the `oft-1.1` branch in the Git repository).
+ * A prototype implementation of an OpenFlow 1.1 switch, OFPS, was implemented in the same framework as OFTest (also in the `oft-1.1` branch).
+
+---
+
+# Getting OFTest
+
+You can check out OFTest with git with the following command:
+
+    git clone git://github.com/floodlight/oftest
+
+---
+
+# Quick Start
+
+You need to have Python and Scapy installed on your system. See 'Pre-requisites' below.
+
+Make sure your switch is running and trying to connect to a controller on the machine where you're running oft (normally port `6653`).
+
+    cd oftest
+    ./oft --list
+    sudo ./oft basic.Echo
+    sudo ./oft --verbose --log-file=""
+    sudo ./oft basic -i 1@veth1 -i 2@veth3
+
+---
+
+# Extending OFTest
+
+We welcome any kind of patch. Send all patches as pull requests to `floodlight/oftest`. We recommend you check out the [CONTRIBUTING.md] document for ideas and requirements around patches.
+
+---
+
+# Longer Start
+
+## Configure Pre-requisites
+
+The following software is required to run OFTest:
+
+ * Python 2.7
+ * Scapy
+ * pypcap (optional - VLAN tests will fail without this)
+ * tcpdump (optional - Scapy will complain if it's missing)
+ * Doxygen and doxypy (optional - for documentation generation)
+ * PyLint (optional - for source checking)
+
+Most of these can be installed using your package manager. For example:
+
+    sudo yum install python  # for RHEL-based distros
+    sudo apt-get install scapy  # for Debian-based distros
+
+You will also need an OpenFlow-compliant switch instance to test. This switch must be running OpenFlow 1.0+ and attempting to connect to a controller on the machine running `oft`.
+
+Finally root/sudo privilege is required on the host, in order to run `oft`.
+
+## Start the Switch
+
+The switch must be running and actively attempting to connect to a controller on the test host at the port number used by oft (`6653` by default, or specified as `--port=<n>` as an argument to oft).
+
+If you're new to the test environment and want to check its sanity, you can do the following. This requires that your host kernel supports virtual Ethernet interfaces. This is best done in a window separate from where you will run oft.
+
+ 1. Check out OpenFlow (preferably at the same level as oftest):
+
+        git clone git://openflowswitch.org/openflow.git
+
+ 2. Build OpenFlow:
+
+        cd openflow
+        ./boot.sh
+        ./configure; make
+        cd ../oftest
+
+ 4. Run the switch startup script:
+
+        sudo ./run_switch.py
+
+## Run OFTest
+
+Now you can run `oft` (see below). Use `--help` to see command line switches.
+
+    cd <oftest>
+    sudo ./oft --help
+
+If you use a port number other than the default, make sure you use the same one for the switch as for oft. For example, to run the `basic` collection of tests:
+
+    sudo ./oft basic -i 1@veth1 -i 2@veth3
+
+Once you're finished, use `Ctrl-C` to terminate the switch daemons. To clean up the virtual ethernet interfaces, use:
+
+    sudo rmmod veth
+
+New tools allow you to run an OVS instance as well. See `oftest/tools/ovs-ctl`. You will need to install a version of [Open vSwitch](http://openvswitch.org/) for this to work.
+
+---
+
+# Configuring OFTest
+
+## Platforms
+
+The "platform" is a configuration file (written in Python) that tells OFTest how to send packets to and receive packets from the dataplane of the switch.
+
+### `eth`
+
+The default platform, `eth`, uses Linux Ethernet interfaces and is configured with the `-i` option (or `--interface`). Pass the option as `-i ofport@interface`, for example `-i 1@eth1`. If no `-i` options are given the the default configuration uses vEths for backwards-compatibility with the original OpenFlow reference switch.
+
+### `remote`
+
+Another common platform, `remote`, provides support for testing of switches on a different host. This can be useful for cases where interfaces are not available on one host (i.e. they're not bound to a Linux interface driver) or where OFTest cannot run on the same host (unsupported OS, missing software, etc.).
+
+This can be enable by modifying the `platforms/remote.py` file to point to 4 NICs on the host running OFTest, like so:
+
+    remote_port_map = {
+        23 : "eth2", # OpenFlow port 23 of the switch is connected to physical port on the server eth2
+        24 : "eth3", # OpenFlow port 24 of the switch is connected to physical port on the server eth3
+        25 : "eth4",
+        26 : "eth5"
+    }
+
+## Passing Parameters to Tests
+
+There is a facility for passing test-specific parameters into tests that works as follows. On the command line, give the parameter
+
+    --test-params="key1=17;key2=True"
+
+Currently the keys used control whether VLAN tagged packets are used and whether VLAN tag stripping should be included as an action. These parameters include:
+
+    vid=N: Use tagged packets with VLAN id of N
+    strip_vlan=bool: If True, add the strip VLAN tag action to the packet test
+
+---
