From c093f4cce643e245ab2048e0782237744208eb9f Mon Sep 17 00:00:00 2001
From: Ben Longbons <b.r.longbons@gmail.com>
Date: Thu, 24 Apr 2014 16:13:40 -0700
Subject: Header cleanup

---
 src/admin/ladmin.cpp               |  7 ++++---
 src/admin/main.cpp                 |  3 ++-
 src/char/char.cpp                  | 14 ++++++-------
 src/char/char.hpp                  |  4 ++--
 src/char/int_party.cpp             |  5 ++---
 src/char/int_storage.cpp           |  7 ++-----
 src/char/inter.cpp                 |  9 ++++-----
 src/char/inter.hpp                 |  2 +-
 src/char/main.cpp                  |  3 ++-
 src/compat/alg.cpp                 | 21 -------------------
 src/compat/alg.hpp                 | 41 --------------------------------------
 src/compat/iter_test.cpp           |  4 ++--
 src/compat/memory.hpp              |  1 +
 src/generic/array.cpp              | 21 +++++++++++++++++++
 src/generic/array.hpp              | 41 ++++++++++++++++++++++++++++++++++++++
 src/generic/enum.hpp               |  2 ++
 src/generic/intern-pool.hpp        |  1 +
 src/generic/intern-pool_test.cpp   |  2 +-
 src/generic/md5.cpp                |  5 -----
 src/generic/md5.hpp                |  4 ----
 src/generic/random.hpp             |  2 --
 src/io/cxxstdio.hpp                |  4 +---
 src/io/fd.hpp                      |  2 --
 src/io/line.cpp                    |  4 +---
 src/io/line.hpp                    |  3 +--
 src/io/line_test.cpp               |  1 +
 src/io/lock.cpp                    |  3 +++
 src/io/read.cpp                    |  2 +-
 src/io/read_test.cpp               |  2 ++
 src/io/write.cpp                   |  7 ++++---
 src/io/write_test.cpp              |  1 +
 src/login/login.cpp                |  9 +++------
 src/login/main.cpp                 |  3 ++-
 src/map/atcommand.cpp              |  8 +++++---
 src/map/atcommand.hpp              |  3 ++-
 src/map/battle.cpp                 |  4 ++--
 src/map/battle.hpp                 |  5 +----
 src/map/battle.t.hpp               |  2 ++
 src/map/chrif.cpp                  |  7 +++----
 src/map/chrif.hpp                  |  5 +----
 src/map/clif.cpp                   | 12 +++++------
 src/map/clif.hpp                   |  6 ++++--
 src/map/fwd.hpp                    | 24 ++++++++++++++++++++++
 src/map/grfio.cpp                  |  6 ++----
 src/map/grfio.hpp                  |  4 +++-
 src/map/intif.cpp                  |  5 ++---
 src/map/intif.hpp                  |  3 ++-
 src/map/itemdb.cpp                 |  7 +------
 src/map/itemdb.hpp                 |  1 +
 src/map/magic-expr-eval.hpp        |  4 +++-
 src/map/magic-expr.cpp             |  8 ++++++--
 src/map/magic-expr.hpp             |  6 ++++--
 src/map/magic-interpreter-base.cpp |  6 ++++--
 src/map/magic-interpreter.hpp      | 19 +++++++-----------
 src/map/magic-stmt.cpp             |  2 +-
 src/map/magic-v2.cpp               | 11 ++++++++++
 src/map/magic.cpp                  |  6 +++++-
 src/map/magic.hpp                  |  4 +---
 src/map/main.cpp                   |  3 ++-
 src/map/map.cpp                    |  9 +++++++--
 src/map/map.hpp                    | 29 +++++----------------------
 src/map/map.t.hpp                  |  4 ++++
 src/map/mapflag.hpp                |  4 ++--
 src/map/mob.cpp                    |  3 +--
 src/map/mob.hpp                    |  3 ++-
 src/map/npc.cpp                    |  6 +++---
 src/map/npc.hpp                    |  2 +-
 src/map/party.cpp                  |  6 ++----
 src/map/party.hpp                  |  7 ++-----
 src/map/path.cpp                   |  9 +++++----
 src/map/path.hpp                   |  2 --
 src/map/pc.cpp                     |  8 ++++----
 src/map/pc.hpp                     |  2 ++
 src/map/script.cpp                 |  9 +++++----
 src/map/script.hpp                 |  5 -----
 src/map/skill-pools.cpp            |  1 +
 src/map/skill.cpp                  | 10 +++++-----
 src/map/skill.hpp                  |  7 +++----
 src/map/storage.cpp                | 28 +++++++++++++++++++++-----
 src/map/storage.hpp                |  3 ++-
 src/map/tmw.cpp                    |  7 ++++---
 src/map/tmw.hpp                    |  2 --
 src/map/trade.hpp                  |  2 +-
 src/mmo/config_parse.cpp           |  2 ++
 src/mmo/core.cpp                   |  6 ++----
 src/mmo/dumb_ptr.hpp               |  7 ++-----
 src/mmo/extract.cpp                |  2 ++
 src/mmo/fwd.hpp                    | 16 +++++++++++++++
 src/mmo/human_time_diff.hpp        |  2 ++
 src/mmo/ip.cpp                     |  2 ++
 src/mmo/ip.hpp                     |  5 +++--
 src/mmo/ip_test.cpp                |  3 +++
 src/mmo/md5more.cpp                |  6 ++++++
 src/mmo/md5more.hpp                |  5 +----
 src/mmo/mmo.hpp                    | 17 +++-------------
 src/mmo/socket.cpp                 | 10 ++++------
 src/mmo/socket.hpp                 |  7 +++----
 src/mmo/timer.cpp                  |  6 +-----
 src/mmo/timer.t.hpp                |  2 --
 src/mmo/utils.cpp                  |  2 --
 src/mmo/utils.hpp                  |  3 ---
 src/monitor/main.cpp               |  1 +
 src/range/fwd.hpp                  |  2 ++
 src/range/slice.tcc                |  2 --
 src/sexpr/lexer.cpp                |  2 ++
 src/sexpr/lexer.hpp                |  3 +--
 src/sexpr/lexer_test.cpp           |  2 ++
 src/sexpr/parser.cpp               |  3 +++
 src/sexpr/parser.hpp               |  2 +-
 src/strings/all.hpp                |  1 +
 src/strings/astring.cpp            |  7 ++++++-
 src/strings/astring.hpp            |  3 ---
 src/strings/base.hpp               |  2 --
 src/strings/base.tcc               |  2 ++
 src/strings/base_test.cpp          |  1 +
 src/strings/literal.hpp            |  2 --
 src/strings/mstring.hpp            |  2 --
 src/strings/pair.hpp               |  4 ----
 src/strings/rstring.cpp            |  6 +++++-
 src/strings/rstring.hpp            |  1 -
 src/strings/sstring.cpp            |  3 +++
 src/strings/strings2_test.cpp      |  4 ++--
 src/strings/strings_test.cpp       |  3 ++-
 src/strings/tstring.cpp            |  3 +++
 src/strings/vstring.tcc            |  4 ++--
 src/strings/xstring.cpp            |  7 +++++++
 src/strings/xstring.hpp            |  1 -
 src/strings/zstring.cpp            |  8 +++++++-
 src/strings/zstring.hpp            |  3 ---
 src/strings/zstring.tcc            |  2 --
 src/tests/test.cpp                 |  3 ++-
 131 files changed, 410 insertions(+), 361 deletions(-)
 delete mode 100644 src/compat/alg.cpp
 delete mode 100644 src/compat/alg.hpp
 create mode 100644 src/generic/array.cpp
 create mode 100644 src/generic/array.hpp

diff --git a/src/admin/ladmin.cpp b/src/admin/ladmin.cpp
index c078104..cf5735b 100644
--- a/src/admin/ladmin.cpp
+++ b/src/admin/ladmin.cpp
@@ -1,4 +1,4 @@
-#include <arpa/inet.h>
+#include "ladmin.hpp"
 //    ladmin.cpp - Local administration tool.
 //
 //    Copyright © ????-2004 Athena Dev Teams
@@ -26,14 +26,14 @@
 
 #include <cassert>
 
+#include <algorithm>
+
 #include "../strings/mstring.hpp"
 #include "../strings/astring.hpp"
 #include "../strings/zstring.hpp"
 #include "../strings/xstring.hpp"
 #include "../strings/vstring.hpp"
 
-#include "../generic/md5.hpp"
-
 #include "../io/cxxstdio.hpp"
 #include "../io/read.hpp"
 #include "../io/tty.hpp"
@@ -42,6 +42,7 @@
 #include "../mmo/config_parse.hpp"
 #include "../mmo/core.hpp"
 #include "../mmo/human_time_diff.hpp"
+#include "../mmo/ip.hpp"
 #include "../mmo/mmo.hpp"
 #include "../mmo/socket.hpp"
 #include "../mmo/utils.hpp"
diff --git a/src/admin/main.cpp b/src/admin/main.cpp
index c6f075e..56fd7b4 100644
--- a/src/admin/main.cpp
+++ b/src/admin/main.cpp
@@ -1,4 +1,3 @@
-#include "ladmin.hpp"
 //    admin/main.cpp - dummy file to make Make dependencies work
 //
 //    Copyright © 2013 Ben Longbons <b.r.longbons@gmail.com>
@@ -18,4 +17,6 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+#include "ladmin.hpp"
+
 #include "../poison.hpp"
diff --git a/src/char/char.cpp b/src/char/char.cpp
index 09d4a36..ae7a10a 100644
--- a/src/char/char.cpp
+++ b/src/char/char.cpp
@@ -22,8 +22,6 @@
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
-#include <arpa/inet.h>
-#include <sys/socket.h>
 #include <sys/wait.h>
 
 #include <netdb.h>
@@ -33,14 +31,13 @@
 
 #include <cassert>
 #include <cstdlib>
-#include <cstring>
-#include <ctime>
 
+#include <algorithm>
+#include <array>
 #include <bitset>
+#include <chrono>
 #include <set>
 
-#include "../compat/alg.hpp"
-
 #include "../ints/cmp.hpp"
 #include "../ints/udl.hpp"
 
@@ -49,19 +46,22 @@
 #include "../strings/zstring.hpp"
 #include "../strings/xstring.hpp"
 
-#include "../generic/db.hpp"
+#include "../generic/array.hpp"
 
 #include "../io/cxxstdio.hpp"
 #include "../io/lock.hpp"
 #include "../io/read.hpp"
 #include "../io/tty.hpp"
+#include "../io/write.hpp"
 
 #include "../mmo/config_parse.hpp"
 #include "../mmo/core.hpp"
 #include "../mmo/extract.hpp"
 #include "../mmo/human_time_diff.hpp"
+#include "../mmo/mmo.hpp"
 #include "../mmo/socket.hpp"
 #include "../mmo/timer.hpp"
+#include "../mmo/utils.hpp"
 #include "../mmo/version.hpp"
 
 #include "inter.hpp"
diff --git a/src/char/char.hpp b/src/char/char.hpp
index 5b4f9b9..64d4254 100644
--- a/src/char/char.hpp
+++ b/src/char/char.hpp
@@ -25,11 +25,11 @@
 
 # include "../strings/fwd.hpp"
 
+# include "../generic/array.hpp"
+
 # include "../mmo/ip.hpp"
 # include "../mmo/mmo.hpp"
 
-struct Session;
-
 constexpr int MAX_MAP_SERVERS = 30;
 
 struct mmo_map_server
