diff --git a/gsrp_tdoa_hyperres.py b/gsrp_tdoa_hyperres.py
index 803d30ffefc0e6f2989aedeccc8973a07ff5a378..313d6a8f75a9b57a308b76e20662a61816a0c9ed 100755
--- a/gsrp_tdoa_hyperres.py
+++ b/gsrp_tdoa_hyperres.py
@@ -78,28 +78,28 @@ def corr(data, pos, w_size, max_tdoa, decimate=1, mode='prepare', hyper=True):
     else:
         raise ValueError(f'Unknown mode {mode}')
 
-    tdoas = np.zeros((len(pos), num_channels), np.float32)
+    tdoas = np.zeros((len(pos), num_channel_pairs + 1), np.float32)
 
     if hyper:   # prepare hyper res
-        tdoas2 = np.zeros((len(pos), num_channels), np.float32)
+        tdoas2 = np.zeros((len(pos), num_channel_pairs + 1), np.float32)
         poly = PolynomialFeatures(2)
         lin = LinearRegression()
         pipe = Pipeline([('poly', poly), ('lin', lin)])
         ind = np.triu_indices(num_channels - 1)
 
         def _hyperres(taus, cc):
-            taus = taus + np.stack(np.meshgrid(*(num_channels - 1) * (np.arange(-2, 3),)), 0).reshape(
+            taus = taus[:num_channels-1] + np.stack(np.meshgrid(*(num_channels - 1) * (np.arange(-2, 3),)), 0).reshape(
                 num_channels - 1, -1).T
             taus = np.matmul(mat, taus.T)
             taus = taus[:, np.abs(taus).max(0) <= cc_size // 2]
             mean = taus.mean(-1)[:3]
             coef = pipe.fit(taus.T[:, :3] - mean,
-                            cc[np.expand_dims(np.arange(num_channel_pairs), 1), taus.astype(np.int)].prod(0)
+                            cc[np.expand_dims(np.arange(num_channel_pairs), 1), taus.astype(int)].prod(0)
                             ).named_steps['lin'].coef_
             der = np.zeros((num_channels - 1, num_channels - 1))
             der[ind] = coef[4:]
             poly_min = np.linalg.lstsq(der + der.T, -coef[1:4], rcond=None)[0] + mean
-            return pipe.predict(poly_min[np.newaxis]).item(), poly_min
+            return pipe.predict(poly_min[np.newaxis]).item(), mat @ poly_min
 
     cc = np.empty((num_channel_pairs, dw_size), np.float32)
     for i in trange(len(pos)):
@@ -111,15 +111,15 @@ def corr(data, pos, w_size, max_tdoa, decimate=1, mode='prepare', hyper=True):
         cc -= cc.min(-1, keepdims=True)
         if mode == 'prepare':
             tdoas[i, 0], index = c_corr.c_corr_at(cc, tausf)
-            tdoas[i, 1:] = ((tausf[:(num_channels - 1), index] + dw_size // 2) % dw_size) - dw_size // 2
+            tdoas[i, 1:] = ((tausf[:, index] + dw_size // 2) % dw_size) - dw_size // 2
         elif mode == 'on-the-fly':
-            tdoas[i, 0], tij = c_corr.c_corr_all(cc, cc_size//2, num_channels - 1)
-            tdoas[i, 1:] = tij[:(num_channels - 1)]
+            tdoas[i, 0], tdoas[i, 1:] = c_corr.c_corr_all(cc, cc_size//2, num_channels - 1)
         elif mode == 'smart':
             maxs = cc.max(1, keepdims=True)
             cc /= maxs
-            val, tij = smart_gsrp(cc, num_channels - 1, num_channel_pairs, cc_size // 2, tree, program, clean_list)
-            tdoas[i, 0], tdoas[i, 1:] = np.log10(val * maxs.prod()), tij[:(num_channels - 1)]
+            val, tdoas[i, 1:] = smart_gsrp(cc, num_channels - 1, num_channel_pairs, cc_size // 2,
+                                           tree, program, clean_list)
+            tdoas[i, 0] = np.log10(val * maxs.prod())
             cc *= maxs
         else:
             raise ValueError(f'Unknown mode {mode}')
@@ -159,7 +159,7 @@ def main(args):
     if not (args.low is None and args.up is None):
         print("Filtering...")
         if args.low is not None:
-            if args.highpass is None:
+            if args.up is None:
                 sos = sg.butter(3, 2 * args.low / sr, 'highpass', output='sos')
             else:
                 sos = sg.butter(3, [2 * args.low / sr, 2 * args.up / sr], 'bandpass', output='sos')
@@ -182,17 +182,11 @@ def main(args):
 
     print("Computing TDOAs...")
     results = corr(sound, pos, int(sr * args.frame_size), max_tdoa=int(np.ceil(sr * args.max_tdoa)),
-                   decimate=args.decimate if not args.temporal else 1, mode=args.mode, hyper=not args.no_hyperes)
+                   decimate=args.decimate if not args.temporal else 1, mode=args.mode, hyper=not args.no_hyperres)
     if args.no_hyperres:
         result1 = results
     else:
-        result1, result2 =results
-    # compute additional non-independent TDOAs # TODO dont recompute them
-    additional1 = [(b - a) for a, b in itertools.combinations(result1.T[2:], 2)]
-    result1 = np.hstack((result1,) + tuple(a[:, np.newaxis] for a in additional1))
-    if not args.no_hyperres:
-        additional2 = [(b - a) for a, b in itertools.combinations(result2.T[2:], 2)]
-        result2 = np.hstack((result2,) + tuple(a[:, np.newaxis] for a in additional2))
+        result1, result2 = results
 
     if args.outfile.endswith('.npy'):
         np.save(args.outfile, result1)
@@ -238,9 +232,9 @@ if __name__ == "__main__":
                              'with 0 referring to the first channel once channels have been chosen by --channels.')
 
     group2 = parser.add_argument_group('Size settings')
-    group2.add_argument('-f', '--frame-size', type=float, default=0.2,
+    group2.add_argument('-f', '--frame-size', type=float, default=0.02,
                         help='The size of the cross-correlation frames in seconds  (default: %(default)s)')
-    group2.add_argument('-s', '--stride', type=str, default=0.01,
+    group2.add_argument('-s', '--stride', type=str, default='0.01',
                         help='The step between the beginnings of sequential frames  in seconds (default: %(default)s), '
                              'or the postion in second if csv file path is given.')
     group2.add_argument('-m', '--max-tdoa', type=float, default=0.0011,
@@ -262,9 +256,9 @@ if __name__ == "__main__":
     group4 = parser.add_argument_group('Other')
     group4.add_argument('-e', '--erase', action='store_false', help='Erase existing outfile. If outfile exist and '
                                                                     '--erase is not provide, the script will exit.')
-    group4.add_argument('-n', '--no-hyperres', action='store_True', help='Disable the hyper resolution evalutation of '
+    group4.add_argument('-n', '--no-hyperres', action='store_true', help='Disable the hyper resolution evalutation of '
                                                                           'the TDOA')
-    group4.add_argument('-M', '--mode', choices={'prepare', 'on-the-fly', 'smart', 'auto'}, default='prepare',
+    group4.add_argument('-M', '--mode', choices={'prepare', 'on-the-fly', 'smart', 'auto'}, default='smart',
                         help=f'R|How to explore the TDOA space (default: %(default)s).\n'
                              f'{BColors.BOLD}prepare{BColors.ENDC} precomputes all the possible TDOA pairs and then '
                              f'evaluate them. All the results are save in memory.\n'
@@ -277,11 +271,11 @@ if __name__ == "__main__":
 
     args = parser.parse_args()
     try:
-        if args.mode in ['estimate', 'auto']:
+        if args.mode in ['auto']:
             raise NotImplementedError(f'mode {args.mode} is not yet implemented')
 
         sys.exit(main(args))
 
-    except Exception as e:
+    except KeyError as e:
         print(e)
         sys.exit(2)