diff --git a/src/shared/cplusplus/LiteralTable.h b/src/shared/cplusplus/LiteralTable.h
index 1c85c6f13a04c78c80f6ab65fd15ea50fc5c0147..f95b79a7e6f7a63b582b9d465496a9b195c91b8d 100644
--- a/src/shared/cplusplus/LiteralTable.h
+++ b/src/shared/cplusplus/LiteralTable.h
@@ -138,7 +138,11 @@ public:
         _Literal *literal = new _Literal(chars, size);
 
         if (++_literalCount == _allocatedLiterals) {
-            _allocatedLiterals += 32;
+            if (! _allocatedLiterals)
+                _allocatedLiterals = 4;
+            else
+                _allocatedLiterals <<= 1;
+
             _literals = (_Literal **) std::realloc(_literals, sizeof(_Literal *) * _allocatedLiterals);
         }
 
@@ -161,7 +165,11 @@ protected:
        if (_buckets)
            std::free(_buckets);
 
-       _allocatedBuckets += 32;
+       if (! _allocatedBuckets)
+           _allocatedBuckets = 4;
+       else
+           _allocatedBuckets <<= 1;
+
        _buckets = (_Literal **) std::calloc(_allocatedBuckets, sizeof(_Literal *));
 
        _Literal **lastLiteral = _literals + (_literalCount + 1);
diff --git a/src/shared/cplusplus/Scope.cpp b/src/shared/cplusplus/Scope.cpp
index bc5eeb90bbc116e4bcae42eaab566efc4a8c9313..b500f178cb82b25c94c2152470fcb8f0d14bb47a 100644
--- a/src/shared/cplusplus/Scope.cpp
+++ b/src/shared/cplusplus/Scope.cpp
@@ -105,7 +105,7 @@ private:
     void rehash();
 
 private:
-    enum { DefaultInitialSize = 11 };
+    enum { DefaultInitialSize = 4 };
 
     Scope *_owner;
     Symbol **_symbols;
@@ -147,7 +147,7 @@ void SymbolTable::enterSymbol(Symbol *symbol)
     symbol->_scope = _owner;
     _symbols[_symbolCount] = symbol;
 
-    if (_symbolCount >= _hashSize * 0.6)
+    if (_symbolCount * 5 >= _hashSize * 3)
         rehash();
     else {
         const unsigned h = hashValue(symbol);