diff --git a/_plugins/kramdown-with-pygments/README.md b/_plugins/kramdown-with-pygments/README.md
new file mode 100644
index 0000000..9663c42
--- /dev/null
+++ b/_plugins/kramdown-with-pygments/README.md
@@ -0,0 +1,70 @@
+Kramdown with Pygments
+========
+A Jekyll plugin that enables Pygments syntax highlighting for Kramdown-parsed fenced code blocks.
+Heavily based on [krampygs](https://github.com/navarroj/krampygs), but refactored to make it work with Jekyll 2.*.
+
+In the standard setup, Jekyll Kramdown only works with Pygments for syntax highlighting
+when you use Liquid tags. This plugin makes Kramdown also use Pygments when using 
+fenced code blocks. That way you can use more Markdown and less Liquid. Yay!
+
+## Usage
+
+* Clone this project into your `_plugins` directory.
+* Add the following lines to your `_config.yml`
+
+```yaml
+markdown: KramdownPygments
+```
+
+Fenced code blocks can now be syntax highlighted using the power of Pygments.
+
+
+    ~~~php
+    print "Hello World"
+    ~~~
+ 
+
+The same goes for inline code:
+
+    You could also do something like this: `var foo = 'bar'`{:.language-javascript}. Amazing!
+
+## Setting the default language
+If you don't want to set the language for inline code blocks like that every time, 
+you can define a global default language for the entire site in your `_config.yml`
+
+```yaml
+kramdown:
+  default_lang: php
+```
+
+If you want to override that for a single page, add the following at the top of 
+that page, but below the front-matter
+
+```
+{::options kramdown_default_lang="php" /}
+```
+
+## Options
+This plugin supports all options that the original kramdown converter supports:
+
+```yaml
+kramdown:
+  auto_ids: true
+  footnote_nr: 1
+  entity_output: as_char
+  toc_levels: 1..6
+  smart_quotes: lsquo,rsquo,ldquo,rdquo
+  input: GFM
+```
+
+## Tested with
+
+* kramdown 1.4.0
+* pygments.rb 0.6.0
+* jekyll 2.1.1
+* ruby 2.0.0p451
+
+## Thanks
+
+This plugin is heavily based on [krampygs](https://github.com/navarroj/krampygs).
+Thanks to [@navarroj](https://github.com/navarroj) for developing the original plugin.
diff --git a/_plugins/kramdown-with-pygments/kramdown_pygments.rb b/_plugins/kramdown-with-pygments/kramdown_pygments.rb
new file mode 100644
index 0000000..74f279a
--- /dev/null
+++ b/_plugins/kramdown-with-pygments/kramdown_pygments.rb
@@ -0,0 +1,92 @@
+# We define the an additional option for the kramdown parser to look for
+module Kramdown
+  module Options
+      define(:kramdown_default_lang, Symbol, nil, <<EOF)
+Sets the default language for highlighting code blocks
+
+If no language is set for a code block, the default language is used
+instead. The value has to be one of the languages supported by pygments
+or nil if no default language should be used.
+
+Default: nil
+Used by: PygmentsHtml converter
+EOF
+  end
+end
+
+# This class is a plugin for kramdown, to make it use pygments instead of coderay
+# It has nothing to do with Jekyll, it is simply used by the custom converter below
+module Kramdown
+  module Converter
+    class PygmentsHtml < Html
+
+      begin
+        require 'pygments'
+      rescue LoadError
+        STDERR.puts 'You are missing a library required for syntax highlighting. Please run:'
+        STDERR.puts '  $ [sudo] gem install pygments'
+        raise FatalException.new("Missing dependency: Pygments")
+      end
+
+      def convert_codeblock(el, indent)
+        attr = el.attr.dup
+        lang = extract_code_language!(attr) || @options[:kramdown_default_lang]
+        code = pygmentize(el.value, lang)
+        code_attr = {}
+        code_attr['class'] = "language-#{lang}" if lang
+        "#{' '*indent}<div class=\"highlight\"><pre#{html_attributes(attr)}><code#{html_attributes(code_attr)}>#{code}</code></pre></div>\n"
+      end
+
+      def convert_codespan(el, indent)
+        attr = el.attr.dup
+        lang = extract_code_language!(attr) || @options[:kramdown_default_lang]
+        code = pygmentize(el.value, lang)
+        if lang
+          attr['class'] = "highlight"
+          if attr.has_key?('class')
+            attr['class'] += " language-#{lang}"
+          else
+            attr['class'] = "language-#{lang}"
+          end
+        end
+        "<code#{html_attributes(attr)}>#{code}</code>"
+      end
+      
+      def pygmentize(code, lang)
+        if lang
+          Pygments.highlight(code,
+            :lexer => lang,
+            :options => { :startinline => true, :encoding => 'utf-8', :nowrap => true })
+        else
+          escape_html(code)
+        end
+      end
+    end
+  end
+end
+
+# This class is the actual custom Jekyll converter.
+class Jekyll::Converters::Markdown::KramdownPygments
+
+  def initialize(config)
+    require 'kramdown'
+    @config = config
+  rescue LoadError
+    STDERR.puts 'You are missing a library required for Markdown. Please run:'
+    STDERR.puts '  $ [sudo] gem install kramdown'
+    raise FatalException.new("Missing dependency: kramdown")
+  end
+
+  def convert(content)
+    html = Kramdown::Document.new(content, {
+        :auto_ids             => @config['kramdown']['auto_ids'],
+        :footnote_nr          => @config['kramdown']['footnote_nr'],
+        :entity_output        => @config['kramdown']['entity_output'],
+        :toc_levels           => @config['kramdown']['toc_levels'],
+        :smart_quotes         => @config['kramdown']['smart_quotes'],
+        :kramdown_default_lang => @config['kramdown']['default_lang'],
+        :input                => @config['kramdown']['input']
+    }).to_pygments_html
+    return html;
+  end
+end
