diff --git a/src/prettify/lang/LangErlang.java b/src/prettify/lang/LangErlang.java
new file mode 100644
index 0000000..24fb9aa
--- /dev/null
+++ b/src/prettify/lang/LangErlang.java
@@ -0,0 +1,105 @@
+// Copyright (C) 2013 Andrew Allen
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package prettify.lang;
+
+import prettify.parser.Prettify;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * This is similar to the lang-erlang.js in JavaScript Prettify.
+ * <p/>
+ * All comments are adapted from the JavaScript Prettify.
+ * <p/>
+ * <p/>
+ * <p/>
+ * Derived from https://raw.github.com/erlang/otp/dev/lib/compiler/src/core_parse.yrl
+ * Modified from Mike Samuel's Haskell plugin for google-code-prettify
+ *
+ * @author achew22@gmail.com
+ */
+public class LangErlang extends Lang {
+
+    public LangErlang() {
+        List<List<Object>> _shortcutStylePatterns = new ArrayList<List<Object>>();
+        List<List<Object>> _fallthroughStylePatterns = new ArrayList<List<Object>>();
+
+        // Whitespace
+        // whitechar    ->    newline | vertab | space | tab | uniWhite
+        // newline      ->    return linefeed | return | linefeed | formfeed
+        _shortcutStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_PLAIN, Pattern.compile("\\t\\n\\x0B\\x0C\\r ]+"), null, "\t\n" + Character.toString((char) 0x0B) + Character.toString((char) 0x0C) + "\r "}));
+        // Single line double-quoted strings.
+        _shortcutStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_STRING, Pattern.compile("^\\\"(?:[^\\\"\\\\\\n\\x0C\\r]|\\\\[\\s\\S])*(?:\\\"|$)"), null, "\""}));
+
+        // Handle atoms
+        _shortcutStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_LITERAL, Pattern.compile("^[a-z][a-zA-Z0-9_]*")}));
+        // Handle single quoted atoms
+        _shortcutStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_LITERAL, Pattern.compile("^\\'(?:[^\\'\\\\\\n\\x0C\\r]|\\\\[^&])+\\'?"), null, "'"}));
+
+        // Handle macros. Just to be extra clear on this one, it detects the ?
+        // then uses the regexp to end it so be very careful about matching
+        // all the terminal elements
+        _shortcutStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_LITERAL, Pattern.compile("^\\?[^ \\t\\n({]+"), null, "?"}));
+
+        // decimal      ->    digit{digit}
+        // octal        ->    octit{octit}
+        // hexadecimal  ->    hexit{hexit}
+        // integer      ->    decimal
+        //               |    0o octal | 0O octal
+        //               |    0x hexadecimal | 0X hexadecimal
+        // float        ->    decimal . decimal [exponent]
+        //               |    decimal exponent
+        // exponent     ->    (e | E) [+ | -] decimal
+        _shortcutStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_LITERAL, Pattern.compile("^(?:0o[0-7]+|0x[\\da-f]+|\\d+(?:\\.\\d+)?(?:e[+\\-]?\\d+)?)", Pattern.CASE_INSENSITIVE), null, "0123456789"}));
+
+
+        // TODO: catch @declarations inside comments
+
+        // Comments in erlang are started with % and go till a newline
+        _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_COMMENT, Pattern.compile("^%[^\\n]*"), null}));
+
+         // Catch macros
+         //[PR['PR_TAG'], /?[^( \n)]+/],
+
+        /**
+         * %% Keywords (atoms are assumed to always be single-quoted).
+         * 'module' 'attributes' 'do' 'let' 'in' 'letrec'
+         * 'apply' 'call' 'primop'
+         * 'case' 'of' 'end' 'when' 'fun' 'try' 'catch' 'receive' 'after'
+         */
+        _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_KEYWORD, Pattern.compile("^(?:module|attributes|do|let|in|letrec|apply|call|primop|case|of|end|when|fun|try|catch|receive|after|char|integer|float,atom,string,var)\\b")}));
+
+        /**
+         * Catch definitions (usually defined at the top of the file)
+         * Anything that starts -something
+         */
+        _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_KEYWORD, Pattern.compile("^-[a-z_]+")}));
+
+        // Catch variables
+        _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_TYPE, Pattern.compile("^[A-Z_][a-zA-Z0-9_]*")}));
+
+        // matches the symbol production
+        _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_PUNCTUATION, Pattern.compile("^[.,;]")}));
+
+        setShortcutStylePatterns(_shortcutStylePatterns);
+        setFallthroughStylePatterns(_fallthroughStylePatterns);
+    }
+
+    public static List<String> getFileExtensions() {
+        return Arrays.asList(new String[]{"erlang", "erl"});
+    }
+}
diff --git a/src/prettify/parser/Prettify.java b/src/prettify/parser/Prettify.java
index 0e45774..5b515fc 100644
--- a/src/prettify/parser/Prettify.java
+++ b/src/prettify/parser/Prettify.java
@@ -27,6 +27,7 @@
 import prettify.lang.LangClj;
 import prettify.lang.LangCss;
 import prettify.lang.LangDart;
