diff --git a/Scanning.py b/Scanning.py
index 86b01415d3524e5f2567b96cb38d886b161f771f..a2b1be6afaa96317a443386fee76833e8e57fc2a 100644
--- a/Scanning.py
+++ b/Scanning.py
@@ -34,13 +34,13 @@ idToTokenDict = dict({
     'instaceof': 'INSTANCEOF',
     'int': 'INT',
     'native': 'NATIVE',
+    'new': 'NEW',
     'package': 'PACKAGE',
     'protected': 'PROTECTED',
     'public': 'PUBLIC',
     'return': 'RETURN',
     'short': 'SHORT',
     'static': 'STATIC',
-    'String': 'STRING',
     'this': 'THIS',
     'void': 'VOID',
     'while': 'WHILE',
@@ -57,6 +57,38 @@ def idsToTokens(tokens):
             if t.lex in idToTokenDict:
                 t.name = idToTokenDict.get(t.lex)
 
+
+# a set that contains keywords that are in java but not in joos
+wrongKeyWordDict = set(
+    'assert', 
+    'break', 
+    'case', 
+    'catch', 
+    'const', 
+    'continue', 
+    'default', 
+    'do', 
+    'double', 
+    'enum', 
+    'finally', 
+    'float', 
+    'goto', 
+    'interface', 
+    'long', 
+    'new', 
+    'private', 
+    'strictfp', 
+    'super', 
+    'switch', 
+    'synchronized', 
+    'throw', 
+    'throws', 
+    'transient', 
+    'try', 
+    'volatile'
+    )
+
+
 ######################## DFA Stuff ###################################
 
 #################  Joos DFA Tokens ###################################
@@ -77,7 +109,6 @@ JoosDFATokens = set([
     'GT',             # >
     'LT',             # <
     'NOT',            # !
-    'TILDE',          # ~
     'QUESTION',       # ?
     'COLON',          # :
     'ARROW',          # ->
@@ -143,8 +174,6 @@ def JoosTransition(input, state):
             return 'LT'
         if (input == '!'):
             return 'NOT'
-        if (input == '~'):
-            return 'TILDE'
         if (input == '?'):
             return 'QUESTION'
         if (input == ':'):
@@ -250,15 +279,28 @@ def JoosTransition(input, state):
         if (input == '|'):
             return 'OR'
         return None
-
+    
+    # length 2/3 seperators
+    elif(state == 'COLON'):
+        if (input == ':'):
+            return 'DOUBLECO'
+        return None
+    elif(state == 'PERIOD'):
+        if(input == '.'):
+            return 'PERIOD2'
+        return None
+    elif(state == 'PERIOD2'):
+        if(input == '.'):
+            return 'ELLIPSIS'
+        return None
     else:
         return None
 
 ##################### Other DFA elements ##############################
 #TODO: add operand and separator characters to alphabet
-specialChars = set(list(".;:,@{}()[]<>!?~+-*/&|^%=''\"\\"))
+specialChars = set(list(".;:,@{}()[]<>!?+-*/&|^%=''\"\\"))
 JoosAccept = JoosDFATokens.union({'WHITESPACE', 'COMMENT'})
-JoosStates = JoosAccept.union({'START'}) #TODO: add intermediate states here
+JoosStates = JoosAccept.union({'START', 'PERIOD2'}) #TODO: add intermediate states here
 JoosAlphabet = set(string.ascii_lowercase).union(set(string.ascii_uppercase)).union(set(string.digits)).union(specialChars)
 
 #########################  DFA  #######################################
@@ -307,6 +349,7 @@ def scan(input):
     tokens = SMM(input, JoosDFA)
     if (tokens):
         # TODO: handle edge cases (e.g. check int range)
+        # TODO: handle cases where keywords in Java but not in joos appear (a false program)
 
         idsToTokens(tokens)