diff --git a/app/views/content/contexts/_character.html.erb b/app/views/content/contexts/_character.html.erb
index fbe45fe3..f482ecf4 100644
--- a/app/views/content/contexts/_character.html.erb
+++ b/app/views/content/contexts/_character.html.erb
@@ -1,6 +1,8 @@
-<%=
+<%#
# TODO: Reflect on content_type to pull `relates` relations instead of hard-coding each here.
+%>
+<%=
render partial: 'content/contexts/relation', locals: {
content_type: Location,
content: content,
diff --git a/app/views/content/contexts/_item.html.erb b/app/views/content/contexts/_item.html.erb
index 37345982..70ac52d3 100644
--- a/app/views/content/contexts/_item.html.erb
+++ b/app/views/content/contexts/_item.html.erb
@@ -1,35 +1,32 @@
-<% religions = Artifactship.where(artifact_id: content.id).map(&:religion).select { |content| content.readable_by?(current_user || User.new) } %>
-<% if religions.any? %>
-
- <%= render partial: 'content/cards/in_universe_content_list', locals: {
- content_type: :religion,
- content_list: religions,
- card_title: "Artifact of #{pluralize(religions.count, 'religion')}"
- } %>
-
-<% end %>
+<%=
+ render partial: 'content/contexts/relation', locals: {
+ content_type: Religion,
+ content: content,
+ relation_class: Artifactship,
+ relation_class_id: :artifact_id,
+ relation_text: :artifact_of
+ }
+%>
-<% groups = GroupEquipmentship.where(equipment_id: content.id).map(&:group).select { |content| content.readable_by?(current_user || User.new) } %>
-<% if groups.any? %>
-
- <%= render partial: 'content/cards/in_universe_content_list', locals: {
- content_type: :group,
- content_list: groups,
- card_title: "Equipment for #{pluralize(groups.count, 'group')}"
- } %>
-
-<% end %>
+<%=
+ render partial: 'content/contexts/relation', locals: {
+ content_type: Group,
+ content: content,
+ relation_class: GroupEquipmentship,
+ relation_class_id: :equipment_id,
+ relation_text: :equipment_for
+ }
+%>
-<% groups = KeyItemship.where(key_item_id: content.id).map(&:group).select { |content| content.readable_by?(current_user || User.new) } %>
-<% if groups.any? %>
-
- <%= render partial: 'content/cards/in_universe_content_list', locals: {
- content_type: :group,
- content_list: groups,
- card_title: "Key item for #{pluralize(groups.count, 'group')}"
- } %>
-
-<% end %>
+<%=
+ render partial: 'content/contexts/relation', locals: {
+ content_type: Group,
+ content: content,
+ relation_class: KeyItemship,
+ relation_class_id: :key_item_id,
+ relation_text: :key_item_for
+ }
+%>
<% scenes = SceneItemship.where(scene_item_id: content.id).map(&:scene).select { |content| content.readable_by?(current_user || User.new) } %>
<% if scenes.any? %>
@@ -40,4 +37,18 @@
card_title: "Appears in #{pluralize(scenes.count, 'scene')}"
} %>
+<% end %>
+
+<% @references.each do |content_type, relations| %>
+ <% next unless relations.any? %>
+
+ <%= render partial: 'content/cards/content_relation_list', locals: {
+ content_type: content_type,
+ relations: relations,
+ card_title: [
+ 'Related to ',
+ pluralize(relations.count, "other #{content_type.to_s.singularize}")
+ ].join
+ } %>
+
<% end %>
\ No newline at end of file