diff --git a/plugins/Marketplace/PackageModel.py b/plugins/Marketplace/PackageModel.py
index 7c2a5d9ae1..29c8abe653 100644
--- a/plugins/Marketplace/PackageModel.py
+++ b/plugins/Marketplace/PackageModel.py
@@ -39,6 +39,7 @@ class PackageModel(QObject):
self._package_type = package_data.get("package_type", "")
self._is_bundled = package_data.get("is_bundled", False)
self._icon_url = package_data.get("icon_url", "")
+ self._marketplace_url = package_data.get("marketplace_url", "")
self._display_name = package_data.get("display_name", catalog.i18nc("@label:property", "Unknown Package"))
tags = package_data.get("tags", [])
self._is_checked_by_ultimaker = (self._package_type == "plugin" and "verified" in tags) or (
@@ -210,6 +211,10 @@ class PackageModel(QObject):
def packageId(self) -> str:
return self._package_id
+ @pyqtProperty(str, constant=True)
+ def marketplaceURL(self)-> str:
+ return self._marketplace_url
+
@pyqtProperty(str, constant = True)
def packageType(self) -> str:
return self._package_type
diff --git a/plugins/Marketplace/RemotePackageList.py b/plugins/Marketplace/RemotePackageList.py
index 16b0e721ad..4c82f2b29a 100644
--- a/plugins/Marketplace/RemotePackageList.py
+++ b/plugins/Marketplace/RemotePackageList.py
@@ -117,9 +117,6 @@ class RemotePackageList(PackageList):
return
for package_data in response_data["data"]:
- package_id = package_data["package_id"]
- if package_id in self._package_manager.local_packages_ids:
- continue # We should only show packages which are not already installed
try:
package = PackageModel(package_data, parent = self)
self._connectManageButtonSignals(package)
diff --git a/plugins/Marketplace/resources/images/Plugin.svg b/plugins/Marketplace/resources/images/Plugin.svg
new file mode 100644
index 0000000000..51356d842c
--- /dev/null
+++ b/plugins/Marketplace/resources/images/Plugin.svg
@@ -0,0 +1,3 @@
+
diff --git a/plugins/Marketplace/resources/images/Spool.svg b/plugins/Marketplace/resources/images/Spool.svg
new file mode 100644
index 0000000000..dae9b43030
--- /dev/null
+++ b/plugins/Marketplace/resources/images/Spool.svg
@@ -0,0 +1,3 @@
+
diff --git a/plugins/Marketplace/resources/qml/ManagedPackages.qml b/plugins/Marketplace/resources/qml/ManagedPackages.qml
index 8ccaacea46..9358a04f07 100644
--- a/plugins/Marketplace/resources/qml/ManagedPackages.qml
+++ b/plugins/Marketplace/resources/qml/ManagedPackages.qml
@@ -13,13 +13,14 @@ Packages
bannerVisible: UM.Preferences.getValue("cura/market_place_show_manage_packages_banner");
bannerIcon: UM.Theme.getIcon("ArrowDoubleCircleRight")
bannerText: catalog.i18nc("@text", "Manage your Ultimaker Cura plugins and material profiles here. Make sure to keep your plugins up to date and backup your setup regularly.")
- bannerReadMoreUrl: "" // TODO add when support page is ready
+ bannerReadMoreUrl: "https://support.ultimaker.com/hc/en-us/articles/4411125921426/?utm_source=cura&utm_medium=software&utm_campaign=marketplace-learn-manage"
onRemoveBanner: function() {
UM.Preferences.setValue("cura/market_place_show_manage_packages_banner", false);
bannerVisible = false;
}
searchInBrowserUrl: "https://marketplace.ultimaker.com/app/cura/plugins?utm_source=cura&utm_medium=software&utm_campaign=marketplace-search-plugins-browser"
- packagesManageableInListView: true
-
+ showUpdateButton: true
+ showInstallButton: true
+ showDisableButton: true
model: manager.LocalPackageList
}
diff --git a/plugins/Marketplace/resources/qml/Marketplace.qml b/plugins/Marketplace/resources/qml/Marketplace.qml
index fc6d3cd755..5a30141b32 100644
--- a/plugins/Marketplace/resources/qml/Marketplace.qml
+++ b/plugins/Marketplace/resources/qml/Marketplace.qml
@@ -46,198 +46,182 @@ Window
{
anchors.fill: parent
color: UM.Theme.getColor("main_background")
+ }
+ //The Marketplace can have a page in front of everything with package details. The stack view controls its visibility.
+ StackView
+ {
+ id: contextStack
+ anchors.fill: parent
- //The Marketplace can have a page in front of everything with package details. The stack view controls its visibility.
- StackView
+ initialItem: packageBrowse
+
+ ColumnLayout
{
- id: contextStack
- anchors.fill: parent
+ id: packageBrowse
- initialItem: packageBrowse
+ spacing: UM.Theme.getSize("narrow_margin").height
- ColumnLayout
+ // Page title.
+ Item
{
- id: packageBrowse
+ implicitWidth: parent.width
+ implicitHeight: childrenRect.height + UM.Theme.getSize("default_margin").height
- spacing: UM.Theme.getSize("default_margin").height
-
- // Page title.
- Item
+ Label
{
- Layout.preferredWidth: parent.width
- Layout.preferredHeight: childrenRect.height + UM.Theme.getSize("default_margin").height
-
- Label
+ id: pageTitle
+ anchors
{
- id: pageTitle
- anchors
- {
- left: parent.left
- leftMargin: UM.Theme.getSize("default_margin").width
- right: parent.right
- rightMargin: UM.Theme.getSize("default_margin").width
- bottom: parent.bottom
- }
-
- font: UM.Theme.getFont("large")
- color: UM.Theme.getColor("text")
- text: content.item ? content.item.pageTitle: catalog.i18nc("@title", "Loading...")
+ left: parent.left
+ leftMargin: UM.Theme.getSize("default_margin").width
+ right: parent.right
+ rightMargin: UM.Theme.getSize("default_margin").width
+ bottom: parent.bottom
}
- }
- OnboardBanner
- {
- visible: content.item && content.item.bannerVisible
- text: content.item && content.item.bannerText
- icon: content.item && content.item.bannerIcon
- onRemove: content.item && content.item.onRemoveBanner
- readMoreUrl: content.item && content.item.bannerReadMoreUrl
+ font: UM.Theme.getFont("large")
+ color: UM.Theme.getColor("text")
+ text: content.item ? content.item.pageTitle: catalog.i18nc("@title", "Loading...")
}
+ }
- // Search & Top-Level Tabs
- Item
+ OnboardBanner
+ {
+ visible: content.item && content.item.bannerVisible
+ text: content.item && content.item.bannerText
+ icon: content.item && content.item.bannerIcon
+ onRemove: content.item && content.item.onRemoveBanner
+ readMoreUrl: content.item && content.item.bannerReadMoreUrl
+
+ Layout.fillWidth: true
+ Layout.leftMargin: UM.Theme.getSize("default_margin").width
+ Layout.rightMargin: UM.Theme.getSize("default_margin").width
+ }
+
+ // Search & Top-Level Tabs
+ Item
+ {
+ implicitHeight: childrenRect.height
+ implicitWidth: parent.width - 2 * UM.Theme.getSize("default_margin").width
+ Layout.alignment: Qt.AlignHCenter
+ RowLayout
{
- Layout.preferredHeight: childrenRect.height
- Layout.preferredWidth: parent.width - 2 * UM.Theme.getSize("thin_margin").width
- RowLayout
+ width: parent.width
+ height: UM.Theme.getSize("button_icon").height + UM.Theme.getSize("default_margin").height
+ spacing: UM.Theme.getSize("thin_margin").width
+
+ Cura.SearchBar
{
- width: parent.width
- height: UM.Theme.getSize("button_icon").height + UM.Theme.getSize("default_margin").height
- spacing: UM.Theme.getSize("thin_margin").width
+ id: searchBar
+ implicitHeight: UM.Theme.getSize("button_icon").height
+ Layout.fillWidth: true
+ onTextEdited: searchStringChanged(text)
+ }
- Item
+ // Page selection.
+ TabBar
+ {
+ id: pageSelectionTabBar
+ Layout.alignment: Qt.AlignRight
+ height: UM.Theme.getSize("button_icon").height
+ spacing: 0
+ background: Rectangle { color: "transparent" }
+ currentIndex: manager.tabShown
+
+ onCurrentIndexChanged:
{
- Layout.preferredHeight: parent.height
- Layout.preferredWidth: searchBar.visible ? UM.Theme.getSize("thin_margin").width : 0
- Layout.fillWidth: ! searchBar.visible
+ manager.tabShown = currentIndex
+ searchBar.text = "";
+ searchBar.visible = currentItem.hasSearch;
+ content.source = currentItem.sourcePage;
}
- Cura.SearchBar
+ PackageTypeTab
{
- id: searchBar
- Layout.preferredHeight: UM.Theme.getSize("button_icon").height
- Layout.fillWidth: true
- onTextEdited: searchStringChanged(text)
+ id: pluginTabText
+ width: implicitWidth
+ text: catalog.i18nc("@button", "Plugins")
+ property string sourcePage: "Plugins.qml"
+ property bool hasSearch: true
}
-
- // Page selection.
- TabBar
+ PackageTypeTab
{
- id: pageSelectionTabBar
- Layout.alignment: Qt.AlignRight
- height: UM.Theme.getSize("button_icon").height
- spacing: 0
- background: Rectangle { color: "transparent" }
- currentIndex: manager.tabShown
+ id: materialsTabText
+ width: implicitWidth
+ text: catalog.i18nc("@button", "Materials")
+ property string sourcePage: "Materials.qml"
+ property bool hasSearch: true
+ }
+ ManagePackagesButton
+ {
+ property string sourcePage: "ManagedPackages.qml"
+ property bool hasSearch: false
- onCurrentIndexChanged:
+ Cura.NotificationIcon
{
- manager.tabShown = currentIndex
- searchBar.text = "";
- searchBar.visible = currentItem.hasSearch;
- content.source = currentItem.sourcePage;
- }
-
- PackageTypeTab
- {
- id: pluginTabText
- width: implicitWidth
- text: catalog.i18nc("@button", "Plugins")
- property string sourcePage: "Plugins.qml"
- property bool hasSearch: true
- }
- PackageTypeTab
- {
- id: materialsTabText
- width: implicitWidth
- text: catalog.i18nc("@button", "Materials")
- property string sourcePage: "Materials.qml"
- property bool hasSearch: true
- }
- ManagePackagesButton
- {
- property string sourcePage: "ManagedPackages.qml"
- property bool hasSearch: false
-
- Cura.NotificationIcon
+ anchors
{
- anchors
- {
- horizontalCenter: parent.right
- verticalCenter: parent.top
- }
- visible: CuraApplication.getPackageManager().packagesWithUpdate.length > 0
+ horizontalCenter: parent.right
+ verticalCenter: parent.top
+ }
+ visible: CuraApplication.getPackageManager().packagesWithUpdate.length > 0
- labelText:
- {
- const itemCount = CuraApplication.getPackageManager().packagesWithUpdate.length
- return itemCount > 9 ? "9+" : itemCount
- }
+ labelText:
+ {
+ const itemCount = CuraApplication.getPackageManager().packagesWithUpdate.length
+ return itemCount > 9 ? "9+" : itemCount
}
}
}
-
- TextMetrics
- {
- id: pluginTabTextMetrics
- text: pluginTabText.text
- font: pluginTabText.font
- }
- TextMetrics
- {
- id: materialsTabTextMetrics
- text: materialsTabText.text
- font: materialsTabText.font
- }
}
}
+ }
- FontMetrics
- {
- id: fontMetrics
- font: UM.Theme.getFont("default")
- }
+ FontMetrics
+ {
+ id: fontMetrics
+ font: UM.Theme.getFont("default")
+ }
- Cura.TertiaryButton
- {
- text: catalog.i18nc("@info", "Search in the browser")
- iconSource: UM.Theme.getIcon("LinkExternal")
- visible: pageSelectionTabBar.currentItem.hasSearch
- isIconOnRightSide: true
- height: fontMetrics.height
- textFont: fontMetrics.font
- textColor: UM.Theme.getColor("text")
+ Cura.TertiaryButton
+ {
+ text: catalog.i18nc("@info", "Search in the browser")
+ iconSource: UM.Theme.getIcon("LinkExternal")
+ visible: pageSelectionTabBar.currentItem.hasSearch
+ isIconOnRightSide: true
+ height: fontMetrics.height
+ textFont: fontMetrics.font
+ textColor: UM.Theme.getColor("text")
- onClicked: content.item && Qt.openUrlExternally(content.item.searchInBrowserUrl)
- }
+ onClicked: content.item && Qt.openUrlExternally(content.item.searchInBrowserUrl)
+ }
+
+ // Page contents.
+ Rectangle
+ {
+ Layout.preferredWidth: parent.width
+ Layout.fillHeight: true
+ color: UM.Theme.getColor("detail_background")
// Page contents.
- Rectangle
+ Loader
{
- Layout.preferredWidth: parent.width
- Layout.fillHeight: true
- color: UM.Theme.getColor("detail_background")
+ id: content
+ anchors.fill: parent
+ anchors.margins: UM.Theme.getSize("default_margin").width
+ source: "Plugins.qml"
- // Page contents.
- Loader
+ Connections
{
- id: content
- anchors.fill: parent
- anchors.margins: UM.Theme.getSize("default_margin").width
- source: "Plugins.qml"
-
- Connections
+ target: content
+ function onLoaded()
{
- target: content
- function onLoaded()
- {
- pageTitle.text = content.item.pageTitle
- searchStringChanged.connect(handleSearchStringChanged)
- }
- function handleSearchStringChanged(new_search)
- {
- content.item.model.searchString = new_search
- }
+ pageTitle.text = content.item.pageTitle
+ searchStringChanged.connect(handleSearchStringChanged)
+ }
+ function handleSearchStringChanged(new_search)
+ {
+ content.item.model.searchString = new_search
}
}
}
diff --git a/plugins/Marketplace/resources/qml/Materials.qml b/plugins/Marketplace/resources/qml/Materials.qml
index 39fae7042a..c10a937d67 100644
--- a/plugins/Marketplace/resources/qml/Materials.qml
+++ b/plugins/Marketplace/resources/qml/Materials.qml
@@ -10,13 +10,14 @@ Packages
bannerVisible: UM.Preferences.getValue("cura/market_place_show_material_banner")
bannerIcon: UM.Theme.getIcon("Spool")
bannerText: catalog.i18nc("@text", "Select and install material profiles optimised for your Ultimaker 3D printers.")
- bannerReadMoreUrl: "" // TODO add when support page is ready
+ bannerReadMoreUrl: "https://support.ultimaker.com/hc/en-us/articles/360011968360/?utm_source=cura&utm_medium=software&utm_campaign=marketplace-learn-materials"
onRemoveBanner: function() {
UM.Preferences.setValue("cura/market_place_show_material_banner", false);
bannerVisible = false;
}
searchInBrowserUrl: "https://marketplace.ultimaker.com/app/cura/materials?utm_source=cura&utm_medium=software&utm_campaign=marketplace-search-materials-browser"
- packagesManageableInListView: false
+ showUpdateButton: true
+ showInstallButton: true
model: manager.MaterialPackageList
}
diff --git a/plugins/Marketplace/resources/qml/OnboardBanner.qml b/plugins/Marketplace/resources/qml/OnboardBanner.qml
index 25e4b53241..7d973cb74a 100644
--- a/plugins/Marketplace/resources/qml/OnboardBanner.qml
+++ b/plugins/Marketplace/resources/qml/OnboardBanner.qml
@@ -16,10 +16,7 @@ Rectangle
property var onRemove
property string readMoreUrl
- Layout.preferredHeight: childrenRect.height + 2 * UM.Theme.getSize("default_margin").height
- Layout.fillWidth: true
- Layout.margins: UM.Theme.getSize("default_margin").width
-
+ implicitHeight: childrenRect.height + 2 * UM.Theme.getSize("default_margin").height
color: UM.Theme.getColor("action_panel_secondary")
// Icon
diff --git a/plugins/Marketplace/resources/qml/PackageCard.qml b/plugins/Marketplace/resources/qml/PackageCard.qml
index 633d2b25b9..7442c63aa6 100644
--- a/plugins/Marketplace/resources/qml/PackageCard.qml
+++ b/plugins/Marketplace/resources/qml/PackageCard.qml
@@ -11,7 +11,9 @@ import Cura 1.6 as Cura
Rectangle
{
property alias packageData: packageCardHeader.packageData
- property alias manageableInListView: packageCardHeader.showManageButtons
+ property alias showUpdateButton: packageCardHeader.showUpdateButton
+ property alias showDisableButton: packageCardHeader.showDisableButton
+ property alias showInstallButton: packageCardHeader.showInstallButton
height: childrenRect.height
color: UM.Theme.getColor("main_background")
@@ -31,64 +33,14 @@ Rectangle
{
id: descriptionLabel
width: parent.width
- property real lastLineWidth: 0; //Store the width of the last line, to properly position the elision.
text: packageData.description
- textFormat: Text.PlainText //Must be plain text, or we won't get onLineLaidOut signals. Don't auto-detect!
font: UM.Theme.getFont("default")
color: UM.Theme.getColor("text")
maximumLineCount: 2
wrapMode: Text.Wrap
elide: Text.ElideRight
visible: text !== ""
-
- onLineLaidOut:
- {
- if(truncated && line.isLast)
- {
- let max_line_width = parent.width - readMoreButton.width - fontMetrics.advanceWidth("… ") - 2 * UM.Theme.getSize("default_margin").width;
- if(line.implicitWidth > max_line_width)
- {
- line.width = max_line_width;
- }
- else
- {
- line.width = line.implicitWidth - fontMetrics.advanceWidth("…"); //Truncate the ellipsis. We're adding this ourselves.
- }
- descriptionLabel.lastLineWidth = line.implicitWidth;
- }
- }
- }
- Label
- {
- id: tripleDotLabel
- anchors.left: parent.left
- anchors.leftMargin: descriptionLabel.lastLineWidth
- anchors.bottom: descriptionLabel.bottom
-
- text: "… "
- font: descriptionLabel.font
- color: descriptionLabel.color
- visible: descriptionLabel.truncated && descriptionLabel.text !== ""
- }
- Cura.TertiaryButton
- {
- id: readMoreButton
- anchors.right: parent.right
- anchors.bottom: descriptionLabel.bottom
- height: fontMetrics.height //Height of a single line.
-
- text: catalog.i18nc("@info", "Read more")
- iconSource: UM.Theme.getIcon("LinkExternal")
-
- visible: descriptionLabel.truncated && descriptionLabel.text !== ""
- enabled: visible
- leftPadding: UM.Theme.getSize("default_margin").width
- rightPadding: UM.Theme.getSize("wide_margin").width
- textFont: descriptionLabel.font
- isIconOnRightSide: true
-
- onClicked: Qt.openUrlExternally(packageData.packageInfoUrl)
}
}
}
diff --git a/plugins/Marketplace/resources/qml/PackageCardHeader.qml b/plugins/Marketplace/resources/qml/PackageCardHeader.qml
index 3a76f7a959..013704793f 100644
--- a/plugins/Marketplace/resources/qml/PackageCardHeader.qml
+++ b/plugins/Marketplace/resources/qml/PackageCardHeader.qml
@@ -12,10 +12,13 @@ import Cura 1.6 as Cura
// are combined into the reusable "PackageCardHeader" component
Item
{
- default property alias contents: contentItem.children;
+ default property alias contents: contentItem.children
property var packageData
- property bool showManageButtons: false
+ property bool showDisableButton: false
+ property bool showInstallButton: false
+ property bool showUpdateButton: false
+
width: parent.width
height: UM.Theme.getSize("card").height
@@ -32,8 +35,21 @@ Item
}
width: UM.Theme.getSize("card_icon").width
height: width
-
- source: packageData.iconUrl != "" ? packageData.iconUrl : "../images/placeholder.svg"
+ sourceSize.height: height
+ sourceSize.width: width
+ source:
+ {
+ if (packageData.iconUrl != "")
+ {
+ return packageData.iconUrl
+ }
+ switch (packageData.packageType)
+ {
+ case "plugin": return "../images/Plugin.svg";
+ case "material": return "../images/Spool.svg";
+ default: return "../images/placeholder.svg";
+ }
+ }
}
ColumnLayout
@@ -103,7 +119,7 @@ Item
color: externalLinkButton.hovered ? UM.Theme.getColor("action_button_hovered"): "transparent"
radius: externalLinkButton.width / 2
}
- onClicked: Qt.openUrlExternally(packageData.authorInfoUrl)
+ onClicked: Qt.openUrlExternally(packageData.marketplaceURL)
}
}
@@ -157,7 +173,7 @@ Item
ManageButton
{
id: enableManageButton
- visible: showManageButtons && packageData.isInstalled && !packageData.isToBeInstalled && packageData.packageType != "material"
+ visible: showDisableButton && packageData.isInstalled && !packageData.isToBeInstalled && packageData.packageType != "material"
enabled: !packageData.busy
button_style: !packageData.isActive
@@ -171,7 +187,7 @@ Item
ManageButton
{
id: installManageButton
- visible: showManageButtons && (packageData.canDowngrade || !packageData.isBundled)
+ visible: showInstallButton && (packageData.canDowngrade || !packageData.isBundled)
enabled: !packageData.busy
busy: packageData.busy
button_style: !(packageData.isInstalled || packageData.isToBeInstalled)
@@ -201,7 +217,7 @@ Item
ManageButton
{
id: updateManageButton
- visible: showManageButtons && packageData.canUpdate
+ visible: showUpdateButton && packageData.canUpdate
enabled: !packageData.busy
busy: packageData.busy
Layout.alignment: Qt.AlignTop
diff --git a/plugins/Marketplace/resources/qml/PackagePage.qml b/plugins/Marketplace/resources/qml/PackagePage.qml
index 21c400fff2..e590ee6091 100644
--- a/plugins/Marketplace/resources/qml/PackagePage.qml
+++ b/plugins/Marketplace/resources/qml/PackagePage.qml
@@ -31,7 +31,9 @@ Rectangle
PackageCardHeader
{
id: packageCardHeader
- showManageButtons: true
+ showUpdateButton: true
+ showInstallButton: true
+ showDisableButton: true
anchors.fill: parent
@@ -40,7 +42,10 @@ Rectangle
id: downloadCount
Layout.preferredWidth: parent.width
Layout.fillHeight: true
-
+ // It's not the perfect way to handle this, since a package really can have 0 downloads
+ // But we re-use the package page for the manage plugins as well. The one user that doesn't see
+ // the num downloads is an acceptable "sacrifice" to make this easy to fix.
+ visible: packageData.downloadCount != "0"
UM.RecolorImage
{
id: downloadsIcon
@@ -53,6 +58,7 @@ Rectangle
Label
{
+
anchors.verticalCenter: downloadsIcon.verticalCenter
color: UM.Theme.getColor("text")
diff --git a/plugins/Marketplace/resources/qml/Packages.qml b/plugins/Marketplace/resources/qml/Packages.qml
index 194c90c248..56fffe036e 100644
--- a/plugins/Marketplace/resources/qml/Packages.qml
+++ b/plugins/Marketplace/resources/qml/Packages.qml
@@ -19,7 +19,10 @@ ListView
property string bannerText
property string bannerReadMoreUrl
property var onRemoveBanner
- property bool packagesManageableInListView
+
+ property bool showUpdateButton
+ property bool showDisableButton
+ property bool showInstallButton
clip: true
@@ -53,8 +56,8 @@ ListView
// Vertical ScrollBar, styled similarly to the scrollBar in the settings panel
id: verticalScrollBar
visible: packages.contentHeight > packages.height
-
- background: Item{}
+ anchors.right: parent.right
+ background: Item {}
contentItem: Rectangle
{
@@ -81,9 +84,20 @@ ListView
PackageCard
{
- manageableInListView: packages.packagesManageableInListView
+ showUpdateButton: packages.showUpdateButton
+ showDisableButton: packages.showDisableButton
+ showInstallButton: packages.showInstallButton
packageData: model.package
- width: parent.width - UM.Theme.getSize("default_margin").width - UM.Theme.getSize("narrow_margin").width
+ width: {
+ if (verticalScrollBar.visible)
+ {
+ return parent.width - UM.Theme.getSize("default_margin").width - UM.Theme.getSize("default_margin").width
+ }
+ else
+ {
+ return parent.width - UM.Theme.getSize("default_margin").width
+ }
+ }
color: cardMouseArea.containsMouse ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("main_background")
}
}
diff --git a/plugins/Marketplace/resources/qml/Plugins.qml b/plugins/Marketplace/resources/qml/Plugins.qml
index 9983a827d8..739e0c01a7 100644
--- a/plugins/Marketplace/resources/qml/Plugins.qml
+++ b/plugins/Marketplace/resources/qml/Plugins.qml
@@ -10,13 +10,14 @@ Packages
bannerVisible: UM.Preferences.getValue("cura/market_place_show_plugin_banner")
bannerIcon: UM.Theme.getIcon("Shop")
bannerText: catalog.i18nc("@text", "Streamline your workflow and customize your Ultimaker Cura experience with plugins contributed by our amazing community of users.")
- bannerReadMoreUrl: "" // TODO add when support page is ready
+ bannerReadMoreUrl: "https://support.ultimaker.com/hc/en-us/articles/360011968360/?utm_source=cura&utm_medium=software&utm_campaign=marketplace-learn-plugins"
onRemoveBanner: function() {
UM.Preferences.setValue("cura/market_place_show_plugin_banner", false)
bannerVisible = false;
}
searchInBrowserUrl: "https://marketplace.ultimaker.com/app/cura/plugins?utm_source=cura&utm_medium=software&utm_campaign=marketplace-search-plugins-browser"
- packagesManageableInListView: false
+ showUpdateButton: true
+ showInstallButton: true
model: manager.PluginPackageList
}
diff --git a/plugins/VersionUpgrade/VersionUpgrade48to49/VersionUpgrade48to49.py b/plugins/VersionUpgrade/VersionUpgrade48to49/VersionUpgrade48to49.py
index 4595e66ed3..14db98c1fc 100644
--- a/plugins/VersionUpgrade/VersionUpgrade48to49/VersionUpgrade48to49.py
+++ b/plugins/VersionUpgrade/VersionUpgrade48to49/VersionUpgrade48to49.py
@@ -29,9 +29,10 @@ class VersionUpgrade48to49(VersionUpgrade):
parser["general"]["version"] = "7"
# Update visibility settings to include new top_bottom category
- parser["general"]["visible_settings"] += ";top_bottom"
+ if "visible_settings" in parser["general"]:
+ parser["general"]["visible_settings"] += ";top_bottom"
- if "categories_expanded" in parser["cura"] and any([setting in parser["cura"]["categories_expanded"] for setting in self._moved_visibility_settings]):
+ if "cura" in parser and "categories_expanded" in parser["cura"] and any([setting in parser["cura"]["categories_expanded"] for setting in self._moved_visibility_settings]):
parser["cura"]["categories_expanded"] += ";top_bottom"
# If the account scope in 4.8 is outdated, delete it so that the user is enforced to log in again and get the
diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json
index dc01b0e585..7bb24d7445 100644
--- a/resources/definitions/fdmprinter.def.json
+++ b/resources/definitions/fdmprinter.def.json
@@ -1142,6 +1142,7 @@
"label": "Wall Distribution Count",
"description": "The number of walls, counted from the center, over which the variation needs to be spread. Lower values mean that the outer walls don't change in width.",
"type": "int",
+ "maximum_value": "999999",
"default_value": 1,
"minimum_value": "1",
"enabled": "beading_strategy_type == 'inward_distributed'"
@@ -1198,8 +1199,8 @@
},
"optimize_wall_printing_order":
{
- "label": "Order Inner Walls By Inset",
- "description": "Order inner wall printing by inset-index, instead of by (hole) region.",
+ "label": "Optimize Wall Printing Order",
+ "description": "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization. First layer is not optimized when choosing brim as build plate adhesion type.",
"type": "bool",
"default_value": false,
"settable_per_mesh": true
@@ -1433,6 +1434,7 @@
"minimum_value": "0",
"maximum_value_warning": "top_layers - 1",
"type": "int",
+ "maximum_value": "999999",
"value": "0",
"limit_to_extruder": "roofing_extruder_nr",
"settable_per_mesh": true,
@@ -1486,6 +1488,7 @@
"default_value": 8,
"minimum_value": "0",
"maximum_value_warning": "100",
+ "maximum_value": "999999",
"type": "int",
"minimum_value_warning": "2",
"value": "0 if infill_sparse_density == 100 else math.ceil(round(top_thickness / resolveOrValue('layer_height'), 4))",
@@ -1516,6 +1519,7 @@
"minimum_value": "0",
"minimum_value_warning": "2",
"default_value": 6,
+ "maximum_value": "999999",
"type": "int",
"value": "999999 if infill_sparse_density == 100 else math.ceil(round(bottom_thickness / resolveOrValue('layer_height'), 4))",
"limit_to_extruder": "top_bottom_extruder_nr",
@@ -1527,6 +1531,7 @@
"description": "The number of initial bottom layers, from the build-plate upwards. When calculated by the bottom thickness, this value is rounded to a whole number.",
"minimum_value": "0",
"minimum_value_warning": "2",
+ "maximum_value": "999999",
"default_value": 6,
"type": "int",
"value": "bottom_layers",
@@ -2048,6 +2053,7 @@
"description": "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage.",
"default_value": 1,
"type": "int",
+ "maximum_value": "999999",
"minimum_value": "1",
"maximum_value_warning": "infill_line_distance / infill_line_width",
"enabled": "infill_sparse_density > 0 and infill_pattern != 'zigzag' and (gradual_infill_steps == 0 or not zig_zaggify_infill)",
@@ -2233,6 +2239,7 @@
"minimum_value": "0",
"maximum_value_warning": "10",
"type": "int",
+ "maximum_value": "999999",
"value": "math.ceil(round(skin_edge_support_thickness / resolveOrValue('infill_sparse_thickness'), 4))",
"limit_to_extruder": "infill_extruder_nr",
"enabled": "infill_sparse_density > 0",
@@ -3257,6 +3264,7 @@
"default_value": 2,
"resolve": "round(sum(extruderValues('speed_slowdown_layers')) / len(extruderValues('speed_slowdown_layers')))",
"minimum_value": "0",
+ "maximum_value": "999999",
"maximum_value_warning": "3.2 / resolveOrValue('layer_height')",
"settable_per_mesh": false,
"settable_per_extruder": false
diff --git a/resources/definitions/ultimaker2_plus_connect.def.json b/resources/definitions/ultimaker2_plus_connect.def.json
index 1927ed20f9..186637b487 100644
--- a/resources/definitions/ultimaker2_plus_connect.def.json
+++ b/resources/definitions/ultimaker2_plus_connect.def.json
@@ -84,6 +84,8 @@
"meshfix_maximum_resolution": { "value": "(speed_wall_0 + speed_wall_x) / 60" },
"meshfix_maximum_deviation": { "value": "layer_height / 4" },
"meshfix_maximum_travel_resolution": { "value": 0.5 },
- "prime_blob_enable": { "enabled": true, "default_value": true, "value": "resolveOrValue('print_sequence') != 'one_at_a_time'" }
+ "prime_blob_enable": { "enabled": true, "default_value": true, "value": "resolveOrValue('print_sequence') != 'one_at_a_time'" },
+ "retraction_prime_speed": { "value": "15" },
+ "retraction_speed": {"value": "45" }
}
}
diff --git a/resources/definitions/ultimaker_s3.def.json b/resources/definitions/ultimaker_s3.def.json
index 6ecf2fe848..034a2d78d4 100644
--- a/resources/definitions/ultimaker_s3.def.json
+++ b/resources/definitions/ultimaker_s3.def.json
@@ -136,6 +136,7 @@
"retraction_hop_only_when_collides": { "value": "True" },
"retraction_min_travel": { "value": "5" },
"retraction_prime_speed": { "value": "15" },
+ "retraction_speed": {"value": "45" },
"skin_overlap": { "value": "10" },
"speed_layer_0": { "value": "20" },
"speed_prime_tower": { "value": "speed_topbottom" },
diff --git a/resources/definitions/ultimaker_s5.def.json b/resources/definitions/ultimaker_s5.def.json
index ea58cfef33..36aa311c23 100644
--- a/resources/definitions/ultimaker_s5.def.json
+++ b/resources/definitions/ultimaker_s5.def.json
@@ -138,6 +138,7 @@
"retraction_hop_only_when_collides": { "value": "True" },
"retraction_min_travel": { "value": "5" },
"retraction_prime_speed": { "value": "15" },
+ "retraction_speed": {"value": "45" },
"skin_overlap": { "value": "10" },
"speed_layer_0": { "value": "20" },
"speed_prime_tower": { "value": "speed_topbottom" },
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.4_fast.inst.cfg
index 45f350cdbd..0ab179959f 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.4_fast.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.4_fast.inst.cfg
@@ -17,6 +17,8 @@ cool_min_layer_time = 3
cool_min_layer_time_fan_speed_max = 15
cool_min_speed = 10
infill_sparse_density = 20
+retraction_combing_max_distance = 50
+retraction_prime_speed = =retraction_speed
speed_layer_0 = =round(speed_print * 30 / 45)
speed_print = 45
speed_travel = 150
@@ -26,5 +28,4 @@ wall_thickness = 0.7
speed_wall_0 = =math.ceil(speed_print * 30 / 45)
speed_topbottom = =math.ceil(speed_print * 30 / 45)
speed_wall_x = =math.ceil(speed_print * 40 / 45)
-speed_infill = =math.ceil(speed_print * 45 / 45)
-retraction_combing_max_distance = 50
+speed_infill = =math.ceil(speed_print * 45 / 45)
\ No newline at end of file
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.4_high.inst.cfg
index 3d0e9f6abd..dc4b06940c 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.4_high.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.4_high.inst.cfg
@@ -17,11 +17,12 @@ cool_min_layer_time = 2
cool_min_layer_time_fan_speed_max = 15
cool_min_speed = 15
infill_sparse_density = 20
+retraction_combing_max_distance = 50
+retraction_prime_speed = =retraction_speed
speed_layer_0 = =round(speed_print * 30 / 45)
speed_print = 45
speed_wall = =math.ceil(speed_print * 30 / 45)
top_bottom_thickness = 0.72
wall_thickness = 1.05
speed_topbottom = =math.ceil(speed_print * 15 / 45)
-speed_infill = =math.ceil(speed_print * 45 / 45)
-retraction_combing_max_distance = 50
+speed_infill = =math.ceil(speed_print * 45 / 45)
\ No newline at end of file
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.4_normal.inst.cfg
index ab5559b322..2ea0c4a828 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.4_normal.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.4_normal.inst.cfg
@@ -17,9 +17,10 @@ cool_min_layer_time = 3
cool_min_layer_time_fan_speed_max = 15
cool_min_speed = 10
infill_sparse_density = 20
+retraction_combing_max_distance = 50
+retraction_prime_speed = =retraction_speed
speed_layer_0 = =round(speed_print * 30 / 45)
speed_print = 45
speed_wall = =math.ceil(speed_print * 30 / 45)
top_bottom_thickness = 0.8
-wall_thickness = 1.05
-retraction_combing_max_distance = 50
+wall_thickness = 1.05
\ No newline at end of file
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.6_normal.inst.cfg
index 286474454b..60642a3c69 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.6_normal.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.6_normal.inst.cfg
@@ -17,8 +17,9 @@ cool_min_layer_time = 5
cool_min_layer_time_fan_speed_max = 20
cool_min_speed = 8
infill_sparse_density = 20
+retraction_combing_max_distance = 50
+retraction_prime_speed = =retraction_speed
speed_layer_0 = =round(speed_print * 30 / 40)
speed_print = 40
top_bottom_thickness = 1.2
wall_thickness = 1.59
-retraction_combing_max_distance = 50
\ No newline at end of file
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.4_draft.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.4_draft.inst.cfg
index d37743423b..fdaecf1142 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.4_draft.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.4_draft.inst.cfg
@@ -26,6 +26,8 @@ raft_interface_line_spacing = 1
raft_interface_line_width = 0.8
raft_margin = 15
raft_surface_line_width = 0.38
+retraction_combing_max_distance = 50
+retraction_prime_speed = =retraction_speed
speed_layer_0 = =math.ceil(speed_print * 15 / 25)
speed_print = 25
speed_topbottom = =math.ceil(speed_print * 20 / 25)
@@ -37,5 +39,4 @@ support_infill_rate = =0 if support_enable and support_structure == 'tree' else
support_pattern = lines
support_z_distance = 0.26
top_bottom_thickness = 1.5
-wall_thickness = 1.14
-retraction_combing_max_distance = 50
\ No newline at end of file
+wall_thickness = 1.14
\ No newline at end of file
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.4_normal.inst.cfg
index a0fd902e31..b9845f7002 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.4_normal.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.4_normal.inst.cfg
@@ -26,6 +26,8 @@ raft_interface_line_spacing = 1
raft_interface_line_width = 0.8
raft_margin = 15
raft_surface_line_width = 0.38
+retraction_combing_max_distance = 50
+retraction_prime_speed = =retraction_speed
speed_layer_0 = =math.ceil(speed_print * 15 / 35)
speed_print = 35
speed_topbottom = =math.ceil(speed_print * 20 / 35)
@@ -37,5 +39,4 @@ support_infill_rate = =0 if support_enable and support_structure == 'tree' else
support_pattern = lines
support_z_distance = 0.26
top_bottom_thickness = 1.5
-wall_thickness = 1.14
-retraction_combing_max_distance = 50
\ No newline at end of file
+wall_thickness = 1.14
\ No newline at end of file
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.6_draft.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.6_draft.inst.cfg
index b96242f569..965182eb4d 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.6_draft.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.6_draft.inst.cfg
@@ -27,6 +27,8 @@ raft_interface_line_width = 1.2
raft_margin = 15
raft_surface_line_width = 0.57
raft_surface_thickness = 0.2
+retraction_combing_max_distance = 50
+retraction_prime_speed = =retraction_speed
speed_layer_0 = =round(speed_print * 30 / 50)
speed_print = 25
speed_topbottom = =math.ceil(speed_print * 20 / 25)
@@ -41,5 +43,4 @@ support_pattern = lines
support_xy_distance = 0.6
support_z_distance = 0.22
top_bottom_thickness = 0.75
-wall_thickness = 1.14
-retraction_combing_max_distance = 50
\ No newline at end of file
+wall_thickness = 1.14
\ No newline at end of file
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.6_normal.inst.cfg
index 58e7974fe6..817635d4fd 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.6_normal.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.6_normal.inst.cfg
@@ -27,6 +27,8 @@ raft_interface_line_width = 1.2
raft_margin = 15
raft_surface_line_width = 0.57
raft_surface_thickness = 0.2
+retraction_combing_max_distance = 50
+retraction_prime_speed = =retraction_speed
speed_layer_0 = =math.ceil(speed_print * 30 / 35)
speed_print = 35
speed_topbottom = =math.ceil(speed_print * 20 / 35)
@@ -41,5 +43,4 @@ support_pattern = lines
support_xy_distance = 0.6
support_z_distance = 0.22
top_bottom_thickness = 0.75
-wall_thickness = 1.14
-retraction_combing_max_distance = 50
\ No newline at end of file
+wall_thickness = 1.14
\ No newline at end of file
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.4_fast.inst.cfg
index b9074df494..2358657ab3 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.4_fast.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.4_fast.inst.cfg
@@ -26,6 +26,7 @@ raft_interface_line_width = 0.8
raft_margin = 15
raft_surface_line_width = 0.5
raft_surface_thickness = 0.15
+retraction_prime_speed = =retraction_speed
speed_layer_0 = =math.ceil(speed_print * 30 / 45)
speed_print = 45
speed_topbottom = =math.ceil(speed_print * 20 / 45)
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.4_normal.inst.cfg
index 1986a09fc7..5a9283faff 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.4_normal.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.4_normal.inst.cfg
@@ -26,6 +26,7 @@ raft_interface_line_width = 0.8
raft_margin = 15
raft_surface_line_width = 0.5
raft_surface_thickness = 0.15
+retraction_prime_speed = =retraction_speed
speed_layer_0 = =math.ceil(speed_print * 30 / 45)
speed_print = 45
speed_travel = 150
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.6_fast.inst.cfg
index 78cf8fd15d..18fe82d680 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.6_fast.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.6_fast.inst.cfg
@@ -27,6 +27,7 @@ raft_margin = 15
raft_surface_line_width = 0.6
raft_surface_thickness = 0.15
retraction_hop_enabled = 0.2
+retraction_prime_speed = =retraction_speed
speed_layer_0 = =math.ceil(speed_print * 30 / 55)
speed_print = 55
speed_support = 40
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.6_normal.inst.cfg
index 1b38f220e2..8685edd405 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.6_normal.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.6_normal.inst.cfg
@@ -27,6 +27,7 @@ raft_margin = 15
raft_surface_line_width = 0.6
raft_surface_thickness = 0.15
retraction_hop_enabled = 0.2
+retraction_prime_speed = =retraction_speed
speed_layer_0 = =math.ceil(speed_print * 30 / 55)
speed_print = 55
speed_support = 40
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_draft.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_draft.inst.cfg
index c03d3ca7c3..94562f422d 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_draft.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_draft.inst.cfg
@@ -15,6 +15,7 @@ variant = 0.4 mm
cool_min_layer_time = 5
cool_min_speed = 10
infill_sparse_density = 20
+retraction_prime_speed = =retraction_speed
speed_layer_0 = =round(speed_print * 30 / 60)
speed_print = 60
speed_topbottom = =math.ceil(speed_print * 30 / 60)
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_fast.inst.cfg
index a267ce002a..43a5cb6596 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_fast.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_fast.inst.cfg
@@ -15,6 +15,7 @@ variant = 0.4 mm
cool_min_layer_time = 5
cool_min_speed = 10
infill_sparse_density = 20
+retraction_prime_speed = =retraction_speed
speed_layer_0 = =round(speed_print * 30 / 60)
speed_print = 60
speed_topbottom = =math.ceil(speed_print * 30 / 60)
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_high.inst.cfg
index 3a44812078..c7c7753cf2 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_high.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_high.inst.cfg
@@ -15,6 +15,7 @@ variant = 0.4 mm
cool_min_layer_time = 5
cool_min_speed = 10
infill_sparse_density = 20
+retraction_prime_speed = =retraction_speed
speed_layer_0 = =round(speed_print * 30 / 50)
speed_print = 50
speed_topbottom = =math.ceil(speed_print * 20 / 50)
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_normal.inst.cfg
index f85c61b885..2b3c24a912 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_normal.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_normal.inst.cfg
@@ -15,6 +15,7 @@ variant = 0.4 mm
cool_min_layer_time = 5
cool_min_speed = 10
infill_sparse_density = 20
+retraction_prime_speed = =retraction_speed
speed_layer_0 = =round(speed_print * 30 / 50)
speed_print = 50
speed_topbottom = =math.ceil(speed_print * 20 / 50)
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.6_normal.inst.cfg
index 4f77e995d4..8f3079c4f4 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.6_normal.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.6_normal.inst.cfg
@@ -15,6 +15,7 @@ variant = 0.6 mm
cool_min_layer_time = 5
cool_min_speed = 10
infill_sparse_density = 20
+retraction_prime_speed = =retraction_speed
speed_layer_0 = =round(speed_print * 30 / 55)
speed_print = 55
speed_topbottom = =math.ceil(speed_print * 20 / 55)
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.4_fast.inst.cfg
index 077ce01713..a7dad05ae9 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.4_fast.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.4_fast.inst.cfg
@@ -45,7 +45,6 @@ retraction_hop = 0.15
retraction_hop_enabled = True
retraction_hop_only_when_collides = True
retraction_min_travel = 0.5
-retraction_prime_speed = 15
skin_overlap = 10
speed_layer_0 = =speed_print
speed_prime_tower = =speed_topbottom
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.4_normal.inst.cfg
index 9e827e0da6..6f9612ff9a 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.4_normal.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.4_normal.inst.cfg
@@ -45,7 +45,6 @@ retraction_hop = 0.15
retraction_hop_enabled = True
retraction_hop_only_when_collides = True
retraction_min_travel = 0.5
-retraction_prime_speed = 15
skin_overlap = 10
speed_layer_0 = =speed_print
speed_prime_tower = =speed_topbottom
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.6_draft.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.6_draft.inst.cfg
index afc75d1238..7c94a57190 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.6_draft.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.6_draft.inst.cfg
@@ -44,7 +44,6 @@ retraction_extrusion_window = 1
retraction_hop = 0.15
retraction_hop_enabled = True
retraction_hop_only_when_collides = True
-retraction_prime_speed = 15
skin_overlap = 10
speed_layer_0 = =speed_print
speed_prime_tower = =speed_topbottom
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.6_fast.inst.cfg
index 52b963bb90..6e2a8960bd 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.6_fast.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.6_fast.inst.cfg
@@ -44,7 +44,6 @@ retraction_extrusion_window = 1
retraction_hop = 0.15
retraction_hop_enabled = True
retraction_hop_only_when_collides = True
-retraction_prime_speed = 15
skin_overlap = 10
speed_layer_0 = =speed_print
speed_prime_tower = =speed_topbottom
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.4_draft.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.4_draft.inst.cfg
index ab146869d9..4161bd3781 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.4_draft.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.4_draft.inst.cfg
@@ -15,6 +15,7 @@ variant = 0.4 mm
cool_min_layer_time = 5
cool_min_speed = 10
infill_sparse_density = 20
+retraction_prime_speed = =retraction_speed
speed_layer_0 = =round(speed_print * 30 / 50)
speed_print = 50
speed_topbottom = =math.ceil(speed_print * 30 / 50)
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.4_fast.inst.cfg
index a985f0c797..b26340fdb2 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.4_fast.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.4_fast.inst.cfg
@@ -15,6 +15,7 @@ variant = 0.4 mm
cool_min_layer_time = 5
cool_min_speed = 10
infill_sparse_density = 20
+retraction_prime_speed = =retraction_speed
speed_layer_0 = =round(speed_print * 30 / 40)
speed_print = 40
speed_topbottom = =math.ceil(speed_print * 30 / 40)
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.4_normal.inst.cfg
index 7da9e7165c..a4ee94c36c 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.4_normal.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.4_normal.inst.cfg
@@ -15,6 +15,7 @@ variant = 0.4 mm
cool_min_layer_time = 5
cool_min_speed = 10
infill_sparse_density = 20
+retraction_prime_speed = =retraction_speed
speed_layer_0 = =round(speed_print * 30 / 40)
speed_print = 40
speed_topbottom = =math.ceil(speed_print * 20 / 40)
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.6_normal.inst.cfg
index 1fd07a8c85..173b551e8b 100644
--- a/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.6_normal.inst.cfg
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.6_normal.inst.cfg
@@ -15,6 +15,7 @@ variant = 0.6 mm
cool_min_layer_time = 5
cool_min_speed = 10
infill_sparse_density = 20
+retraction_prime_speed = =retraction_speed
speed_layer_0 = =round(speed_print * 30 / 50)
speed_print = 50
speed_topbottom = =math.ceil(speed_print * 20 / 50)
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.25_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.25_ABS_Normal_Quality.inst.cfg
index 08a82f1d5d..f3cc0937a0 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.25_ABS_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.25_ABS_Normal_Quality.inst.cfg
@@ -15,6 +15,5 @@ variant = AA 0.25
cool_fan_speed = 40
infill_overlap = =0 if infill_sparse_density > 80 else 15
material_final_print_temperature = =material_print_temperature - 5
-retraction_prime_speed = 25
speed_topbottom = =math.ceil(speed_print * 30 / 55)
wall_thickness = 0.92
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.25_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.25_PC_Normal_Quality.inst.cfg
index 47119e62bf..59423682f1 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.25_PC_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.25_PC_Normal_Quality.inst.cfg
@@ -34,7 +34,6 @@ retraction_count_max = 80
retraction_hop = 2
retraction_hop_only_when_collides = True
retraction_min_travel = 0.8
-retraction_prime_speed = 15
skin_overlap = 30
speed_layer_0 = =math.ceil(speed_print * 25 / 50)
speed_print = 50
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.25_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.25_PP_Normal_Quality.inst.cfg
index e426ee3efd..2f6c5f2888 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.25_PP_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.25_PP_Normal_Quality.inst.cfg
@@ -37,7 +37,7 @@ retraction_extrusion_window = 6.5
retraction_hop = 2
retraction_hop_only_when_collides = True
retraction_min_travel = 0.8
-retraction_prime_speed = 13
+retraction_prime_speed = 15
speed_layer_0 = =math.ceil(speed_print * 15 / 25)
speed_print = 25
speed_travel_layer_0 = 50
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_Draft_Print.inst.cfg
index d0e6e36ea3..1aad4c498f 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_Draft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_Draft_Print.inst.cfg
@@ -32,6 +32,7 @@ retraction_extrusion_window = 1
retraction_hop = 0.2
retraction_hop_enabled = False
retraction_hop_only_when_collides = True
+retraction_prime_speed = =retraction_speed
skin_overlap = 20
speed_layer_0 = =math.ceil(speed_print * 20 / 50)
speed_print = 50
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_Fast_Print.inst.cfg
index 51f90c6c8f..1172267ed4 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_Fast_Print.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_Fast_Print.inst.cfg
@@ -32,6 +32,7 @@ retraction_extrusion_window = 1
retraction_hop = 0.2
retraction_hop_enabled = False
retraction_hop_only_when_collides = True
+retraction_prime_speed = =retraction_speed
skin_overlap = 20
speed_layer_0 = =math.ceil(speed_print * 20 / 45)
speed_print = 45
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_High_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_High_Quality.inst.cfg
index e5241c36c6..19b5094f03 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_High_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_High_Quality.inst.cfg
@@ -34,6 +34,7 @@ retraction_extrusion_window = 1
retraction_hop = 0.2
retraction_hop_enabled = False
retraction_hop_only_when_collides = True
+retraction_prime_speed = =retraction_speed
skin_overlap = 20
speed_layer_0 = =math.ceil(speed_print * 20 / 40)
speed_print = 40
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_Normal_Quality.inst.cfg
index 155001b888..a282ca7222 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_Normal_Quality.inst.cfg
@@ -34,6 +34,7 @@ retraction_extrusion_window = 1
retraction_hop = 0.2
retraction_hop_enabled = False
retraction_hop_only_when_collides = True
+retraction_prime_speed = =retraction_speed
skin_overlap = 20
speed_layer_0 = =math.ceil(speed_print * 20 / 40)
speed_print = 40
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_Draft_Print.inst.cfg
index 1a6ae612ce..7c42d02ada 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_Draft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_Draft_Print.inst.cfg
@@ -16,6 +16,7 @@ material_print_temperature = =default_material_print_temperature + 10
material_initial_print_temperature = =material_print_temperature - 5
material_final_print_temperature = =material_print_temperature - 10
retraction_combing_max_distance = 50
+retraction_prime_speed = =retraction_speed
skin_overlap = 20
speed_print = 60
speed_layer_0 = =math.ceil(speed_print * 20 / 60)
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_Fast_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_Fast_Print.inst.cfg
index f0b55841f3..c5641afd64 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_Fast_Print.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_Fast_Print.inst.cfg
@@ -17,6 +17,7 @@ material_print_temperature = =default_material_print_temperature + 5
material_initial_print_temperature = =material_print_temperature - 5
material_final_print_temperature = =material_print_temperature - 10
retraction_combing_max_distance = 50
+retraction_prime_speed = =retraction_speed
speed_print = 60
speed_layer_0 = =math.ceil(speed_print * 20 / 60)
speed_topbottom = =math.ceil(speed_print * 30 / 60)
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_High_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_High_Quality.inst.cfg
index fdbe5fb1d6..a6ee66b17e 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_High_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_High_Quality.inst.cfg
@@ -19,6 +19,7 @@ material_print_temperature = =default_material_print_temperature - 5
material_initial_print_temperature = =material_print_temperature - 5
material_final_print_temperature = =material_print_temperature - 10
retraction_combing_max_distance = 50
+retraction_prime_speed = =retraction_speed
speed_print = 50
speed_layer_0 = =math.ceil(speed_print * 20 / 50)
speed_topbottom = =math.ceil(speed_print * 30 / 50)
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_Normal_Quality.inst.cfg
index 9bffd6f794..e888cf8ae0 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_Normal_Quality.inst.cfg
@@ -17,6 +17,7 @@ machine_nozzle_heat_up_speed = 1.5
material_initial_print_temperature = =material_print_temperature - 5
material_final_print_temperature = =material_print_temperature - 10
retraction_combing_max_distance = 50
+retraction_prime_speed = =retraction_speed
speed_print = 55
speed_layer_0 = =math.ceil(speed_print * 20 / 55)
speed_topbottom = =math.ceil(speed_print * 30 / 55)
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_Draft_Print.inst.cfg
index 5bc7246093..5fb23190d1 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_Draft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_Draft_Print.inst.cfg
@@ -28,6 +28,7 @@ raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2)
raft_jerk = =jerk_layer_0
raft_margin = 10
raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2)
+retraction_prime_speed = =retraction_speed
skin_overlap = 50
speed_layer_0 = 10
switch_extruder_prime_speed = 30
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_Fast_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_Fast_Print.inst.cfg
index 614254e9d9..a46e184d05 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_Fast_Print.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_Fast_Print.inst.cfg
@@ -28,6 +28,7 @@ raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2)
raft_jerk = =jerk_layer_0
raft_margin = 10
raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2)
+retraction_prime_speed = =retraction_speed
skin_overlap = 50
speed_layer_0 = 10
switch_extruder_prime_speed = 30
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_High_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_High_Quality.inst.cfg
index 3a11b6dbe3..50d885b55f 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_High_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_High_Quality.inst.cfg
@@ -27,6 +27,7 @@ raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2)
raft_jerk = =jerk_layer_0
raft_margin = 10
raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2)
+retraction_prime_speed = =retraction_speed
skin_overlap = 50
speed_layer_0 = 10
switch_extruder_prime_speed = 30
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_Normal_Quality.inst.cfg
index a5abd1bab6..84aebaf798 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_Normal_Quality.inst.cfg
@@ -27,6 +27,7 @@ raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2)
raft_jerk = =jerk_layer_0
raft_margin = 10
raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2)
+retraction_prime_speed = =retraction_speed
skin_overlap = 50
speed_layer_0 = 10
switch_extruder_prime_speed = 30
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_PC_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_PC_Draft_Print.inst.cfg
index 69bbcf001d..f4bb4ba024 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_PC_Draft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_PC_Draft_Print.inst.cfg
@@ -43,7 +43,6 @@ retraction_extrusion_window = 1
retraction_hop = 2
retraction_hop_only_when_collides = True
retraction_min_travel = 0.8
-retraction_prime_speed = 15
skin_overlap = 30
speed_layer_0 = =math.ceil(speed_print * 25 / 50)
speed_print = 50
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_PC_Fast_Print.inst.cfg
index 63568363d2..ece85f2168 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_PC_Fast_Print.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_PC_Fast_Print.inst.cfg
@@ -41,7 +41,6 @@ retraction_extrusion_window = 1
retraction_hop = 2
retraction_hop_only_when_collides = True
retraction_min_travel = 0.8
-retraction_prime_speed = 15
skin_overlap = 30
speed_layer_0 = =math.ceil(speed_print * 25 / 50)
speed_print = 50
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_PC_High_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_PC_High_Quality.inst.cfg
index 3a317c820e..0caf9b1cd6 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_PC_High_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_PC_High_Quality.inst.cfg
@@ -43,7 +43,6 @@ retraction_extrusion_window = 1
retraction_hop = 2
retraction_hop_only_when_collides = True
retraction_min_travel = 0.8
-retraction_prime_speed = 15
skin_overlap = 30
speed_layer_0 = =math.ceil(speed_print * 25 / 50)
speed_print = 50
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_PC_Normal_Quality.inst.cfg
index 8b264ad751..751942b0f9 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_PC_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_PC_Normal_Quality.inst.cfg
@@ -41,7 +41,6 @@ retraction_extrusion_window = 1
retraction_hop = 2
retraction_hop_only_when_collides = True
retraction_min_travel = 0.8
-retraction_prime_speed = 15
skin_overlap = 30
speed_layer_0 = =math.ceil(speed_print * 25 / 50)
speed_print = 50
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_Draft_Print.inst.cfg
index 7ca3b04031..d5a5be70f8 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_Draft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_Draft_Print.inst.cfg
@@ -19,6 +19,7 @@ machine_nozzle_heat_up_speed = 1.6
material_print_temperature = =default_material_print_temperature + 5
material_standby_temperature = 100
prime_tower_enable = False
+retraction_prime_speed = =retraction_speed
skin_overlap = 20
speed_layer_0 = 10
speed_topbottom = =math.ceil(speed_print * 40 / 70)
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_Fast_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_Fast_Print.inst.cfg
index 38741f40ff..d274eaffd3 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_Fast_Print.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_Fast_Print.inst.cfg
@@ -18,6 +18,7 @@ machine_nozzle_cool_down_speed = 0.75
machine_nozzle_heat_up_speed = 1.6
material_standby_temperature = 100
prime_tower_enable = False
+retraction_prime_speed = =retraction_speed
speed_print = 70
speed_layer_0 = 10
speed_topbottom = =math.ceil(speed_print * 35 / 70)
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_High_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_High_Quality.inst.cfg
index 871ab6adc8..2f54d272fe 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_High_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_High_Quality.inst.cfg
@@ -20,6 +20,7 @@ machine_nozzle_heat_up_speed = 1.6
material_print_temperature = =default_material_print_temperature - 5
material_standby_temperature = 100
prime_tower_enable = False
+retraction_prime_speed = =retraction_speed
skin_overlap = 10
speed_print = 50
speed_layer_0 = 10
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_Normal_Quality.inst.cfg
index 7c8b71cd68..2c23a4ae71 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_Normal_Quality.inst.cfg
@@ -19,6 +19,7 @@ machine_nozzle_cool_down_speed = 0.75
machine_nozzle_heat_up_speed = 1.6
material_standby_temperature = 100
prime_tower_enable = False
+retraction_prime_speed = =retraction_speed
skin_overlap = 10
speed_layer_0 = 10
top_bottom_thickness = 1
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_VeryDraft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_VeryDraft_Print.inst.cfg
index 1f005ff77a..362d9ef5b9 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_VeryDraft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_VeryDraft_Print.inst.cfg
@@ -34,6 +34,7 @@ machine_nozzle_heat_up_speed = 1.6
material_standby_temperature = 100
prime_tower_enable = False
+retraction_prime_speed = =retraction_speed
skin_edge_support_thickness = =0.9 if infill_sparse_density < 30 else 0
skin_overlap = 20
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_PP_Draft_Print.inst.cfg
index 816eaeda5d..b59e2537e3 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_PP_Draft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_PP_Draft_Print.inst.cfg
@@ -42,7 +42,6 @@ retraction_extrusion_window = 1
retraction_hop = 2
retraction_hop_only_when_collides = True
retraction_min_travel = 0.8
-retraction_prime_speed = 18
speed_layer_0 = =math.ceil(speed_print * 15 / 25)
speed_print = 25
speed_topbottom = =math.ceil(speed_print * 25 / 25)
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_PP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_PP_Fast_Print.inst.cfg
index 498bdd6bd5..3b3ff5b463 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_PP_Fast_Print.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_PP_Fast_Print.inst.cfg
@@ -41,7 +41,6 @@ retraction_extrusion_window = 1
retraction_hop = 2
retraction_hop_only_when_collides = True
retraction_min_travel = 0.8
-retraction_prime_speed = 18
speed_layer_0 = =math.ceil(speed_print * 15 / 25)
speed_print = 25
speed_topbottom = =math.ceil(speed_print * 25 / 25)
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_PP_Normal_Quality.inst.cfg
index 28b1470419..2530ca9490 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_PP_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_PP_Normal_Quality.inst.cfg
@@ -43,7 +43,6 @@ retraction_extrusion_window = 1
retraction_hop = 2
retraction_hop_only_when_collides = True
retraction_min_travel = 0.8
-retraction_prime_speed = 18
speed_layer_0 = =math.ceil(speed_print * 15 / 25)
speed_print = 25
speed_topbottom = =math.ceil(speed_print * 25 / 25)
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_Draft_Print.inst.cfg
index 2201b135b1..a3d1d1f255 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_Draft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_Draft_Print.inst.cfg
@@ -23,6 +23,7 @@ machine_nozzle_heat_up_speed = 1.6
material_print_temperature = =default_material_print_temperature -10
material_standby_temperature = 100
prime_tower_enable = False
+retraction_prime_speed = =retraction_speed
skin_overlap = 20
speed_layer_0 = =math.ceil(speed_print * 20 / 50)
speed_print = 50
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_Fast_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_Fast_Print.inst.cfg
index b97bdbece7..cb2d019fdc 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_Fast_Print.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_Fast_Print.inst.cfg
@@ -20,6 +20,7 @@ machine_nozzle_heat_up_speed = 1.6
material_print_temperature = =default_material_print_temperature -10
material_standby_temperature = 100
prime_tower_enable = False
+retraction_prime_speed = =retraction_speed
speed_layer_0 = =math.ceil(speed_print * 20 / 45)
speed_print = 45
speed_topbottom = =math.ceil(speed_print * 35 / 45)
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_High_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_High_Quality.inst.cfg
index 262a1593a3..32ae7fbd53 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_High_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_High_Quality.inst.cfg
@@ -20,6 +20,7 @@ machine_nozzle_heat_up_speed = 1.6
material_print_temperature = =default_material_print_temperature - 15
material_standby_temperature = 100
prime_tower_enable = False
+retraction_prime_speed = =retraction_speed
skin_overlap = 10
speed_print = 45
speed_layer_0 = =math.ceil(speed_print * 20 / 45)
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_Normal_Quality.inst.cfg
index c438fd2a93..a81a3b9f08 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_Normal_Quality.inst.cfg
@@ -21,6 +21,7 @@ machine_nozzle_heat_up_speed = 1.6
material_print_temperature = =default_material_print_temperature - 15
material_standby_temperature = 100
prime_tower_enable = False
+retraction_prime_speed = =retraction_speed
skin_overlap = 10
speed_layer_0 = =math.ceil(speed_print * 20 / 45)
speed_print = 45
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_VeryDraft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_VeryDraft_Print.inst.cfg
index f00bf89dc6..bda8ad2775 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_VeryDraft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_VeryDraft_Print.inst.cfg
@@ -34,6 +34,7 @@ machine_nozzle_heat_up_speed = 1.6
material_standby_temperature = 100
prime_tower_enable = False
+retraction_prime_speed = =retraction_speed
skin_edge_support_thickness = =0.9 if infill_sparse_density < 30 else 0
skin_overlap = 20
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPU_Draft_Print.inst.cfg
index 0a01d45a0c..8b0b8abf0c 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_TPU_Draft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPU_Draft_Print.inst.cfg
@@ -41,7 +41,6 @@ retraction_extra_prime_amount = 0.8
retraction_extrusion_window = 1
retraction_hop_only_when_collides = True
retraction_min_travel = =line_width * 2
-retraction_prime_speed = 15
skin_line_width = =round(line_width / 0.8, 2)
skin_overlap = 5
speed_layer_0 = =math.ceil(speed_print * 18 / 25)
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_TPU_Fast_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPU_Fast_Print.inst.cfg
index 18c5c014f8..0f4a416273 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_TPU_Fast_Print.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPU_Fast_Print.inst.cfg
@@ -41,7 +41,6 @@ retraction_extra_prime_amount = 0.8
retraction_extrusion_window = 1
retraction_hop_only_when_collides = True
retraction_min_travel = =line_width * 2
-retraction_prime_speed = 15
skin_line_width = =round(line_width / 0.8, 2)
skin_overlap = 5
speed_layer_0 = =math.ceil(speed_print * 18 / 25)
diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_TPU_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPU_Normal_Quality.inst.cfg
index 536f766916..2b0b1c1720 100644
--- a/resources/quality/ultimaker_s3/um_s3_aa0.4_TPU_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPU_Normal_Quality.inst.cfg
@@ -40,7 +40,6 @@ retraction_extra_prime_amount = 0.8
retraction_extrusion_window = 1
retraction_hop_only_when_collides = True
retraction_min_travel = =line_width * 2
-retraction_prime_speed = 15
skin_line_width = =round(line_width / 0.8, 2)
skin_overlap = 5
speed_layer_0 = =math.ceil(speed_print * 18 / 25)
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_ABS_Normal_Quality.inst.cfg
index efacf651ab..c1d936a7a7 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.25_ABS_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_ABS_Normal_Quality.inst.cfg
@@ -15,6 +15,5 @@ variant = AA 0.25
cool_fan_speed = 40
infill_overlap = =0 if infill_sparse_density > 80 else 15
material_final_print_temperature = =material_print_temperature - 5
-retraction_prime_speed = 25
speed_topbottom = =math.ceil(speed_print * 30 / 55)
wall_thickness = 0.92
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_PC_Normal_Quality.inst.cfg
index ee3750680f..2b6121e9ee 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.25_PC_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_PC_Normal_Quality.inst.cfg
@@ -34,7 +34,6 @@ retraction_count_max = 80
retraction_hop = 2
retraction_hop_only_when_collides = True
retraction_min_travel = 0.8
-retraction_prime_speed = 15
skin_overlap = 30
speed_layer_0 = =math.ceil(speed_print * 25 / 50)
speed_print = 50
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_PP_Normal_Quality.inst.cfg
index 07aa9462e1..9870b07ab4 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.25_PP_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_PP_Normal_Quality.inst.cfg
@@ -37,7 +37,7 @@ retraction_extrusion_window = 6.5
retraction_hop = 2
retraction_hop_only_when_collides = True
retraction_min_travel = 0.8
-retraction_prime_speed = 13
+retraction_prime_speed = 15
speed_layer_0 = =math.ceil(speed_print * 15 / 25)
speed_print = 25
speed_travel_layer_0 = 50
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Draft_Print.inst.cfg
index f6927953d1..26dc7ea9c3 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Draft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Draft_Print.inst.cfg
@@ -32,6 +32,7 @@ retraction_extrusion_window = 1
retraction_hop = 0.2
retraction_hop_enabled = False
retraction_hop_only_when_collides = True
+retraction_prime_speed = =retraction_speed
skin_overlap = 20
speed_layer_0 = =math.ceil(speed_print * 20 / 50)
speed_print = 50
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Fast_Print.inst.cfg
index ffb22e619d..4b3fcd3fd9 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Fast_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Fast_Print.inst.cfg
@@ -32,6 +32,7 @@ retraction_extrusion_window = 1
retraction_hop = 0.2
retraction_hop_enabled = False
retraction_hop_only_when_collides = True
+retraction_prime_speed = =retraction_speed
skin_overlap = 20
speed_layer_0 = =math.ceil(speed_print * 20 / 45)
speed_print = 45
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_High_Quality.inst.cfg
index 262e6583a2..6fc1c398c4 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_High_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_High_Quality.inst.cfg
@@ -34,6 +34,7 @@ retraction_extrusion_window = 1
retraction_hop = 0.2
retraction_hop_enabled = False
retraction_hop_only_when_collides = True
+retraction_prime_speed = =retraction_speed
skin_overlap = 20
speed_layer_0 = =math.ceil(speed_print * 20 / 40)
speed_print = 40
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Normal_Quality.inst.cfg
index a11519fb05..4f7901cd52 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Normal_Quality.inst.cfg
@@ -33,6 +33,7 @@ retraction_extrusion_window = 1
retraction_hop = 0.2
retraction_hop_enabled = False
retraction_hop_only_when_collides = True
+retraction_prime_speed = =retraction_speed
skin_overlap = 20
speed_layer_0 = =math.ceil(speed_print * 20 / 40)
speed_print = 40
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Draft_Print.inst.cfg
index 6c1a3a45af..3f3ce3ce79 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Draft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Draft_Print.inst.cfg
@@ -16,6 +16,7 @@ material_print_temperature = =default_material_print_temperature + 10
material_initial_print_temperature = =material_print_temperature - 5
material_final_print_temperature = =material_print_temperature - 10
retraction_combing_max_distance = 50
+retraction_prime_speed = =retraction_speed
skin_edge_support_thickness = =0.8 if infill_sparse_density < 30 else 0
skin_overlap = 20
speed_print = 60
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Fast_Print.inst.cfg
index 71c25958fa..cbabc4d432 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Fast_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Fast_Print.inst.cfg
@@ -17,6 +17,7 @@ material_print_temperature = =default_material_print_temperature + 5
material_initial_print_temperature = =material_print_temperature - 5
material_final_print_temperature = =material_print_temperature - 10
retraction_combing_max_distance = 50
+retraction_prime_speed = =retraction_speed
speed_print = 60
speed_layer_0 = =math.ceil(speed_print * 20 / 60)
speed_topbottom = =math.ceil(speed_print * 30 / 60)
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_High_Quality.inst.cfg
index 9692faac22..86c81a14a2 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_High_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_High_Quality.inst.cfg
@@ -19,6 +19,7 @@ material_print_temperature = =default_material_print_temperature - 5
material_initial_print_temperature = =material_print_temperature - 5
material_final_print_temperature = =material_print_temperature - 10
retraction_combing_max_distance = 50
+retraction_prime_speed = =retraction_speed
speed_print = 50
speed_layer_0 = =math.ceil(speed_print * 20 / 50)
speed_topbottom = =math.ceil(speed_print * 30 / 50)
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Normal_Quality.inst.cfg
index 5698375c63..62163c286e 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Normal_Quality.inst.cfg
@@ -17,6 +17,7 @@ machine_nozzle_heat_up_speed = 1.5
material_initial_print_temperature = =material_print_temperature - 5
material_final_print_temperature = =material_print_temperature - 10
retraction_combing_max_distance = 50
+retraction_prime_speed = =retraction_speed
speed_print = 55
speed_layer_0 = =math.ceil(speed_print * 20 / 55)
speed_topbottom = =math.ceil(speed_print * 30 / 55)
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Draft_Print.inst.cfg
index 9a02eeede4..58d05433c0 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Draft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Draft_Print.inst.cfg
@@ -26,6 +26,7 @@ raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2)
raft_jerk = =jerk_layer_0
raft_margin = 10
raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2)
+retraction_prime_speed = =retraction_speed
skin_overlap = 50
speed_layer_0 = 10
switch_extruder_prime_speed = 30
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Fast_Print.inst.cfg
index 01859d49a1..26a74aae03 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Fast_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Fast_Print.inst.cfg
@@ -28,6 +28,7 @@ raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2)
raft_jerk = =jerk_layer_0
raft_margin = 10
raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2)
+retraction_prime_speed = =retraction_speed
skin_overlap = 50
speed_layer_0 = 10
switch_extruder_prime_speed = 30
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_High_Quality.inst.cfg
index c25a46ce20..8a6d7bdca2 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_High_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_High_Quality.inst.cfg
@@ -27,6 +27,7 @@ raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2)
raft_jerk = =jerk_layer_0
raft_margin = 10
raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2)
+retraction_prime_speed = =retraction_speed
skin_overlap = 50
speed_layer_0 = 10
switch_extruder_prime_speed = 30
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Normal_Quality.inst.cfg
index 321c369975..4976153044 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Normal_Quality.inst.cfg
@@ -27,6 +27,7 @@ raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2)
raft_jerk = =jerk_layer_0
raft_margin = 10
raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2)
+retraction_prime_speed = =retraction_speed
skin_overlap = 50
speed_layer_0 = 10
switch_extruder_prime_speed = 30
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Draft_Print.inst.cfg
index 2fdc113b3c..601d1164fd 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Draft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Draft_Print.inst.cfg
@@ -42,7 +42,6 @@ retraction_extrusion_window = 1
retraction_hop = 2
retraction_hop_only_when_collides = True
retraction_min_travel = 0.8
-retraction_prime_speed = 15
skin_overlap = 30
speed_layer_0 = =math.ceil(speed_print * 25 / 50)
speed_print = 50
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Fast_Print.inst.cfg
index 9adceaa9cd..cad4e25f95 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Fast_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Fast_Print.inst.cfg
@@ -41,7 +41,6 @@ retraction_extrusion_window = 1
retraction_hop = 2
retraction_hop_only_when_collides = True
retraction_min_travel = 0.8
-retraction_prime_speed = 15
skin_overlap = 30
speed_layer_0 = =math.ceil(speed_print * 25 / 50)
speed_print = 50
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_High_Quality.inst.cfg
index 65364d955a..6cc4d15e73 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_High_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_High_Quality.inst.cfg
@@ -43,7 +43,6 @@ retraction_extrusion_window = 1
retraction_hop = 2
retraction_hop_only_when_collides = True
retraction_min_travel = 0.8
-retraction_prime_speed = 15
skin_overlap = 30
speed_layer_0 = =math.ceil(speed_print * 25 / 50)
speed_print = 50
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Normal_Quality.inst.cfg
index e6adcfaf22..093a04b8a2 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Normal_Quality.inst.cfg
@@ -41,7 +41,6 @@ retraction_extrusion_window = 1
retraction_hop = 2
retraction_hop_only_when_collides = True
retraction_min_travel = 0.8
-retraction_prime_speed = 15
skin_overlap = 30
speed_layer_0 = =math.ceil(speed_print * 25 / 50)
speed_print = 50
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Draft_Print.inst.cfg
index fcc7ce6278..f339aa3988 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Draft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Draft_Print.inst.cfg
@@ -19,6 +19,7 @@ machine_nozzle_heat_up_speed = 1.6
material_print_temperature = =default_material_print_temperature + 5
material_standby_temperature = 100
prime_tower_enable = False
+retraction_prime_speed = =retraction_speed
skin_edge_support_thickness = =0.8 if infill_sparse_density < 30 else 0
skin_overlap = 20
speed_layer_0 = 10
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Print.inst.cfg
index 27df25d5d5..206442121b 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Print.inst.cfg
@@ -18,6 +18,7 @@ machine_nozzle_cool_down_speed = 0.75
machine_nozzle_heat_up_speed = 1.6
material_standby_temperature = 100
prime_tower_enable = False
+retraction_prime_speed = =retraction_speed
speed_print = 70
speed_layer_0 = 10
speed_topbottom = =math.ceil(speed_print * 35 / 70)
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_High_Quality.inst.cfg
index 9df48afa7b..3f29983cfd 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_High_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_High_Quality.inst.cfg
@@ -20,6 +20,7 @@ machine_nozzle_heat_up_speed = 1.6
material_print_temperature = =default_material_print_temperature - 5
material_standby_temperature = 100
prime_tower_enable = False
+retraction_prime_speed = =retraction_speed
skin_overlap = 10
speed_print = 50
speed_layer_0 = 10
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Quality.inst.cfg
index b3d096ed71..227730f359 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Quality.inst.cfg
@@ -19,6 +19,7 @@ machine_nozzle_cool_down_speed = 0.75
machine_nozzle_heat_up_speed = 1.6
material_standby_temperature = 100
prime_tower_enable = False
+retraction_prime_speed = =retraction_speed
skin_overlap = 10
speed_layer_0 = 10
top_bottom_thickness = 1
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_VeryDraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_VeryDraft_Print.inst.cfg
index 376cebd718..141c4604b0 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_VeryDraft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_VeryDraft_Print.inst.cfg
@@ -34,6 +34,7 @@ machine_nozzle_heat_up_speed = 1.6
material_standby_temperature = 100
prime_tower_enable = False
+retraction_prime_speed = =retraction_speed
skin_edge_support_thickness = =0.9 if infill_sparse_density < 30 else 0
skin_overlap = 20
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Draft_Print.inst.cfg
index 3acfe41222..8c8091cb1e 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Draft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Draft_Print.inst.cfg
@@ -43,7 +43,6 @@ retraction_extrusion_window = 1
retraction_hop = 2
retraction_hop_only_when_collides = True
retraction_min_travel = 0.8
-retraction_prime_speed = 18
speed_layer_0 = =math.ceil(speed_print * 15 / 25)
speed_print = 25
speed_topbottom = =math.ceil(speed_print * 25 / 25)
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Fast_Print.inst.cfg
index 4f7e5c5860..047ee82739 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Fast_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Fast_Print.inst.cfg
@@ -43,7 +43,6 @@ retraction_extrusion_window = 1
retraction_hop = 2
retraction_hop_only_when_collides = True
retraction_min_travel = 0.8
-retraction_prime_speed = 18
speed_layer_0 = =math.ceil(speed_print * 15 / 25)
speed_print = 25
speed_topbottom = =math.ceil(speed_print * 25 / 25)
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Normal_Quality.inst.cfg
index b2b03b494d..c91c73983e 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Normal_Quality.inst.cfg
@@ -43,7 +43,6 @@ retraction_extrusion_window = 1
retraction_hop = 2
retraction_hop_only_when_collides = True
retraction_min_travel = 0.8
-retraction_prime_speed = 18
speed_layer_0 = =math.ceil(speed_print * 15 / 25)
speed_print = 25
speed_topbottom = =math.ceil(speed_print * 25 / 25)
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Draft_Print.inst.cfg
index ef698a68e6..d65f61cf74 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Draft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Draft_Print.inst.cfg
@@ -23,6 +23,7 @@ machine_nozzle_heat_up_speed = 1.6
material_print_temperature = =default_material_print_temperature -10
material_standby_temperature = 100
prime_tower_enable = False
+retraction_prime_speed = =retraction_speed
skin_overlap = 20
speed_layer_0 = =math.ceil(speed_print * 20 / 50)
speed_print = 50
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Print.inst.cfg
index e66b376515..bea0ca9228 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Print.inst.cfg
@@ -20,6 +20,7 @@ machine_nozzle_heat_up_speed = 1.6
material_print_temperature = =default_material_print_temperature -10
material_standby_temperature = 100
prime_tower_enable = False
+retraction_prime_speed = =retraction_speed
speed_layer_0 = =math.ceil(speed_print * 20 / 45)
speed_print = 45
speed_topbottom = =math.ceil(speed_print * 35 / 45)
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_High_Quality.inst.cfg
index cb9e545007..190f2f8e06 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_High_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_High_Quality.inst.cfg
@@ -20,6 +20,7 @@ machine_nozzle_heat_up_speed = 1.6
material_print_temperature = =default_material_print_temperature - 15
material_standby_temperature = 100
prime_tower_enable = False
+retraction_prime_speed = =retraction_speed
skin_overlap = 10
speed_print = 45
speed_layer_0 = =math.ceil(speed_print * 20 / 45)
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Quality.inst.cfg
index 405fd35825..190f3422b0 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Quality.inst.cfg
@@ -21,6 +21,7 @@ machine_nozzle_heat_up_speed = 1.6
material_print_temperature = =default_material_print_temperature - 15
material_standby_temperature = 100
prime_tower_enable = False
+retraction_prime_speed = =retraction_speed
skin_overlap = 10
speed_layer_0 = =math.ceil(speed_print * 20 / 45)
speed_print = 45
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_VeryDraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_VeryDraft_Print.inst.cfg
index bd3193df37..9e614cdd28 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_VeryDraft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_VeryDraft_Print.inst.cfg
@@ -34,6 +34,7 @@ machine_nozzle_heat_up_speed = 1.6
material_standby_temperature = 100
prime_tower_enable = False
+retraction_prime_speed = =retraction_speed
skin_edge_support_thickness = =0.9 if infill_sparse_density < 30 else 0
skin_overlap = 20
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Draft_Print.inst.cfg
index 30eb73204b..a867e168b1 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Draft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Draft_Print.inst.cfg
@@ -41,7 +41,6 @@ retraction_extra_prime_amount = 0.8
retraction_extrusion_window = 1
retraction_hop_only_when_collides = True
retraction_min_travel = =line_width * 2
-retraction_prime_speed = 15
skin_line_width = =round(line_width / 0.8, 2)
skin_overlap = 5
speed_layer_0 = =math.ceil(speed_print * 18 / 25)
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Fast_Print.inst.cfg
index b63ecbdad8..f4ef171a69 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Fast_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Fast_Print.inst.cfg
@@ -41,7 +41,6 @@ retraction_extra_prime_amount = 0.8
retraction_extrusion_window = 1
retraction_hop_only_when_collides = True
retraction_min_travel = =line_width * 2
-retraction_prime_speed = 15
skin_line_width = =round(line_width / 0.8, 2)
skin_overlap = 5
speed_layer_0 = =math.ceil(speed_print * 18 / 25)
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Normal_Quality.inst.cfg
index ff25dd69a9..ce9b26051e 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Normal_Quality.inst.cfg
@@ -40,7 +40,6 @@ retraction_extra_prime_amount = 0.8
retraction_extrusion_window = 1
retraction_hop_only_when_collides = True
retraction_min_travel = =line_width * 2
-retraction_prime_speed = 15
skin_line_width = =round(line_width / 0.8, 2)
skin_overlap = 5
speed_layer_0 = =math.ceil(speed_print * 18 / 25)
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Superdraft_Print.inst.cfg
index a400721d90..99511e1ab6 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Superdraft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Superdraft_Print.inst.cfg
@@ -34,7 +34,6 @@ retraction_extra_prime_amount = 0.5
retraction_hop = 1.5
retraction_hop_only_when_collides = False
retraction_min_travel = =line_width * 2
-retraction_prime_speed = 15
speed_print = 30
speed_topbottom = =math.ceil(speed_print * 20 / 30)
speed_wall = =math.ceil(speed_print * 30 / 30)
diff --git a/resources/themes/cura-dark/theme.json b/resources/themes/cura-dark/theme.json
index 296d4d7145..2956e3f809 100644
--- a/resources/themes/cura-dark/theme.json
+++ b/resources/themes/cura-dark/theme.json
@@ -162,8 +162,6 @@
"tool_button_border": [255, 255, 255, 38],
- "y_axis": [96, 96, 255, 255],
-
"viewport_background": [31, 36, 39, 255],
"volume_outline": [12, 169, 227, 128],
"buildplate": [169, 169, 169, 255],
diff --git a/resources/themes/cura-light/theme.json b/resources/themes/cura-light/theme.json
index ed0bdf832f..b4ae944f45 100644
--- a/resources/themes/cura-light/theme.json
+++ b/resources/themes/cura-light/theme.json
@@ -381,8 +381,8 @@
"disabled_axis": [127, 127, 127, 255],
"x_axis": [218, 30, 40, 255],
- "y_axis": [36, 162, 73, 255],
- "z_axis": [25, 110, 240, 255],
+ "y_axis": [25, 110, 240, 255],
+ "z_axis": [36, 162, 73, 255],
"all_axis": [255, 255, 255, 255],
"viewport_background": [250, 250, 250, 255],
diff --git a/resources/variants/ultimaker2_plus_connect_0.25.inst.cfg b/resources/variants/ultimaker2_plus_connect_0.25.inst.cfg
index e20ced7a3e..36d98a5d8f 100644
--- a/resources/variants/ultimaker2_plus_connect_0.25.inst.cfg
+++ b/resources/variants/ultimaker2_plus_connect_0.25.inst.cfg
@@ -14,6 +14,7 @@ coasting_volume = 0.1
machine_nozzle_size = 0.25
machine_nozzle_tip_outer_diameter = 0.8
raft_airgap = 0.25
+retraction_prime_speed = =retraction_speed
speed_topbottom = =round(speed_print / 1.5, 1)
speed_wall = =round(speed_print / 1.2, 1)
speed_wall_0 = =1 if speed_wall < 5 else (speed_wall - 5)
diff --git a/resources/variants/ultimaker2_plus_connect_0.8.inst.cfg b/resources/variants/ultimaker2_plus_connect_0.8.inst.cfg
index 5557af03e9..99674d2375 100644
--- a/resources/variants/ultimaker2_plus_connect_0.8.inst.cfg
+++ b/resources/variants/ultimaker2_plus_connect_0.8.inst.cfg
@@ -12,6 +12,8 @@ hardware_type = nozzle
machine_nozzle_size = 0.8
machine_nozzle_tip_outer_diameter = 1.35
coasting_volume = 3.22
+retraction_speed = 25
+retraction_prime_speed = =retraction_speed
speed_wall = =round(speed_print * 3 / 4, 1)
speed_wall_0 = =1 if speed_wall < 10 else (speed_wall - 10)
speed_topbottom = =round(speed_print / 2, 1)
diff --git a/resources/variants/ultimaker_s3_aa0.8.inst.cfg b/resources/variants/ultimaker_s3_aa0.8.inst.cfg
index 5b19f224b4..3bc112c7fa 100644
--- a/resources/variants/ultimaker_s3_aa0.8.inst.cfg
+++ b/resources/variants/ultimaker_s3_aa0.8.inst.cfg
@@ -39,6 +39,7 @@ retraction_extrusion_window = 1
retraction_hop = 2
retraction_hop_only_when_collides = True
retraction_min_travel = =line_width * 2
+retraction_speed = 25
skin_overlap = 5
speed_layer_0 = 20
speed_print = 35
diff --git a/resources/variants/ultimaker_s3_aa04.inst.cfg b/resources/variants/ultimaker_s3_aa04.inst.cfg
index 38f4c226f5..9e56a0e75e 100644
--- a/resources/variants/ultimaker_s3_aa04.inst.cfg
+++ b/resources/variants/ultimaker_s3_aa04.inst.cfg
@@ -25,7 +25,6 @@ raft_surface_layers = 2
retraction_amount = 6.5
retraction_count_max = 25
retraction_min_travel = =line_width * 2
-retraction_prime_speed = =retraction_speed
skin_overlap = 15
speed_print = 70
speed_topbottom = =math.ceil(speed_print * 30 / 70)
diff --git a/resources/variants/ultimaker_s3_bb0.8.inst.cfg b/resources/variants/ultimaker_s3_bb0.8.inst.cfg
index 2affa6d01b..5f6373338b 100644
--- a/resources/variants/ultimaker_s3_bb0.8.inst.cfg
+++ b/resources/variants/ultimaker_s3_bb0.8.inst.cfg
@@ -54,7 +54,6 @@ retraction_extrusion_window = =retraction_amount
retraction_hop = 2
retraction_hop_only_when_collides = True
retraction_min_travel = =line_width * 3
-retraction_prime_speed = 15
skin_overlap = 5
speed_layer_0 = 20
speed_print = 35
diff --git a/resources/variants/ultimaker_s5_aa0.8.inst.cfg b/resources/variants/ultimaker_s5_aa0.8.inst.cfg
index c36d96066d..75581681f9 100644
--- a/resources/variants/ultimaker_s5_aa0.8.inst.cfg
+++ b/resources/variants/ultimaker_s5_aa0.8.inst.cfg
@@ -39,6 +39,7 @@ retraction_extrusion_window = 1
retraction_hop = 2
retraction_hop_only_when_collides = True
retraction_min_travel = =line_width * 2
+retraction_speed = 25
skin_overlap = 5
speed_layer_0 = 20
speed_print = 35
diff --git a/resources/variants/ultimaker_s5_aa04.inst.cfg b/resources/variants/ultimaker_s5_aa04.inst.cfg
index e976f1071d..923d8cadec 100644
--- a/resources/variants/ultimaker_s5_aa04.inst.cfg
+++ b/resources/variants/ultimaker_s5_aa04.inst.cfg
@@ -25,7 +25,6 @@ raft_surface_layers = 2
retraction_amount = 6.5
retraction_count_max = 25
retraction_min_travel = =line_width * 2
-retraction_prime_speed = =retraction_speed
skin_overlap = 15
speed_print = 70
speed_topbottom = =math.ceil(speed_print * 30 / 70)
diff --git a/resources/variants/ultimaker_s5_bb0.8.inst.cfg b/resources/variants/ultimaker_s5_bb0.8.inst.cfg
index 89aadaae54..4c43f2da26 100644
--- a/resources/variants/ultimaker_s5_bb0.8.inst.cfg
+++ b/resources/variants/ultimaker_s5_bb0.8.inst.cfg
@@ -54,7 +54,6 @@ retraction_extrusion_window = =retraction_amount
retraction_hop = 2
retraction_hop_only_when_collides = True
retraction_min_travel = =line_width * 3
-retraction_prime_speed = 15
skin_overlap = 5
speed_layer_0 = 20
speed_print = 35