diff --git a/main.py b/main.py
index f2eb6c939c969a18adfce1c279919948d5996ca8..25fd634f70937c891e906d589e3cf825f23faa75 100644
--- a/main.py
+++ b/main.py
@@ -26,6 +26,7 @@ def main(set_identifier_bit_count, line_count, block_identifier_bit_count, file_
     """
     Program main.
     """
+    print('\n')
     print('main():')
     print('    set_identifier_bit_count: {0}'.format(set_identifier_bit_count))
     print('    line_count: {0}'.format(line_count))
@@ -64,7 +65,7 @@ def main(set_identifier_bit_count, line_count, block_identifier_bit_count, file_
     # print('S: {0}'.format(S))
     # print('E: {0}'.format(E))
     # print('Tag Bits: {0}'.format(tag_identifier_bit_count))
-    # print('Cache: {0}'.format(cache))
+    print('Cache: {0}'.format(cache))
 
     run_simulation(cache, file_name, M, B, S)
 
@@ -109,6 +110,13 @@ def handle_line(cache, line, M, B, S, hits, misses, evictions):
         return
     else:
         line = line.strip()
+        # print('\n')
+        # print('handle_line():')
+        # print('    line: {0}'.format(line))
+        # print('    M: {0}'.format(M))
+        # print('    B: {0}'.format(B))
+        # print('    S: {0}'.format(S))
+        # print('')
 
         # Not an instruction load. Keep processing. Start by getting address.
         address = int(split_line[2]) % M
@@ -117,18 +125,19 @@ def handle_line(cache, line, M, B, S, hits, misses, evictions):
         # Get mask values.
         full_mask = M - 1
         block_mask = B - 1
-        set_mask = S + B
-        tag_mask = set_mask + block_mask + 1
+        set_mask = ((S - 1) << 1)
+        tag_mask = (M - 1) ^ set_mask ^ block_mask
 
         # print('Address: {0}     As Bits: {0:b}'.format(address))
         # print('full_mask: {0}   As Bits: {0:b}'.format(full_mask))
         # print('block_mask: {0}  As Bits: {0:b}'.format(block_mask))
         # print('set_mask: {0}    As Bits: {0:b}'.format(set_mask))
         # print('tag_mask: {0}    As Bits: {0:b}'.format(tag_mask))
+        # print('')
 
         # Use masks to get address chunks.
         block = address & block_mask
-        set = (address & set_mask) - B - 1
+        set = (address & set_mask) >> 1
         tag = address & tag_mask
 
         # print('block: {0:b}'.format(block))
@@ -136,7 +145,6 @@ def handle_line(cache, line, M, B, S, hits, misses, evictions):
         # print('tag: {0:b}'.format(tag))
 
         # We have our values. Now compare against the cache.
-        # print('set: {0}'.format(set))
         # print('cache[set]: {0}'.format(cache[set]))
         if cache[set][0]['valid'] == True and cache[set][0]['tag'] == tag:
             # Match found.