diff --git a/.appveyor.yml b/.appveyor.yml
new file mode 100644
index 0000000000000000000000000000000000000000..9b09b842ee160424b47301b033dfcf9190a8401f
--- /dev/null
+++ b/.appveyor.yml
@@ -0,0 +1,71 @@
+environment:
+  global:
+    # SDK v7.0 MSVC Express 2008's SetEnv.cmd script will fail if the
+    # /E:ON and /V:ON options are not enabled in the batch script intepreter
+    # See: http://stackoverflow.com/a/13751649/163740
+    CMD_IN_ENV: "cmd /E:ON /V:ON /C .\\appveyor\\run_with_env.cmd"
+
+  matrix:
+    - PYTHON: "C:\\Python27"
+      PYTHON_VERSION: "2.7.x" # currently 2.7.13
+      PYTHON_ARCH: "32"
+
+    - PYTHON: "C:\\Python27-x64"
+      PYTHON_VERSION: "2.7.x" # currently 2.7.13
+      PYTHON_ARCH: "64"
+
+cache:
+  - "%APPDATA%\npm"
+  - node_modules
+  - bower_components
+
+build: off
+deploy: off
+version: "{build}"
+
+install:
+  # If there is a newer build queued for the same PR, cancel this one.
+  # The AppVeyor 'rollout builds' option is supposed to serve the same
+  # purpose but it is problematic because it tends to cancel builds pushed
+  # directly to master instead of just PR builds (or the converse).
+  # credits: JuliaLang developers.
+  - ps: if ($env:APPVEYOR_PULL_REQUEST_NUMBER -and $env:APPVEYOR_BUILD_NUMBER -ne ((Invoke-RestMethod `
+        https://ci.appveyor.com/api/projects/$env:APPVEYOR_ACCOUNT_NAME/$env:APPVEYOR_PROJECT_SLUG/history?recordsNumber=50).builds | `
+        Where-Object pullRequestId -eq $env:APPVEYOR_PULL_REQUEST_NUMBER)[0].buildNumber) { `
+          throw "There are newer queued builds for this pull request, failing early." }
+
+  # Install Python (from the official .msi of http://python.org) and pip
+  - ps: if (-not(Test-Path($env:PYTHON))) { & appveyor\install.ps1 }
+
+  # Prepend newly installed Python to the PATH of this build (this cannot be
+  # done from inside the powershell script as it would require to restart
+  # the parent CMD process).
+  - "SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%"
+
+  # Check that we have the expected version and architecture for Python
+  - "python --version"
+  - "python -c \"import struct; print(struct.calcsize('P') * 8)\""
+
+  # Upgrade to the latest version of pip to avoid it displaying warnings
+  # about it being out of date.
+  - "pip install --disable-pip-version-check --user --upgrade pip"
+  - "pip install --upgrade tox"
+
+  # Install node/npm
+  - ps: Install-Product node $env:7
+  - set PATH=%APPDATA%\npm;%PATH%
+  - npm -g install npm
+  - npm -g install bower
+  - npm -g install grunt-cli
+  - npm install
+  - bower install
+
+test_script:
+  - grunt travis
+  - tox -v --recreate -c tox-win.ini
+
+before_test:
+  - echo Starting Tests
+
+after_test:
+  - echo Finished Tests
diff --git a/readme.md b/readme.md
index 216802c8d33936370788dc67f021274c3868d501..6dffd6ff86a3a51e19be80d8c121e4dd74dd25f5 100644
--- a/readme.md
+++ b/readme.md
@@ -1,5 +1,5 @@
-SickRage [![Build Status](https://travis-ci.org/SickRage/SickRage.svg?branch=develop)](https://travis-ci.org/SickRage/SickRage) [![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/SickRage/SickRage.svg)](http://isitmaintained.com/project/SickRage/SickRage "Average time to resolve an issue") [![Percentage of issues still open](http://isitmaintained.com/badge/open/SickRage/SickRage.svg)](http://isitmaintained.com/project/SickRage/SickRage "Percentage of issues still open") [![Coverage Status](https://coveralls.io/repos/SickRage/SickRage/badge.svg?branch=develop&service=github)](https://coveralls.io/github/SickRage/SickRage?branch=develop)  
-=====
+SickRage [![Build Status](https://travis-ci.org/SickRage/SickRage.svg?branch=master)](https://travis-ci.org/SickRage/SickRage) [![Build status](https://ci.appveyor.com/api/projects/status/s8bb0iqroecnhya2/branch/master?svg=true)](https://ci.appveyor.com/project/miigotu/sickrage/branch/master) [![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/SickRage/SickRage.svg)](http://isitmaintained.com/project/SickRage/SickRage "Average time to resolve an issue") [![Percentage of issues still open](http://isitmaintained.com/badge/open/SickRage/SickRage.svg)](http://isitmaintained.com/project/SickRage/SickRage "Percentage of issues still open") [![Coverage Status](https://coveralls.io/repos/SickRage/SickRage/badge.svg?branch=master&service=github)](https://coveralls.io/github/SickRage/SickRage?branch=master)
+====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
 Automatic Video Library Manager for TV Shows. It watches for new episodes of your favorite shows, and when they are posted it does its magic.
 
 #### Features
diff --git a/tox-win.ini b/tox-win.ini
new file mode 100644
index 0000000000000000000000000000000000000000..3e854da0f83a5e819d82f10dadd7aeac8a92173f
--- /dev/null
+++ b/tox-win.ini
@@ -0,0 +1,16 @@
+[tox]
+skipsdist = true
+envlist = py27
+
+[testenv:py27]
+envdir = {toxworkdir}/tox
+deps =
+    coveralls
+    nose
+    rednose
+    mock
+    vcrpy-unittest
+    pytz
+
+commands =
+    nosetests -c nose.cfg --nocapture