diff --git a/Memory.xml b/Memory.xml
index 2904ce038..b662e7676 100644
--- a/Memory.xml
+++ b/Memory.xml
@@ -1073,6 +1073,9 @@
+
+
+
@@ -3142,6 +3145,9 @@
+
+
+
diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt
index 6e4fb586c..b890715e8 100644
--- a/library/CMakeLists.txt
+++ b/library/CMakeLists.txt
@@ -45,6 +45,7 @@ include/dfhack/modules/Gui.h
include/dfhack/modules/Items.h
include/dfhack/modules/Maps.h
include/dfhack/modules/Materials.h
+include/dfhack/modules/Notes.h
include/dfhack/modules/Translation.h
include/dfhack/modules/Vegetation.h
include/dfhack/modules/Vermin.h
@@ -75,6 +76,7 @@ modules/Gui.cpp
modules/Items.cpp
modules/Maps.cpp
modules/Materials.cpp
+modules/Notes.cpp
modules/Translation.cpp
modules/Vegetation.cpp
modules/Vermin.cpp
diff --git a/library/Core.cpp b/library/Core.cpp
index d3dcb1038..33ee910d4 100644
--- a/library/Core.cpp
+++ b/library/Core.cpp
@@ -596,3 +596,4 @@ MODULE_GETTER(Vegetation);
MODULE_GETTER(Buildings);
MODULE_GETTER(Constructions);
MODULE_GETTER(Vermin);
+MODULE_GETTER(Notes);
diff --git a/library/include/dfhack/Core.h b/library/include/dfhack/Core.h
index 26342446c..8ca16714f 100644
--- a/library/include/dfhack/Core.h
+++ b/library/include/dfhack/Core.h
@@ -49,6 +49,7 @@ namespace DFHack
class Buildings;
class Constructions;
class Vermin;
+ class Notes;
class VersionInfo;
class VersionInfoFactory;
class PluginManager;
@@ -107,6 +108,8 @@ namespace DFHack
Constructions * getConstructions();
/// get the vermin module
Vermin * getVermin();
+ /// get the notes module
+ Notes * getNotes();
/// sets the current hotkey command
bool setHotkeyCmd( std::string cmd );
/// removes the hotkey command and gives it to the caller thread
@@ -147,6 +150,7 @@ namespace DFHack
Buildings * pBuildings;
Constructions * pConstructions;
Vermin * pVermin;
+ Notes * pNotes;
} s_mods;
std::vector allModules;
DFHack::PluginManager * plug_mgr;
diff --git a/library/include/dfhack/Types.h b/library/include/dfhack/Types.h
index 65246c115..5dc92f749 100644
--- a/library/include/dfhack/Types.h
+++ b/library/include/dfhack/Types.h
@@ -109,17 +109,6 @@ struct t_effect_df40d //size 40
//#pragma pack(push,4)
-struct t_note
-{
- char symbol;
- uint16_t foreground;
- uint16_t background;
- char name[128];
- uint16_t x;
- uint16_t y;
- uint16_t z;
-};
-
struct t_name
{
char first_name[128];
diff --git a/library/include/dfhack/modules/Notes.h b/library/include/dfhack/modules/Notes.h
new file mode 100644
index 000000000..bb95cd5d8
--- /dev/null
+++ b/library/include/dfhack/modules/Notes.h
@@ -0,0 +1,71 @@
+#pragma once
+#ifndef CL_MOD_NOTES
+#define CL_MOD_NOTES
+/**
+ * \defgroup grp_notes In game notes (and routes)
+ * @ingroup grp_notes
+ */
+#include "dfhack/Export.h"
+#include "dfhack/Module.h"
+
+#include
+#include
+
+#ifdef __cplusplus
+namespace DFHack
+{
+#endif
+ /**
+ * Game's structure for a note.
+ * \ingroup grp_notes
+ */
+ struct t_note
+ {
+ // First note created has id 0, second has id 1, etc. Not affected
+ // by lower id notes being deleted.
+ uint32_t id;
+
+ uint8_t symbol;
+ uint8_t unk1;
+ uint16_t foreground;
+ uint16_t background;
+ uint16_t unk2;
+
+ std::string name;
+ std::string text;
+
+ uint16_t x;
+ uint16_t y;
+ uint16_t z;
+
+ // Is there more?
+ };
+
+#ifdef __cplusplus
+
+ /**
+ * The notes module - allows reading DF in-game notes
+ * \ingroup grp_modules
+ * \ingroup grp_notes
+ */
+ class DFHACK_EXPORT Notes : public Module
+ {
+ public:
+ Notes();
+ ~Notes();
+
+ bool Finish();
+
+ // Returns NULL if there's no notes yet.
+ std::vector* getNotes();
+
+ private:
+ struct Private;
+ Private *d;
+
+ };
+
+}
+#endif // __cplusplus
+
+#endif
diff --git a/library/modules/Notes.cpp b/library/modules/Notes.cpp
new file mode 100644
index 000000000..aeb7902ef
--- /dev/null
+++ b/library/modules/Notes.cpp
@@ -0,0 +1,102 @@
+/*
+www.sourceforge.net/projects/dfhack
+Copyright (c) 2009 Petr Mrázek (peterix), Kenneth Ferland (Impaler[WrG]), dorf
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must
+not claim that you wrote the original software. If you use this
+software in a product, an acknowledgment in the product documentation
+would be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and
+must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source
+distribution.
+*/
+
+#include "Internal.h"
+
+#include
+#include
+#include