diff --git a/ipi_extract.py b/ipi_extract.py
index 87a61482c95cfa48a3063af82790e45384a626d0..ed79e7996b57acc2bed5e43d00b61a5082f9c52d 100644
--- a/ipi_extract.py
+++ b/ipi_extract.py
@@ -259,6 +259,8 @@ class Callback(object):
         self.cursor = None
         self.f_cursor = None
         self.reset_b = None
+        self.spec_b = None
+        self.nfft = 128
 
     def shift_left(self, event):
         self.p = max(0, self.p - FSSR*13)
@@ -349,7 +351,7 @@ class Callback(object):
             if len(click) != 2*int(10e-3*self.sr):
                 np.pad(click, (0, 2*int(10e-3*self.sr) - len(click)), mode='constant')
             self.view_data[self.curr][0][0].set_ydata(norm(click))
-            spec = np.flipud(20*np.log10(plt.mlab.specgram(click, Fs=self.sr, NFFT=128, noverlap=127)[0]))
+            spec = np.flipud(20*np.log10(plt.mlab.specgram(click, Fs=self.sr, NFFT=self.nfft, noverlap=self.nfft-1)[0]))
             self.view_data[self.curr][1][0].set_data(spec)
             self.view_data[self.curr][1][0].set_clim(spec.max()-SPSC, spec.max())
             self.view_data[self.curr][2][0].set_ydata(norm(np.correlate(click, click, 'same')[-int(10e-3*self.sr):]))
@@ -412,6 +414,45 @@ class Callback(object):
         plt.pause(0.2)
         self.fax.get_figure().set_constrained_layout(False)
 
+    def increase_freq(self, event):
+        self.view_ax[self.curr][1].set_ylim(0, self.view_ax[self.curr][1].get_ylim()[1]+1e3)
+        plt.draw()
+
+    def decrease_freq(self, event):
+        self.view_ax[self.curr][1].set_ylim(0, max(self.view_ax[self.curr][1].get_ylim()[1]-1e3,1e3))
+        plt.draw()
+
+    def increase_res(self, event):
+        if self.nfft > int(10e-3*self.sr):
+            return
+        click = self.view_data[self.curr][0][0].get_ydata()
+        self.nfft *= 2
+        spec = np.flipud(20*np.log10(plt.mlab.specgram(click, Fs=self.sr, NFFT=self.nfft, noverlap=self.nfft-1)[0]))
+        self.view_data[self.curr][1][0].set_data(spec)
+        self.view_data[self.curr][1][0].set_clim(spec.max()-SPSC, spec.max())
+        if self.nfft > int(10e-3*self.sr):
+            self.spec_b['plus_res'].label.set_text('Can\'t go\nhigher')
+        else:
+            self.spec_b['plus_res'].label.set_text(f'{self.nfft*2}\nbins')
+        self.spec_b['minus_res'].label.set_text(f'{self.nfft//2}\nbins')
+        plt.draw()
+
+    def decrease_res(self, event):
+        if self.nfft <8:
+            return
+        click = self.view_data[self.curr][0][0].get_ydata()
+        self.nfft //= 2
+        spec = np.flipud(20*np.log10(plt.mlab.specgram(click, Fs=self.sr, NFFT=self.nfft, noverlap=self.nfft-1)[0]))
+        self.view_data[self.curr][1][0].set_data(spec)
+        self.view_data[self.curr][1][0].set_clim(spec.max()-SPSC, spec.max())
+        self.spec_b['plus_res'].label.set_text(f'{self.nfft*2}\nbins')
+        if self.nfft <8:
+            self.spec_b['minus_res'].label.set_text('Can\'t go\nlower')
+        else:
+            self.spec_b['minus_res'].label.set_text(f'{self.nfft//2}\nbins')
+        plt.draw()
+
+
     def _set_label(self, ind=None, dic=None):
         if ind is None:
             ind = self.curr
@@ -431,7 +472,6 @@ class Callback(object):
         self.view_data[ind][2][1].set_visible(state)
         self.view_data[ind][3][1].set_visible(state)
 
-
     def reset_curr(self, event):
         self.df[self.offset[self.curr_ind[self.curr], 0]] = EMLN.copy()
         self._set_label()
@@ -533,9 +573,21 @@ def init(in_path, channel, low=2e3, high=20e3):
     reset_b.on_clicked(callback.reset_curr)
     callback.reset_b = reset_b
 
-    # text_b_ax = plt.subplot(gs[-1,6:8])
-    # text_b = TextBox(text_b_ax, 'Individue #\nof current')
-    # # text_b.on_clicked(callback.resize)
+    freq_p_b_ax = plt.subplot(gs[2, 0])
+    freq_m_b_ax = plt.subplot(gs[3, 0])
+    freq_res_p_b_ax = plt.subplot(gs[4, 0])
+    freq_res_m_b_ax = plt.subplot(gs[5, 0])
+    freq_p_b = Button(freq_p_b_ax, '+\n1kHz')
+    freq_p_b.on_clicked(callback.increase_freq)
+    freq_m_b = Button(freq_m_b_ax, '-\n1kHz')
+    freq_m_b.on_clicked(callback.decrease_freq)
+    freq_res_p_b = Button(freq_res_p_b_ax, '256\nbins')
+    freq_res_p_b.on_clicked(callback.increase_res)
+    freq_res_m_b = Button(freq_res_m_b_ax, '64\nbins')
+    freq_res_m_b.on_clicked(callback.decrease_res)
+
+    spec_button = {'plus': freq_p_b, 'minus': freq_m_b, 'plus_res': freq_res_p_b, 'minus_res': freq_res_m_b}
+    callback.spec_b = spec_button
 
     data_view = [[2 * [None] for _ in range(4)] for _ in range(3)]
     m_cursor = [None for _ in range(3)]
@@ -578,6 +630,8 @@ def init(in_path, channel, low=2e3, high=20e3):
             if j != 1:
                 ax_view[i][j].set_yticks([])
             else:
+                ax_view[i][j].set_ylim(0, min(20e3, sr/2))
+                ax_view[i][j].set_yticks(ax_view[i][j].get_yticks())
                 ax_view[i][j].set_yticklabels((ax_view[i][j].get_yticks() / 1e3).astype(int))
         # m_cursor2[i][0].linev.set_linestyle('--')
         # m_cursor2[i][1].linev.set_linestyle('--')
@@ -587,7 +641,8 @@ def init(in_path, channel, low=2e3, high=20e3):
     callback.view_data = data_view
     return {'callback': callback, 'fig': fig, 'gridspec': gs, 'buttons':
         {'b_left': b_left, 'b_right': b_right, 'play_b': play_b, 'resize_b': resize_b, 'r_button': r_button,
-         'fs_click': cid, 'reset_b': reset_b}}  # Needed to keep the callbacks alive
+         'fs_click': cid, 'reset_b': reset_b ,
+         'spec_button': spec_button}}  # Needed to keep the callbacks alive
 
 
 def reset(callback, in_path, channel, low=2e3, high=20e3):