diff --git a/dev/js/spec/corpusByMatchSpec.js b/dev/js/spec/corpusByMatchSpec.js
index cdf941f..21e6560 100644
--- a/dev/js/spec/corpusByMatchSpec.js
+++ b/dev/js/spec/corpusByMatchSpec.js
@@ -100,9 +100,11 @@
       cbm.add("pubDate", "2018-11-20", "type:date");
       expect(cbm.toQuery()).toEqual('author = "Peter" & pubDate in 2018-11-20');
 
+      cbm.add("KED.nToks", 200, "type:integer");
+
       cbm.toVcBuilder();
 
-      expect(KorAP.vc.toQuery()).toEqual('(title = "Hello World!" | foo = "bar") & author = "Peter" & pubDate in 2018-11-20');
+      expect(KorAP.vc.toQuery()).toEqual('(title = "Hello World!" | foo = "bar") & author = "Peter" & pubDate in 2018-11-20 & KED.nToks = 200');
     })
   });
 });
diff --git a/dev/js/spec/vcSpec.js b/dev/js/spec/vcSpec.js
index bfdf9fa..656a827 100644
--- a/dev/js/spec/vcSpec.js
+++ b/dev/js/spec/vcSpec.js
@@ -12,6 +12,7 @@
   'vc/operators',
   'vc/rewrite',
   'vc/stringval',
+  'vc/intval',
   'vc/fragment'
 ], function (vcClass,
              docClass,
@@ -23,6 +24,7 @@
              operatorsClass,
              rewriteClass,
              stringValClass,
+             intValClass,
              fragmentClass) {
 
   KorAP._vcKeyMenu = undefined;
@@ -132,6 +134,14 @@
       "@type" : "koral:doc"
     });
 
+    var integerFactory = buildFactory(docClass, {
+      "key"   : "KED.nToks",
+      "type"  : "type:integer",
+      "match" : "match:eq",
+      "value" : "200",
+      "@type" : "koral:doc"
+    });
+
     // Create example factories
     var regexFactory = buildFactory(docClass, {
       "key"   : "title",
@@ -281,6 +291,15 @@
       expect(doc.matchop()).toEqual('eq');
     });
 
+    it('should deserialize JSON-LD integer', function () {
+      doc = integerFactory.create({});
+
+      expect(doc.matchop()).toEqual('eq');
+      expect(doc.key()).toEqual("KED.nToks");
+      expect(doc.type()).toEqual("integer");
+      expect(doc.value()).toEqual("200");
+    });
+
     it('should be serializale to JSON', function () {
 
       // Empty doc
@@ -381,6 +400,33 @@
         value : "2014"
       });
       expect(doc.toQuery()).toEqual('pubDate in 2014');
+
+      doc = integerFactory.create();
+      expect(doc.toQuery()).toEqual('KED.nToks = 200');
+
+      doc = integerFactory.create({
+        value : "100"
+      });
+      expect(doc.toQuery()).toEqual('KED.nToks = 100');
+
+      doc = integerFactory.create({
+        value : "100",
+        match : "match:geq"
+      });
+      expect(doc.toQuery()).toEqual('KED.nToks >= 100');
+
+      doc = integerFactory.create({
+        value : "100",
+        match : "match:leq"
+      });
+      expect(doc.toQuery()).toEqual('KED.nToks <= 100');
+
+      // Check for numeric values
+      doc = integerFactory.create({
+        value : 100,
+      });
+      expect(doc.toQuery()).toEqual('KED.nToks = 100');
+
     });
   });
 
@@ -571,7 +617,15 @@
                 "match": 'match:ne',
                 "value": '[a]?bar',
                 "type": 'type:regex'
+              },
+              {
+                "@type": 'koral:doc',
+                "key": 'KED.nToks',
+                "match": 'match:leq',
+                "value": '300',
+                "type": 'type:integer'
               }
+
             ]
           }
         ]
@@ -579,7 +633,8 @@
       expect(docGroup.toQuery()).toEqual(
         'author = "Max Birkendale" | ' +
           '(pubDate since 2014-05-12 & ' +
-          'pubDate until 2014-12-05 & foo != /[a]?bar/)'
+          'pubDate until 2014-12-05 & foo != /[a]?bar/ & ' +
+          'KED.nToks <= 300)'
       );
 
 
