diff --git a/solver/processing.go b/solver/processing.go
index 0ede498..ea5fa16 100644
--- a/solver/processing.go
+++ b/solver/processing.go
@@ -85,7 +85,8 @@ func (solver *Solver) check_combinations() {
 
 func (solver *Solver) routine_validator(rows1_index int, rows2_index int, rows3_index int, rows4_index int, rows5_index int, rows6_index int, rows7_index int, rows8_index int, rows9_index int) {
 
-	solver.counter = solver.counter + 1
+	// solver.counter = solver.counter + 1
+	solver.counter.Add(1)
 
 	if solver.validate_combination(solver.row1s[rows1_index], solver.row2s[rows2_index], solver.row3s[rows3_index], solver.row4s[rows4_index], solver.row5s[rows5_index], solver.row6s[rows6_index], solver.row7s[rows7_index], solver.row8s[rows8_index], solver.row9s[rows9_index]) {
 		solver.solutions = append(solver.solutions, solver.render_combination(solver.row1s[rows1_index], solver.row2s[rows2_index], solver.row3s[rows3_index], solver.row4s[rows4_index], solver.row5s[rows5_index], solver.row6s[rows6_index], solver.row7s[rows7_index], solver.row8s[rows8_index], solver.row9s[rows9_index]))
@@ -123,17 +124,17 @@ func (solver *Solver) tracker() {
 	for !done {
 
 		// Determine how far we are.
-		percentage = (float32(solver.counter) / (float32(solver.iter) / 100))
+		percentage = (float32(solver.counter.Load()) / (float32(solver.iter) / 100))
 
 		// Reset the loop
-		rate_diff = solver.counter - rate_start
+		rate_diff = solver.counter.Load() - rate_start
 
 		if track <= int(percentage) || rate_diff == 0 { // Start if-statement
 
 			// Make sure something happened, making rate_start the only reliable variable
 			if rate_diff == 0 {
 				percentage = 100
-				solver.counter = solver.iter
+				solver.counter.Store(solver.iter)
 				done = true
 			}
 
@@ -145,11 +146,11 @@ func (solver *Solver) tracker() {
 			if rate_diff == 0 {
 				est_fin = "N/A"
 			} else {
-				est_fin = solver.secondsToHuman((solver.iter - solver.counter) / rate_avg)
+				est_fin = solver.secondsToHuman((solver.iter - solver.counter.Load()) / rate_avg)
 			}
 
 			// Printing the progress
-			log.Println("Processing: " + strconv.Itoa(int(percentage)) + "% (" + strconv.Itoa(int(solver.counter)) + "/" + strconv.Itoa(int(solver.iter)) + "); Rate: " + strconv.FormatInt(rate_diff, 10) + "/sec for " + timer_elapsed.String() + "; Time left (est.): " + est_fin)
+			log.Println("Processing: " + strconv.Itoa(int(percentage)) + "% (" + strconv.FormatInt(solver.counter.Load(), 10) + "/" + strconv.Itoa(int(solver.iter)) + "); Rate: " + strconv.FormatInt(rate_diff, 10) + "/sec for " + timer_elapsed.String() + "; Time left (est.): " + est_fin)
 
 			// After we are done printing, exit this for-loop
 			if percentage == 100 {
@@ -168,7 +169,7 @@ func (solver *Solver) tracker() {
 		}
 
 		// Resert the rate counter
-		rate_start = solver.counter
+		rate_start = solver.counter.Load()
 
 		// Sleep for a second
 		time.Sleep(1 * time.Second)
diff --git a/solver/types.go b/solver/types.go
index c7423c6..649efa9 100644
--- a/solver/types.go
+++ b/solver/types.go
@@ -1,5 +1,7 @@
 package solver
 
+import "sync/atomic"
+
 type Solver struct {
 	blocks    []int
 	row1      string
@@ -21,7 +23,7 @@ type Solver struct {
 	row8s     []int
 	row9s     []int
 	iter      int64
-	counter   int64
+	counter   atomic.Int64
 	solutions []string
 	rates     []int64
 }