diff --git a/src/main.gd b/src/main.gd
index ec6b5f5..18d8b0d 100644
--- a/src/main.gd
+++ b/src/main.gd
@@ -6,6 +6,7 @@ extends CanvasLayer
 var music_bus = AudioServer.get_bus_index("Music")
 
 var _tracks = []
+var current_track
 
 
 func _ready(): 
@@ -37,6 +38,7 @@ func _play():
 	audio_stream_player.stream = load(song.track)
 	audio_stream_player.play()
 	music_display.show_song(song)
+	current_track = song
 
 
 func _stop():
@@ -52,12 +54,29 @@ func _get_track():
 	if _tracks.size() == 0:
 		return null
 	
-	var weight = _tracks.reduce(func(accum, track): return accum + (track.weight if track.has("weight") else 1), 0)
+	var reduced_tracks = _tracks
+	var random_type_split = randf()
+	
+	if reduced_tracks.size() > 1:
+		reduced_tracks = reduced_tracks.filter(func(track): return track.track != current_track.track)
+		
+		var temp_tracks
+		
+		if current_track:
+			if random_type_split < 0.4:
+				temp_tracks = reduced_tracks.filter(func(track): return track.artist == current_track.artist)
+			elif random_type_split < 0.8:
+				temp_tracks = reduced_tracks.filter(func(track): return track.definition_file == current_track.definition_file)
+		
+		if temp_tracks.size() > 0:
+			reduced_tracks = temp_tracks
+	
+	var weight = reduced_tracks.reduce(func(accum, track): return accum + (track.weight if track.has("weight") else 1), 0)
 	
 	var rand = randf() * weight
 	var current_weight = 0
 	
-	for track in _tracks:
+	for track in reduced_tracks:
 		current_weight += track.weight if track.has("weight") else 1
 		
 		if current_weight >= rand:
@@ -66,7 +85,6 @@ func _get_track():
 	return null
 
 
-
 func _load_tracks():
 	_load_directory("res://tracks")
 	print("Loaded music")
@@ -88,6 +106,7 @@ func _load_directory(path: String):
 				for track in new_tracks:
 					if track.has("disabled") and track.disabled:
 						continue
+					track.definition_file = "%s/%s" % [path, file_name]
 					_tracks.push_back(track)
 			else:
 				_load_directory("res://tracks/%s" % [file_name])