+import prettify.lang.LangErlang;
 import prettify.lang.LangGo;
 import prettify.lang.LangHs;
 import prettify.lang.LangLisp;
@@ -354,6 +355,7 @@
       register(LangClj.class);
       register(LangCss.class);
       register(LangDart.class);
+      register(LangErlang.class);
       register(LangGo.class);
       register(LangHs.class);
       register(LangLisp.class);
diff --git a/test/prettify/PrettifyTest.java b/test/prettify/PrettifyTest.java
index a7e5dea..63c34d6 100644
--- a/test/prettify/PrettifyTest.java
+++ b/test/prettify/PrettifyTest.java
@@ -168,6 +168,7 @@
     test("yaml", "yaml2", false);
     test("tcl", "tcl_lang", false);
     test("r", "r_lang", false);
+    test("erlang", "erlang", false);
   }
 
   /**
diff --git a/test/prettify/PrettifyTest/result/erlang.txt b/test/prettify/PrettifyTest/result/erlang.txt
new file mode 100644
index 0000000..51e85ad
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/erlang.txt
@@ -0,0 +1,25 @@
+`COM% Sample comment`END`PLN
+
+`END`KWD-module`END`PLN(my_test)`END`PUN.`END`PLN
+`END`KWD-include_lib`END`PLN(`END`STR"my_sample_lib.hrl"`END`PLN)`END`PUN.`END`PLN
+`END`KWD-export`END`PLN([
+    test/`END`LIT2`END`PLN
+])`END`PUN.`END`PLN
+
+`END`COM%% @doc Define a macro`END`PLN
+`END`KWD-define`END`PLN(my_macro`END`PUN,`END`PLN `END`TYPVariable`END`PLN)`END`PUN.`END`PLN
+
+`END`COM%% @doc My function`END`PLN
+test(`END`TYPVariables`END`PUN,`END`PLN `END`TYPMoreVariables`END`PLN) -&gt;
+    `END`COM% Inline comment`END`PLN
+    {ok`END`PUN,`END`TYPScanned`END`PUN,`END`TYP_`END`PLN} = my_lib:do_stuff()`END`PUN,`END`PLN
+
+    `END`TYPVariable`END`PLN = `END`KWDfun`END`PLN(`END`TYPV`END`PLN) -&gt; {ok`END`PUN,`END`PLN `END`TYPV`END`PLN} `END`KWDend`END`PUN,`END`PLN
+
+    `END`KWDtry`END`PLN `END`LIT?my_macro`END`PLN({value`END`PUN,`END`PLN test}) `END`KWDof`END`PLN
+        {value`END`PUN,`END`PLN `END`TYPResult`END`PUN,`END`PLN `END`TYP_`END`PLN} -&gt;
+            {ok`END`PUN,`END`PLN `END`TYPResult`END`PLN}
+    `END`KWDcatch`END`PLN
+        `END`TYPType`END`PLN:`END`TYPError`END`PLN -&gt;
+            {`END`LIT'error'`END`PUN,`END`PLN `END`TYPType`END`PUN,`END`PLN `END`TYPError`END`PLN}
+    `END`KWDend`END`PUN.`END'
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/erlang.txt b/test/prettify/PrettifyTest/source/erlang.txt
new file mode 100644
index 0000000..3642fa7
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/erlang.txt
@@ -0,0 +1,25 @@
+% Sample comment
+
+-module(my_test).
+-include_lib("my_sample_lib.hrl").
+-export([
+    test/2
+]).
+
+%% @doc Define a macro
+-define(my_macro, Variable).
+
+%% @doc My function
+test(Variables, MoreVariables) ->
+    % Inline comment
+    {ok,Scanned,_} = my_lib:do_stuff(),
+
+    Variable = fun(V) -> {ok, V} end,
+
+    try ?my_macro({value, test}) of
+        {value, Result, _} ->
+            {ok, Result}
+    catch
+        Type:Error ->
+            {'error', Type, Error}
+    end.
\ No newline at end of file