diff --git a/src/char/int_party.cpp b/src/char/int_party.cpp
index 3afa8a9..1084bed 100644
--- a/src/char/int_party.cpp
+++ b/src/char/int_party.cpp
@@ -20,9 +20,6 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-#include <cstdlib>
-#include <cstring>
-
 #include "../ints/udl.hpp"
 
 #include "../strings/mstring.hpp"
@@ -34,8 +31,10 @@
 #include "../io/cxxstdio.hpp"
 #include "../io/lock.hpp"
 #include "../io/read.hpp"
+#include "../io/write.hpp"
 
 #include "../mmo/extract.hpp"
+#include "../mmo/ids.hpp"
 #include "../mmo/mmo.hpp"
 #include "../mmo/socket.hpp"
 
diff --git a/src/char/int_storage.cpp b/src/char/int_storage.cpp
index bd87e72..850d99e 100644
--- a/src/char/int_storage.cpp
+++ b/src/char/int_storage.cpp
@@ -20,20 +20,17 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-#include <cstdlib>
-#include <cstring>
-
-#include <functional>
-
 #include "../strings/mstring.hpp"
 #include "../strings/astring.hpp"
 #include "../strings/xstring.hpp"
+#include "../strings/literal.hpp"
 
 #include "../generic/db.hpp"
 
 #include "../io/cxxstdio.hpp"
 #include "../io/lock.hpp"
 #include "../io/read.hpp"
+#include "../io/write.hpp"
 
 #include "../mmo/extract.hpp"
 #include "../mmo/mmo.hpp"
diff --git a/src/char/inter.cpp b/src/char/inter.cpp
index 82704d1..621134f 100644
--- a/src/char/inter.cpp
+++ b/src/char/inter.cpp
@@ -21,8 +21,6 @@
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <cassert>
-#include <cstdlib>
-#include <cstring>
 
 #include <vector>
 
@@ -30,18 +28,19 @@
 #include "../strings/astring.hpp"
 #include "../strings/zstring.hpp"
 #include "../strings/xstring.hpp"
+#include "../strings/literal.hpp"
 
+#include "../generic/array.hpp"
 #include "../generic/db.hpp"
 
 #include "../io/cxxstdio.hpp"
 #include "../io/lock.hpp"
 #include "../io/read.hpp"
+#include "../io/write.hpp"
 
-#include "../mmo/config_parse.hpp"
 #include "../mmo/extract.hpp"
+#include "../mmo/mmo.hpp"
 #include "../mmo/socket.hpp"
-#include "../mmo/timer.hpp"
-#include "../mmo/utils.hpp"
 
 #include "char.hpp"
 #include "int_party.hpp"
diff --git a/src/char/inter.hpp b/src/char/inter.hpp
index e7a4317..3e48460 100644
--- a/src/char/inter.hpp
+++ b/src/char/inter.hpp
@@ -25,7 +25,7 @@
 
 # include "../strings/fwd.hpp"
 
-struct Session;
+# include "../mmo/fwd.hpp"
 
 bool inter_config(XString key, ZString value);
 void inter_init2();
diff --git a/src/char/main.cpp b/src/char/main.cpp
index 6814574..c2fd038 100644
--- a/src/char/main.cpp
+++ b/src/char/main.cpp
@@ -1,4 +1,3 @@
-#include "char.hpp"
 //    char/main.cpp - dummy file to make Make dependencies work
 //
 //    Copyright © 2013 Ben Longbons <b.r.longbons@gmail.com>
@@ -18,4 +17,6 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+#include "char.hpp"
+
 #include "../poison.hpp"
diff --git a/src/compat/alg.cpp b/src/compat/alg.cpp
deleted file mode 100644
index 8cfd00a..0000000
--- a/src/compat/alg.cpp
+++ /dev/null
@@ -1,21 +0,0 @@
-#include "alg.hpp"
-//    alg.cpp - Silly math stuff.
-//
-//    Copyright © 2012 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
diff --git a/src/compat/alg.hpp b/src/compat/alg.hpp
deleted file mode 100644
index 2587f9e..0000000
--- a/src/compat/alg.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef TMWA_COMPAT_ALG_HPP
-#define TMWA_COMPAT_ALG_HPP
-//    alg.hpp - Silly math stuff.
-//
-//    Copyright © 2012 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-# include "fwd.hpp"
-
-# if 0
-#  include <type_traits>
-
-
-template<class A, class B>
-typename std::common_type<A, B>::type min(A a, B b)
-{
-    return a < b ? a : b;
-}
-
-template<class A, class B>
-typename std::common_type<A, B>::type max(A a, B b)
-{
-    return b < a ? a : b;
-}
-# endif
-
-#endif // TMWA_COMPAT_ALG_HPP
diff --git a/src/compat/iter_test.cpp b/src/compat/iter_test.cpp
index 99b2e68..2c3cdc8 100644
--- a/src/compat/iter_test.cpp
+++ b/src/compat/iter_test.cpp
@@ -20,9 +20,9 @@
 
 #include <gtest/gtest.h>
 
-#include "../ints/udl.hpp"
+#include <algorithm>
 
-#include "../strings/xstring.hpp"
+#include "../ints/udl.hpp"
 
 #include "../poison.hpp"
 
diff --git a/src/compat/memory.hpp b/src/compat/memory.hpp
index 8cafcb4..3a2af96 100644
--- a/src/compat/memory.hpp
+++ b/src/compat/memory.hpp
@@ -22,6 +22,7 @@
 # include "fwd.hpp"
 
 # include <memory>
+# include <type_traits>
 
 
 template<class T>
diff --git a/src/generic/array.cpp b/src/generic/array.cpp
new file mode 100644
index 0000000..96c85ac
--- /dev/null
+++ b/src/generic/array.cpp
@@ -0,0 +1,21 @@
+#include "array.hpp"
+//    array.cpp - A simple bounds-checked array.
+//
+//    Copyright © 2014 Ben Longbons <b.r.longbons@gmail.com>
+//
+//    This file is part of The Mana World (Athena server)
+//
+//    This program is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+//
+//    This program is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+//
+//    You should have received a copy of the GNU General Public License
+//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+#include "../poison.hpp"
diff --git a/src/generic/array.hpp b/src/generic/array.hpp
new file mode 100644
index 0000000..e6fefae
--- /dev/null
+++ b/src/generic/array.hpp
@@ -0,0 +1,41 @@
+#ifndef TMWA_GENERIC_ARRAY_HPP
+#define TMWA_GENERIC_ARRAY_HPP
+//    array.hpp - A simple bounds-checked array.
+//
+//    Copyright © 2014 Ben Longbons <b.r.longbons@gmail.com>
+//
+//    This file is part of The Mana World (Athena server)
+//
+//    This program is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+//
+//    This program is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+//
+//    You should have received a copy of the GNU General Public License
+//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# include "fwd.hpp"
+
+# include <cassert>
+# include <cstddef>
+
+template<class T, size_t n>
+struct Array
+{
+    T data[n];
+public:
+    T& operator [](size_t i) { assert (i < n); return data[i]; }
+    const T& operator [](size_t i) const { assert (i < n); return data[i]; }
+
+    T *begin() { return data + 0; }
+    T *end() { return data + n; }
+    const T *begin() const { return data + 0; }
+    const T *end() const { return data + n; }
+};
+
+#endif // TMWA_GENERIC_ARRAY_HPP
diff --git a/src/generic/enum.hpp b/src/generic/enum.hpp
index bf0ac74..5f075bc 100644
--- a/src/generic/enum.hpp
+++ b/src/generic/enum.hpp
@@ -22,6 +22,7 @@
 # include "fwd.hpp"
 
 # include <cassert>
+# include <cstddef>
 
 # include <algorithm>
 # include <type_traits>
@@ -124,6 +125,7 @@ public:
 
 // std::underlying_type isn't supported until gcc 4.7
 // this is a poor man's emulation
