diff --git a/layouts/_partials/widget/categories.html b/layouts/_partials/widget/categories.html
index 10c8a35..7179b77 100644
--- a/layouts/_partials/widget/categories.html
+++ b/layouts/_partials/widget/categories.html
@@ -1,16 +1,2 @@
-{{- $context := .Context -}}
-{{- $limit := default 10 .Params.limit -}}
-
+{{ $params := merge (dict "taxonomy" "categories" "title" (T "widget.categoriesCloud.title") "icon" "categories") .Params }}
+{{ partial "widget/taxonomy" (dict "Context" .Context "Params" $params) }}
\ No newline at end of file
diff --git a/layouts/_partials/widget/tag-cloud.html b/layouts/_partials/widget/tag-cloud.html
index 37edf52..88c3e46 100644
--- a/layouts/_partials/widget/tag-cloud.html
+++ b/layouts/_partials/widget/tag-cloud.html
@@ -1,16 +1,2 @@
-{{- $context := .Context -}}
-{{- $limit := default 10 .Params.limit -}}
-
+{{ $params := merge (dict "taxonomy" "tags" "title" (T "widget.tagCloud.title") "icon" "tag") .Params }}
+{{ partial "widget/taxonomy" (dict "Context" .Context "Params" $params) }}
\ No newline at end of file
diff --git a/layouts/_partials/widget/taxonomy.html b/layouts/_partials/widget/taxonomy.html
new file mode 100644
index 0000000..cdb3e5b
--- /dev/null
+++ b/layouts/_partials/widget/taxonomy.html
@@ -0,0 +1,39 @@
+{{- $context := .Context -}}
+
+{{- if not .Params.taxonomy -}}
+ {{- warnf "Taxonomy field is required" -}}
+{{- end -}}
+
+{{- $taxonomy := index $context.Site.Taxonomies .Params.taxonomy -}}
+{{- if not $taxonomy -}}
+ {{- warnf "Taxonomy %s not found" .Params.taxonomy -}}
+{{- end -}}
+
+{{- $taxonomyPage := $taxonomy.Page -}}
+{{- $widgetTitle := .Params.title -}}
+{{- $limit := default 10 .Params.limit -}}
+{{- $icon := default .Params.taxonomy .Params.icon -}}
+{{- $showLink := default false .Params.showLink -}}
+
+