diff --git a/rules/rules.go b/rules/rules.go
index d0830b540d4b9f7c95bcac2ba5b8ed9cc79186b0..0315113e54e817c1ba4d0e2597a05c5b4c37377d 100644
--- a/rules/rules.go
+++ b/rules/rules.go
@@ -2,6 +2,7 @@
 package rules
 
 import (
+	"embed"
 	"errors"
 	"fmt"
 
@@ -13,67 +14,8 @@ type Engine struct {
 	p *prolog.Interpreter
 }
 
-var (
-	prologKinds = `
-		unit_kind(f, temperature).
-		unit_kind(k, temperature).
-		unit_kind(c, temperature).
-		unit_kind(m2, area).
-		unit_kind(cm2, area).
-		unit_kind(mm, distance).
-		unit_kind(cm, distance).
-		unit_kind(m, distance).
-		unit_kind(km, distance).
-		unit_kind(feet, distance).
-		unit_kind(mg, mass).
-		unit_kind(g, mass).
-		unit_kind(kg, mass).
-		unit_kind(lb, mass).
-		unit_kind(cup, volume).
-		unit_kind(litre, volume).
-		unit_kind(butter, density).
-		unit_kind(water, density).
-`
-	prologConvert = `
-		rule(GivenQuant, f, TargetQuant, c) :-
-			TargetQuant is (GivenQuant - 32) * 5 / 9.
-		rule(GivenQuant, c, TargetQuant, f) :-
-			TargetQuant is (GivenQuant / 5 * 9) + 32.
-		rule(GivenQuant, c, TargetQuant, k) :-
-			TargetQuant is GivenQuant + 273.15.
-		rule(GivenQuant, k, TargetQuant, c) :-
-			TargetQuant is GivenQuant - 273.15.
-
-		rule(GivenQuant, GivenUnit, TargetQuant, TargetUnit) :-
-			rule(GivenQuant, GivenUnit, X, Y),
-			rule(X, Y, TargetQuant, TargetUnit).
-
-		ratio(m, km, 0.001).
-		ratio(m, cm, 100).
-		ratio(m, mm, 1000).
-		ratio(feet, m, 0.3048).
-		ratio(feet, inches, 12).
-
-		ratio(g, mg, 1000).
-		ratio(g, kg, 0.001).
-
-		ratio(X, Y, Ratio) :- ratio(Y, X, Z), Ratio is 1/Z, !.
-		ratio(X, Y, Ratio) :-
-			ratio(X, Step, R1),
-		 	ratio(Step, Y, R2),
-		 	Step =\= X,
-		 	Step =\= Y,
-		 	Ratio is R1 * R2, !.
-
-		convert(GivenQuant, GivenUnit, TargetQuant, TargetUnit) :-
-			unit_kind(GivenUnit, temperature),
-			unit_kind(TargetUnit, temperature),
-			rule(GivenQuant, GivenUnit, TargetQuant, TargetUnit).
-		convert(GivenQuant, GivenUnit, TargetQuant, TargetUnit) :-
-			ratio(GivenUnit, TargetUnit, Ratio),
-			TargetQuant is GivenQuant * Ratio, !.
-`
-)
+//go:embed source/*
+var src embed.FS
 
 // New creates a new rules engine.
 func New() (*Engine, error) {
@@ -81,18 +23,17 @@ func New() (*Engine, error) {
 		p: prolog.New(nil, nil),
 	}
 	// Treat a string argument as an atom.
-	if err := ngn.p.Exec(`:- set_prolog_flag(double_quotes, atom).`); err != nil {
-		return nil, err
-	}
-	if err := ngn.p.Exec(`:- set_prolog_flag(debug, on).`); err != nil {
+	err := ngn.p.Exec(`:- set_prolog_flag(double_quotes, atom).`)
+	if err != nil {
 		return nil, err
 	}
 
-	if err := ngn.p.Exec(prologKinds); err != nil {
+	rules, err := src.ReadFile("source/rules.pdb")
+	if err != nil {
 		return nil, err
 	}
-
-	if err := ngn.p.Exec(prologConvert); err != nil {
+	err = ngn.p.Exec(string(rules))
+	if err != nil {
 		return nil, err
 	}