diff --git a/libacc/FEATURES b/libacc/FEATURES
index 1a44415..97a876d 100644
--- a/libacc/FEATURES
+++ b/libacc/FEATURES
@@ -1,6 +1,5 @@
 
-Supported C language subset (read joint example 'otccex.c' to have
-    an introduction to OTCC dialect):
+Supported C language subset:
 
     - Expressions:
 
@@ -13,35 +12,51 @@
 
         * Parenthesis are supported.
 
+        * Comma operator is supported.
+
+        * Trinary operator (?:) is not supported.
+
         * Unary operators: '&', '*' (pointer indirection), '-'
-          (negation), '+', '!', '~', post fixed '++' and '--'.
+          (negation), '+', '!', '~', '++' and '--'.
 
-        * Pointer indirection ('*') only works with explicit cast to
-          'char *', 'int *' or 'int (*)()' (function pointer).
+        * Pointer indirection ('*') is supported.
 
-        * '++', '--', and unary '&' can only be used with variable
-          lvalue (left value).
+        * Square brackets can be used for pointer arithmetic.
 
-        * '=' can only be used with variable or '*' (pointer
-          indirection) lvalue.
+        * '=' and <op>= are supported.
 
-        * Function calls are supported with standard i386 calling
-          convention. Function pointers are supported with explicit
-          cast. Functions can be used before being declared.
+        * Function calls are supported with standard Linux calling
+          convention. Function pointers are supported.
+          Functions can be used before being declared.
 
-    - Types: only signed integer ('int') variables and functions can
-      be declared. Variables cannot be initialized in
-      declarations. Only old K&R function declarations are parsed
-      (implicit integer return value and no types on arguments).
+        - sizeof() is not supported.
 
-    - Any function or variable from the libc can be used because OTCC
-      uses the libc dynamic linker to resolve undefined symbols.
+    - Types:
+        + int, short, char, float, double
+        + pointers
+        + variables can be initialized in declarations.
+        + Only ANSI-style function declarations are supported.
+           - "..." is not supported.
+        - short is not supported
+        - const is not supported
+        - arrays are not supported
+        - long doubles are not supported
+        - structs are not supported
+
+    - Unknown functions and variables are bound at compile time by calling
+      back to the caller. For the 'acc' command-line tool unknown functions
+      and variables are looked up using dlsym, to allow using many libc
+      functions and variables.
 
     - Instructions: blocks ('{' '}') are supported as in C. 'if' and
       'else' can be used for tests. The 'while' and 'for' C constructs
       are supported for loops. 'break' can be used to exit
       loops. 'return' is used for the return value of a function.
 
+      - switch / case is not supported.
+      - goto and labels are not supported.
+      - continue is not supported.
+
     - Identifiers are parsed the same way as C. Local variables are
       handled, but there is no local name space (not a problem if
       different names are used for local and global variables).
@@ -49,16 +64,19 @@
     - Numbers can be entered in decimal, hexadecimal ('0x' or '0X'
       prefix), or octal ('0' prefix).
 
+    - Float and double constants are supported.
+
     - '#define' is supported without function like arguments. No macro
       recursion is tolerated. Other preprocessor directives are
       ignored.
 
-    - C Strings and C character constants are supported. Only '\n',
-      '\"', '\'' and '\\' escapes are recognized.
+    - C Strings and C character constants are supported. All ANSI C
+      character escapes are supported.
 
