diff --git a/src/bindings/cpp/hammer/hammer.hpp b/src/bindings/cpp/hammer/hammer.hpp
index b9de6716a93a844227bd5317699a5fb0726c66a2..f3939ab351865b3aa5a78540b3aa5450a20c5dee 100644
--- a/src/bindings/cpp/hammer/hammer.hpp
+++ b/src/bindings/cpp/hammer/hammer.hpp
@@ -2,6 +2,7 @@
 #define HAMMER_HAMMER__HPP
 
 #include "../../../hammer.h"
+#include "../../../internal.h"
 #include <string>
 #include <stdint.h>
 #include <cstdarg>
@@ -49,7 +50,7 @@ namespace hammer {
     std::string asUnambiguous() {
       char* buf = h_write_result_unamb(token);
       std::string s = std::string(buf);
-      free(buf);
+      (&system_allocator)->free(&system_allocator, buf);
       return s;
     }
   };
diff --git a/src/internal.h b/src/internal.h
index 092c158ca87b0da9f6eca34eebe82586fff09fed..ed1bd0856febf3fa422a471a21051d75d33d5297 100644
--- a/src/internal.h
+++ b/src/internal.h
@@ -28,6 +28,11 @@
 #include <string.h>
 #include "hammer.h"
 
+/* "Internal" in this case means "we're not ready to commit
+ * to a public API." Many structures and routines here will be
+ * useful in client programs.
+ */
+
 #ifdef NDEBUG
 #define assert_message(check, message) do { } while(0)
 #else