@@ -590,7 +645,8 @@
       expect(docGroup.incomplete()).toBeFalsy();
       expect(docGroup.toQuery()).toEqual(
         '(pubDate since 2014-05-12 & ' +
-          'pubDate until 2014-12-05 & foo != /[a]?bar/)'
+          'pubDate until 2014-12-05 & foo != /[a]?bar/ & ' +
+          'KED.nToks <= 300)'
       );
     });
   });
@@ -2820,6 +2876,7 @@
       var sv = stringValClass.create('der');
       expect(sv.element().nodeName).toBe('DIV');
       expect(sv.element().firstChild.nodeName).toBe('INPUT');
+      expect(sv.element().firstChild.getAttribute('type')).toBeNull();
       expect(sv.element().firstChild.value).toBe('der');
     });
 
@@ -2862,6 +2919,50 @@
 
   });
 
+
+  describe('KorAP.VC.intValue', function () {
+    it('should be initializable', function () {
+      var iv = intValClass.create();
+      expect(iv.value()).toBe(0);
+
+      iv = intValClass.create('400');
+      expect(iv.value()).toBe(400);
+
+      iv = intValClass.create(400);
+      expect(iv.value()).toBe(400);
+
+      iv = intValClass.create('Baum');
+      expect(iv.value()).toBe(0);
+    });
+
+    it('should be modifiable', function () {
+      var iv = intValClass.create();
+      expect(iv.value()).toBe(0);
+
+      expect(iv.value('33')).toBe(33);
+      expect(iv.value()).toBe(33);
+    });
+
+    it('should have an element', function () {
+      var iv = intValClass.create(22);
+      expect(iv.element().nodeName).toBe('DIV');
+      expect(iv.element().firstChild.nodeName).toBe('INPUT');
+      expect(iv.element().firstChild.getAttribute('type')).toBe('number');
+      expect(iv.element().firstChild.value).toBe('22');
+    });
+
+    it('should be storable', function () {
+      var iv = intValClass.create();
+      var count = 1;
+      iv.store = function (value) {
+        expect(value).toBe(80);
+      };
+      iv.value('80');
+      iv.element().lastChild.click();
+    });
+  });
+
+  
   describe('KorAP.VC.Menu', function () {
 
     var vc;
@@ -2889,7 +2990,8 @@
       vc = vcClass.create([
         ['d', 'text'],
         ['e', 'string'],
-        ['f', 'date']
+        ['f', 'date'],
+        ['g', 'integer']
       ]).fromJson();
       expect(vc.builder().firstChild.classList.contains('unspecified')).toBeTruthy();
       expect(vc.builder().firstChild.firstChild.tagName).toEqual('SPAN');
@@ -2903,6 +3005,7 @@
       expect(list.getElementsByTagName("LI")[1].innerText).toEqual('d');
       expect(list.getElementsByTagName("LI")[2].innerText).toEqual('e');
       expect(list.getElementsByTagName("LI")[3].innerText).toEqual('f');
+      expect(list.getElementsByTagName("LI")[4].innerText).toEqual('g');
       // blur
       document.body.click();
     });
@@ -3022,6 +3125,33 @@
       document.body.click();
     });
 
+    it('should be clickable on operation for integer', function () {
+
+      vc.builder().firstChild.firstChild.click();// Choose "g"
+      vc.builder().firstChild.firstChild.getElementsByTagName("LI")[4].click()
+      // Click on "g" (or unspecified)
+      vc.builder().firstChild.firstChild.click();
+      // Rechoose "g"
+      vc.builder().firstChild.firstChild.getElementsByTagName("LI")[4].click();
+      // Click on matchop
+      vc.builder().firstChild.children[1].click();
+      // Choose "geq"
+      vc.builder().firstChild.children[1].getElementsByTagName('li')[2].click();
+      expect(vc.builder().firstChild.children[1].innerText).toEqual("geq");
+
+      // Click on "e"
+      vc.builder().firstChild.firstChild.click();
+      // Choose "f"
+      vc.builder().firstChild.firstChild.getElementsByTagName("LI")[3].click();
+
+      // The matchoperator should still be "geq" as this is valid for dates as well (now)
+      var fc = vc.builder().firstChild;
+      expect(fc.firstChild.tagName).toEqual('SPAN');
+      expect(fc.firstChild.innerText).toEqual('f');
+      expect(fc.children[1].innerText).toEqual('geq');
+      // blur
+      document.body.click();
+    });
 
     // Check json deserialization
     it('should be initializable', function () {