+// TODO I'm depending on GCC 4.7 now, this can go away
 template<class E>
 struct underlying_type
 {
diff --git a/src/generic/intern-pool.hpp b/src/generic/intern-pool.hpp
index b9fc38c..62a1d7f 100644
--- a/src/generic/intern-pool.hpp
+++ b/src/generic/intern-pool.hpp
@@ -22,6 +22,7 @@
 # include "fwd.hpp"
 
 # include <cassert>
+# include <cstddef>
 
 # include <map>
 # include <vector>
diff --git a/src/generic/intern-pool_test.cpp b/src/generic/intern-pool_test.cpp
index 3207792..f53e31d 100644
--- a/src/generic/intern-pool_test.cpp
+++ b/src/generic/intern-pool_test.cpp
@@ -20,7 +20,7 @@
 
 #include <gtest/gtest.h>
 
-#include "../strings/base.hpp"
+#include "../strings/literal.hpp"
 
 #include "../poison.hpp"
 
diff --git a/src/generic/md5.cpp b/src/generic/md5.cpp
index b49d36f..38a605c 100644
--- a/src/generic/md5.cpp
+++ b/src/generic/md5.cpp
@@ -18,14 +18,9 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-#include <cstring>
-
 #include "../compat/rawmem.hpp"
 
 #include "../strings/xstring.hpp"
-#include "../strings/vstring.hpp"
-
-#include "random.hpp"
 
 #include "../poison.hpp"
 
diff --git a/src/generic/md5.hpp b/src/generic/md5.hpp
index 071c08b..fd23eca 100644
--- a/src/generic/md5.hpp
+++ b/src/generic/md5.hpp
@@ -21,11 +21,7 @@
 
 # include "fwd.hpp"
 
-# include <netinet/in.h>
-
 # include <cstdint>
-# include <cstddef>
-# include <cstdio>
 
 # include <array>
 
diff --git a/src/generic/random.hpp b/src/generic/random.hpp
index 2fb2632..3b27b36 100644
--- a/src/generic/random.hpp
+++ b/src/generic/random.hpp
@@ -23,8 +23,6 @@
 
 # include "random.t.hpp"
 
-# include "fwd.hpp"
-
 # include <random>
 
 // This is not namespace random since that collides with a C function,
diff --git a/src/io/cxxstdio.hpp b/src/io/cxxstdio.hpp
index 65d32cd..c040d90 100644
--- a/src/io/cxxstdio.hpp
+++ b/src/io/cxxstdio.hpp
@@ -19,7 +19,7 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# include "../sanity.hpp"
+# include "fwd.hpp"
 
 # include <cstdarg>
 # include <cstdio>
@@ -28,8 +28,6 @@
 
 # include "../generic/enum.hpp"
 
-# include "fwd.hpp"
-
 
 namespace cxxstdio
 {
diff --git a/src/io/fd.hpp b/src/io/fd.hpp
index cf91ed1..a7460a8 100644
--- a/src/io/fd.hpp
+++ b/src/io/fd.hpp
@@ -24,8 +24,6 @@
 # include <sys/select.h>
 # include <sys/socket.h>
 
-# include <unistd.h>
-
 # include "../strings/fwd.hpp"
 
 
diff --git a/src/io/line.cpp b/src/io/line.cpp
index 8451b87..adefe53 100644
--- a/src/io/line.cpp
+++ b/src/io/line.cpp
@@ -18,12 +18,10 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-#include <fcntl.h>
-#include <unistd.h>
-
 #include "../strings/astring.hpp"
 #include "../strings/mstring.hpp"
 #include "../strings/zstring.hpp"
+#include "../strings/xstring.hpp"
 
 #include "cxxstdio.hpp"
 
diff --git a/src/io/line.hpp b/src/io/line.hpp
index fb1984d..510a8f5 100644
--- a/src/io/line.hpp
+++ b/src/io/line.hpp
@@ -22,10 +22,9 @@
 # include "fwd.hpp"
 
 # include "../strings/rstring.hpp"
-# include "../strings/astring.hpp"
 # include "../strings/zstring.hpp"
+# include "../strings/literal.hpp"
 
-# include "fd.hpp"
 # include "read.hpp"
 
 
diff --git a/src/io/line_test.cpp b/src/io/line_test.cpp
index 921e4c8..6a4a55c 100644
--- a/src/io/line_test.cpp
+++ b/src/io/line_test.cpp
@@ -20,6 +20,7 @@
 
 #include <gtest/gtest.h>
 
+#include "../strings/astring.hpp"
 #include "../strings/zstring.hpp"
 
 #include "../poison.hpp"
diff --git a/src/io/lock.cpp b/src/io/lock.cpp
index 3f83611..f6bbb01 100644
--- a/src/io/lock.cpp
+++ b/src/io/lock.cpp
@@ -22,9 +22,12 @@
 #include <unistd.h>
 
 #include <cerrno>
+#include <cstdio>
 #include <cstdlib>
 
+#include "../strings/astring.hpp"
 #include "../strings/zstring.hpp"
+#include "../strings/literal.hpp"
 
 #include "cxxstdio.hpp"
 #include "fd.hpp"
diff --git a/src/io/read.cpp b/src/io/read.cpp
index 61a6256..803d486 100644
--- a/src/io/read.cpp
+++ b/src/io/read.cpp
@@ -19,11 +19,11 @@
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <fcntl.h>
-#include <unistd.h>
 
 #include "../strings/astring.hpp"
 #include "../strings/mstring.hpp"
 #include "../strings/zstring.hpp"
+#include "../strings/literal.hpp"
 
 #include "../io/cxxstdio.hpp"
 
diff --git a/src/io/read_test.cpp b/src/io/read_test.cpp
index 398c01e..77b2286 100644
--- a/src/io/read_test.cpp
+++ b/src/io/read_test.cpp
@@ -20,7 +20,9 @@
 
 #include <gtest/gtest.h>
 
+#include "../strings/astring.hpp"
 #include "../strings/zstring.hpp"
+#include "../strings/literal.hpp"
 
 #include "../poison.hpp"
 
diff --git a/src/io/write.cpp b/src/io/write.cpp
index 817e6c0..18c4f9d 100644
--- a/src/io/write.cpp
+++ b/src/io/write.cpp
@@ -18,13 +18,14 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-#include <sys/uio.h>
-
 #include <fcntl.h>
-#include <unistd.h>
 
+#include <cstdio>
 #include <cstdlib>
 
+#include <algorithm>
+
+#include "../strings/zstring.hpp"
 #include "../strings/xstring.hpp"
 
 #include "../poison.hpp"
diff --git a/src/io/write_test.cpp b/src/io/write_test.cpp
index 5419501..970be42 100644
--- a/src/io/write_test.cpp
+++ b/src/io/write_test.cpp
@@ -26,6 +26,7 @@
 #include "../strings/astring.hpp"
 #include "../strings/mstring.hpp"
 #include "../strings/xstring.hpp"
+#include "../strings/literal.hpp"
 
 #include "../poison.hpp"
 
diff --git a/src/login/login.cpp b/src/login/login.cpp
index 6831b19..2a1cb89 100644
--- a/src/login/login.cpp
+++ b/src/login/login.cpp
@@ -1,3 +1,4 @@
+#include "login.hpp"
 //    login.cpp - Core of the login server.
 //
 //    Copyright © ????-2004 Athena Dev Teams
@@ -20,8 +21,6 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-#include <arpa/inet.h>
-#include <sys/types.h>
 #include <sys/wait.h>
 
 #include <netdb.h>
@@ -29,14 +28,10 @@
 
 #include <sys/resource.h>
 
-#include <cstdlib>
-#include <cstring>
 #include <ctime>
 
 #include <algorithm>
-#include <array>
 #include <set>
-#include <type_traits>
 
 #include "../ints/udl.hpp"
 
@@ -53,11 +48,13 @@
 #include "../io/lock.hpp"
 #include "../io/read.hpp"
 #include "../io/tty.hpp"
+#include "../io/write.hpp"
 
 #include "../mmo/config_parse.hpp"
 #include "../mmo/core.hpp"
 #include "../mmo/extract.hpp"
 #include "../mmo/human_time_diff.hpp"
+#include "../mmo/ids.hpp"
 #include "../mmo/md5more.hpp"
 #include "../mmo/mmo.hpp"
 #include "../mmo/socket.hpp"
diff --git a/src/login/main.cpp b/src/login/main.cpp
index 5d51212..857d493 100644
--- a/src/login/main.cpp
+++ b/src/login/main.cpp
@@ -1,4 +1,3 @@
-#include "login.hpp"
 //    login/main.cpp - dummy file to make Make dependencies work
 //
 //    Copyright © 2013 Ben Longbons <b.r.longbons@gmail.com>
@@ -18,4 +17,6 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+#include "login.hpp"
+
 #include "../poison.hpp"
diff --git a/src/map/atcommand.cpp b/src/map/atcommand.cpp
index 3cfeb42..2f08627 100644
--- a/src/map/atcommand.cpp
+++ b/src/map/atcommand.cpp
@@ -20,10 +20,10 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-#include <cmath>
-#include <cstring>
 #include <ctime>
 
+#include <algorithm>
+
 #include "../conf/version.hpp"
 
 #include "../compat/nullpo.hpp"
@@ -35,6 +35,7 @@
 #include "../strings/xstring.hpp"
 #include "../strings/vstring.hpp"
 
+#include "../generic/db.hpp"
 #include "../generic/random.hpp"
 
 #include "../io/cxxstdio.hpp"
@@ -45,9 +46,11 @@
 #include "../mmo/core.hpp"
 #include "../mmo/extract.hpp"
 #include "../mmo/human_time_diff.hpp"
+#include "../mmo/ids.hpp"
 #include "../mmo/mmo.hpp"
 #include "../mmo/socket.hpp"
 #include "../mmo/timer.hpp"
+#include "../mmo/utils.hpp"
 #include "../mmo/version.hpp"
 
 #include "battle.hpp"
@@ -60,7 +63,6 @@
 #include "npc.hpp"
 #include "party.hpp"
 #include "pc.hpp"
-#include "script.hpp"
 #include "skill.hpp"
 #include "storage.hpp"
 #include "tmw.hpp"
diff --git a/src/map/atcommand.hpp b/src/map/atcommand.hpp
index df3448b..0a24163 100644
--- a/src/map/atcommand.hpp
+++ b/src/map/atcommand.hpp
@@ -25,7 +25,8 @@
 
 # include "../strings/fwd.hpp"
 
-# include "map.hpp"
+# include "../mmo/fwd.hpp"
+# include "../mmo/dumb_ptr.hpp"
 
 bool is_atcommand(Session *s, dumb_ptr<map_session_data> sd,
         ZString message, GmLevel gmlvl);
diff --git a/src/map/battle.cpp b/src/map/battle.cpp
index 09910c6..02f5bdc 100644
--- a/src/map/battle.cpp
+++ b/src/map/battle.cpp
@@ -21,13 +21,13 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-#include <cstring>
+#include <algorithm>
 
-#include "../compat/alg.hpp"
 #include "../compat/nullpo.hpp"
 
 #include "../strings/astring.hpp"
 #include "../strings/zstring.hpp"
+#include "../strings/xstring.hpp"
 
 #include "../generic/random.hpp"
 
diff --git a/src/map/battle.hpp b/src/map/battle.hpp
index 94d0b45..6e73e70 100644
--- a/src/map/battle.hpp
+++ b/src/map/battle.hpp
@@ -27,6 +27,7 @@
 
 # include "../strings/fwd.hpp"
 
+# include "../mmo/dumb_ptr.hpp"
 # include "../mmo/timer.t.hpp"
 
 # include "magic-interpreter.t.hpp"
@@ -44,10 +45,6 @@ struct Damage
     ATK dmg_lv;
 };
 
-struct map_session_data;
-struct mob_data;
-struct block_list;
-
 // ダメージ計算
 
 struct Damage battle_calc_attack(BF attack_type,
diff --git a/src/map/battle.t.hpp b/src/map/battle.t.hpp
index 45d75b8..d0d3389 100644
--- a/src/map/battle.t.hpp
+++ b/src/map/battle.t.hpp
@@ -23,6 +23,8 @@
 
 # include "fwd.hpp"
 
+# include <cstdint>
+
 # include "../generic/enum.hpp"
 
 namespace e
diff --git a/src/map/chrif.cpp b/src/map/chrif.cpp
index 3c2ac63..50c62a8 100644
--- a/src/map/chrif.cpp
+++ b/src/map/chrif.cpp
@@ -20,10 +20,6 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-#include <arpa/inet.h>
-
-#include <cstring>
-
 #include "../compat/fun.hpp"
 #include "../compat/nullpo.hpp"
 
@@ -32,6 +28,9 @@
 
 #include "../io/cxxstdio.hpp"
 
+#include "../mmo/human_time_diff.hpp"
+#include "../mmo/ip.hpp"
+#include "../mmo/mmo.hpp"
 #include "../mmo/socket.hpp"
 #include "../mmo/timer.hpp"
 #include "../mmo/utils.hpp"
diff --git a/src/map/chrif.hpp b/src/map/chrif.hpp
index f3fc152..7ac16e5 100644
--- a/src/map/chrif.hpp
+++ b/src/map/chrif.hpp
@@ -25,11 +25,8 @@
 
 # include "../strings/fwd.hpp"
 
+# include "../mmo/fwd.hpp"
 # include "../mmo/dumb_ptr.hpp"
-# include "../mmo/human_time_diff.hpp"
-# include "../mmo/ip.hpp"
-
-# include "map.hpp"
 
 void chrif_setuserid(AccountName);
 void chrif_setpasswd(AccountPass);
diff --git a/src/map/clif.cpp b/src/map/clif.cpp
index bdb8609..b19c7eb 100644
--- a/src/map/clif.cpp
+++ b/src/map/clif.cpp
@@ -20,13 +20,11 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-#include <arpa/inet.h>
-
-#include <cstdlib>
-#include <cstring>
+#include <cassert>
 #include <ctime>
 
-#include "../compat/alg.hpp"
+#include <algorithm>
+
 #include "../compat/attr.hpp"
 #include "../compat/fun.hpp"
 #include "../compat/nullpo.hpp"
@@ -37,14 +35,14 @@
 #include "../strings/zstring.hpp"
 #include "../strings/xstring.hpp"
 
-#include "../generic/random.hpp"
-
 #include "../io/cxxstdio.hpp"
 #include "../io/write.hpp"
 
+#include "../mmo/ip.hpp"
 #include "../mmo/md5more.hpp"
 #include "../mmo/socket.hpp"
 #include "../mmo/timer.hpp"
+#include "../mmo/utils.hpp"
 #include "../mmo/version.hpp"
 
 #include "atcommand.hpp"
diff --git a/src/map/clif.hpp b/src/map/clif.hpp
index cb84ee9..19d5fd3 100644
--- a/src/map/clif.hpp
+++ b/src/map/clif.hpp
@@ -29,11 +29,13 @@
 
 # include "../strings/fwd.hpp"
 
-# include "../mmo/ip.hpp"
+# include "../mmo/fwd.hpp"
+# include "../mmo/dumb_ptr.hpp"
+# include "../mmo/mmo.hpp"
 # include "../mmo/timer.t.hpp"
 
 # include "battle.t.hpp"
-# include "map.hpp"
+# include "map.t.hpp"
 # include "pc.t.hpp"
 # include "skill.t.hpp"
 
diff --git a/src/map/fwd.hpp b/src/map/fwd.hpp
index 9801f5c..b4ced2d 100644
--- a/src/map/fwd.hpp
+++ b/src/map/fwd.hpp
@@ -22,6 +22,30 @@
 # include "../sanity.hpp"
 
 // meh, add more when I feel like it
+class BlockId;
+struct block_list;
 struct map_session_data;
+struct npc_data;
+struct mob_data;
+struct flooritem_data;
+struct invocation;
+struct map_local;
+class npc_data_script;
+class npc_data_shop;
+class npc_data_warp;
+class npc_data_message;
+struct NpcEvent;
+
+struct item_data;
+
+// magic
+struct fun_t;
+struct op_t;
+struct expr_t;
+struct val_t;
+struct location_t;
+struct area_t;
+struct spell_t;
+struct invocation;
 
 #endif // TMWA_MAP_FWD_HPP
diff --git a/src/map/grfio.cpp b/src/map/grfio.cpp
index b03456c..c5ca9a1 100644
--- a/src/map/grfio.cpp
+++ b/src/map/grfio.cpp
@@ -20,25 +20,23 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-#include <sys/stat.h>
-
 #include <fcntl.h>
 #include <unistd.h>
 
 #include <cassert>
-#include <cstdio>
-#include <cstring>
 
 #include <map>
 
 #include "../strings/mstring.hpp"
 #include "../strings/rstring.hpp"
 #include "../strings/astring.hpp"
+#include "../strings/zstring.hpp"
 
 #include "../io/cxxstdio.hpp"
 #include "../io/read.hpp"
 
 #include "../mmo/extract.hpp"
+#include "../mmo/mmo.hpp"
 
 #include "../poison.hpp"
 
diff --git a/src/map/grfio.hpp b/src/map/grfio.hpp
index 3083f8c..d9329d3 100644
--- a/src/map/grfio.hpp
+++ b/src/map/grfio.hpp
@@ -27,7 +27,9 @@
 
 # include <vector>
 
-# include "../mmo/mmo.hpp"
+# include "../strings/fwd.hpp"
+
+# include "../mmo/fwd.hpp"
 
 bool load_resnametable(ZString filename);
 
diff --git a/src/map/intif.cpp b/src/map/intif.cpp
index 52ea8b0..d0b1ea0 100644
--- a/src/map/intif.cpp
+++ b/src/map/intif.cpp
@@ -20,17 +20,16 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-#include <cstdlib>
-#include <cstring>
-
 #include "../compat/nullpo.hpp"
 
 #include "../strings/astring.hpp"
 #include "../strings/zstring.hpp"
 #include "../strings/xstring.hpp"
+#include "../strings/literal.hpp"
 
 #include "../io/cxxstdio.hpp"
 
+#include "../mmo/mmo.hpp"
 #include "../mmo/socket.hpp"
 
 #include "battle.hpp"
diff --git a/src/map/intif.hpp b/src/map/intif.hpp
index 529c42e..e05d00f 100644
--- a/src/map/intif.hpp
+++ b/src/map/intif.hpp
@@ -25,7 +25,8 @@
 
 # include "../strings/fwd.hpp"
 
-# include "map.hpp"
+# include "../mmo/fwd.hpp"
+# include "../mmo/dumb_ptr.hpp"
 
 int intif_parse(Session *);
 
diff --git a/src/map/itemdb.cpp b/src/map/itemdb.cpp
index 810c488..c88a201 100644
--- a/src/map/itemdb.cpp
+++ b/src/map/itemdb.cpp
@@ -20,24 +20,19 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-#include <cstdlib>
-#include <cstring>
-
-#include "../compat/nullpo.hpp"
+#include <algorithm>
 
 #include "../strings/astring.hpp"
 #include "../strings/zstring.hpp"
 #include "../strings/xstring.hpp"
 
 #include "../generic/db.hpp"
-#include "../generic/random.hpp"
 
 #include "../io/cxxstdio.hpp"
 #include "../io/read.hpp"
 
 #include "../mmo/config_parse.hpp"
 #include "../mmo/extract.hpp"
-#include "../mmo/socket.hpp"
 
 #include "../poison.hpp"
 
diff --git a/src/map/itemdb.hpp b/src/map/itemdb.hpp
index 06a4af9..1d132ad 100644
--- a/src/map/itemdb.hpp
+++ b/src/map/itemdb.hpp
@@ -23,6 +23,7 @@
 
 # include "fwd.hpp"
 
+# include "../mmo/ids.hpp"
 # include "../mmo/mmo.hpp"
 
 # include "map.t.hpp"
diff --git a/src/map/magic-expr-eval.hpp b/src/map/magic-expr-eval.hpp
index e19c896..ae86774 100644
--- a/src/map/magic-expr-eval.hpp
+++ b/src/map/magic-expr-eval.hpp
@@ -24,9 +24,10 @@
 
 # include "../range/slice.hpp"
 
+# include "../strings/fwd.hpp"
 # include "../strings/zstring.hpp"
 
-# include "magic-interpreter.hpp"
+# include "magic-interpreter.t.hpp"
 
 /* Helper definitions for dealing with functions and operations */
 
@@ -36,6 +37,7 @@ int magic_signature_check(ZString opname, ZString funname, ZString signature,
 void magic_area_rect(map_local **m, int *x, int *y, int *width, int *height,
         area_t& area);
 
+// TODO kill this like I killed VAR
 # define ARGINT(x) args[x].v.v_int
 # define ARGDIR(x) args[x].v.v_dir
 # define ARGSTR(x) ZString(args[x].v.v_string)
diff --git a/src/map/magic-expr.cpp b/src/map/magic-expr.cpp
index 6a411b7..9f3f63e 100644
--- a/src/map/magic-expr.cpp
+++ b/src/map/magic-expr.cpp
@@ -22,24 +22,28 @@
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <cassert>
-#include <cmath>
 
-#include "../compat/alg.hpp"
+#include <algorithm>
 
 #include "../strings/mstring.hpp"
 #include "../strings/astring.hpp"
 #include "../strings/zstring.hpp"
 #include "../strings/vstring.hpp"
+#include "../strings/literal.hpp"
 
 #include "../generic/random.hpp"
 
 #include "../io/cxxstdio.hpp"
 
+#include "../mmo/dumb_ptr.hpp"
+
 #include "battle.hpp"
 #include "npc.hpp"
 #include "pc.hpp"
 #include "itemdb.hpp"
 
+#include "magic-interpreter.hpp"
+
 #include "../poison.hpp"
 
 static
diff --git a/src/map/magic-expr.hpp b/src/map/magic-expr.hpp
index bbe8bbf..007491c 100644
--- a/src/map/magic-expr.hpp
+++ b/src/map/magic-expr.hpp
@@ -24,10 +24,12 @@
 
 # include "magic-interpreter.hpp"
 
-# include "../range/slice.hpp"
+# include "../mmo/dumb_ptr.hpp"
+
+# include "../range/fwd.hpp"
 
-# include "../strings/fwd.hpp"
 # include "../strings/zstring.hpp"
+# include "../strings/literal.hpp"
 
 /*
  * Argument types:
diff --git a/src/map/magic-interpreter-base.cpp b/src/map/magic-interpreter-base.cpp
index 5d8aa35..a7c5496 100644
--- a/src/map/magic-interpreter-base.cpp
+++ b/src/map/magic-interpreter-base.cpp
@@ -1,4 +1,5 @@
 #include "magic-interpreter-base.hpp"
+#include "magic.hpp"
 //    magic-interpreter-base.cpp - Core of the old magic system.
 //
 //    Copyright © 2004-2011 The Mana World Development Team
@@ -19,7 +20,8 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-#include "magic-interpreter-aux.hpp"
+#include <algorithm>
+
 #include "magic-interpreter.hpp"
 
 #include "../strings/astring.hpp"
@@ -296,7 +298,7 @@ int spellguard_can_satisfy(spellguard_check_t *check, dumb_ptr<map_session_data>
         interval_t casttime = check->casttime;
 
         if (env->VAR(VAR_MIN_CASTTIME).ty == TYPE::INT)
-            casttime = max(casttime, static_cast<interval_t>(env->VAR(VAR_MIN_CASTTIME).v.v_int));
+            casttime = std::max(casttime, static_cast<interval_t>(env->VAR(VAR_MIN_CASTTIME).v.v_int));
 
         caster->cast_tick = tick + casttime;    /* Make sure not to cast too frequently */
 
diff --git a/src/map/magic-interpreter.hpp b/src/map/magic-interpreter.hpp
index 65c64e3..16fc447 100644
--- a/src/map/magic-interpreter.hpp
+++ b/src/map/magic-interpreter.hpp
@@ -26,23 +26,20 @@
 
 # include <cassert>
 
+# include <memory>
+
 # include "../strings/fwd.hpp"
 # include "../strings/rstring.hpp"
 
-# include "magic.hpp"
+# include "../mmo/dumb_ptr.hpp"
+# include "../mmo/ids.hpp"
+# include "../mmo/timer.t.hpp"
+# include "../mmo/utils.hpp"
+
 # include "map.hpp"
 # include "script.hpp"
 # include "skill.t.hpp"
 
-struct fun_t;
-struct op_t;
-struct expr_t;
-struct val_t;
-struct location_t;
-struct area_t;
-struct spell_t;
-struct invocation;
-
 struct location_t
 {
     map_local *m;
@@ -319,8 +316,6 @@ struct magic_conf_t
 # define VAR_SCRIPTTARGET        7
 # define VAR_LOCATION            8
 
-struct magic_config;
-
 struct env_t
 {
     magic_conf_t *base_env;
diff --git a/src/map/magic-stmt.cpp b/src/map/magic-stmt.cpp
index 8e4751d..5710828 100644
--- a/src/map/magic-stmt.cpp
+++ b/src/map/magic-stmt.cpp
@@ -1,4 +1,5 @@
 #include "magic-stmt.hpp"
+#include "magic.hpp"
 //    magic-stmt.cpp - Imperative commands for the magic backend.
 //
 //    Copyright © 2004-2011 The Mana World Development Team
@@ -35,7 +36,6 @@
 #include "magic-expr.hpp"
 #include "magic-expr-eval.hpp"
 #include "magic-interpreter.hpp"
-#include "magic-interpreter-aux.hpp"
 
 #include "battle.hpp"
 #include "clif.hpp"
diff --git a/src/map/magic-v2.cpp b/src/map/magic-v2.cpp
index 288e512..0239438 100644
--- a/src/map/magic-v2.cpp
+++ b/src/map/magic-v2.cpp
@@ -18,14 +18,25 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+#include <cstddef>
+
+#include <algorithm>
+#include <map>
 #include <set>
 
+#include "../strings/rstring.hpp"
+#include "../strings/literal.hpp"
+
+#include "../io/cxxstdio.hpp"
+#include "../io/line.hpp"
+
 #include "../sexpr/parser.hpp"
 
 #include "../mmo/dumb_ptr.hpp"
 
 #include "itemdb.hpp"
 #include "magic-expr.hpp"
+#include "magic-interpreter.hpp"
 
 #include "../poison.hpp"
 
diff --git a/src/map/magic.cpp b/src/map/magic.cpp
index 4ca5c4f..fec8372 100644
--- a/src/map/magic.cpp
+++ b/src/map/magic.cpp
@@ -18,14 +18,18 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-#include <cstring>
+#include <algorithm>
+#include <utility>
 
 #include "../strings/xstring.hpp"
 
 #include "../io/cxxstdio.hpp"
 
+#include "../mmo/dumb_ptr.hpp"
+
 #include "magic-interpreter.hpp"
 
+#include "map.hpp"
 #include "pc.hpp"
 
 #include "magic-expr.hpp"
diff --git a/src/map/magic.hpp b/src/map/magic.hpp
index 7a1a6e0..642ae21 100644
--- a/src/map/magic.hpp
+++ b/src/map/magic.hpp
@@ -26,11 +26,9 @@
 
 # include "../mmo/dumb_ptr.hpp"
 
-# include "map.hpp"
+# include "map.t.hpp"
 # include "skill.t.hpp"
 
-struct invocation;              /* Spell invocation */
-
 /**
  * Try to cast magic.
  *
diff --git a/src/map/main.cpp b/src/map/main.cpp
index 2db1408..8354f1c 100644
--- a/src/map/main.cpp
+++ b/src/map/main.cpp
@@ -1,4 +1,3 @@
-#include "map.hpp"
 //    map/main.cpp - dummy file to make Make dependencies work
 //
 //    Copyright © 2013 Ben Longbons <b.r.longbons@gmail.com>
@@ -18,4 +17,6 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+#include "map.hpp"
+
 #include "../poison.hpp"
diff --git a/src/map/map.cpp b/src/map/map.cpp
index 8ca0ba7..c98c315 100644
--- a/src/map/map.cpp
+++ b/src/map/map.cpp
@@ -29,7 +29,6 @@
 
 #include <cassert>
 #include <cstdlib>
-#include <cstring>
 
 #include "../compat/nullpo.hpp"
 #include "../compat/fun.hpp"
@@ -40,6 +39,7 @@
 #include "../strings/zstring.hpp"
 #include "../strings/xstring.hpp"
 #include "../strings/vstring.hpp"
+#include "../strings/literal.hpp"
 
 #include "../generic/db.hpp"
 #include "../generic/random2.hpp"
@@ -54,6 +54,7 @@
 #include "../mmo/extract.hpp"
 #include "../mmo/socket.hpp"
 #include "../mmo/timer.hpp"
+#include "../mmo/utils.hpp"
 #include "../mmo/version.hpp"
 
 #include "atcommand.hpp"
@@ -63,7 +64,7 @@
 #include "grfio.hpp"
 #include "itemdb.hpp"
 #include "magic.hpp"
-#include "magic-interpreter.hpp"
+#include "magic-interpreter.hpp" // for is_spell inline body
 #include "magic-v2.hpp"
 #include "mob.hpp"
 #include "npc.hpp"
@@ -114,6 +115,10 @@ void SessionDeleter::operator()(SessionData *sd)
     really_delete1 static_cast<map_session_data *>(sd);
 }
 
+VString<49> convert_for_printf(NpcEvent ev)
+{
+    return STRNPRINTF(50, "%s::%s"_fmt, ev.npc, ev.label);
+}
 bool extract(XString str, NpcEvent *ev)
 {
     XString mid;
diff --git a/src/map/map.hpp b/src/map/map.hpp
index 620dc52..2bc8e45 100644
--- a/src/map/map.hpp
+++ b/src/map/map.hpp
@@ -25,8 +25,7 @@
 
 # include "map.t.hpp"
 
-# include <netinet/in.h>
-
+# include <chrono>
 # include <functional>
 # include <list>
 
@@ -40,10 +39,9 @@
 # include "../generic/db.hpp"
 # include "../generic/matrix.hpp"
 
-# include "../io/cxxstdio.hpp"
-
 # include "../mmo/socket.hpp"
 # include "../mmo/timer.t.hpp"
+# include "../mmo/utils.hpp"
 
 # include "battle.t.hpp"
 # include "magic-interpreter.t.hpp"
@@ -91,20 +89,10 @@ struct NpcEvent
         return l.npc < r.npc || (l.npc == r.npc && l.label < r.label);
     }
 
-    friend VString<49> convert_for_printf(NpcEvent ev)
-    {
-        return STRNPRINTF(50, "%s::%s"_fmt, ev.npc, ev.label);
-    }
+    friend VString<49> convert_for_printf(NpcEvent ev);
 };
 bool extract(XString str, NpcEvent *ev);
 
-struct map_session_data;
-struct npc_data;
-struct mob_data;
-struct flooritem_data;
-struct invocation;
-struct map_local;
-
 struct block_list
 {
     dumb_ptr<block_list> bl_next, bl_prev;
@@ -146,11 +134,6 @@ struct status_change
     BlockId spell_invocation;      /* [Fate] If triggered by a spell, record here */
 };
 
-struct invocation;
-
-struct npc_data;
-struct item_data;
-
 struct quick_regeneration
 {                               // [Fate]
     int amount;                // Amount of HP/SP left to regenerate
@@ -358,14 +341,12 @@ struct npc_item_list
     int value;
 };
 
-class npc_data_script;
-class npc_data_shop;
-class npc_data_warp;
-class npc_data_message;
 struct npc_data : block_list
 {
     NpcSubtype npc_subtype;
     short n;
+    // TODO This *should* be a Species, but the script files give -1 for
+    // event-only which is not valid unsigned
     short npc_class;
     DIR dir;
     interval_t speed;
diff --git a/src/map/map.t.hpp b/src/map/map.t.hpp
index d90bdab..10aeb75 100644
--- a/src/map/map.t.hpp
+++ b/src/map/map.t.hpp
@@ -23,8 +23,12 @@
 
 # include "fwd.hpp"
 
+# include <cstdint>
+
 # include "../strings/vstring.hpp"
 
+# include "../generic/enum.hpp"
+
 # include "../mmo/ids.hpp"
 # include "../mmo/mmo.hpp"
 
diff --git a/src/map/mapflag.hpp b/src/map/mapflag.hpp
index c8eec1d..5e36055 100644
--- a/src/map/mapflag.hpp
+++ b/src/map/mapflag.hpp
@@ -21,9 +21,9 @@
 
 # include "fwd.hpp"
 
-# include "../mmo/extract.hpp" // TODO remove this (requires specializing the *other* half)
+# include <cstdint>
 
-# include "../strings/xstring.hpp"
+# include "../mmo/extract.hpp" // TODO remove this (requires specializing the *other* half)
 
 // originally from script.cpp
 // These are part of the script API, so they can't change ever,
diff --git a/src/map/mob.cpp b/src/map/mob.cpp
index 122fa98..923b369 100644
--- a/src/map/mob.cpp
+++ b/src/map/mob.cpp
@@ -23,8 +23,6 @@
 
 #include <cassert>
 #include <cmath>
-#include <cstdlib>
-#include <cstring>
 
 #include <algorithm>
 
@@ -32,6 +30,7 @@
 #include "../compat/nullpo.hpp"
 
 #include "../strings/astring.hpp"
+#include "../strings/zstring.hpp"
 #include "../strings/xstring.hpp"
 
 #include "../generic/random.hpp"
diff --git a/src/map/mob.hpp b/src/map/mob.hpp
index d39a2ac..48d7df5 100644
--- a/src/map/mob.hpp
+++ b/src/map/mob.hpp
@@ -26,10 +26,11 @@
 # include "mob.t.hpp"
 
 # include "../generic/random.t.hpp"
+# include "../generic/enum.hpp"
 
-# include "../mmo/mmo.hpp"
 # include "../mmo/timer.t.hpp"
 
+# include "battle.t.hpp"
 # include "clif.t.hpp"
 # include "map.hpp"
 # include "skill.t.hpp"
diff --git a/src/map/npc.cpp b/src/map/npc.cpp
index 9f606de..32711d0 100644
--- a/src/map/npc.cpp
+++ b/src/map/npc.cpp
@@ -21,10 +21,9 @@
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <cassert>
-#include <cstdlib>
-#include <cstring>
 #include <ctime>
 
+#include <algorithm>
 #include <list>
 
 #include "../compat/fun.hpp"
@@ -34,6 +33,7 @@
 #include "../strings/astring.hpp"
 #include "../strings/zstring.hpp"
 #include "../strings/xstring.hpp"
+#include "../strings/literal.hpp"
 
 #include "../generic/db.hpp"
 
@@ -42,8 +42,8 @@
 
 #include "../mmo/config_parse.hpp"
 #include "../mmo/extract.hpp"
-#include "../mmo/socket.hpp"
 #include "../mmo/timer.hpp"
+#include "../mmo/utils.hpp"
 
 #include "battle.hpp"
 #include "clif.hpp"
diff --git a/src/map/npc.hpp b/src/map/npc.hpp
index 3800fb7..d8930c8 100644
--- a/src/map/npc.hpp
+++ b/src/map/npc.hpp
@@ -23,7 +23,6 @@
 
 # include "fwd.hpp"
 
-# include <cstddef>
 # include <cstdint>
 
 # include "../strings/fwd.hpp"
@@ -34,6 +33,7 @@
 
 constexpr BlockId START_NPC_NUM = wrap<BlockId>(110000000);
 
+// TODO make these species, see npc_class in npc_data
 constexpr int WARP_CLASS = 45;
 constexpr int WARP_DEBUG_CLASS = 722;
 constexpr int INVISIBLE_CLASS = 32767;
diff --git a/src/map/party.cpp b/src/map/party.cpp
index 7d3c89c..66dc2fa 100644
--- a/src/map/party.cpp
+++ b/src/map/party.cpp
@@ -21,8 +21,6 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-#include <cstring>
-
 #include "../compat/nullpo.hpp"
 
 #include "../strings/xstring.hpp"
@@ -31,7 +29,8 @@
 
 #include "../io/cxxstdio.hpp"
 
-#include "../mmo/socket.hpp"
+#include "../mmo/ids.hpp"
+#include "../mmo/mmo.hpp"
 #include "../mmo/timer.hpp"
 
 #include "battle.hpp"
@@ -39,7 +38,6 @@
 #include "intif.hpp"
 #include "map.hpp"
 #include "pc.hpp"
-#include "tmw.hpp"
 
 #include "../poison.hpp"
 
diff --git a/src/map/party.hpp b/src/map/party.hpp
index bf9777b..4eaffb0 100644
--- a/src/map/party.hpp
+++ b/src/map/party.hpp
@@ -27,11 +27,8 @@
 
 # include "../strings/fwd.hpp"
 
-# include "map.hpp"
-
-struct party;
-struct map_session_data;
-struct block_list;
+# include "../mmo/fwd.hpp"
+# include "../mmo/dumb_ptr.hpp"
 
 void do_init_party(void);
 struct party *party_search(PartyId party_id);
diff --git a/src/map/path.cpp b/src/map/path.cpp
index 5b7ea1f..e0e18b6 100644
--- a/src/map/path.cpp
+++ b/src/map/path.cpp
@@ -22,19 +22,20 @@
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <cassert>
+#include <cstddef>
+#include <cstdlib>
 
 #include "../compat/nullpo.hpp"
 
-#include "../generic/random.hpp"
+#include "../strings/literal.hpp"
 
 #include "../io/cxxstdio.hpp"
 
-#include "battle.hpp"
+#include "magic-interpreter.t.hpp"
+#include "map.hpp"
 
 #include "../poison.hpp"
 
-//#define PATH_STANDALONETEST
-
 constexpr int MAX_HEAP = 150;
 struct tmp_path
 {
diff --git a/src/map/path.hpp b/src/map/path.hpp
index 9bdb520..5f03a90 100644
--- a/src/map/path.hpp
+++ b/src/map/path.hpp
@@ -23,8 +23,6 @@
 
 # include "fwd.hpp"
 
-# include "map.hpp"
-
 int path_search(struct walkpath_data *, map_local *, int, int, int, int, int);
 
 #endif // TMWA_MAP_PATH_HPP
diff --git a/src/map/pc.cpp b/src/map/pc.cpp
index 2526f1d..47e45a5 100644
--- a/src/map/pc.cpp
+++ b/src/map/pc.cpp
@@ -23,16 +23,16 @@
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <cassert>
-#include <cstdlib>
-#include <cstring>
 
-#include "../compat/alg.hpp"
+#include <algorithm>
+
 #include "../compat/fun.hpp"
 #include "../compat/nullpo.hpp"
 
 #include "../strings/rstring.hpp"
 #include "../strings/astring.hpp"
 #include "../strings/zstring.hpp"
+#include "../strings/literal.hpp"
 
 #include "../generic/random.hpp"
 
@@ -41,6 +41,7 @@
 
 #include "../mmo/socket.hpp"
 #include "../mmo/timer.hpp"
+#include "../mmo/utils.hpp"
 
 #include "atcommand.hpp"
 #include "battle.hpp"
@@ -50,7 +51,6 @@
 #include "itemdb.hpp"
 #include "magic.hpp"
 #include "map.hpp"
-#include "mob.hpp"
 #include "npc.hpp"
 #include "party.hpp"
 #include "path.hpp"
diff --git a/src/map/pc.hpp b/src/map/pc.hpp
index b02e5a7..412953d 100644
--- a/src/map/pc.hpp
+++ b/src/map/pc.hpp
@@ -27,6 +27,8 @@
 
 # include "../strings/fwd.hpp"
 
+# include "../mmo/utils.hpp"
+
 # include "clif.t.hpp"
 # include "map.hpp"
 
diff --git a/src/map/script.cpp b/src/map/script.cpp
index f3713df..7abea69 100644
--- a/src/map/script.cpp
+++ b/src/map/script.cpp
@@ -23,12 +23,11 @@
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <cassert>
-#include <cctype>
 #include <cmath>
 #include <cstdlib>
-#include <cstring>
 #include <ctime>
 
+#include <algorithm>
 #include <set>
 
 #include "../compat/fun.hpp"
@@ -38,6 +37,7 @@
 #include "../strings/astring.hpp"
 #include "../strings/zstring.hpp"
 #include "../strings/xstring.hpp"
+#include "../strings/literal.hpp"
 
 #include "../generic/db.hpp"
 #include "../generic/intern-pool.hpp"
@@ -46,13 +46,14 @@
 #include "../io/cxxstdio.hpp"
 #include "../io/lock.hpp"
 #include "../io/read.hpp"
+#include "../io/write.hpp"
 
-#include "../mmo/config_parse.hpp"
 #include "../mmo/core.hpp"
 #include "../mmo/extract.hpp"
+#include "../mmo/human_time_diff.hpp"
 #include "../mmo/socket.hpp"
-#include "../mmo/utils.hpp"
 #include "../mmo/timer.hpp"
+#include "../mmo/utils.hpp"
 
 #include "atcommand.hpp"
 #include "battle.hpp"
diff --git a/src/map/script.hpp b/src/map/script.hpp
index 9b9c805..11a9289 100644
--- a/src/map/script.hpp
+++ b/src/map/script.hpp
@@ -24,20 +24,16 @@
 # include "fwd.hpp"
 
 # include <cstdint>
-# include <cstring> // for inlined get_str - TODO remove
 
 # include <vector>
 
 # include "../range/slice.hpp"
 
-# include "../strings/rstring.hpp"
-# include "../strings/astring.hpp"
 # include "../strings/zstring.hpp"
 
 # include "../generic/db.hpp"
 
 # include "../mmo/dumb_ptr.hpp"
-# include "../mmo/utils.hpp"
 
 # include "map.t.hpp"
 
@@ -180,7 +176,6 @@ struct argrec_t
 int run_script_l(ScriptPointer, BlockId, BlockId, Slice<argrec_t> args);
 int run_script(ScriptPointer, BlockId, BlockId);
 
-struct ScriptLabel;
 extern
 Map<ScriptLabel, int> scriptlabel_db;
 extern
diff --git a/src/map/skill-pools.cpp b/src/map/skill-pools.cpp
index 49496bb..9101d6a 100644
--- a/src/map/skill-pools.cpp
+++ b/src/map/skill-pools.cpp
@@ -1,3 +1,4 @@
+#include "skill-pools.hpp"
 #include "skill.hpp"
 //    skill-pools.cpp - Additional support for focusable skills.
 //
diff --git a/src/map/skill.cpp b/src/map/skill.cpp
index f9eeff1..ab14427 100644
--- a/src/map/skill.cpp
+++ b/src/map/skill.cpp
@@ -22,9 +22,8 @@
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <cassert>
-#include <cstdlib>
-#include <cstring>
-#include <ctime>
+
+#include <algorithm>
 
 #include "../compat/attr.hpp"
 #include "../compat/fun.hpp"
@@ -32,7 +31,10 @@
 
 #include "../strings/mstring.hpp"
 #include "../strings/rstring.hpp"
+#include "../strings/astring.hpp"
+#include "../strings/zstring.hpp"
 #include "../strings/xstring.hpp"
+#include "../strings/literal.hpp"
 
 #include "../generic/random.hpp"
 
@@ -40,13 +42,11 @@
 #include "../io/read.hpp"
 
 #include "../mmo/extract.hpp"
-#include "../mmo/socket.hpp"
 #include "../mmo/timer.hpp"
 
 #include "battle.hpp"
 #include "clif.hpp"
 #include "magic.hpp"
-#include "map.hpp"
 #include "mob.hpp"
 #include "pc.hpp"
 
diff --git a/src/map/skill.hpp b/src/map/skill.hpp
index 87cc576..3c162d5 100644
--- a/src/map/skill.hpp
+++ b/src/map/skill.hpp
@@ -28,7 +28,9 @@
 
 # include "../strings/fwd.hpp"
 # include "../strings/rstring.hpp"
-# include "../strings/astring.hpp"
+# include "../strings/literal.hpp"
+
+# include "../generic/array.hpp"
 
 # include "map.hpp"
 
@@ -76,9 +78,6 @@ extern struct skill_name_db skill_names[];
 skill_name_db& skill_lookup_by_id(SkillID id);
 skill_name_db& skill_lookup_by_name(XString name);
 
-struct block_list;
-struct map_session_data;
-
 bool skill_readdb(ZString filename);
 
 // スキルデータベースへのアクセサ
diff --git a/src/map/storage.cpp b/src/map/storage.cpp
index 41c31cc..b88c1ea 100644
--- a/src/map/storage.cpp
+++ b/src/map/storage.cpp
@@ -1,14 +1,32 @@
 #include "storage.hpp"
-// Copyright (c) Athena Dev Teams - Licensed under GNU GPL
-// For more information, see COPYING in the main folder
-
-#include <cstdlib>
-#include <cstring>
+//    storage.cpp - Storage handling.
+//
+//    Copyright © ????-2004 Athena Dev Teams
+//    Copyright © 2004-2011 The Mana World Development Team
+//    Copyright © 2011-2014 Ben Longbons <b.r.longbons@gmail.com>
+//
+//    This file is part of The Mana World (Athena server)
+//
+//    This program is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+//
+//    This program is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+//
+//    You should have received a copy of the GNU General Public License
+//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include "../compat/nullpo.hpp"
 
 #include "../generic/db.hpp"
 
+#include "../mmo/ids.hpp"
+#include "../mmo/mmo.hpp"
+
 #include "chrif.hpp"
 #include "clif.hpp"
 #include "intif.hpp"
diff --git a/src/map/storage.hpp b/src/map/storage.hpp
index bdfc049..4101893 100644
--- a/src/map/storage.hpp
+++ b/src/map/storage.hpp
@@ -23,7 +23,8 @@
 
 # include "fwd.hpp"
 
-# include "map.hpp"
+# include "../mmo/fwd.hpp"
+# include "../mmo/dumb_ptr.hpp"
 
 int storage_storageopen(dumb_ptr<map_session_data> sd);
 int storage_storageadd(dumb_ptr<map_session_data> sd, int index, int amount);
diff --git a/src/map/tmw.cpp b/src/map/tmw.cpp
index 8a1c9f7..38b96ce 100644
--- a/src/map/tmw.cpp
+++ b/src/map/tmw.cpp
@@ -19,17 +19,18 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-#include <cctype>
-#include <cstring>
-
 #include "../compat/nullpo.hpp"
 
 #include "../strings/astring.hpp"
 #include "../strings/zstring.hpp"
 #include "../strings/xstring.hpp"
+#include "../strings/literal.hpp"
 
 #include "../io/cxxstdio.hpp"
 
+#include "../mmo/human_time_diff.hpp"
+#include "../mmo/utils.hpp"
+
 #include "atcommand.hpp"
 #include "battle.hpp"
 #include "chrif.hpp"
diff --git a/src/map/tmw.hpp b/src/map/tmw.hpp
index 9b11d64..14bf8cc 100644
--- a/src/map/tmw.hpp
+++ b/src/map/tmw.hpp
@@ -26,8 +26,6 @@
 
 # include "../mmo/dumb_ptr.hpp"
 
-# include "map.hpp"
-
 int tmw_CheckChatSpam(dumb_ptr<map_session_data> sd, XString message);
 void tmw_GmHackMsg(ZString line);
 
diff --git a/src/map/trade.hpp b/src/map/trade.hpp
index da0d2b2..1514999 100644
--- a/src/map/trade.hpp
+++ b/src/map/trade.hpp
@@ -23,7 +23,7 @@
 
 # include "fwd.hpp"
 
-# include "map.hpp"
+# include "../mmo/dumb_ptr.hpp"
 
 void trade_traderequest(dumb_ptr<map_session_data> sd, BlockId target_id);
 void trade_tradeack(dumb_ptr<map_session_data> sd, int type);
diff --git a/src/mmo/config_parse.cpp b/src/mmo/config_parse.cpp
index a6dfd6e..c6ddde2 100644
--- a/src/mmo/config_parse.cpp
+++ b/src/mmo/config_parse.cpp
@@ -18,6 +18,8 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+#include <algorithm>
+
 #include "../strings/xstring.hpp"
 #include "../strings/zstring.hpp"
 
diff --git a/src/mmo/core.cpp b/src/mmo/core.cpp
index 8b3690a..68b5863 100644
--- a/src/mmo/core.cpp
+++ b/src/mmo/core.cpp
@@ -22,15 +22,13 @@
 
 #include <sys/wait.h>
 
-#include <unistd.h>
+#include <alloca.h>
 
 #include <csignal>
 #include <cstdlib>
-#include <ctime>
 
 #include "../strings/zstring.hpp"
-
-#include "../generic/random.hpp"
+#include "../strings/literal.hpp"
 
 #include "../io/cxxstdio.hpp"
 
diff --git a/src/mmo/dumb_ptr.hpp b/src/mmo/dumb_ptr.hpp
index aa17ecd..6501b74 100644
--- a/src/mmo/dumb_ptr.hpp
+++ b/src/mmo/dumb_ptr.hpp
@@ -24,6 +24,7 @@
 # include <cstring>
 
 # include <algorithm>
+# include <utility>
 
 # include "../strings/astring.hpp"
 # include "../strings/zstring.hpp"
@@ -199,10 +200,6 @@ struct dumb_string
         std::copy(b, e, &rv.impl[0]);
         return rv;
     }
-    static dumb_string copy(const char *sz)
-    {
-        return dumb_string::copy(sz, sz + strlen(sz));
-    }
     static dumb_string copys(XString s)
     {
         return dumb_string::copy(&*s.begin(), &*s.end());
@@ -227,7 +224,7 @@ struct dumb_string
 
     dumb_string dup() const
     {
-        return dumb_string::copy(&impl[0]);
+        return dumb_string::copy(&impl[0], &impl[0] + impl.size());
     }
     void delete_()
     {
diff --git a/src/mmo/extract.cpp b/src/mmo/extract.cpp
index f25126f..b0a01f1 100644
--- a/src/mmo/extract.cpp
+++ b/src/mmo/extract.cpp
@@ -18,6 +18,8 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+#include <algorithm>
+
 #include "../strings/astring.hpp"
 #include "../strings/xstring.hpp"
 #include "../strings/vstring.hpp"
diff --git a/src/mmo/fwd.hpp b/src/mmo/fwd.hpp
index f9c176c..65e8dfe 100644
--- a/src/mmo/fwd.hpp
+++ b/src/mmo/fwd.hpp
@@ -24,9 +24,13 @@
 // meh, add more when I feel like it
 class MapName;
 class CharName;
+class CharPair;
 
 class Session;
 
+class HumanTimeDiff;
+class IP4Address;
+
 class AccountId;
 class CharId;
 class PartyId;
@@ -34,4 +38,16 @@ class ItemUnkId;
 class ItemNameId;
 class GmLevel;
 
+class AccountName;
+class AccountPass;
+class AccountCrypt;
+class AccountEmail;
+class ServerName;
+class PartyName;
+class VarName;
+class MapName;
+class CharName;
+
+class TimerData;
+
 #endif // TMWA_MMO_FWD_HPP
diff --git a/src/mmo/human_time_diff.hpp b/src/mmo/human_time_diff.hpp
index 5552e2b..0340a4b 100644
--- a/src/mmo/human_time_diff.hpp
+++ b/src/mmo/human_time_diff.hpp
@@ -21,6 +21,8 @@
 
 # include "fwd.hpp"
 
+# include <algorithm>
+
 # include "../strings/xstring.hpp"
 
 # include "extract.hpp"
diff --git a/src/mmo/ip.cpp b/src/mmo/ip.cpp
index 67d6435..7c243ea 100644
--- a/src/mmo/ip.cpp
+++ b/src/mmo/ip.cpp
@@ -23,6 +23,8 @@
 
 #include "../io/cxxstdio.hpp"
 
+#include "extract.hpp"
+
 #include "../poison.hpp"
 
 bool extract(XString str, IP4Address *rv)
diff --git a/src/mmo/ip.hpp b/src/mmo/ip.hpp
index c765308..88ad965 100644
--- a/src/mmo/ip.hpp
+++ b/src/mmo/ip.hpp
@@ -23,9 +23,10 @@
 
 # include <netinet/in.h>
 
-# include "../strings/fwd.hpp"
+# include <cstddef>
+# include <cstdint>
 
-# include "extract.hpp"
+# include "../strings/fwd.hpp"
 
 // TODO - in the long run ports belong here also
 // and of course, IPv6 stuff.
diff --git a/src/mmo/ip_test.cpp b/src/mmo/ip_test.cpp
index 01f714e..3c4d2ef 100644
--- a/src/mmo/ip_test.cpp
+++ b/src/mmo/ip_test.cpp
@@ -20,6 +20,9 @@
 
 #include <gtest/gtest.h>
 
+#include "../strings/vstring.hpp"
+#include "../strings/literal.hpp"
+
 #include "../io/cxxstdio.hpp"
 
 #include "../poison.hpp"
diff --git a/src/mmo/md5more.cpp b/src/mmo/md5more.cpp
index cc17d37..c311583 100644
--- a/src/mmo/md5more.cpp
+++ b/src/mmo/md5more.cpp
@@ -20,11 +20,17 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+#include <algorithm>
+
 #include "../compat/rawmem.hpp"
 
 #include "../generic/random.hpp"
 
 #include "../io/cxxstdio.hpp"
+#include "../io/read.hpp"
+
+#include "../mmo/ip.hpp"
+#include "../mmo/mmo.hpp"
 
 #include "../poison.hpp"
 
diff --git a/src/mmo/md5more.hpp b/src/mmo/md5more.hpp
index 6884bee..4b9895d 100644
--- a/src/mmo/md5more.hpp
+++ b/src/mmo/md5more.hpp
@@ -25,10 +25,7 @@
 
 # include "../generic/md5.hpp"
 
-# include "../io/read.hpp"
-
-# include "ip.hpp"
-# include "mmo.hpp"
+# include "../io/fwd.hpp"
 
 MD5_state MD5_from_FILE(io::ReadFile& in);
 
diff --git a/src/mmo/mmo.hpp b/src/mmo/mmo.hpp
index fdfc478..15c3fa5 100644
--- a/src/mmo/mmo.hpp
+++ b/src/mmo/mmo.hpp
@@ -23,10 +23,13 @@
 
 # include "fwd.hpp"
 
+# include <algorithm>
+
 # include "../compat/memory.hpp"
 
 # include "../strings/vstring.hpp"
 
+# include "../generic/array.hpp"
 # include "../generic/enum.hpp"
 
 # include "ids.hpp"
@@ -64,20 +67,6 @@ constexpr int MAX_PARTY = 12;
 # define MIN_CLOTH_COLOR battle_config.min_cloth_color
 # define MAX_CLOTH_COLOR battle_config.max_cloth_color
 
-template<class T, size_t n>
-struct Array
-{
-    T data[n];
-public:
-    T& operator [](size_t i) { assert (i < n); return data[i]; }
-    const T& operator [](size_t i) const { assert (i < n); return data[i]; }
-
-    T *begin() { return data + 0; }
-    T *end() { return data + n; }
-    const T *begin() const { return data + 0; }
-    const T *end() const { return data + n; }
-};
-
 struct AccountName : VString<23> {};
 struct AccountPass : VString<23> {};
 struct AccountCrypt : VString<39> {};
diff --git a/src/mmo/socket.cpp b/src/mmo/socket.cpp
index 8714062..1d6094c 100644
--- a/src/mmo/socket.cpp
+++ b/src/mmo/socket.cpp
@@ -21,25 +21,23 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-#include <arpa/inet.h>
 #include <netinet/tcp.h>
 #include <sys/socket.h>
-//#include <sys/types.h>
 
 #include <fcntl.h>
-#include <unistd.h>
 
 #include <cstdlib>
-#include <cstring>
-#include <ctime>
+
+#include <array>
 
 #include "../compat/memory.hpp"
 
 #include "../io/cxxstdio.hpp"
 
+#include "../mmo/utils.hpp"
+
 #include "core.hpp"
 #include "timer.hpp"
-#include "utils.hpp"
 
 #include "../poison.hpp"
 
diff --git a/src/mmo/socket.hpp b/src/mmo/socket.hpp
index f62ca7a..ff10c64 100644
--- a/src/mmo/socket.hpp
+++ b/src/mmo/socket.hpp
@@ -23,13 +23,13 @@
 
 # include "fwd.hpp"
 
-# include <netinet/in.h>
+# include <algorithm>
 
-# include <cstdio>
+# include <sys/select.h>
 
-# include <array>
 # include <memory>
 
+# include "../compat/iter.hpp"
 # include "../compat/rawmem.hpp"
 
 # include "../strings/astring.hpp"
@@ -52,7 +52,6 @@ struct SessionDeleter
     void operator()(SessionData *sd);
 };
 
-struct Session;
 struct SessionIO
 {
     void (*func_recv)(Session *);
diff --git a/src/mmo/timer.cpp b/src/mmo/timer.cpp
index 6e28a12..a85b8be 100644
--- a/src/mmo/timer.cpp
+++ b/src/mmo/timer.cpp
@@ -24,16 +24,12 @@
 #include <sys/time.h>
 
 #include <cassert>
-#include <cstring>
 
+#include <algorithm>
 #include <queue>
 
 #include "../strings/zstring.hpp"
 
-#include "../io/cxxstdio.hpp"
-
-#include "utils.hpp"
-
 #include "../poison.hpp"
 
 struct TimerData
diff --git a/src/mmo/timer.t.hpp b/src/mmo/timer.t.hpp
index a1d05ef..549959a 100644
--- a/src/mmo/timer.t.hpp
+++ b/src/mmo/timer.t.hpp
@@ -28,8 +28,6 @@
 
 # include "dumb_ptr.hpp"
 
-struct TimerData;
-
 /// An implementation of the C++ "clock" concept, exposing
 /// durations in milliseconds.
 class milli_clock
diff --git a/src/mmo/utils.cpp b/src/mmo/utils.cpp
index 5765eaf..30f60b1 100644
--- a/src/mmo/utils.cpp
+++ b/src/mmo/utils.cpp
@@ -20,12 +20,10 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-#include <netinet/in.h>
 #include <sys/time.h>
 
 #include <algorithm>
 
-#include "../strings/astring.hpp"
 #include "../strings/zstring.hpp"
 #include "../strings/xstring.hpp"
 
diff --git a/src/mmo/utils.hpp b/src/mmo/utils.hpp
index ed48ad0..9837358 100644
--- a/src/mmo/utils.hpp
+++ b/src/mmo/utils.hpp
@@ -23,9 +23,6 @@
 
 # include "fwd.hpp"
 
-# include <sys/types.h>
-
-# include <cstdio>
 # include <ctime>
 
 # include <type_traits>
diff --git a/src/monitor/main.cpp b/src/monitor/main.cpp
index 7bc7287..f3db1b6 100644
--- a/src/monitor/main.cpp
+++ b/src/monitor/main.cpp
@@ -30,6 +30,7 @@
 #include "../strings/astring.hpp"
 #include "../strings/zstring.hpp"
 #include "../strings/xstring.hpp"
+#include "../strings/literal.hpp"
 
 #include "../io/cxxstdio.hpp"
 #include "../io/fd.hpp"
diff --git a/src/range/fwd.hpp b/src/range/fwd.hpp
index 31263fb..0c22595 100644
--- a/src/range/fwd.hpp
+++ b/src/range/fwd.hpp
@@ -22,5 +22,7 @@
 # include "../sanity.hpp"
 
 // meh, add more when I feel like it
+template<class T>
+class Slice;
 
 #endif // TMWA_RANGE_FWD_HPP
diff --git a/src/range/slice.tcc b/src/range/slice.tcc
index 3a1ceb5..f3406ee 100644
--- a/src/range/slice.tcc
+++ b/src/range/slice.tcc
@@ -19,8 +19,6 @@
 
 #include <cassert>
 
-#include <algorithm>
-
 // simple pointer-wrapping iterator
 template<class T>
 class Slice<T>::iterator
diff --git a/src/sexpr/lexer.cpp b/src/sexpr/lexer.cpp
index cc7087b..a032c92 100644
--- a/src/sexpr/lexer.cpp
+++ b/src/sexpr/lexer.cpp
@@ -19,6 +19,8 @@
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include "../strings/mstring.hpp"
+#include "../strings/vstring.hpp"
+#include "../strings/literal.hpp"
 
 #include "../io/cxxstdio.hpp"
 
diff --git a/src/sexpr/lexer.hpp b/src/sexpr/lexer.hpp
index 89380b7..2fec51a 100644
--- a/src/sexpr/lexer.hpp
+++ b/src/sexpr/lexer.hpp
@@ -23,9 +23,8 @@
 
 # include <vector>
 
+# include "../strings/fwd.hpp"
 # include "../strings/astring.hpp"
-# include "../strings/vstring.hpp"
-# include "../strings/xstring.hpp"
 # include "../strings/zstring.hpp"
 
 # include "../io/line.hpp"
diff --git a/src/sexpr/lexer_test.cpp b/src/sexpr/lexer_test.cpp
index fbff0d8..d356f49 100644
--- a/src/sexpr/lexer_test.cpp
+++ b/src/sexpr/lexer_test.cpp
@@ -20,6 +20,8 @@
 
 #include <gtest/gtest.h>
 
+#include "../strings/vstring.hpp"
+
 #include "../poison.hpp"
 
 static
diff --git a/src/sexpr/parser.cpp b/src/sexpr/parser.cpp
index c096649..00d2480 100644
--- a/src/sexpr/parser.cpp
+++ b/src/sexpr/parser.cpp
@@ -20,6 +20,9 @@
 
 #include <cerrno>
 
+#include "../strings/zstring.hpp"
+#include "../strings/xstring.hpp"
+
 #include "../poison.hpp"
 
 namespace sexpr
diff --git a/src/sexpr/parser.hpp b/src/sexpr/parser.hpp
index 4ce7f2d..ad3ad90 100644
--- a/src/sexpr/parser.hpp
+++ b/src/sexpr/parser.hpp
@@ -23,7 +23,7 @@
 
 # include <cstdlib>
 
-# include "../strings/zstring.hpp"
+# include "../strings/fwd.hpp"
 
 # include "../io/line.hpp"
 
diff --git a/src/strings/all.hpp b/src/strings/all.hpp
index c87a403..6b67bee 100644
--- a/src/strings/all.hpp
+++ b/src/strings/all.hpp
@@ -29,6 +29,7 @@
 # include "sstring.hpp"
 # include "zstring.hpp"
 # include "xstring.hpp"
+# include "literal.hpp"
 # include "vstring.hpp"
 
 #endif // TMWA_STRINGS_ALL_HPP
diff --git a/src/strings/astring.cpp b/src/strings/astring.cpp
index 61c65b2..15d172b 100644
--- a/src/strings/astring.cpp
+++ b/src/strings/astring.cpp
@@ -18,15 +18,20 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+#include <cstdarg>
+#include <cstdio>
 #include <cstdlib>
 
+#include <algorithm>
+
 #include "mstring.hpp"
 #include "tstring.hpp"
 #include "sstring.hpp"
 #include "zstring.hpp"
 #include "xstring.hpp"
-#include "vstring.hpp"
+#include "literal.hpp"
 
+// doing sneaky tricks here
 //#include "../poison.hpp"
 
 namespace strings
diff --git a/src/strings/astring.hpp b/src/strings/astring.hpp
index 8558a98..e936c4c 100644
--- a/src/strings/astring.hpp
+++ b/src/strings/astring.hpp
@@ -21,9 +21,6 @@
 
 # include "fwd.hpp"
 
-# include <cstdarg>
-# include <cstring>
-
 # include "base.hpp"
 # include "rstring.hpp"
 
diff --git a/src/strings/base.hpp b/src/strings/base.hpp
index ee7480b..b1aff34 100644
--- a/src/strings/base.hpp
+++ b/src/strings/base.hpp
@@ -19,8 +19,6 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# include "../sanity.hpp"
-
 # include "fwd.hpp"
 # include "pair.hpp"
 
diff --git a/src/strings/base.tcc b/src/strings/base.tcc
index a5a57d0..8b7982b 100644
--- a/src/strings/base.tcc
+++ b/src/strings/base.tcc
@@ -17,6 +17,8 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+#include <cstddef>
+
 #include <algorithm>
 
 #include "pair.hpp"
diff --git a/src/strings/base_test.cpp b/src/strings/base_test.cpp
index 6b3ba83..c630b5c 100644
--- a/src/strings/base_test.cpp
+++ b/src/strings/base_test.cpp
@@ -23,6 +23,7 @@
 #include "vstring.hpp"
 #include "xstring.hpp"
 #include "rstring.hpp"
+#include "literal.hpp"
 
 #include "../poison.hpp"
 
diff --git a/src/strings/literal.hpp b/src/strings/literal.hpp
index a3ebecd..6d84ebd 100644
--- a/src/strings/literal.hpp
+++ b/src/strings/literal.hpp
@@ -21,8 +21,6 @@
 
 # include "fwd.hpp"
 
-# include <cstring>
-
 # include "base.hpp"
 
 namespace strings
diff --git a/src/strings/mstring.hpp b/src/strings/mstring.hpp
index 2da6a78..47becc4 100644
--- a/src/strings/mstring.hpp
+++ b/src/strings/mstring.hpp
@@ -23,8 +23,6 @@
 
 # include <deque>
 
-# include "base.hpp"
-
 namespace strings
 {
     /// An owning string that is still expected to change.
diff --git a/src/strings/pair.hpp b/src/strings/pair.hpp
index 24537de..cd59537 100644
--- a/src/strings/pair.hpp
+++ b/src/strings/pair.hpp
@@ -19,10 +19,6 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# include "../sanity.hpp"
-
-# include <cstring>
-
 # include "fwd.hpp"
 
 namespace strings
diff --git a/src/strings/rstring.cpp b/src/strings/rstring.cpp
index 671e7b0..6ffe79c 100644
--- a/src/strings/rstring.cpp
+++ b/src/strings/rstring.cpp
@@ -18,13 +18,17 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+#include <cstdio>
+
 #include "mstring.hpp"
+#include "astring.hpp"
 #include "tstring.hpp"
 #include "sstring.hpp"
 #include "zstring.hpp"
 #include "xstring.hpp"
-#include "vstring.hpp"
+#include "literal.hpp"
 
+// doing sneaky tricks here
 //#include "../poison.hpp"
 
 namespace strings
diff --git a/src/strings/rstring.hpp b/src/strings/rstring.hpp
index 1de3e87..ae8b374 100644
--- a/src/strings/rstring.hpp
+++ b/src/strings/rstring.hpp
@@ -22,7 +22,6 @@
 # include "fwd.hpp"
 
 # include <cstdarg>
-# include <cstring>
 
 # include "base.hpp"
 
diff --git a/src/strings/sstring.cpp b/src/strings/sstring.cpp
index 8de8655..35885e8 100644
--- a/src/strings/sstring.cpp
+++ b/src/strings/sstring.cpp
@@ -18,9 +18,12 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+#include "rstring.hpp"
+#include "astring.hpp"
 #include "tstring.hpp"
 #include "zstring.hpp"
 #include "xstring.hpp"
+#include "literal.hpp"
 
 #include "../poison.hpp"
 
diff --git a/src/strings/strings2_test.cpp b/src/strings/strings2_test.cpp
index 8c4a343..8a7ee66 100644
--- a/src/strings/strings2_test.cpp
+++ b/src/strings/strings2_test.cpp
@@ -1,4 +1,3 @@
-#include "all.hpp"
 //    strings2_test.cpp - Testsuite part 2 for strings.
 //
 //    Copyright © 2013 Ben Longbons <b.r.longbons@gmail.com>
@@ -18,9 +17,10 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-
 #include <gtest/gtest.h>
 
+#include "all.hpp"
+
 #include "../poison.hpp"
 
 TEST(StringTests, traits2)
diff --git a/src/strings/strings_test.cpp b/src/strings/strings_test.cpp
index 3abb5e1..b76bde5 100644
--- a/src/strings/strings_test.cpp
+++ b/src/strings/strings_test.cpp
@@ -1,4 +1,3 @@
-#include "all.hpp"
 //    strings_test.cpp - Testsuite part 1 for strings.
 //
 //    Copyright © 2013 Ben Longbons <b.r.longbons@gmail.com>
@@ -22,6 +21,8 @@
 
 #include <gtest/gtest.h>
 
+#include "all.hpp"
+
 #include "../poison.hpp"
 
 template<typename T>
diff --git a/src/strings/tstring.cpp b/src/strings/tstring.cpp
index 27e8052..77d4b40 100644
--- a/src/strings/tstring.cpp
+++ b/src/strings/tstring.cpp
@@ -18,9 +18,12 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+#include "rstring.hpp"
+#include "astring.hpp"
 #include "sstring.hpp"
 #include "zstring.hpp"
 #include "xstring.hpp"
+#include "literal.hpp"
 
 #include "../poison.hpp"
 
diff --git a/src/strings/vstring.tcc b/src/strings/vstring.tcc
index bb134b3..577261a 100644
--- a/src/strings/vstring.tcc
+++ b/src/strings/vstring.tcc
@@ -18,16 +18,16 @@
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <cassert>
+#include <cstdarg>
 #include <cstdio>
 
-#include "../compat/cast.hpp"
-
 #include "rstring.hpp"
 #include "astring.hpp"
 #include "tstring.hpp"
 #include "sstring.hpp"
 #include "zstring.hpp"
 #include "xstring.hpp"
+#include "literal.hpp"
 
 namespace strings
 {
diff --git a/src/strings/xstring.cpp b/src/strings/xstring.cpp
index 5312445..2f97c01 100644
--- a/src/strings/xstring.cpp
+++ b/src/strings/xstring.cpp
@@ -18,6 +18,13 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+#include "rstring.hpp"
+#include "astring.hpp"
+#include "tstring.hpp"
+#include "sstring.hpp"
+#include "zstring.hpp"
+#include "literal.hpp"
+
 #include "../poison.hpp"
 
 namespace strings
diff --git a/src/strings/xstring.hpp b/src/strings/xstring.hpp
index 96929c7..91371c8 100644
--- a/src/strings/xstring.hpp
+++ b/src/strings/xstring.hpp
@@ -22,7 +22,6 @@
 # include "fwd.hpp"
 
 # include "base.hpp"
-# include "literal.hpp"
 
 namespace strings
 {
diff --git a/src/strings/zstring.cpp b/src/strings/zstring.cpp
index 323ba5f..dd17e66 100644
--- a/src/strings/zstring.cpp
+++ b/src/strings/zstring.cpp
@@ -18,7 +18,13 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-#include "xstring.hpp"
+#include <cstdio>
+#include <cstring>
+
+#include "rstring.hpp"
+#include "astring.hpp"
+#include "tstring.hpp"
+#include "literal.hpp"
 
 #include "../poison.hpp"
 
diff --git a/src/strings/zstring.hpp b/src/strings/zstring.hpp
index 3b651b9..e4cd1fd 100644
--- a/src/strings/zstring.hpp
+++ b/src/strings/zstring.hpp
@@ -21,10 +21,7 @@
 
 # include "fwd.hpp"
 
-# include <cstring>
-
 # include "base.hpp"
-# include "literal.hpp"
 
 namespace strings
 {
diff --git a/src/strings/zstring.tcc b/src/strings/zstring.tcc
index 3ff7374..eb55f5a 100644
--- a/src/strings/zstring.tcc
+++ b/src/strings/zstring.tcc
@@ -17,8 +17,6 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-#include <cstring>
-
 #include "vstring.hpp"
 
 namespace strings
diff --git a/src/tests/test.cpp b/src/tests/test.cpp
index d9cba5e..a45eecf 100644
--- a/src/tests/test.cpp
+++ b/src/tests/test.cpp
@@ -1,4 +1,3 @@
-#include <gtest/gtest.h>
 //    test.cpp - Driver for testwuite
 //
 //    Copyright © 2013 Ben Longbons <b.r.longbons@gmail.com>
@@ -18,6 +17,8 @@
 //    You should have received a copy of the GNU General Public License
 //    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+#include <gtest/gtest.h>
+
 #include "../poison.hpp"
 
 int main(int argc, char **argv)
-- 
cgit v1.2.3-70-g09d2