diff --git a/src/Makefile.am b/src/Makefile.am
index 1f16c01193bf85860712628d8803c4b55fa15c8d..c01e11f7421852e4ee385291e6c39a317a9a330c 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -2,4 +2,4 @@ bin_PROGRAMS = ncdu
 
 ncdu_SOURCES = browser.c calc.c main.c util.c exclude.c help.c delete.c
 
-noinst_HEADERS = ncdu.h
+noinst_HEADERS = calc.h ncdu.h
diff --git a/src/calc.c b/src/calc.c
index 3342f981453d3140c926cc8c593837cd6e7c0b56..64580e4618e9ec987e6763a5688deda82f4a88e2 100644
--- a/src/calc.c
+++ b/src/calc.c
@@ -24,6 +24,9 @@
 */
 
 #include "ncdu.h"
+#include "calc.h"
+
+struct state_calc stcalc;
 
 
 
diff --git a/src/calc.h b/src/calc.h
new file mode 100644
index 0000000000000000000000000000000000000000..527dd67c8131fecbebc56700138bb03d7d7cae2f
--- /dev/null
+++ b/src/calc.h
@@ -0,0 +1,48 @@
+/* ncdu - NCurses Disk Usage
+
+  Copyright (c) 2007-2009 Yoran Heling
+
+  Permission is hereby granted, free of charge, to any person obtaining
+  a copy of this software and associated documentation files (the
+  "Software"), to deal in the Software without restriction, including
+  without limitation the rights to use, copy, modify, merge, publish,
+  distribute, sublicense, and/or sell copies of the Software, and to
+  permit persons to whom the Software is furnished to do so, subject to
+  the following conditions:
+
+  The above copyright notice and this permission notice shall be included
+  in all copies or substantial portions of the Software.
+
+  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+*/
+
+#ifndef _calc_h
+#define _calc_h
+
+struct state_calc {
+  char err;                /* 1/0, error or not */
+  char cur[PATH_MAX];      /* current dir/item */
+  char lasterr[PATH_MAX];  /* last unreadable dir/item */
+  char errmsg[128];        /* error message, when err=1 */
+  struct dir *parent;      /* parent directory for the calculation */
+  dev_t curdev;            /* current device we're calculating on */
+  suseconds_t lastupdate;  /* time of the last screen update */
+  int anpos;               /* position of the animation string */
+  int sterr;               /* state to go to on error (ST_BROWSE/ST_QUIT) */
+};
+extern struct state_calc stcalc;
+
+
+void calc_process(void);
+int  calc_key(int);
+int  calc_draw(void);
+
+
+#endif
diff --git a/src/main.c b/src/main.c
index 12b059f013a735ad3a33782eb1986429482394f7..6dcedea81fe257c4646fc7258042a6428efacbbc 100644
--- a/src/main.c
+++ b/src/main.c
@@ -32,7 +32,6 @@ char sdir[PATH_MAX];
 int sflags, bflags, sdelay, bgraph;
 int subwinc, subwinr;
 int pstate;
-struct state_calc stcalc;
 
 
 void screen_draw() {
diff --git a/src/ncdu.h b/src/ncdu.h
index 3b966291f2af165d7687bdc275e2d7904a147a25..989210beb5da7808e85b33350c47ff0e5ef2c07f 100644
--- a/src/ncdu.h
+++ b/src/ncdu.h
@@ -44,6 +44,8 @@
 #include <sys/time.h>
 #include <dirent.h>
 
+#include "calc.h"
+
 /* set S_BLKSIZE if not defined already in sys/stat.h */
 #ifndef S_BLKSIZE
 # define S_BLKSIZE 512
@@ -136,18 +138,6 @@ struct dir {
   unsigned char flags;
 }; 
 
-struct state_calc {
-  char err;                /* 1/0, error or not */
-  char cur[PATH_MAX];      /* current dir/item */
-  char lasterr[PATH_MAX];  /* last unreadable dir/item */
-  char errmsg[128];        /* error message, when err=1 */
-  struct dir *parent;      /* parent directory for the calculation */
-  dev_t curdev;            /* current device we're calculating on */
-  suseconds_t lastupdate;  /* time of the last screen update */
-  int anpos;               /* position of the animation string */
-  int sterr;               /* state to go to on error (ST_BROWSE/ST_QUIT) */
-};
-
 
 
 /*
@@ -166,7 +156,6 @@ extern int sflags, bflags, sdelay, bgraph;
 extern int subwinr, subwinc;
 /* program state */
 extern int pstate;
-extern struct state_calc stcalc;
 
 
 /*
@@ -183,10 +172,6 @@ void nccreate(int, int, char *);
 void ncprint(int, int, char *, ...);
 struct dir *freedir(struct dir *);
 char *getpath(struct dir *, char *);
-/* calc.c */
-void calc_process(void);
-int  calc_key(int);
-int  calc_draw(void);
 /* browser.c */
 void drawBrowser(int);
 void showBrowser(void);