-    - Both C comments ( /* */ ) and C++ comments ( // ... end-of-line ) can be used.
+    - Both C comments ( /* */ ) and C++ comments ( // ... end-of-line ) are
+      supported.
 
-    - No error is displayed if an incorrect program is given.
+    - Some syntax errors are reported, others may cause a crash.
 
     - Memory: the code, data, and symbol sizes are limited to 100KB
       (it can be changed in the source code).
diff --git a/libacc/acc.cpp b/libacc/acc.cpp
index 676947e..313bf1c 100644
--- a/libacc/acc.cpp
+++ b/libacc/acc.cpp
@@ -133,13 +133,22 @@
 class Compiler : public ErrorSink {
     typedef int tokenid_t;
     enum TypeTag {
-        TY_INT, TY_CHAR, TY_VOID, TY_FLOAT, TY_DOUBLE,
-        TY_POINTER, TY_FUNC, TY_PARAM
+        TY_INT,       // 0
+        TY_CHAR,      // 1
+        TY_SHORT,     // 2
+        TY_VOID,      // 3
+        TY_FLOAT,     // 4
+        TY_DOUBLE,    // 5
+        TY_POINTER, // 6
+        TY_ARRAY,   // 7
+        TY_STRUCT,  // 8
+        TY_FUNC,    // 9
+        TY_PARAM    // 10
     };
 
     struct Type {
         TypeTag tag;
-        tokenid_t id; // For function arguments
+        tokenid_t id; // For function arguments (stores length for array)
         Type* pHead;
         Type* pTail;
     };
@@ -594,8 +603,18 @@
 
         TypeTag collapseType(TypeTag tag) {
             static const TypeTag collapsedTag[] = {
-                    TY_INT, TY_INT, TY_VOID, TY_FLOAT, TY_DOUBLE, TY_INT,
-                    TY_VOID, TY_VOID};
+                    TY_INT,
+                    TY_INT,
+                    TY_INT,
+                    TY_VOID,
+                    TY_FLOAT,
+                    TY_DOUBLE,
+                    TY_INT,
+                    TY_INT,
+                    TY_VOID,
+                    TY_VOID,
+                    TY_VOID
+                };
             return collapsedTag[tag];
         }
 
@@ -1093,6 +1112,9 @@
                 case TY_FLOAT:
                     o4(0xE5820000); // str r0, [r2]
                     break;
+                case TY_SHORT:
+                    o4(0xE1C200B0); // strh r0, [r2]
+                    break;
                 case TY_CHAR:
                     o4(0xE5C20000); // strb r0, [r2]
                     break;
@@ -1115,6 +1137,9 @@
                 case TY_FLOAT:
                     o4(0xE5900000); // ldr r0, [r0]
                     break;
+                case TY_SHORT:
+                    o4(0xE1D000F0); // ldrsh r0, [r0]
+                    break;
                 case TY_CHAR:
                     o4(0xE5D00000); // ldrb r0, [r0]
                     break;
@@ -1378,6 +1403,8 @@
             switch(pType->tag) {
                 case TY_CHAR:
                     return 1;
+                case TY_SHORT:
+                    return 1;
                 case TY_DOUBLE:
                     return 8;
                 default:
@@ -1392,6 +1419,8 @@
             switch(pType->tag) {
                 case TY_INT:
                     return 4;
+                case TY_SHORT:
+                    return 2;
                 case TY_CHAR:
                     return 1;
                 default:
@@ -2095,6 +2124,9 @@
                 case TY_INT:
                     o(0x0189); /* movl %eax/%al, (%ecx) */
                     break;
+                case TY_SHORT:
+                    o(0x018966); /* movw %ax, (%ecx) */
+                    break;
                 case TY_CHAR:
                     o(0x0188); /* movl %eax/%al, (%ecx) */
                     break;
@@ -2119,6 +2151,10 @@
                 case TY_INT:
                     o2(0x008b); /* mov (%eax), %eax */
                     break;
+                case TY_SHORT:
+                    o(0xbf0f); /* movswl (%eax), %eax */
+                    ob(0);
+                    break;
                 case TY_CHAR:
                     o(0xbe0f); /* movsbl (%eax), %eax */
                     ob(0); /* add zero in code */
@@ -2288,6 +2324,8 @@
             switch (pType->tag) {
             case TY_CHAR:
                 return 1;
+            case TY_SHORT:
+                return 2;
             default:
                 return 4;
             }
@@ -2300,6 +2338,8 @@
             switch(pType->tag) {
                 case TY_INT:
                     return 4;
+                case TY_SHORT:
+                    return 2;
                 case TY_CHAR:
                     return 1;
                 default:
@@ -3158,6 +3198,7 @@
 
     // Prebuilt types, makes things slightly faster.
     Type* mkpInt;        // int
+    Type* mkpShort;      // short
     Type* mkpChar;       // char
     Type* mkpVoid;       // void
     Type* mkpFloat;
@@ -4013,7 +4054,8 @@
         pGen->pushR0();
         pGen->loadR0FromR0();
         int tag = pGen->getR0Type()->tag;
-        if (!(tag == TY_INT || tag == TY_CHAR || tag == TY_POINTER)) {
+        if (!(tag == TY_INT || tag == TY_SHORT || tag == TY_CHAR ||
+                tag == TY_POINTER)) {
             error("++/-- illegal for this type. %d", tag);
         }
         if (isPost) {
@@ -4262,6 +4304,9 @@
                 case TY_INT:
                     buffer.appendCStr("int");
                     break;
+                case TY_SHORT:
+                    buffer.appendCStr("short");
+                    break;
                 case TY_CHAR:
                     buffer.appendCStr("char");
                     break;
@@ -4283,6 +4328,8 @@
         switch (tag) {
             case TY_INT:
                 break;
+            case TY_SHORT:
+                break;
             case TY_CHAR:
                 break;
             case TY_VOID:
@@ -4347,6 +4394,8 @@
         Type* pType;
         if (tok == TOK_INT) {
             pType = mkpInt;
+        } else if (tok == TOK_SHORT) {
+            pType = mkpShort;
         } else if (tok == TOK_CHAR) {
             pType = mkpChar;
         } else if (tok == TOK_VOID) {
@@ -4844,6 +4893,7 @@
 
     void createPrimitiveTypes() {
         mkpInt = createType(TY_INT, NULL, NULL);
+        mkpShort = createType(TY_SHORT, NULL, NULL);
         mkpChar = createType(TY_CHAR, NULL, NULL);
         mkpVoid = createType(TY_VOID, NULL, NULL);
         mkpFloat = createType(TY_FLOAT, NULL, NULL);
diff --git a/libacc/tests/data/short.c b/libacc/tests/data/short.c
new file mode 100644
index 0000000..5e222f3
--- /dev/null
+++ b/libacc/tests/data/short.c
@@ -0,0 +1,6 @@
+short a = 3;
+int main() {
+    short* b = &a;
+    *b = *b - 5;
+    return a;
+}
diff --git a/libacc/tests/runtimeTest.cpp b/libacc/tests/runtimeTest.cpp
index d59e1d1..55bf877 100644
--- a/libacc/tests/runtimeTest.cpp
+++ b/libacc/tests/runtimeTest.cpp
@@ -30,6 +30,8 @@
 extern "C"
 void accDisassemble(ACCscript* script);
 
+int globalVar;
+
 void op_int(int a) {
     printf("op_int(%d)\n", a);
 }
@@ -46,6 +48,7 @@
     "           float e, float f, float g, float h,\n"
     "           float i, float j, float k, float l);\n"
     "void script() {\n"
+    "  globalVar += 3;\n"
     "  op_int(123);\n"
     "  op_float12(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0);\n"
     "}\n";
@@ -57,6 +60,9 @@
     if (strcmp("op_float12", name) == 0) {
         return (ACCvoid*) op_float12;
     }
+    if (strcmp("globalVar", name) == 0) {
+        return (ACCvoid*) &globalVar;
+    }
     return (ACCvoid*) dlsym(RTLD_DEFAULT, name);
 }
 
@@ -98,7 +104,9 @@
         fprintf(stderr, "Could not find script: %d\n", result);
     } else {
         fprintf(stderr, "Executing script:\n");
+        globalVar = 17;
         run(scriptPointer);
+        fprintf(stderr, "After script globalVar = %d\n", globalVar);
     }
 
 
diff --git a/libacc/tests/test.py b/libacc/tests/test.py
index 7bcbdd4..a3114ad 100644
--- a/libacc/tests/test.py
+++ b/libacc/tests/test.py
@@ -382,6 +382,11 @@
 result: 0
 ""","""""")
 
+    def testShort(self):
+        self.compileCheck(["-R", "data/short.c"], """Executing compiled code:
+result: -2
+""","""""")
+
 if __name__ == '__main__':
     if not outputCanRun():
         print "Many tests are expected to fail, because acc is not a 32-bit x86 Linux executable."
