diff --git a/include/gate.h b/include/gate.h
index 7f09075c9dc4c5b4aa017fb6c75755ccb2814e6d..96bd11dbd0e5ccb7c5c28bc2ad12cfa81c58f63e 100644
--- a/include/gate.h
+++ b/include/gate.h
@@ -54,5 +54,6 @@ void frygate(log_grec *gate);
 void initpinpos(log_grec *gate);
 void addgate2(short x, short y, short gtype, short sig, log_gattrrec *attrs);
 void movexorgate(short x, short y, short g, short sig, short yy);
+void reportgateconflict(log_grec *g);
 
 #endif
diff --git a/include/node.h b/include/node.h
index 5325715a39ace10f8f7ed01de2467e3891e5d494..28b922c69400cfb69cd17ca12f556abe37bffbc5 100644
--- a/include/node.h
+++ b/include/node.h
@@ -49,5 +49,7 @@ void newnoderef(log_nrec **n, uchar st, long ref);
 void delgetnode(log_nrec **save, log_nrec **old, log_nrec **n);
 void checknode(log_nrec *n, struct LOC_checkcombine *LINK);
 int trycombinenodes(log_nrec **n1, log_nrec **n2);
+void reportnodeconflict(log_nrec *n);
+void getnodeval(log_nrec *n, double *val, char *opts);
 
 #endif
diff --git a/src/gate.c b/src/gate.c
index d9b6d361e445bb4b1522ba007755317ff47572a3..553a6d5df9768abef18e6c0a964999647854a511 100644
--- a/src/gate.c
+++ b/src/gate.c
@@ -13,6 +13,7 @@
 #include "label.h"
 #include "page.h"
 #include "tool.h"
+#include "keyboard.h"
 #include "box.h"
 
 /// Check if inside a gate's "yellow box."
@@ -792,3 +793,17 @@ int addgate(short gtype, short sig, log_gattrrec *attrs)
 	return Result;
 }
 
+void reportgateconflict(log_grec *g)
+{
+	if (g->conflict || !conflictenbl)
+		return;
+	if (!g->oconflict)
+	{
+		g->confnext = gateconflictbase;
+		gateconflictbase = g;
+		g->conflict1 = (3L - conflictdelay) & 1;
+		g->conflict2 = ((3L - conflictdelay) / 2) & 1;
+	}
+	g->conflict = true;
+}
+
diff --git a/src/log.c b/src/log.c
index 3dfda579bcd7aaae148969e8fe2c78606f08a4af..462f75b6e0ab5d92d7cbc96df83960c8e4724a7d 100644
--- a/src/log.c
+++ b/src/log.c
@@ -1145,36 +1145,6 @@ void enderror()
 }
 
 
-static void reportnodeconflict(log_nrec *n)
-{
-	if (n->conflict || !conflictenbl)
-		return;
-	if (!n->oconflict)
-	{
-		n->confnext = nodeconflictbase;
-		nodeconflictbase = n;
-		n->conflict1 = (3L - conflictdelay) & 1;
-		n->conflict2 = ((3L - conflictdelay) / 2) & 1;
-	}
-	n->conflict = true;
-}
-
-
-static void reportgateconflict(log_grec *g)
-{
-	if (g->conflict || !conflictenbl)
-		return;
-	if (!g->oconflict)
-	{
-		g->confnext = gateconflictbase;
-		gateconflictbase = g;
-		g->conflict1 = (3L - conflictdelay) & 1;
-		g->conflict2 = ((3L - conflictdelay) / 2) & 1;
-	}
-	g->conflict = true;
-}
-
-
 static void drawhistdivisions(short x1, short x2)
 {
 	short x, y;
@@ -1237,14 +1207,6 @@ static void historypointy(log_hnrec *hn, log_htrec *ht, short *y)
 }
 
 
-static void getnodeval(log_nrec *n, double *val, char *opts)
-{
-	gg.actval = 0.0;
-	strcpy(gg.actstr, opts);
-	calltoolnode(n, act_nodeval);
-	*val = gg.actval;
-}
-
 /** @brief Make one simulation pass through the circuit.
 			For each page, call the simulator(s) and do other simulation-related chores.
 */
diff --git a/src/node.c b/src/node.c
index 4db5d589024aa08b942d421c280be97a491cd04d..94b9be6a26de0db6e3ef29f956f83804306c4314 100644
--- a/src/node.c
+++ b/src/node.c
@@ -595,3 +595,25 @@ int trycombinenodes(log_nrec **n1, log_nrec **n2)
         return (checkcombine(&cnbase));
 }
 
+void reportnodeconflict(log_nrec *n)
+{
+	if (n->conflict || !conflictenbl)
+		return;
+	if (!n->oconflict)
+	{
+		n->confnext = nodeconflictbase;
+		nodeconflictbase = n;
+		n->conflict1 = (3L - conflictdelay) & 1;
+		n->conflict2 = ((3L - conflictdelay) / 2) & 1;
+	}
+	n->conflict = true;
+}
+
+void getnodeval(log_nrec *n, double *val, char *opts)
+{
+	gg.actval = 0.0;
+	strcpy(gg.actstr, opts);
+	calltoolnode(n, act_nodeval);
+	*val = gg.actval;
+}
+