diff --git a/.travis.yml b/.travis.yml
index 17549e42ab4320f4f25257c4cea5f903fad7467a..3f26b319a8188d21135d4ec64787abb6fa8d29ec 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,3 +1,6 @@
+#=============================================================================
+# Project settings
+#=============================================================================
 language: python
 
 # Only build master and develop on push; do not build every branch.
@@ -6,7 +9,9 @@ branches:
     - master
     - develop
 
-# Construct build matrix
+#=============================================================================
+# Build matrix
+#=============================================================================
 python:
   - 2.6
   - 2.7
@@ -17,14 +22,23 @@ env:
   - TEST_SUITE=doc
 
 matrix:
+  # Flake8 and Sphinx no longer support Python 2.6, and one run is enough.
   exclude:
   - python: 2.6
-    # Flake8 no longer supports Python 2.6
     env: TEST_SUITE=flake8
   - python: 2.6
-    # Sphinx no longer supports Python 2.6
     env: TEST_SUITE=doc
+  # Explicitly include an OS X build with homebrew's python.
+  # Works around Python issues on Travis for OSX, described here:
+  # http://blog.fizyk.net.pl/blog/running-python-tests-on-traviss-osx-workers.html
+  include:
+  - os: osx
+    language: generic
+    env: TEST_SUITE=unit
 
+#=============================================================================
+# Environment
+#=============================================================================
 # Use new Travis infrastructure (Docker can't sudo yet)
 sudo: false
 
@@ -32,9 +46,18 @@ sudo: false
 addons:
   apt:
     packages:
+      - python
       - graphviz
       - libyaml-dev
 
+# Work around Travis's lack of support for Python on OSX
+before_install:
+  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi
+  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew ls --versions python > /dev/null || brew install python; fi
+  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew ls --versions gcc    > /dev/null || brew install gcc;    fi
+  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then virtualenv venv; fi
+  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then source venv/bin/activate; fi
+
 # Install various dependencies
 install:
   - pip install --upgrade coveralls
@@ -50,11 +73,17 @@ before_script:
   # Need this to be able to compute the list of changed files
   - git fetch origin develop:develop
 
+#=============================================================================
+# Building
+#=============================================================================
 script: share/spack/qa/run-$TEST_SUITE-tests
 
 after_success:
   - if [[ $TEST_SUITE == unit && $TRAVIS_PYTHON_VERSION == 2.7 ]]; then coveralls; fi
 
+#=============================================================================
+# Notifications
+#=============================================================================
 notifications:
   email:
     recipients: tgamblin@llnl.gov