CVE-2022-1379: Server-Side Request Forgery (SSRF) (CWE-918)
value: URL Restriction Bypass in GitHub repository plantuml/plantuml prior to V1.2022.5. An attacker can abuse this to bypass URL restrictions that are imposed by the different security profiles and achieve server side request forgery (SSRF). This allows accessing restricted internal resources/servers or sending requests to third party servers.
CWE description: The web server receives a URL or similar request from an upstream component and retrieves the contents of this URL, but it does not sufficiently ensure that the request is being sent to the expected destination.
CVSS v3 base score: 9.1
Published: 2022-05-14T10:15Z
Repository: https://github.com/plantuml/plantuml
Language: Java
Files changed: build.xml, skin/plantuml.skin, skin/rose.skin, src/net/sourceforge/plantuml/SkinParam.java, src/net/sourceforge/plantuml/elk/CucaDiagramFileMakerElk.java, src/net/sourceforge/plantuml/security/SURL.java, src/net/sourceforge/plantuml/style/CommandStyleMultilinesCSS.java, src/net/sourceforge/plantuml/style/Context.java, src/net/sourceforge/plantuml/style/FromSkinparamToStyle.java, src/net/sourceforge/plantuml/style/StyleLoader.java, src/net/sourceforge/plantuml/svek/Boundary.java, src/net/sourceforge/plantuml/svek/CircleInterface2.java, src/net/sourceforge/plantuml/svek/Cluster.java, src/net/sourceforge/plantuml/svek/ClusterPosition.java, src/net/sourceforge/plantuml/svek/ConcurrentStateImage.java, src/net/sourceforge/plantuml/svek/Control.java, src/net/sourceforge/plantuml/svek/CucaDiagramFileMakerSvek2InternalImage.java, src/net/sourceforge/plantuml/svek/DecorateEntityImage.java, src/net/sourceforge/plantuml/svek/DecorateEntityImage3.java, src/net/sourceforge/plantuml/svek/DirectionalTextBlock.java, src/net/sourceforge/plantuml/svek/EntityDomain.java, src/net/sourceforge/plantuml/svek/EntityImageDegenerated.java, src/net/sourceforge/plantuml/svek/EntityImageProtected.java, src/net/sourceforge/plantuml/svek/GeneralImageBuilder.java, src/net/sourceforge/plantuml/svek/GraphvizCrash.java, src/net/sourceforge/plantuml/svek/GroupPngMakerState.java, src/net/sourceforge/plantuml/svek/HeaderLayout.java, src/net/sourceforge/plantuml/svek/InnerActivity.java, src/net/sourceforge/plantuml/svek/InnerStateAutonom.java, src/net/sourceforge/plantuml/svek/PackageStyle.java, src/net/sourceforge/plantuml/svek/RoundedContainer.java, src/net/sourceforge/plantuml/svek/RoundedNorth.java, src/net/sourceforge/plantuml/svek/RoundedSouth.java, src/net/sourceforge/plantuml/svek/SvekLine.java, src/net/sourceforge/plantuml/svek/SvekNode.java, src/net/sourceforge/plantuml/svek/SvekResult.java, src/net/sourceforge/plantuml/svek/image/AbstractEntityImageBorder.java, src/net/sourceforge/plantuml/svek/image/EntityImageActivity.java, src/net/sourceforge/plantuml/svek/image/EntityImageArcCircle.java, src/net/sourceforge/plantuml/svek/image/EntityImageAssociation.java, src/net/sourceforge/plantuml/svek/image/EntityImageAssociationPoint.java, src/net/sourceforge/plantuml/svek/image/EntityImageBranch.java, src/net/sourceforge/plantuml/svek/image/EntityImageCircleEnd.java, src/net/sourceforge/plantuml/svek/image/EntityImageCircleStart.java, src/net/sourceforge/plantuml/svek/image/EntityImageClass.java, src/net/sourceforge/plantuml/svek/image/EntityImageClassHeader.java, src/net/sourceforge/plantuml/svek/image/EntityImageEmptyPackage.java, src/net/sourceforge/plantuml/svek/image/EntityImageGroup.java, src/net/sourceforge/plantuml/svek/image/EntityImageJson.java, src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterface.java, src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye1.java, src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye2.java, src/net/sourceforge/plantuml/svek/image/EntityImageNote.java, src/net/sourceforge/plantuml/svek/image/EntityImageNoteLink.java, src/net/sourceforge/plantuml/svek/image/EntityImagePort.java, src/net/sourceforge/plantuml/svek/image/EntityImagePseudoState.java, src/net/sourceforge/plantuml/svek/image/EntityImageState.java, src/net/sourceforge/plantuml/svek/image/EntityImageState2.java, src/net/sourceforge/plantuml/svek/image/EntityImageStateBorder.java, src/net/sourceforge/plantuml/svek/image/EntityImageStateCommon.java, src/net/sourceforge/plantuml/svek/image/EntityImageStateEmptyDescription.java, src/net/sourceforge/plantuml/svek/image/EntityImageSynchroBar.java, src/net/sourceforge/plantuml/svek/image/EntityImageTips.java, src/net/sourceforge/plantuml/svek/image/EntityImageUseCase.java, src/net/sourceforge/plantuml/svek/image/Footprint.java, src/net/sourceforge/plantuml/svek/image/Opale.java, src/net/sourceforge/plantuml/svg/SvgGraphics.java, src/net/sourceforge/plantuml/timingdiagram/ChangeState.java, src/net/sourceforge/plantuml/timingdiagram/Player.java, src/net/sourceforge/plantuml/timingdiagram/PlayerAnalog.java, src/net/sourceforge/plantuml/timingdiagram/PlayerBinary.java, src/net/sourceforge/plantuml/timingdiagram/PlayerClock.java, src/net/sourceforge/plantuml/timingdiagram/PlayerRobustConcise.java, src/net/sourceforge/plantuml/timingdiagram/TimeConstraint.java, src/net/sourceforge/plantuml/timingdiagram/TimingDiagram.java, src/net/sourceforge/plantuml/timingdiagram/TimingRuler.java, src/net/sourceforge/plantuml/timingdiagram/command/CommandBinary.java, src/net/sourceforge/plantuml/timingdiagram/command/CommandRobustConcise.java, src/net/sourceforge/plantuml/timingdiagram/graphic/PlayerFrame.java, src/net/sourceforge/plantuml/timingdiagram/graphic/Ribbon.java, src/net/sourceforge/plantuml/timingdiagram/graphic/TimeArrow.java, src/net/sourceforge/plantuml/ugraphic/UImageSvg.java, src/net/sourceforge/plantuml/ugraphic/color/HColorUtils.java, src/net/sourceforge/plantuml/ugraphic/hand/UPathHand.java, src/net/sourceforge/plantuml/version/Version.java, stdlib/classy-c4-dex.repx, stdlib/classy-dex.repx, stdlib/domainstory-dex.repx, stdlib/home.repx
Commit date: 2022-05-04 19:52:00 +0200
Commit message: Import version 1.2022.5

Diff: diff --git a/build.xml b/build.xml
index 764b8da62..20d0e1d3e 100644
--- a/build.xml
+++ b/build.xml
@@ -18,11 +18,11 @@
     </description>
 
 	<target name="compile">
 		<delete dir="build" />
 		<mkdir dir="build" />
-		<javac target="1.7" source="1.7" srcdir="src" destdir="build" debug="on" />
+		<javac target="1.8" source="1.8" srcdir="src" destdir="build" debug="on" />
 		<copy file="src/net/sourceforge/plantuml/version/logo.png"
 			todir="build/net/sourceforge/plantuml/version" />
 		<copy file="src/net/sourceforge/plantuml/version/favicon.png"
 			todir="build/net/sourceforge/plantuml/version" />
 		<copy todir="build/net/sourceforge/plantuml/version">
diff --git a/skin/plantuml.skin b/skin/plantuml.skin
index 18ce558ee..5d604d9f8 100644
--- a/skin/plantuml.skin
+++ b/skin/plantuml.skin
@@ -421,11 +421,11 @@ timingDiagram {
 	}
 	concise {
 	  FontSize 12
 	  LineColor darkgreen
 	  BackgroundColor: var(--grey-blue);
-      LineThickness 2
+      LineThickness 1.5
 	}
 	robust {
 	  FontStyle plain
 	  FontSize 12
 	  LineColor darkgreen
diff --git a/skin/rose.skin b/skin/rose.skin
index 13133d2a6..e3fb8e6a0 100644
--- a/skin/rose.skin
+++ b/skin/rose.skin
@@ -134,10 +134,18 @@ group {
 
 group {
     BackGroundColor transparent
 }
 
+componentDiagram {
+  node, rectangle {
+    LineColor black
+    LineThickness 1.5
+  }
+}
+
+
 sequenceDiagram {
   group {
     LineColor black
     LineThickness 2.0
     FontSize 11
@@ -492,10 +500,11 @@ timingDiagram {
 	}
 	concise {
 	  FontSize 12
 	  LineColor darkgreen
 	  BackgroundColor #c
+      LineThickness 1.5
 	}
 	robust {
 	  FontStyle plain
 	  FontSize 12
 	  LineColor darkgreen
diff --git a/src/net/sourceforge/plantuml/SkinParam.java b/src/net/sourceforge/plantuml/SkinParam.java
index fdcc0c72b..db7cd9b94 100644
--- a/src/net/sourceforge/plantuml/SkinParam.java
+++ b/src/net/sourceforge/plantuml/SkinParam.java
@@ -215,11 +215,11 @@ public class SkinParam implements ISkinParam {
 		return result;
 	}
 
 	List<String> cleanForKeySlow(String key) {
 		key = StringUtils.trin(StringUtils.goLowerCase(key));
-		key = key.replaceAll("_|\\.|\\s", "");
+		key = key.replaceAll("_|\\.", "");
 		// key = replaceSmart(key, "partition", "package");
 		key = replaceSmart(key, "sequenceparticipant", "participant");
 		key = replaceSmart(key, "sequenceactor", "actor");
 		key = key.replaceAll("activityarrow", "arrow");
 		key = key.replaceAll("objectarrow", "arrow");
diff --git a/src/net/sourceforge/plantuml/elk/CucaDiagramFileMakerElk.java b/src/net/sourceforge/plantuml/elk/CucaDiagramFileMakerElk.java
index 8940842f5..0b973a067 100644
--- a/src/net/sourceforge/plantuml/elk/CucaDiagramFileMakerElk.java
+++ b/src/net/sourceforge/plantuml/elk/CucaDiagramFileMakerElk.java
@@ -256,11 +256,11 @@ public class CucaDiagramFileMakerElk implements CucaDiagramFileMaker {
 			final UmlDiagramType umlDiagramType = diagram.getUmlDiagramType();
 
 			final Style style = Cluster.getDefaultStyleDefinition(umlDiagramType.getStyleName(), group.getUSymbol())
 					.getMergedStyle(skinParam.getCurrentStyleBuilder());
 			final double shadowing = style.value(PName.Shadowing).asDouble();
-			final UStroke stroke = Cluster.getStrokeInternal(group, skinParam, style);
+			final UStroke stroke = Cluster.getStrokeInternal(group, style);
 
 			HColor backColor = getBackColor(umlDiagramType);
 			backColor = Cluster.getBackColor(backColor, skinParam, group.getStereotype(), umlDiagramType.getStyleName(),
 					group.getUSymbol());
 
diff --git a/src/net/sourceforge/plantuml/security/SURL.java b/src/net/sourceforge/plantuml/security/SURL.java
index 68a0cdb9e..fb9a48777 100644
--- a/src/net/sourceforge/plantuml/security/SURL.java
+++ b/src/net/sourceforge/plantuml/security/SURL.java
@@ -108,11 +108,11 @@ public class SURL {
 	public static final String WITHOUT_AUTHENTICATION = SecurityUtils.NO_CREDENTIALS;
 
 	/**
 	 * Regex to remove the UserInfo part from a URL.
 	 */
-	private static final Pattern PATTERN_USERINFO = Pattern.compile("(^https?://)([-_:0-9a-zA-Z]+@)([^@]*)");
+	private static final Pattern PATTERN_USERINFO = Pattern.compile("(^https?://)([-_0-9a-zA-Z]+@)([^@]*)");
 
 	private static final ExecutorService EXE = Executors.newCachedThreadPool(new ThreadFactory() {
 		public Thread newThread(Runnable r) {
 			final Thread t = Executors.defaultThreadFactory().newThread(r);
 			t.setDaemon(true);
diff --git a/src/net/sourceforge/plantuml/style/CommandStyleMultilinesCSS.java b/src/net/sourceforge/plantuml/style/CommandStyleMultilinesCSS.java
index 9461e2b1a..fa3bfebbe 100644
--- a/src/net/sourceforge/plantuml/style/CommandStyleMultilinesCSS.java
+++ b/src/net/sourceforge/plantuml/style/CommandStyleMultilinesCSS.java
@@ -35,11 +35,10 @@
  */
 package net.sourceforge.plantuml.style;
 
 import net.sourceforge.plantuml.SkinParam;
 import net.sourceforge.plantuml.TitledDiagram;
-import net.sourceforge.plantuml.UseStyle;
 import net.sourceforge.plantuml.command.BlocLines;
 import net.sourceforge.plantuml.command.CommandExecutionResult;
 import net.sourceforge.plantuml.command.CommandMultilines2;
 import net.sourceforge.plantuml.command.MultilinesStrategy;
 import net.sourceforge.plantuml.command.regex.IRegex;
diff --git a/src/net/sourceforge/plantuml/style/Context.java b/src/net/sourceforge/plantuml/style/Context.java
index 14b8d419c..20d29bc9c 100644
--- a/src/net/sourceforge/plantuml/style/Context.java
+++ b/src/net/sourceforge/plantuml/style/Context.java
@@ -81,11 +81,11 @@ class Context {
 			}
 			final String[] names = s.split(",");
 			final List<StyleSignatureBasic> tmp = new ArrayList<>();
 			for (StyleSignatureBasic ss : results)
 				for (String name : names)
-					tmp.add(ss.add(name));
+					tmp.add(ss.add(name.trim()));
 			results = tmp;
 		}
 
 		if (star)
 			for (ListIterator<StyleSignatureBasic> it = results.listIterator(); it.hasNext();) {
diff --git a/src/net/sourceforge/plantuml/style/FromSkinparamToStyle.java b/src/net/sourceforge/plantuml/style/FromSkinparamToStyle.java
index 9e68dd396..7d9a33c6c 100644
--- a/src/net/sourceforge/plantuml/style/FromSkinparamToStyle.java
+++ b/src/net/sourceforge/plantuml/style/FromSkinparamToStyle.java
@@ -208,10 +208,18 @@ public class FromSkinparamToStyle {
 		addMagic(SName.stack);
 		addMagic(SName.storage);
 		addMagic(SName.usecase);
 		addMagic(SName.map);
 		addMagic(SName.archimate);
+		
+		
+//		addConvert("nodeStereotypeFontSize", PName.FontSize, SName.node, SName.stereotype);
+//		addConvert("sequenceStereotypeFontSize", PName.FontSize, SName.stereotype);
+//		addConvert("sequenceStereotypeFontStyle", PName.FontStyle, SName.stereotype);
+//		addConvert("sequenceStereotypeFontColor", PName.FontColor, SName.stereotype);
+//		addConvert("sequenceStereotypeFontName", PName.FontName, SName.stereotype);
+
 
 	}
 
 	private static void addMagic(SName sname) {
 		final String cleanName = sname.name().replace("_", "");
@@ -219,12 +227,18 @@ public class FromSkinparamToStyle {
 		addConvert(cleanName + "BorderColor", PName.LineColor, sname);
 		addConvert(cleanName + "BorderThickness", PName.LineThickness, sname);
 		addConvert(cleanName + "RoundCorner", PName.RoundCorner, sname);
 		addConvert(cleanName + "DiagonalCorner", PName.DiagonalCorner, sname);
 		addConvert(cleanName + "BorderStyle", PName.LineStyle, sname);
-		addConvert(cleanName + "StereotypeFontColor", PName.FontColor, SName.stereotype, sname);
 		addConFont(cleanName, sname);
+		addConvert(cleanName + "Shadowing", PName.Shadowing, sname);
+		
+		addConvert(cleanName + "StereotypeFontSize", PName.FontSize, SName.stereotype, sname);
+		addConvert(cleanName + "StereotypeFontStyle", PName.FontStyle, SName.stereotype, sname);
+		addConvert(cleanName + "StereotypeFontColor", PName.FontColor, SName.stereotype, sname);
+		addConvert(cleanName + "StereotypeFontName", PName.FontName, SName.stereotype, sname);
+
 	}
 
 	private final List<Style> styles = new ArrayList<>();
 	private final String stereo;
 	private final String key;
@@ -232,19 +246,25 @@ public class FromSkinparamToStyle {
 	public FromSkinparamToStyle(String key) {
 
 		if (key.contains("<<")) {
 			final StringTokenizer st = new StringTokenizer(key, "<>");
 			this.key = st.nextToken();
-			this.stereo = st.hasMoreTokens() ? st.nextToken() : null;
+			this.stereo = st.hasMoreTokens() ? st.nextToken().trim() : null;
 		} else {
 			this.key = key;
 			this.stereo = null;
 		}
 
 	}
 
 	public void convertNow(String value, final AutomaticCounter counter) {
+		if (key.endsWith("shadowing")) {
+			if (value.equalsIgnoreCase("false"))
+				value = "0";
+			else if (value.equalsIgnoreCase("true"))
+				value = "3";
+		}
 		if (value.equalsIgnoreCase("right:right"))
 			value = "right";
 		if (value.equalsIgnoreCase("dotted"))
 			value = "1;3";
 		if (value.equalsIgnoreCase("dashed"))
diff --git a/src/net/sourceforge/plantuml/style/StyleLoader.java b/src/net/sourceforge/plantuml/style/StyleLoader.java
index ded52bddd..7339930b7 100644
--- a/src/net/sourceforge/plantuml/style/StyleLoader.java
+++ b/src/net/sourceforge/plantuml/style/StyleLoader.java
@@ -162,11 +162,11 @@ public class StyleLoader {
 			if (x != -1)
 				trimmed = trimmed.substring(0, x).trim();
 
 			final Matcher2 mKeyNames = keyName.matcher(trimmed);
 			if (mKeyNames.find()) {
-				String names = mKeyNames.group(1).replace(" ", "");
+				String names = mKeyNames.group(1);
 				final boolean isRecurse = mKeyNames.group(2) != null;
 				if (isRecurse)
 					names += "*";
 
 				context = context.push(names);
diff --git a/src/net/sourceforge/plantuml/svek/Boundary.java b/src/net/sourceforge/plantuml/svek/Boundary.java
index 71db2436d..f5fa27ae5 100644
--- a/src/net/sourceforge/plantuml/svek/Boundary.java
+++ b/src/net/sourceforge/plantuml/svek/Boundary.java
@@ -33,13 +33,12 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.Dimension2DDouble;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.graphic.AbstractTextBlock;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.graphic.SymbolContext;
 import net.sourceforge.plantuml.ugraphic.UEllipse;
 import net.sourceforge.plantuml.ugraphic.UGraphic;
diff --git a/src/net/sourceforge/plantuml/svek/CircleInterface2.java b/src/net/sourceforge/plantuml/svek/CircleInterface2.java
index f5f1cd24c..a723bf1c0 100644
--- a/src/net/sourceforge/plantuml/svek/CircleInterface2.java
+++ b/src/net/sourceforge/plantuml/svek/CircleInterface2.java
@@ -33,13 +33,12 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.Dimension2DDouble;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.graphic.AbstractTextBlock;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.graphic.TextBlock;
 import net.sourceforge.plantuml.ugraphic.UEllipse;
 import net.sourceforge.plantuml.ugraphic.UGraphic;
diff --git a/src/net/sourceforge/plantuml/svek/Cluster.java b/src/net/sourceforge/plantuml/svek/Cluster.java
index e62db44f2..02c5b0760 100644
--- a/src/net/sourceforge/plantuml/svek/Cluster.java
+++ b/src/net/sourceforge/plantuml/svek/Cluster.java
@@ -72,15 +72,14 @@ import net.sourceforge.plantuml.graphic.TextBlock;
 import net.sourceforge.plantuml.graphic.USymbol;
 import net.sourceforge.plantuml.graphic.USymbols;
 import net.sourceforge.plantuml.graphic.color.ColorType;
 import net.sourceforge.plantuml.graphic.color.Colors;
 import net.sourceforge.plantuml.posimo.Moveable;
-import net.sourceforge.plantuml.skin.rose.Rose;
-import net.sourceforge.plantuml.style.StyleSignature;
 import net.sourceforge.plantuml.style.PName;
 import net.sourceforge.plantuml.style.SName;
 import net.sourceforge.plantuml.style.Style;
+import net.sourceforge.plantuml.style.StyleSignature;
 import net.sourceforge.plantuml.style.StyleSignatureBasic;
 import net.sourceforge.plantuml.svek.image.EntityImageState;
 import net.sourceforge.plantuml.ugraphic.UComment;
 import net.sourceforge.plantuml.ugraphic.UGraphic;
 import net.sourceforge.plantuml.ugraphic.UGroupType;
@@ -306,52 +305,29 @@ public class Cluster implements Moveable {
 			return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state, SName.group);
 		return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state, SName.group)
 				.withTOBECHANGED(stereotype);
 	}
 
-	public void drawU(UGraphic ug, UmlDiagramType umlDiagramType, ISkinParam skinParam2) {
+	public void drawU(UGraphic ug, UmlDiagramType umlDiagramType, ISkinParam skinParam2unused) {
 		if (group.isHidden())
 			return;
 
 		final String fullName = group.getCodeGetName();
 		if (fullName.startsWith("##") == false)
 			ug.draw(new UComment("cluster " + fullName));
 
+		final USymbol uSymbol = group.getUSymbol() == null ? USymbols.PACKAGE : group.getUSymbol();
+		Style style = getDefaultStyleDefinition(umlDiagramType.getStyleName(), uSymbol)
+				.withTOBECHANGED(group.getStereotype()).getMergedStyle(skinParam.getCurrentStyleBuilder());
+		final double shadowing = style.value(PName.Shadowing).asDouble();
 		HColor borderColor;
-		Style style = null;
-		final double rounded;
-		final double diagonalCorner;
-		final double shadowing;
-		if (UseStyle.useBetaStyle()) {
-			final USymbol uSymbol = group.getUSymbol() == null ? USymbols.PACKAGE : group.getUSymbol();
-			final StyleSignatureBasic tmp = getDefaultStyleDefinition(umlDiagramType.getStyleName(), uSymbol);
-			style = tmp.withTOBECHANGED(group.getStereotype()).getMergedStyle(skinParam.getCurrentStyleBuilder());
-			shadowing = style.value(PName.Shadowing).asDouble();
-			if (group.getColors().getColor(ColorType.LINE) != null)
-				borderColor = group.getColors().getColor(ColorType.LINE);
-			else
-				borderColor = style.value(PName.LineColor).asColor(skinParam2.getThemeStyle(),
-						skinParam2.getIHtmlColorSet());
-			rounded = style.value(PName.RoundCorner).asDouble();
-			diagonalCorner = style.value(PName.DiagonalCorner).asDouble();
-
-		} else {
-			if (group.getUSymbol() == null)
-				shadowing = skinParam2.shadowing2(group.getStereotype(), USymbols.PACKAGE.getSkinParameter()) ? 3 : 0;
-			else
-				shadowing = skinParam2.shadowing2(group.getStereotype(), group.getUSymbol().getSkinParameter()) ? 3 : 0;
-
-			rounded = IEntityImage.CORNER;
-			if (umlDiagramType == UmlDiagramType.STATE)
-				borderColor = getColor(ColorParam.stateBorder, skinParam, group.getStereotype());
-			else if (umlDiagramType == UmlDiagramType.ACTIVITY)
-				borderColor = getColor(ColorParam.packageBorder, skinParam, group.getStereotype());
-			else
-				borderColor = getColor(ColorParam.packageBorder, skinParam, group.getStereotype());
-			diagonalCorner = 0;
-
-		}
+		if (group.getColors().getColor(ColorType.LINE) != null)
+			borderColor = group.getColors().getColor(ColorType.LINE);
+		else
+			borderColor = style.value(PName.LineColor).asColor(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());
+		final double rounded = style.value(PName.RoundCorner).asDouble();
+		final double diagonalCorner = style.value(PName.DiagonalCorner).asDouble();
 
 		ug.startGroup(Collections.singletonMap(UGroupType.ID, "cluster_" + fullName));
 
 		final Url url = group.getUrl99();
 		if (url != null)
@@ -366,53 +342,34 @@ public class Cluster implements Moveable {
 				return;
 			}
 			final boolean isState = umlDiagramType == UmlDiagramType.STATE;
 
 			if (isState && group.getUSymbol() == null) {
-				UStroke strokeForState = getDefaultStyleDefinition(SName.stateDiagram, null)
-						.getMergedStyle(skinParam.getCurrentStyleBuilder()).getStroke();
-				if (group.getColors().getSpecificLineStroke() != null)
-					strokeForState = group.getColors().getSpecificLineStroke();
-
-				if (group.getColors().getColor(ColorType.LINE) != null)
-					borderColor = group.getColors().getColor(ColorType.LINE);
-
-				drawUState(ug, borderColor, skinParam2, strokeForState, umlDiagramType, rounded, shadowing);
+				drawUState(ug, umlDiagramType, rounded, shadowing);
 				return;
 			}
 			PackageStyle packageStyle = group.getPackageStyle();
 			if (packageStyle == null)
-				packageStyle = skinParam2.packageStyle();
+				packageStyle = skinParam.packageStyle();
 
 			if (border != null) {
-				final HColor tmp = skinParam2.getHtmlColor(border, group.getStereotype(), false);
+				final HColor tmp = skinParam.getHtmlColor(border, group.getStereotype(), false);
 				if (tmp != null)
 					borderColor = tmp;
 			}
 
-			final UStroke stroke;
-			if (UseStyle.useBetaStyle())
-				stroke = getStrokeInternal(group, skinParam2, style);
-			else
-				stroke = getStrokeInternal(group, skinParam2, null);
+			final UStroke stroke = getStrokeInternal(group, style);
 
 			HColor backColor = getBackColor(umlDiagramType, style);
-			backColor = getBackColor(backColor, skinParam2, group.getStereotype(), umlDiagramType.getStyleName(),
+			backColor = getBackColor(backColor, skinParam, group.getStereotype(), umlDiagramType.getStyleName(),
 					group.getUSymbol());
 			if (ztitle != null || zstereo != null) {
-				final double roundCorner;
-				if (UseStyle.useBetaStyle())
-					roundCorner = rounded;
-				else
-					roundCorner = group.getUSymbol() == null ? 0
-							: group.getUSymbol().getSkinParameter().getRoundCorner(skinParam, group.getStereotype());
-
 				final ClusterDecoration decoration = new ClusterDecoration(packageStyle, group.getUSymbol(), ztitle,
 						zstereo, minX, minY, maxX, maxY, stroke);
-				decoration.drawU(ug, backColor, borderColor, shadowing, roundCorner,
-						skinParam2.getHorizontalAlignment(AlignmentParam.packageTitleAlignment, null, false, null),
-						skinParam2.getStereotypeAlignment(), diagonalCorner);
+				decoration.drawU(ug, backColor, borderColor, shadowing, rounded,
+						skinParam.getHorizontalAlignment(AlignmentParam.packageTitleAlignment, null, false, null),
+						skinParam.getStereotypeAlignment(), diagonalCorner);
 				return;
 			}
 			final URectangle rect = new URectangle(maxX - minX, maxY - minY);
 			rect.setDeltaShadow(shadowing);
 			ug = ug.apply(backColor.bg()).apply(borderColor);
@@ -423,22 +380,16 @@ public class Cluster implements Moveable {
 				ug.closeUrl();
 			ug.closeGroup();
 		}
 	}
 
-	static public UStroke getStrokeInternal(IGroup group, ISkinParam skinParam, Style style) {
+	static public UStroke getStrokeInternal(IGroup group, Style style) {
 		final Colors colors = group.getColors();
 		if (colors.getSpecificLineStroke() != null)
 			return colors.getSpecificLineStroke();
 
-		if (style != null)
-			return style.getStroke();
-
-		if (group.getUSymbol() != null && group.getUSymbol() != USymbols.PACKAGE)
-			return group.getUSymbol().getSkinParameter().getStroke(skinParam, group.getStereotype());
-
-		return GeneralImageBuilder.getForcedStroke(group.getStereotype(), skinParam);
+		return style.getStroke();
 	}
 
 	public void manageEntryExitPoint(StringBounder stringBounder) {
 		final Collection<ClusterPosition> insides = new ArrayList<>();
 		final List<Point2D> points = new ArrayList<>();
@@ -475,16 +426,23 @@ public class Cluster implements Moveable {
 		ug.apply(UTranslate.dx(minX)).draw(line);
 		ug.apply(UTranslate.dx(maxX)).draw(line);
 
 	}
 
-	private HColor getColorLegacy(ISkinParam skinParam, ColorParam colorParam, Stereotype stereo) {
-		return new Rose().getHtmlColor(skinParam, stereo, colorParam);
+	// GroupPngMakerState
+	private Style getStyleStateHeader() {
+		return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state, SName.header)
+				.withTOBECHANGED(group.getStereotype()).getMergedStyle(skinParam.getCurrentStyleBuilder());
 	}
 
-	private void drawUState(UGraphic ug, HColor borderColor, ISkinParam skinParam2, UStroke stroke,
-			UmlDiagramType umlDiagramType, double rounded, double shadowing) {
+	private Style getStyleState() {
+		return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state)
+				.withTOBECHANGED(group.getStereotype()).getMergedStyle(skinParam.getCurrentStyleBuilder());
+	}
+	// GroupPngMakerState
+
+	private void drawUState(UGraphic ug, UmlDiagramType umlDiagramType, double rounded, double shadowing) {
 		final Dimension2D total = new Dimension2DDouble(maxX - minX, maxY - minY);
 		final double suppY;
 		if (ztitle == null)
 			suppY = 0;
 		else
@@ -492,30 +450,37 @@ public class Cluster implements Moveable {
 					+ IEntityImage.MARGIN_LINE;
 
 		final Style styleGroup = getDefaultStyleDefinitionStateGroup(group.getStereotype())
 				.getMergedStyle(skinParam.getCurrentStyleBuilder());
 
-		HColor stateBack = getBackColor(umlDiagramType, styleGroup);
-		if (UseStyle.useBetaStyle() == false && stateBack == null)
-			stateBack = getColorLegacy(skinParam2, ColorParam.stateBackground, group.getStereotype());
+		HColor borderColor = group.getColors().getColor(ColorType.LINE);
+		if (borderColor == null)
+			borderColor = getStyleState().value(PName.LineColor).asColor(skinParam.getThemeStyle(),
+					skinParam.getIHtmlColorSet());
 
-		final HColor background;
-		if (UseStyle.useBetaStyle() == false)
-			background = getColorLegacy(skinParam2, ColorParam.background, null);
-		else
-			background = stateBack;
+		HColor backColor = group.getColors().getColor(ColorType.BACK);
+		if (backColor == null)
+			backColor = getStyleState().value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(),
+					skinParam.getIHtmlColorSet());
+
+		final HColor imgBackcolor = getBackColor(umlDiagramType, styleGroup);
 
 		// final Style style = getStyle(FontParam.STATE_ATTRIBUTE, skinParam2);
 
-		final TextBlock attribute = GeneralImageBuilder.stateHeader(group, styleGroup, skinParam2);
+		final TextBlock attribute = GeneralImageBuilder.stateHeader(group, styleGroup, skinParam);
 		final double attributeHeight = attribute.calculateDimension(ug.getStringBounder()).getHeight();
 		if (total.getWidth() == 0) {
 			System.err.println("Cluster::drawUState issue");
 			return;
 		}
+
+		UStroke stroke = group.getColors().getSpecificLineStroke();
+		if (stroke == null)
+			stroke = getStyleState().getStroke();
+
 		final RoundedContainer r = new RoundedContainer(total, suppY,
-				attributeHeight + (attributeHeight > 0 ? IEntityImage.MARGIN : 0), borderColor, stateBack, background,
+				attributeHeight + (attributeHeight > 0 ? IEntityImage.MARGIN : 0), borderColor, backColor, imgBackcolor,
 				stroke, rounded, shadowing);
 		r.drawU(ug.apply(new UTranslate(minX, minY)));
 
 		if (ztitle != null)
 			ztitle.drawU(ug.apply(new UTranslate(xTitle, yTitle)));
@@ -917,24 +882,23 @@ public class Cluster implements Moveable {
 		if (result != null)
 			return result;
 
 		final Stereotype stereo = group.getStereotype();
 
-		if (UseStyle.useBetaStyle())
-			return style.value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());
-
-		final USymbol sym = group.getUSymbol() == null ? USymbols.PACKAGE : group.getUSymbol();
-		final ColorParam backparam = umlDiagramType == UmlDiagramType.ACTIVITY ? ColorParam.partitionBackground
-				: sym.getColorParamBack();
-		final HColor c1 = skinParam.getHtmlColor(backparam, stereo, false);
-		if (c1 != null)
-			return c1;
-
-		if (parentCluster == null)
-			return null;
-
-		return parentCluster.getBackColor(umlDiagramType, style);
+		return style.value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());
+
+//		final USymbol sym = group.getUSymbol() == null ? USymbols.PACKAGE : group.getUSymbol();
+//		final ColorParam backparam = umlDiagramType == UmlDiagramType.ACTIVITY ? ColorParam.partitionBackground
+//				: sym.getColorParamBack();
+//		final HColor c1 = skinParam.getHtmlColor(backparam, stereo, false);
+//		if (c1 != null)
+//			return c1;
+//
+//		if (parentCluster == null)
+//			return null;
+//
+//		return parentCluster.getBackColor(umlDiagramType, style);
 	}
 
 	public boolean isClusterOf(IEntity ent) {
 		if (ent.isGroup() == false)
 			return false;
diff --git a/src/net/sourceforge/plantuml/svek/ClusterPosition.java b/src/net/sourceforge/plantuml/svek/ClusterPosition.java
index 769ee5647..bf6057060 100644
--- a/src/net/sourceforge/plantuml/svek/ClusterPosition.java
+++ b/src/net/sourceforge/plantuml/svek/ClusterPosition.java
@@ -34,14 +34,14 @@
  * 
  */
 package net.sourceforge.plantuml.svek;
 
 import java.awt.geom.CubicCurve2D;
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.awt.geom.Point2D;
 
 import net.sourceforge.plantuml.Dimension2DDouble;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.posimo.BezierUtils;
 
 public class ClusterPosition {
 
 	private final double minX;
diff --git a/src/net/sourceforge/plantuml/svek/ConcurrentStateImage.java b/src/net/sourceforge/plantuml/svek/ConcurrentStateImage.java
index ec8628d2a..ae0cf6c72 100644
--- a/src/net/sourceforge/plantuml/svek/ConcurrentStateImage.java
+++ b/src/net/sourceforge/plantuml/svek/ConcurrentStateImage.java
@@ -33,18 +33,18 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
 import net.sourceforge.plantuml.ColorParam;
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.ISkinParam;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.graphic.AbstractTextBlock;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.skin.rose.Rose;
 import net.sourceforge.plantuml.ugraphic.UGraphic;
 import net.sourceforge.plantuml.ugraphic.ULine;
diff --git a/src/net/sourceforge/plantuml/svek/Control.java b/src/net/sourceforge/plantuml/svek/Control.java
index ec33f0ded..22acf03d6 100644
--- a/src/net/sourceforge/plantuml/svek/Control.java
+++ b/src/net/sourceforge/plantuml/svek/Control.java
@@ -33,13 +33,12 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.Dimension2DDouble;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.graphic.AbstractTextBlock;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.graphic.SymbolContext;
 import net.sourceforge.plantuml.graphic.TextBlock;
 import net.sourceforge.plantuml.ugraphic.UEllipse;
diff --git a/src/net/sourceforge/plantuml/svek/CucaDiagramFileMakerSvek2InternalImage.java b/src/net/sourceforge/plantuml/svek/CucaDiagramFileMakerSvek2InternalImage.java
index 21c505c7f..9b05d0a9f 100644
--- a/src/net/sourceforge/plantuml/svek/CucaDiagramFileMakerSvek2InternalImage.java
+++ b/src/net/sourceforge/plantuml/svek/CucaDiagramFileMakerSvek2InternalImage.java
@@ -33,17 +33,17 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.util.List;
 
 import net.sourceforge.plantuml.ColorParam;
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.Stereotype;
 import net.sourceforge.plantuml.graphic.AbstractTextBlock;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.skin.rose.Rose;
 import net.sourceforge.plantuml.style.PName;
diff --git a/src/net/sourceforge/plantuml/svek/DecorateEntityImage.java b/src/net/sourceforge/plantuml/svek/DecorateEntityImage.java
index 238bd1479..22fd61534 100644
--- a/src/net/sourceforge/plantuml/svek/DecorateEntityImage.java
+++ b/src/net/sourceforge/plantuml/svek/DecorateEntityImage.java
@@ -33,14 +33,14 @@
  *
  * 
  */
 package net.sourceforge.plantuml.svek;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.util.Objects;
 
 import net.sourceforge.plantuml.Dimension2DDouble;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.graphic.AbstractTextBlock;
 import net.sourceforge.plantuml.graphic.HorizontalAlignment;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.graphic.TextBlock;
 import net.sourceforge.plantuml.graphic.VerticalAlignment;
diff --git a/src/net/sourceforge/plantuml/svek/DecorateEntityImage3.java b/src/net/sourceforge/plantuml/svek/DecorateEntityImage3.java
index 82dc10794..e7dfee65a 100644
--- a/src/net/sourceforge/plantuml/svek/DecorateEntityImage3.java
+++ b/src/net/sourceforge/plantuml/svek/DecorateEntityImage3.java
@@ -34,11 +34,10 @@
  * 
  */
 package net.sourceforge.plantuml.svek;
 
 import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.graphic.AbstractTextBlock;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.graphic.TextBlock;
 import net.sourceforge.plantuml.ugraphic.UGraphic;
 import net.sourceforge.plantuml.ugraphic.color.HColor;
diff --git a/src/net/sourceforge/plantuml/svek/DirectionalTextBlock.java b/src/net/sourceforge/plantuml/svek/DirectionalTextBlock.java
index bc4aecf04..ef09f7563 100644
--- a/src/net/sourceforge/plantuml/svek/DirectionalTextBlock.java
+++ b/src/net/sourceforge/plantuml/svek/DirectionalTextBlock.java
@@ -33,13 +33,12 @@
  *
  * 
  */
 package net.sourceforge.plantuml.svek;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.Direction;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.graphic.AbstractTextBlock;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.graphic.TextBlock;
 import net.sourceforge.plantuml.ugraphic.UGraphic;
 
diff --git a/src/net/sourceforge/plantuml/svek/EntityDomain.java b/src/net/sourceforge/plantuml/svek/EntityDomain.java
index bef207a58..5558512b4 100644
--- a/src/net/sourceforge/plantuml/svek/EntityDomain.java
+++ b/src/net/sourceforge/plantuml/svek/EntityDomain.java
@@ -33,13 +33,12 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.Dimension2DDouble;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.graphic.AbstractTextBlock;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.graphic.SymbolContext;
 import net.sourceforge.plantuml.graphic.TextBlock;
 import net.sourceforge.plantuml.ugraphic.UEllipse;
diff --git a/src/net/sourceforge/plantuml/svek/EntityImageDegenerated.java b/src/net/sourceforge/plantuml/svek/EntityImageDegenerated.java
index 6f3c415b6..803ed4031 100644
--- a/src/net/sourceforge/plantuml/svek/EntityImageDegenerated.java
+++ b/src/net/sourceforge/plantuml/svek/EntityImageDegenerated.java
@@ -33,15 +33,15 @@
  *
  * 
  */
 package net.sourceforge.plantuml.svek;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.awt.geom.Rectangle2D;
 
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.graphic.InnerStrategy;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.ugraphic.MinMax;
 import net.sourceforge.plantuml.ugraphic.UEmpty;
 import net.sourceforge.plantuml.ugraphic.UGraphic;
diff --git a/src/net/sourceforge/plantuml/svek/EntityImageProtected.java b/src/net/sourceforge/plantuml/svek/EntityImageProtected.java
index e9c4c3c0a..9758e08e5 100644
--- a/src/net/sourceforge/plantuml/svek/EntityImageProtected.java
+++ b/src/net/sourceforge/plantuml/svek/EntityImageProtected.java
@@ -33,14 +33,14 @@
  *
  * 
  */
 package net.sourceforge.plantuml.svek;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.awt.geom.Rectangle2D;
 
 import net.sourceforge.plantuml.Dimension2DDouble;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.dot.Neighborhood;
 import net.sourceforge.plantuml.graphic.AbstractTextBlock;
 import net.sourceforge.plantuml.graphic.InnerStrategy;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.ugraphic.UGraphic;
diff --git a/src/net/sourceforge/plantuml/svek/GeneralImageBuilder.java b/src/net/sourceforge/plantuml/svek/GeneralImageBuilder.java
index fb22a5c05..a2c7abb2c 100644
--- a/src/net/sourceforge/plantuml/svek/GeneralImageBuilder.java
+++ b/src/net/sourceforge/plantuml/svek/GeneralImageBuilder.java
@@ -100,14 +100,14 @@ import net.sourceforge.plantuml.graphic.TextBlockEmpty;
 import net.sourceforge.plantuml.graphic.TextBlockUtils;
 import net.sourceforge.plantuml.graphic.USymbol;
 import net.sourceforge.plantuml.graphic.USymbolHexagon;
 import net.sourceforge.plantuml.graphic.USymbolInterface;
 import net.sourceforge.plantuml.graphic.USymbols;
-import net.sourceforge.plantuml.style.StyleSignature;
 import net.sourceforge.plantuml.style.PName;
 import net.sourceforge.plantuml.style.SName;
 import net.sourceforge.plantuml.style.Style;
+import net.sourceforge.plantuml.style.StyleSignature;
 import net.sourceforge.plantuml.style.StyleSignatureBasic;
 import net.sourceforge.plantuml.svek.image.EntityImageActivity;
 import net.sourceforge.plantuml.svek.image.EntityImageArcCircle;
 import net.sourceforge.plantuml.svek.image.EntityImageAssociation;
 import net.sourceforge.plantuml.svek.image.EntityImageAssociationPoint;
@@ -701,28 +701,30 @@ public final class GeneralImageBuilder {
 		final Display label = g.getDisplay();
 		if (label == null)
 			return TextBlockUtils.empty(0, 0);
 
 		final ISkinParam skinParam = dotData.getSkinParam();
-		final FontConfiguration fontConfiguration;
-		if (UseStyle.useBetaStyle()) {
-			final SName sname = dotData.getUmlDiagramType().getStyleName();
-			final StyleSignatureBasic signature;
-			final USymbol uSymbol = g.getUSymbol();
-			if (uSymbol == USymbols.RECTANGLE)
-				signature = StyleSignatureBasic.of(SName.root, SName.element, sname, uSymbol.getSName(), SName.title);
-			else
-				signature = StyleSignatureBasic.of(SName.root, SName.element, sname, SName.title);
 
-			final Style style = signature //
-					.withTOBECHANGED(g.getStereotype()) //
-					.with(g.getStereostyles()) //
-					.getMergedStyle(skinParam.getCurrentStyleBuilder());
+		final SName sname = dotData.getUmlDiagramType().getStyleName();
+		final StyleSignatureBasic signature;
+		final USymbol uSymbol = g.getUSymbol();
+		if (g.getGroupType() == GroupType.STATE)
+			signature = StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state,
+					SName.header);
+		else if (uSymbol == USymbols.RECTANGLE)
+			signature = StyleSignatureBasic.of(SName.root, SName.element, sname, uSymbol.getSName(), SName.title);
+		else
+			signature = StyleSignatureBasic.of(SName.root, SName.element, sname, SName.title);
+
+		final Style style = signature //
+				.withTOBECHANGED(g.getStereotype()) //
+				.with(g.getStereostyles()) //
+				.getMergedStyle(skinParam.getCurrentStyleBuilder());
+
+		final FontConfiguration fontConfiguration = style.getFontConfiguration(skinParam.getThemeStyle(),
+				skinParam.getIHtmlColorSet());
 
-			fontConfiguration = style.getFontConfiguration(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());
-		} else
-			fontConfiguration = g.getFontConfigurationForTitle(skinParam);
 		final HorizontalAlignment alignment = HorizontalAlignment.CENTER;
 		return label.create(fontConfiguration, alignment, dotData.getSkinParam());
 	}
 
 	private TextBlock addLegend(TextBlock original, DisplayPositioned legend) {
diff --git a/src/net/sourceforge/plantuml/svek/GraphvizCrash.java b/src/net/sourceforge/plantuml/svek/GraphvizCrash.java
index b023ccdb5..05fc913ec 100644
--- a/src/net/sourceforge/plantuml/svek/GraphvizCrash.java
+++ b/src/net/sourceforge/plantuml/svek/GraphvizCrash.java
@@ -34,18 +34,18 @@
  *
  */
 package net.sourceforge.plantuml.svek;
 
 import java.awt.Color;
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.awt.image.BufferedImage;
 import java.util.ArrayList;
 import java.util.List;
 
 import net.sourceforge.plantuml.BackSlash;
 import net.sourceforge.plantuml.OptionPrint;
 import net.sourceforge.plantuml.StringUtils;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.command.CommandExecutionResult;
 import net.sourceforge.plantuml.cucadiagram.dot.GraphvizUtils;
 import net.sourceforge.plantuml.flashcode.FlashCodeFactory;
 import net.sourceforge.plantuml.flashcode.FlashCodeUtils;
 import net.sourceforge.plantuml.fun.IconLoader;
diff --git a/src/net/sourceforge/plantuml/svek/GroupPngMakerState.java b/src/net/sourceforge/plantuml/svek/GroupPngMakerState.java
index 08435e54b..8bf77e7ee 100644
--- a/src/net/sourceforge/plantuml/svek/GroupPngMakerState.java
+++ b/src/net/sourceforge/plantuml/svek/GroupPngMakerState.java
@@ -38,14 +38,11 @@ package net.sourceforge.plantuml.svek;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Set;
 
-import net.sourceforge.plantuml.ColorParam;
-import net.sourceforge.plantuml.FontParam;
 import net.sourceforge.plantuml.ISkinParam;
-import net.sourceforge.plantuml.UseStyle;
 import net.sourceforge.plantuml.cucadiagram.CucaDiagram;
 import net.sourceforge.plantuml.cucadiagram.Display;
 import net.sourceforge.plantuml.cucadiagram.EntityUtils;
 import net.sourceforge.plantuml.cucadiagram.GroupHierarchy;
 import net.sourceforge.plantuml.cucadiagram.GroupType;
@@ -60,11 +57,10 @@ import net.sourceforge.plantuml.cucadiagram.dot.DotData;
 import net.sourceforge.plantuml.graphic.FontConfiguration;
 import net.sourceforge.plantuml.graphic.HorizontalAlignment;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.graphic.TextBlock;
 import net.sourceforge.plantuml.graphic.color.ColorType;
-import net.sourceforge.plantuml.skin.rose.Rose;
 import net.sourceforge.plantuml.style.PName;
 import net.sourceforge.plantuml.style.SName;
 import net.sourceforge.plantuml.style.Style;
 import net.sourceforge.plantuml.style.StyleSignatureBasic;
 import net.sourceforge.plantuml.svek.image.EntityImageState;
@@ -126,34 +122,22 @@ public final class GroupPngMakerState {
 		return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state, SName.header)
 				.withTOBECHANGED(group.getStereotype()).getMergedStyle(diagram.getSkinParam().getCurrentStyleBuilder());
 	}
 
 	private Style getStyleState() {
-		return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state).withTOBECHANGED(group.getStereotype())
-				.getMergedStyle(diagram.getSkinParam().getCurrentStyleBuilder());
+		return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state)
+				.withTOBECHANGED(group.getStereotype()).getMergedStyle(diagram.getSkinParam().getCurrentStyleBuilder());
 	}
 
 	public IEntityImage getImage() {
 		final Display display = group.getDisplay();
 		final ISkinParam skinParam = diagram.getSkinParam();
 
-		final FontConfiguration fontConfiguration;
-		final double rounded;
-		double shadowing = 0;
-
-		if (UseStyle.useBetaStyle()) {
-			rounded = getStyleState().value(PName.RoundCorner).asDouble();
-			shadowing = getStyleState().value(PName.Shadowing).asDouble();
-			fontConfiguration = getStyleStateHeader().getFontConfiguration(skinParam.getThemeStyle(),
-					skinParam.getIHtmlColorSet());
-		} else {
-			rounded = IEntityImage.CORNER;
-			fontConfiguration = FontConfiguration.create(skinParam, FontParam.STATE, group.getStereotype());
-			if (skinParam.shadowing(group.getStereotype()))
-				shadowing = 3.0;
-		}
-
+		final double rounded = getStyleState().value(PName.RoundCorner).asDouble();
+		final double shadowing = getStyleState().value(PName.Shadowing).asDouble();
+		final FontConfiguration fontConfiguration = getStyleStateHeader()
+				.getFontConfiguration(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());
 		final TextBlock title = display.create(fontConfiguration, HorizontalAlignment.CENTER, diagram.getSkinParam());
 
 		if (group.size() == 0 && group.getChildren().size() == 0)
 			return new EntityImageState(group, diagram.getSkinParam());
 
@@ -173,34 +157,22 @@ public final class GroupPngMakerState {
 		if (group.getGroupType() != GroupType.STATE)
 			throw new UnsupportedOperationException(group.getGroupType().toString());
 
 		HColor borderColor = group.getColors().getColor(ColorType.LINE);
 		if (borderColor == null)
-			if (UseStyle.useBetaStyle())
-				borderColor = getStyleState().value(PName.LineColor).asColor(skinParam.getThemeStyle(),
-						skinParam.getIHtmlColorSet());
-			else
-				borderColor = getColor(ColorParam.stateBorder, group.getStereotype());
+			borderColor = getStyleState().value(PName.LineColor).asColor(skinParam.getThemeStyle(),
+					skinParam.getIHtmlColorSet());
 
 		final Stereotype stereo = group.getStereotype();
-		final HColor tmp = group.getColors().getColor(ColorType.BACK);
-		final HColor backColor;
-		if (tmp == null)
-			if (UseStyle.useBetaStyle())
-				backColor = getStyleState().value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(),
-						skinParam.getIHtmlColorSet());
-			else
-				backColor = getColor(ColorParam.stateBackground, stereo);
-		else
-			backColor = tmp;
+		HColor backColor = group.getColors().getColor(ColorType.BACK);
+		if (backColor == null)
+			backColor = getStyleState().value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(),
+					skinParam.getIHtmlColorSet());
 
 		UStroke stroke = group.getColors().getSpecificLineStroke();
 		if (stroke == null)
-			if (UseStyle.useBetaStyle())
-				stroke = getStyleState().getStroke();
-			else
-				stroke = new UStroke(1.5);
+			stroke = getStyleState().getStroke();
 
 		final TextBlock attribute = GeneralImageBuilder.stateHeader((IEntity) group, null, skinParam);
 
 		final Stereotype stereotype = group.getStereotype();
 		final boolean withSymbol = stereotype != null && stereotype.isWithOOSymbol();
@@ -234,12 +206,6 @@ public final class GroupPngMakerState {
 
 		}
 		return true;
 	}
 
-	private final Rose rose = new Rose();
-
-	private HColor getColor(ColorParam colorParam, Stereotype stereo) {
-		final ISkinParam skinParam = diagram.getSkinParam();
-		return rose.getHtmlColor(skinParam, stereo, colorParam);
-	}
 }
diff --git a/src/net/sourceforge/plantuml/svek/HeaderLayout.java b/src/net/sourceforge/plantuml/svek/HeaderLayout.java
index 0240ccac2..60ba6b2ff 100644
--- a/src/net/sourceforge/plantuml/svek/HeaderLayout.java
+++ b/src/net/sourceforge/plantuml/svek/HeaderLayout.java
@@ -33,13 +33,12 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.Dimension2DDouble;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.graphic.TextBlock;
 import net.sourceforge.plantuml.graphic.TextBlockEmpty;
 import net.sourceforge.plantuml.ugraphic.UGraphic;
 import net.sourceforge.plantuml.ugraphic.UTranslate;
diff --git a/src/net/sourceforge/plantuml/svek/InnerActivity.java b/src/net/sourceforge/plantuml/svek/InnerActivity.java
index ec91538c7..bf1f1bc9c 100644
--- a/src/net/sourceforge/plantuml/svek/InnerActivity.java
+++ b/src/net/sourceforge/plantuml/svek/InnerActivity.java
@@ -34,11 +34,10 @@
  *
  */
 package net.sourceforge.plantuml.svek;
 
 import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.graphic.AbstractTextBlock;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.ugraphic.UGraphic;
 import net.sourceforge.plantuml.ugraphic.URectangle;
 import net.sourceforge.plantuml.ugraphic.UStroke;
diff --git a/src/net/sourceforge/plantuml/svek/InnerStateAutonom.java b/src/net/sourceforge/plantuml/svek/InnerStateAutonom.java
index 3514ac9ec..815a75bfd 100644
--- a/src/net/sourceforge/plantuml/svek/InnerStateAutonom.java
+++ b/src/net/sourceforge/plantuml/svek/InnerStateAutonom.java
@@ -33,14 +33,13 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.Url;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.graphic.AbstractTextBlock;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.graphic.TextBlock;
 import net.sourceforge.plantuml.svek.image.EntityImageState;
 import net.sourceforge.plantuml.ugraphic.UGraphic;
diff --git a/src/net/sourceforge/plantuml/svek/PackageStyle.java b/src/net/sourceforge/plantuml/svek/PackageStyle.java
index bc672b420..720f03b6f 100644
--- a/src/net/sourceforge/plantuml/svek/PackageStyle.java
+++ b/src/net/sourceforge/plantuml/svek/PackageStyle.java
@@ -34,14 +34,14 @@
  *
  * 
  */
 package net.sourceforge.plantuml.svek;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.util.EnumSet;
 
 import net.sourceforge.plantuml.Dimension2DDouble;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.graphic.USymbol;
 import net.sourceforge.plantuml.graphic.USymbols;
 import net.sourceforge.plantuml.ugraphic.UGraphic;
 import net.sourceforge.plantuml.ugraphic.ULine;
 import net.sourceforge.plantuml.ugraphic.UPath;
diff --git a/src/net/sourceforge/plantuml/svek/RoundedContainer.java b/src/net/sourceforge/plantuml/svek/RoundedContainer.java
index 8f50d31b6..0739481ab 100644
--- a/src/net/sourceforge/plantuml/svek/RoundedContainer.java
+++ b/src/net/sourceforge/plantuml/svek/RoundedContainer.java
@@ -34,17 +34,19 @@
  *
  */
 package net.sourceforge.plantuml.svek;
 
 import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.ugraphic.UGraphic;
 import net.sourceforge.plantuml.ugraphic.ULine;
+import net.sourceforge.plantuml.ugraphic.UPath;
 import net.sourceforge.plantuml.ugraphic.URectangle;
+import net.sourceforge.plantuml.ugraphic.UShape;
 import net.sourceforge.plantuml.ugraphic.UStroke;
 import net.sourceforge.plantuml.ugraphic.UTranslate;
 import net.sourceforge.plantuml.ugraphic.color.HColor;
+import net.sourceforge.plantuml.ugraphic.color.HColorUtils;
 
 public final class RoundedContainer {
 
 	private final Dimension2D dim;
 	private final double titleHeight;
@@ -56,13 +58,13 @@ public final class RoundedContainer {
 	private final double rounded;
 	private final double shadowing;
 
 	public RoundedContainer(Dimension2D dim, double titleHeight, double attributeHeight, HColor borderColor,
 			HColor backColor, HColor imgBackcolor, UStroke stroke, double rounded, double shadowing) {
-		if (dim.getWidth() == 0) {
+		if (dim.getWidth() == 0)
 			throw new IllegalArgumentException();
-		}
+
 		this.rounded = rounded;
 		this.dim = dim;
 		this.imgBackcolor = imgBackcolor;
 		this.titleHeight = titleHeight;
 		this.borderColor = borderColor;
@@ -71,30 +73,30 @@ public final class RoundedContainer {
 		this.stroke = stroke;
 		this.shadowing = shadowing;
 	}
 
 	public void drawU(UGraphic ug) {
-		ug = ug.apply(backColor.bg()).apply(borderColor);
+		ug = ug.apply(backColor.bg()).apply(borderColor).apply(stroke);
 		final URectangle rect = new URectangle(dim.getWidth(), dim.getHeight()).rounded(rounded);
-		rect.setDeltaShadow(shadowing);
-		ug.apply(stroke).draw(rect);
-
-		final double yLine = titleHeight + attributeHeight;
 
-		ug = ug.apply(imgBackcolor.bg());
+		if (shadowing > 0) {
+			rect.setDeltaShadow(shadowing);
+			ug.apply(HColorUtils.transparent().bg()).draw(rect);
+			rect.setDeltaShadow(0);
+			
+		}
+		final double headerHeight = titleHeight + attributeHeight;
 
-		final double thickness = stroke.getThickness();
+		new RoundedNorth(dim.getWidth(), headerHeight, backColor, rounded).drawU(ug);
+		new RoundedSouth(dim.getWidth(), dim.getHeight() - headerHeight, imgBackcolor, rounded)
+				.drawU(ug.apply(UTranslate.dy(headerHeight)));
 
-		final URectangle inner = new URectangle(dim.getWidth() - 4 * thickness,
-				dim.getHeight() - titleHeight - 4 * thickness - attributeHeight).rounded(rounded);
-		ug.apply(imgBackcolor).apply(new UTranslate(2 * thickness, yLine + 2 * thickness)).draw(inner);
+		ug.apply(HColorUtils.transparent().bg()).draw(rect);
 
-		if (titleHeight > 0) {
-			ug.apply(stroke).apply(UTranslate.dy(yLine)).draw(ULine.hline(dim.getWidth()));
-		}
+		if (headerHeight > 0)
+			ug.apply(UTranslate.dy(headerHeight)).draw(ULine.hline(dim.getWidth()));
 
-		if (attributeHeight > 0) {
-			ug.apply(stroke).apply(UTranslate.dy(yLine - attributeHeight)).draw(ULine.hline(dim.getWidth()));
-		}
+		if (attributeHeight > 0)
+			ug.apply(UTranslate.dy(titleHeight)).draw(ULine.hline(dim.getWidth()));
 
 	}
 }
diff --git a/src/net/sourceforge/plantuml/svek/RoundedNorth.java b/src/net/sourceforge/plantuml/svek/RoundedNorth.java
new file mode 100644
index 000000000..6c6834bc8
--- /dev/null
+++ b/src/net/sourceforge/plantuml/svek/RoundedNorth.java
@@ -0,0 +1,88 @@
+/* ========================================================================
+ * PlantUML : a free UML diagram generator
+ * ========================================================================
+ *
+ * (C) Copyright 2009-2023, Arnaud Roques
+ *
+ * Project Info:  http://plantuml.com
+ * 
+ * If you like this project or if you find it useful, you can support us at:
+ * 
+ * http://plantuml.com/patreon (only 1$ per month!)
+ * http://plantuml.com/paypal
+ * 
+ * This file is part of PlantUML.
+ *
+ * PlantUML is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * PlantUML distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
+ * USA.
+ *
+ *
+ * Original Author:  Arnaud Roques
+ * 
+ *
+ */
+package net.sourceforge.plantuml.svek;
+
+import net.sourceforge.plantuml.graphic.UDrawable;
+import net.sourceforge.plantuml.ugraphic.UGraphic;
+import net.sourceforge.plantuml.ugraphic.UPath;
+import net.sourceforge.plantuml.ugraphic.URectangle;
+import net.sourceforge.plantuml.ugraphic.UShape;
+import net.sourceforge.plantuml.ugraphic.UStroke;
+import net.sourceforge.plantuml.ugraphic.color.HColor;
+import net.sourceforge.plantuml.ugraphic.color.HColorUtils;
+
+public final class RoundedNorth implements UDrawable {
+
+	private final double width;
+	private final double height;
+	private final HColor backColor;
+	private final double rounded;
+
+	public RoundedNorth(double width, double height, HColor backColor, double rounded) {
+		if (width == 0)
+			throw new IllegalArgumentException();
+		if (height == 0)
+			throw new IllegalArgumentException();
+
+		this.width = width;
+		this.height = height;
+		this.rounded = rounded;
+		this.backColor = backColor;
+	}
+
+	public void drawU(UGraphic ug) {
+		if (HColorUtils.isTransparent(backColor))
+			return;
+
+		final UShape header;
+		if (rounded == 0) {
+			header = new URectangle(width, height);
+		} else {
+			final UPath path = new UPath();
+			path.moveTo(rounded / 2, 0);
+			path.lineTo(width - rounded / 2, 0);
+			path.arcTo(rounded / 2, rounded / 2, 0, 0, 1, width, rounded / 2);
+			path.lineTo(width, height);
+			path.lineTo(0, height);
+			path.lineTo(0, rounded / 2);
+			path.arcTo(rounded / 2, rounded / 2, 0, 0, 1, rounded / 2, 0);
+			path.closePath();
+			header = path;
+		}
+		ug.apply(new UStroke()).apply(backColor).apply(backColor.bg()).draw(header);
+
+	}
+}
diff --git a/src/net/sourceforge/plantuml/svek/RoundedSouth.java b/src/net/sourceforge/plantuml/svek/RoundedSouth.java
new file mode 100644
index 000000000..c17677485
--- /dev/null
+++ b/src/net/sourceforge/plantuml/svek/RoundedSouth.java
@@ -0,0 +1,88 @@
+/* ========================================================================
+ * PlantUML : a free UML diagram generator
+ * ========================================================================
+ *
+ * (C) Copyright 2009-2023, Arnaud Roques
+ *
+ * Project Info:  http://plantuml.com
+ * 
+ * If you like this project or if you find it useful, you can support us at:
+ * 
+ * http://plantuml.com/patreon (only 1$ per month!)
+ * http://plantuml.com/paypal
+ * 
+ * This file is part of PlantUML.
+ *
+ * PlantUML is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * PlantUML distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
+ * USA.
+ *
+ *
+ * Original Author:  Arnaud Roques
+ * 
+ *
+ */
+package net.sourceforge.plantuml.svek;
+
+import net.sourceforge.plantuml.graphic.UDrawable;
+import net.sourceforge.plantuml.ugraphic.UGraphic;
+import net.sourceforge.plantuml.ugraphic.UPath;
+import net.sourceforge.plantuml.ugraphic.URectangle;
+import net.sourceforge.plantuml.ugraphic.UShape;
+import net.sourceforge.plantuml.ugraphic.UStroke;
+import net.sourceforge.plantuml.ugraphic.color.HColor;
+import net.sourceforge.plantuml.ugraphic.color.HColorUtils;
+
+public final class RoundedSouth implements UDrawable {
+
+	private final double width;
+	private final double height;
+	private final HColor backColor;
+	private final double rounded;
+
+	public RoundedSouth(double width, double height, HColor backColor, double rounded) {
+		if (width == 0)
+			throw new IllegalArgumentException();
+		if (height == 0)
+			throw new IllegalArgumentException();
+
+		this.width = width;
+		this.height = height;
+		this.rounded = rounded;
+		this.backColor = backColor;
+	}
+
+	public void drawU(UGraphic ug) {
+		if (HColorUtils.isTransparent(backColor))
+			return;
+
+		final UShape header;
+		if (rounded == 0) {
+			header = new URectangle(width, height);
+		} else {
+			final UPath path = new UPath();
+			path.moveTo(0, 0);
+			path.lineTo(width, 0);
+			path.lineTo(width, height - rounded / 2);
+			path.arcTo(rounded / 2, rounded / 2, 0, 0, 1, width - rounded / 2, height);
+			path.lineTo(rounded / 2, height);
+			path.arcTo(rounded / 2, rounded / 2, 0, 0, 1, 0, height - rounded / 2);
+			path.lineTo(0, 0);
+			path.closePath();
+			header = path;
+		}
+		ug.apply(new UStroke()).apply(backColor).apply(backColor.bg()).draw(header);
+
+	}
+}
diff --git a/src/net/sourceforge/plantuml/svek/SvekLine.java b/src/net/sourceforge/plantuml/svek/SvekLine.java
index e2246731d..c7003d3ec 100644
--- a/src/net/sourceforge/plantuml/svek/SvekLine.java
+++ b/src/net/sourceforge/plantuml/svek/SvekLine.java
@@ -33,11 +33,10 @@
  *
  *
  */
 package net.sourceforge.plantuml.svek;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.awt.geom.Point2D;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.EnumMap;
 import java.util.List;
@@ -55,10 +54,11 @@ import net.sourceforge.plantuml.LineParam;
 import net.sourceforge.plantuml.Log;
 import net.sourceforge.plantuml.Pragma;
 import net.sourceforge.plantuml.StringUtils;
 import net.sourceforge.plantuml.UmlDiagramType;
 import net.sourceforge.plantuml.Url;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.command.Position;
 import net.sourceforge.plantuml.cucadiagram.Display;
 import net.sourceforge.plantuml.cucadiagram.EntityPort;
 import net.sourceforge.plantuml.cucadiagram.IEntity;
 import net.sourceforge.plantuml.cucadiagram.IGroup;
diff --git a/src/net/sourceforge/plantuml/svek/SvekNode.java b/src/net/sourceforge/plantuml/svek/SvekNode.java
index bf8d1ac21..226ea4fa8 100644
--- a/src/net/sourceforge/plantuml/svek/SvekNode.java
+++ b/src/net/sourceforge/plantuml/svek/SvekNode.java
@@ -33,17 +33,17 @@
  *
  * 
  */
 package net.sourceforge.plantuml.svek;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.awt.geom.Point2D;
 import java.util.List;
 
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.Hideable;
 import net.sourceforge.plantuml.StringUtils;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.EntityPosition;
 import net.sourceforge.plantuml.cucadiagram.IGroup;
 import net.sourceforge.plantuml.cucadiagram.ILeaf;
 import net.sourceforge.plantuml.cucadiagram.entity.EntityImpl;
 import net.sourceforge.plantuml.graphic.StringBounder;
diff --git a/src/net/sourceforge/plantuml/svek/SvekResult.java b/src/net/sourceforge/plantuml/svek/SvekResult.java
index 0e7177c29..fa7de194f 100644
--- a/src/net/sourceforge/plantuml/svek/SvekResult.java
+++ b/src/net/sourceforge/plantuml/svek/SvekResult.java
@@ -47,15 +47,15 @@ import net.sourceforge.plantuml.cucadiagram.Stereotype;
 import net.sourceforge.plantuml.cucadiagram.dot.DotData;
 import net.sourceforge.plantuml.graphic.AbstractTextBlock;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.graphic.TextBlockUtils;
 import net.sourceforge.plantuml.skin.rose.Rose;
-import net.sourceforge.plantuml.style.StyleSignature;
 import net.sourceforge.plantuml.style.PName;
 import net.sourceforge.plantuml.style.SName;
 import net.sourceforge.plantuml.style.Style;
 import net.sourceforge.plantuml.style.StyleBuilder;
+import net.sourceforge.plantuml.style.StyleSignature;
 import net.sourceforge.plantuml.style.StyleSignatureBasic;
 import net.sourceforge.plantuml.ugraphic.MinMax;
 import net.sourceforge.plantuml.ugraphic.UGraphic;
 import net.sourceforge.plantuml.ugraphic.UHidden;
 import net.sourceforge.plantuml.ugraphic.UStroke;
diff --git a/src/net/sourceforge/plantuml/svek/image/AbstractEntityImageBorder.java b/src/net/sourceforge/plantuml/svek/image/AbstractEntityImageBorder.java
index bedb3db33..5d4dced41 100644
--- a/src/net/sourceforge/plantuml/svek/image/AbstractEntityImageBorder.java
+++ b/src/net/sourceforge/plantuml/svek/image/AbstractEntityImageBorder.java
@@ -34,14 +34,13 @@
  * 
  */
 
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.FontParam;
 import net.sourceforge.plantuml.ISkinParam;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.EntityPosition;
 import net.sourceforge.plantuml.cucadiagram.ILeaf;
 import net.sourceforge.plantuml.cucadiagram.Rankdir;
 import net.sourceforge.plantuml.cucadiagram.Stereotype;
 import net.sourceforge.plantuml.graphic.FontConfiguration;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageActivity.java b/src/net/sourceforge/plantuml/svek/image/EntityImageActivity.java
index 28939ad90..872dcbaae 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageActivity.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageActivity.java
@@ -48,14 +48,14 @@ import net.sourceforge.plantuml.cucadiagram.Stereotype;
 import net.sourceforge.plantuml.graphic.FontConfiguration;
 import net.sourceforge.plantuml.graphic.HorizontalAlignment;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.graphic.TextBlock;
 import net.sourceforge.plantuml.graphic.color.ColorType;
-import net.sourceforge.plantuml.style.StyleSignature;
 import net.sourceforge.plantuml.style.PName;
 import net.sourceforge.plantuml.style.SName;
 import net.sourceforge.plantuml.style.Style;
+import net.sourceforge.plantuml.style.StyleSignature;
 import net.sourceforge.plantuml.style.StyleSignatureBasic;
 import net.sourceforge.plantuml.svek.AbstractEntityImage;
 import net.sourceforge.plantuml.svek.Bibliotekon;
 import net.sourceforge.plantuml.svek.ShapeType;
 import net.sourceforge.plantuml.svek.SvekNode;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageArcCircle.java b/src/net/sourceforge/plantuml/svek/image/EntityImageArcCircle.java
index 8b68df81f..ac855c2a3 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageArcCircle.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageArcCircle.java
@@ -33,16 +33,15 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.FontParam;
 import net.sourceforge.plantuml.Guillemet;
 import net.sourceforge.plantuml.ISkinParam;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.Display;
 import net.sourceforge.plantuml.cucadiagram.ILeaf;
 import net.sourceforge.plantuml.cucadiagram.Stereotype;
 import net.sourceforge.plantuml.graphic.FontConfiguration;
 import net.sourceforge.plantuml.graphic.HorizontalAlignment;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageAssociation.java b/src/net/sourceforge/plantuml/svek/image/EntityImageAssociation.java
index 33373d309..64ef7fa3e 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageAssociation.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageAssociation.java
@@ -33,17 +33,16 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.ColorParam;
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.SkinParamUtils;
 import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.ILeaf;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.style.PName;
 import net.sourceforge.plantuml.style.SName;
 import net.sourceforge.plantuml.style.Style;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageAssociationPoint.java b/src/net/sourceforge/plantuml/svek/image/EntityImageAssociationPoint.java
index 707d34c6a..98dd958d6 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageAssociationPoint.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageAssociationPoint.java
@@ -33,14 +33,13 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.ISkinParam;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.ILeaf;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.svek.AbstractEntityImage;
 import net.sourceforge.plantuml.svek.ShapeType;
 import net.sourceforge.plantuml.ugraphic.UEllipse;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageBranch.java b/src/net/sourceforge/plantuml/svek/image/EntityImageBranch.java
index 40ee77af7..efd88f3ed 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageBranch.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageBranch.java
@@ -33,19 +33,19 @@
  *
  *
  */
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.util.EnumMap;
 import java.util.Map;
 
 import net.sourceforge.plantuml.ColorParam;
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.SkinParamUtils;
 import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.ILeaf;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.style.PName;
 import net.sourceforge.plantuml.style.SName;
 import net.sourceforge.plantuml.style.Style;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageCircleEnd.java b/src/net/sourceforge/plantuml/svek/image/EntityImageCircleEnd.java
index d0410dfe8..8f6996a1b 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageCircleEnd.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageCircleEnd.java
@@ -33,17 +33,16 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.ColorParam;
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.SkinParamUtils;
 import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.ILeaf;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.style.PName;
 import net.sourceforge.plantuml.style.SName;
 import net.sourceforge.plantuml.style.Style;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageCircleStart.java b/src/net/sourceforge/plantuml/svek/image/EntityImageCircleStart.java
index 411a7149a..f88c88aec 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageCircleStart.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageCircleStart.java
@@ -33,17 +33,16 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.ColorParam;
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.SkinParamUtils;
 import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.ILeaf;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.style.PName;
 import net.sourceforge.plantuml.style.SName;
 import net.sourceforge.plantuml.style.Style;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageClass.java b/src/net/sourceforge/plantuml/svek/image/EntityImageClass.java
index 88f94b501..2b4d91213 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageClass.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageClass.java
@@ -33,11 +33,10 @@
  *
  *
  */
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.awt.geom.Rectangle2D;
 import java.util.EnumMap;
 import java.util.Map;
 
 import net.sourceforge.plantuml.ColorParam;
@@ -48,10 +47,11 @@ import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.LineConfigurable;
 import net.sourceforge.plantuml.LineParam;
 import net.sourceforge.plantuml.SkinParamUtils;
 import net.sourceforge.plantuml.Url;
 import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.creole.Stencil;
 import net.sourceforge.plantuml.cucadiagram.EntityPortion;
 import net.sourceforge.plantuml.cucadiagram.ILeaf;
 import net.sourceforge.plantuml.cucadiagram.LeafType;
 import net.sourceforge.plantuml.cucadiagram.PortionShower;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageClassHeader.java b/src/net/sourceforge/plantuml/svek/image/EntityImageClassHeader.java
index 7ff4b2d00..50e083986 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageClassHeader.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageClassHeader.java
@@ -33,18 +33,17 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.ColorParam;
 import net.sourceforge.plantuml.FontParam;
 import net.sourceforge.plantuml.Guillemet;
 import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.SkinParamUtils;
 import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.Display;
 import net.sourceforge.plantuml.cucadiagram.EntityPortion;
 import net.sourceforge.plantuml.cucadiagram.ILeaf;
 import net.sourceforge.plantuml.cucadiagram.LeafType;
 import net.sourceforge.plantuml.cucadiagram.PortionShower;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageEmptyPackage.java b/src/net/sourceforge/plantuml/svek/image/EntityImageEmptyPackage.java
index e0e0b256d..2ee3e4085 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageEmptyPackage.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageEmptyPackage.java
@@ -59,14 +59,14 @@ import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.graphic.TextBlock;
 import net.sourceforge.plantuml.graphic.TextBlockUtils;
 import net.sourceforge.plantuml.graphic.USymbols;
 import net.sourceforge.plantuml.graphic.color.ColorType;
 import net.sourceforge.plantuml.graphic.color.Colors;
-import net.sourceforge.plantuml.style.StyleSignature;
 import net.sourceforge.plantuml.style.PName;
 import net.sourceforge.plantuml.style.SName;
 import net.sourceforge.plantuml.style.Style;
+import net.sourceforge.plantuml.style.StyleSignature;
 import net.sourceforge.plantuml.style.StyleSignatureBasic;
 import net.sourceforge.plantuml.svek.AbstractEntityImage;
 import net.sourceforge.plantuml.svek.Cluster;
 import net.sourceforge.plantuml.svek.ClusterDecoration;
 import net.sourceforge.plantuml.svek.GeneralImageBuilder;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageGroup.java b/src/net/sourceforge/plantuml/svek/image/EntityImageGroup.java
index 93b27e76f..b483a6a72 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageGroup.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageGroup.java
@@ -33,14 +33,13 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.ISkinParam;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.ILeaf;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.svek.AbstractEntityImage;
 import net.sourceforge.plantuml.svek.ShapeType;
 import net.sourceforge.plantuml.ugraphic.UGraphic;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageJson.java b/src/net/sourceforge/plantuml/svek/image/EntityImageJson.java
index 67272b501..eb3e279e7 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageJson.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageJson.java
@@ -33,13 +33,10 @@
  *
  *
  */
 package net.sourceforge.plantuml.svek.image;
 
-import java.util.EnumMap;
-import java.util.Map;
-
 import net.sourceforge.plantuml.ColorParam;
 import net.sourceforge.plantuml.CornerParam;
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.FontParam;
 import net.sourceforge.plantuml.Guillemet;
@@ -74,11 +71,10 @@ import net.sourceforge.plantuml.svek.ShapeType;
 import net.sourceforge.plantuml.svek.WithPorts;
 import net.sourceforge.plantuml.ugraphic.PlacementStrategyY1Y2;
 import net.sourceforge.plantuml.ugraphic.Shadowable;
 import net.sourceforge.plantuml.ugraphic.UGraphic;
 import net.sourceforge.plantuml.ugraphic.UGraphicStencil;
-import net.sourceforge.plantuml.ugraphic.UGroupType;
 import net.sourceforge.plantuml.ugraphic.ULayoutGroup;
 import net.sourceforge.plantuml.ugraphic.URectangle;
 import net.sourceforge.plantuml.ugraphic.UStroke;
 import net.sourceforge.plantuml.ugraphic.UTranslate;
 import net.sourceforge.plantuml.ugraphic.color.HColor;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterface.java b/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterface.java
index d6c2e5435..01dad2f57 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterface.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterface.java
@@ -33,21 +33,21 @@
  *
  *
  */
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.util.EnumMap;
 import java.util.Map;
 
 import net.sourceforge.plantuml.ColorParam;
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.FontParam;
 import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.SkinParamUtils;
 import net.sourceforge.plantuml.Url;
 import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.ILeaf;
 import net.sourceforge.plantuml.cucadiagram.LeafType;
 import net.sourceforge.plantuml.cucadiagram.Stereotype;
 import net.sourceforge.plantuml.graphic.FontConfiguration;
 import net.sourceforge.plantuml.graphic.HorizontalAlignment;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye1.java b/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye1.java
index 08a57e3cd..815d1bc34 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye1.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye1.java
@@ -33,20 +33,20 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.awt.geom.Point2D;
 import java.util.List;
 
 import net.sourceforge.plantuml.ColorParam;
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.FontParam;
 import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.SkinParamUtils;
 import net.sourceforge.plantuml.Url;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.ILeaf;
 import net.sourceforge.plantuml.cucadiagram.Stereotype;
 import net.sourceforge.plantuml.graphic.FontConfiguration;
 import net.sourceforge.plantuml.graphic.HorizontalAlignment;
 import net.sourceforge.plantuml.graphic.StringBounder;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye2.java b/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye2.java
index 9fba7efe6..155404d19 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye2.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye2.java
@@ -33,19 +33,19 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.util.Objects;
 
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.FontParam;
 import net.sourceforge.plantuml.Guillemet;
 import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.SkinParamUtils;
 import net.sourceforge.plantuml.Url;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.BodyFactory;
 import net.sourceforge.plantuml.cucadiagram.Display;
 import net.sourceforge.plantuml.cucadiagram.EntityPortion;
 import net.sourceforge.plantuml.cucadiagram.ILeaf;
 import net.sourceforge.plantuml.cucadiagram.PortionShower;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageNote.java b/src/net/sourceforge/plantuml/svek/image/EntityImageNote.java
index d09d00060..80d63878c 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageNote.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageNote.java
@@ -33,11 +33,10 @@
  *
  *
  */
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.awt.geom.Line2D;
 import java.awt.geom.Point2D;
 import java.util.EnumMap;
 import java.util.Map;
 import java.util.Objects;
@@ -53,10 +52,11 @@ import net.sourceforge.plantuml.LineParam;
 import net.sourceforge.plantuml.SkinParamBackcolored;
 import net.sourceforge.plantuml.SkinParamUtils;
 import net.sourceforge.plantuml.UmlDiagramType;
 import net.sourceforge.plantuml.Url;
 import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.creole.Stencil;
 import net.sourceforge.plantuml.cucadiagram.BodyFactory;
 import net.sourceforge.plantuml.cucadiagram.Display;
 import net.sourceforge.plantuml.cucadiagram.IEntity;
 import net.sourceforge.plantuml.cucadiagram.ILeaf;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageNoteLink.java b/src/net/sourceforge/plantuml/svek/image/EntityImageNoteLink.java
index ea6816d1b..80fe09820 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageNoteLink.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageNoteLink.java
@@ -33,14 +33,13 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.ISkinParam;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.Display;
 import net.sourceforge.plantuml.graphic.AbstractTextBlock;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.graphic.color.Colors;
 import net.sourceforge.plantuml.skin.Area;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImagePort.java b/src/net/sourceforge/plantuml/svek/image/EntityImagePort.java
index c66907c4a..fdc9da721 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImagePort.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImagePort.java
@@ -34,19 +34,19 @@
  * 
  */
 
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.awt.geom.Point2D;
 
 import net.sourceforge.plantuml.ColorParam;
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.FontParam;
 import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.SkinParamUtils;
 import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.EntityPosition;
 import net.sourceforge.plantuml.cucadiagram.ILeaf;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.graphic.color.ColorType;
 import net.sourceforge.plantuml.style.PName;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImagePseudoState.java b/src/net/sourceforge/plantuml/svek/image/EntityImagePseudoState.java
index 05baae928..b1110d2a6 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImagePseudoState.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImagePseudoState.java
@@ -33,18 +33,17 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.ColorParam;
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.FontParam;
 import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.SkinParamUtils;
 import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.Display;
 import net.sourceforge.plantuml.cucadiagram.ILeaf;
 import net.sourceforge.plantuml.cucadiagram.Stereotype;
 import net.sourceforge.plantuml.graphic.FontConfiguration;
 import net.sourceforge.plantuml.graphic.HorizontalAlignment;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageState.java b/src/net/sourceforge/plantuml/svek/image/EntityImageState.java
index 3b4bb61b1..0aae24d20 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageState.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageState.java
@@ -33,17 +33,17 @@
  *
  *
  */
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.util.Collections;
 
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.FontParam;
 import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.creole.CreoleMode;
 import net.sourceforge.plantuml.cucadiagram.Display;
 import net.sourceforge.plantuml.cucadiagram.IEntity;
 import net.sourceforge.plantuml.cucadiagram.Stereotype;
 import net.sourceforge.plantuml.graphic.FontConfiguration;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageState2.java b/src/net/sourceforge/plantuml/svek/image/EntityImageState2.java
index 8a11ee175..6887444c3 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageState2.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageState2.java
@@ -33,16 +33,15 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.SkinParamUtils;
 import net.sourceforge.plantuml.Url;
 import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.BodyFactory;
 import net.sourceforge.plantuml.cucadiagram.ILeaf;
 import net.sourceforge.plantuml.cucadiagram.Stereotype;
 import net.sourceforge.plantuml.graphic.HorizontalAlignment;
 import net.sourceforge.plantuml.graphic.StringBounder;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageStateBorder.java b/src/net/sourceforge/plantuml/svek/image/EntityImageStateBorder.java
index 21ca33f4d..e8d91ffcb 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageStateBorder.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageStateBorder.java
@@ -33,18 +33,18 @@
  * Contribution :  Hisashi Miyashita
  *
  */
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.awt.geom.Point2D;
 
 import net.sourceforge.plantuml.ColorParam;
 import net.sourceforge.plantuml.FontParam;
 import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.SkinParamUtils;
 import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.EntityPosition;
 import net.sourceforge.plantuml.cucadiagram.ILeaf;
 import net.sourceforge.plantuml.graphic.color.ColorType;
 import net.sourceforge.plantuml.style.PName;
 import net.sourceforge.plantuml.style.SName;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageStateCommon.java b/src/net/sourceforge/plantuml/svek/image/EntityImageStateCommon.java
index 06b540764..146a37bf0 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageStateCommon.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageStateCommon.java
@@ -33,19 +33,18 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.ColorParam;
 import net.sourceforge.plantuml.FontParam;
 import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.LineConfigurable;
 import net.sourceforge.plantuml.SkinParamUtils;
 import net.sourceforge.plantuml.Url;
 import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.creole.CreoleMode;
 import net.sourceforge.plantuml.cucadiagram.IEntity;
 import net.sourceforge.plantuml.cucadiagram.Stereotype;
 import net.sourceforge.plantuml.graphic.FontConfiguration;
 import net.sourceforge.plantuml.graphic.HorizontalAlignment;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageStateEmptyDescription.java b/src/net/sourceforge/plantuml/svek/image/EntityImageStateEmptyDescription.java
index 1529969a0..9acd9295b 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageStateEmptyDescription.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageStateEmptyDescription.java
@@ -33,15 +33,14 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.IEntity;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.ugraphic.UGraphic;
 import net.sourceforge.plantuml.ugraphic.UStroke;
 import net.sourceforge.plantuml.ugraphic.UTranslate;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageSynchroBar.java b/src/net/sourceforge/plantuml/svek/image/EntityImageSynchroBar.java
index d717ef422..2db7710c0 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageSynchroBar.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageSynchroBar.java
@@ -33,17 +33,16 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.ColorParam;
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.SkinParamUtils;
 import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.ILeaf;
 import net.sourceforge.plantuml.cucadiagram.Rankdir;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.style.PName;
 import net.sourceforge.plantuml.style.SName;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageTips.java b/src/net/sourceforge/plantuml/svek/image/EntityImageTips.java
index 8dadb5e7b..194efb4f2 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageTips.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageTips.java
@@ -33,11 +33,10 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.awt.geom.Point2D;
 import java.awt.geom.Rectangle2D;
 import java.util.Map;
 
 import net.sourceforge.plantuml.ColorParam;
@@ -46,10 +45,11 @@ import net.sourceforge.plantuml.Direction;
 import net.sourceforge.plantuml.FontParam;
 import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.LineBreakStrategy;
 import net.sourceforge.plantuml.UmlDiagramType;
 import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.command.Position;
 import net.sourceforge.plantuml.cucadiagram.BodyFactory;
 import net.sourceforge.plantuml.cucadiagram.Display;
 import net.sourceforge.plantuml.cucadiagram.IEntity;
 import net.sourceforge.plantuml.cucadiagram.ILeaf;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageUseCase.java b/src/net/sourceforge/plantuml/svek/image/EntityImageUseCase.java
index af584a470..0e42b3cb8 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageUseCase.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageUseCase.java
@@ -62,14 +62,14 @@ import net.sourceforge.plantuml.graphic.SkinParameter;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.graphic.TextBlock;
 import net.sourceforge.plantuml.graphic.TextBlockUtils;
 import net.sourceforge.plantuml.graphic.color.ColorType;
 import net.sourceforge.plantuml.graphic.color.Colors;
-import net.sourceforge.plantuml.style.StyleSignature;
 import net.sourceforge.plantuml.style.PName;
 import net.sourceforge.plantuml.style.SName;
 import net.sourceforge.plantuml.style.Style;
+import net.sourceforge.plantuml.style.StyleSignature;
 import net.sourceforge.plantuml.style.StyleSignatureBasic;
 import net.sourceforge.plantuml.svek.AbstractEntityImage;
 import net.sourceforge.plantuml.svek.ShapeType;
 import net.sourceforge.plantuml.ugraphic.AbstractUGraphicHorizontalLine;
 import net.sourceforge.plantuml.ugraphic.TextBlockInEllipse;
diff --git a/src/net/sourceforge/plantuml/svek/image/Footprint.java b/src/net/sourceforge/plantuml/svek/image/Footprint.java
index 1600ccb1d..0e8b2afa4 100644
--- a/src/net/sourceforge/plantuml/svek/image/Footprint.java
+++ b/src/net/sourceforge/plantuml/svek/image/Footprint.java
@@ -35,15 +35,15 @@
  */
 package net.sourceforge.plantuml.svek.image;
 
 import static net.sourceforge.plantuml.utils.ObjectUtils.instanceOfAny;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.awt.geom.Point2D;
 import java.util.ArrayList;
 import java.util.List;
 
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.graphic.UDrawable;
 import net.sourceforge.plantuml.ugraphic.UBackground;
 import net.sourceforge.plantuml.ugraphic.UChange;
 import net.sourceforge.plantuml.ugraphic.UEmpty;
diff --git a/src/net/sourceforge/plantuml/svek/image/Opale.java b/src/net/sourceforge/plantuml/svek/image/Opale.java
index f896e0fd2..a30858b03 100644
--- a/src/net/sourceforge/plantuml/svek/image/Opale.java
+++ b/src/net/sourceforge/plantuml/svek/image/Opale.java
@@ -33,15 +33,15 @@
  * 
  *
  */
 package net.sourceforge.plantuml.svek.image;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.awt.geom.Point2D;
 
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.Direction;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.graphic.AbstractTextBlock;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.graphic.TextBlock;
 import net.sourceforge.plantuml.ugraphic.UGraphic;
 import net.sourceforge.plantuml.ugraphic.UPath;
diff --git a/src/net/sourceforge/plantuml/svg/SvgGraphics.java b/src/net/sourceforge/plantuml/svg/SvgGraphics.java
index 5e887e23f..7c01ae1bc 100644
--- a/src/net/sourceforge/plantuml/svg/SvgGraphics.java
+++ b/src/net/sourceforge/plantuml/svg/SvgGraphics.java
@@ -33,23 +33,20 @@
  *
  *
  */
 package net.sourceforge.plantuml.svg;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.awt.geom.PathIterator;
 import java.awt.image.BufferedImage;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.HashMap;
-import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Objects;
 import java.util.regex.Matcher;
@@ -69,10 +66,11 @@ import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
 import net.sourceforge.plantuml.FileUtils;
 import net.sourceforge.plantuml.Log;
 import net.sourceforge.plantuml.SignatureUtils;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.code.Base64Coder;
 import net.sourceforge.plantuml.security.SImageIO;
 import net.sourceforge.plantuml.security.SecurityUtils;
 import net.sourceforge.plantuml.tikz.TikzGraphics;
 import net.sourceforge.plantuml.ugraphic.UGroupType;
@@ -893,12 +891,18 @@ public class SvgGraphics {
 			elt.setAttribute("x", format(x));
 			elt.setAttribute("y", format(y));
 
 			String svg = manageScale(image);
 
-			final String svgHeader = "<svg height=\"" + (int) (image.getHeight() * scale) + "\" width=\""
-					+ (int) (image.getWidth() * scale) + "\" xmlns=\"http://www.w3.org/2000/svg\" >";
+			final String svgHeader;
+			if (image.containsXlink())
+				svgHeader = "<svg height=\"" + (int) (image.getHeight() * scale) + "\" width=\""
+						+ (int) (image.getWidth() * scale)
+						+ "\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns=\"http://www.w3.org/2000/svg\" >";
+			else
+				svgHeader = "<svg height=\"" + (int) (image.getHeight() * scale) + "\" width=\""
+						+ (int) (image.getWidth() * scale) + "\" xmlns=\"http://www.w3.org/2000/svg\" >";
 
 			svg = svgHeader + svg.substring(5);
 
 			final String s = toBase64(svg);
 			elt.setAttribute("xlink:href", "data:image/svg+xml;base64," + s);
diff --git a/src/net/sourceforge/plantuml/timingdiagram/ChangeState.java b/src/net/sourceforge/plantuml/timingdiagram/ChangeState.java
index 1893f156c..7e171c811 100644
--- a/src/net/sourceforge/plantuml/timingdiagram/ChangeState.java
+++ b/src/net/sourceforge/plantuml/timingdiagram/ChangeState.java
@@ -52,13 +52,13 @@ public class ChangeState implements Comparable<ChangeState> {
 	private final String[] states;
 	private final String comment;
 	private final Colors colors;
 
 	public ChangeState(TimeTick when, String comment, Colors colors, String... states) {
-		if (states.length == 0) {
+		if (states.length == 0)
 			throw new IllegalArgumentException();
-		}
+
 		this.when = when;
 		this.states = states;
 		this.comment = comment;
 		this.colors = colors;
 	}
@@ -82,32 +82,30 @@ public class ChangeState implements Comparable<ChangeState> {
 	public String getComment() {
 		return comment;
 	}
 
 	public final HColor getBackColor(ISkinParam skinParam, Style style) {
-		if (colors == null || colors.getColor(ColorType.BACK) == null) {
-			if (UseStyle.useBetaStyle() == false)
-				return HColorUtils.COL_D7E0F2;
-
+		if (colors == null || colors.getColor(ColorType.BACK) == null)
 			return style.value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());
-		}
+
 		return colors.getColor(ColorType.BACK);
 	}
 
 	private final HColor getLineColor(ISkinParam skinParam, Style style) {
-		if (colors == null || colors.getColor(ColorType.LINE) == null) {
-			if (UseStyle.useBetaStyle() == false)
-				return HColorUtils.COL_038048;
-
+		if (colors == null || colors.getColor(ColorType.LINE) == null)
 			return style.value(PName.LineColor).asColor(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());
-		}
+
 		return colors.getColor(ColorType.LINE);
 	}
 
+	private UStroke getStroke(Style style) {
+		return style.getStroke();
+	}
+
 	public SymbolContext getContext(ISkinParam skinParam, Style style) {
 		return new SymbolContext(getBackColor(skinParam, style), getLineColor(skinParam, style))
-				.withStroke(new UStroke(1.5));
+				.withStroke(getStroke(style));
 	}
 
 	public final boolean isBlank() {
 		return states[0].equals("{...}");
 	}
diff --git a/src/net/sourceforge/plantuml/timingdiagram/Player.java b/src/net/sourceforge/plantuml/timingdiagram/Player.java
index 3461942d8..58220ea9d 100644
--- a/src/net/sourceforge/plantuml/timingdiagram/Player.java
+++ b/src/net/sourceforge/plantuml/timingdiagram/Player.java
@@ -32,76 +32,67 @@
  * Original Author:  Arnaud Roques
  *
  */
 package net.sourceforge.plantuml.timingdiagram;
 
-import net.sourceforge.plantuml.FontParam;
 import net.sourceforge.plantuml.ISkinParam;
-import net.sourceforge.plantuml.UseStyle;
 import net.sourceforge.plantuml.command.Position;
 import net.sourceforge.plantuml.cucadiagram.Display;
+import net.sourceforge.plantuml.cucadiagram.Stereotype;
 import net.sourceforge.plantuml.graphic.FontConfiguration;
 import net.sourceforge.plantuml.graphic.HorizontalAlignment;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.graphic.SymbolContext;
 import net.sourceforge.plantuml.graphic.TextBlock;
 import net.sourceforge.plantuml.graphic.UDrawable;
 import net.sourceforge.plantuml.graphic.color.Colors;
 import net.sourceforge.plantuml.style.PName;
 import net.sourceforge.plantuml.style.SName;
 import net.sourceforge.plantuml.style.Style;
+import net.sourceforge.plantuml.style.StyleSignature;
 import net.sourceforge.plantuml.style.StyleSignatureBasic;
 import net.sourceforge.plantuml.ugraphic.UStroke;
 import net.sourceforge.plantuml.ugraphic.color.HColor;
-import net.sourceforge.plantuml.ugraphic.color.HColorUtils;
 
 public abstract class Player implements TimeProjected {
 
 	protected final ISkinParam skinParam;
 	protected final TimingRuler ruler;
 	private final boolean compact;
 	private final Display title;
 	protected int suggestedHeight;
+	protected final Stereotype stereotype;
 
-	public Player(String title, ISkinParam skinParam, TimingRuler ruler, boolean compact) {
+	public Player(String title, ISkinParam skinParam, TimingRuler ruler, boolean compact, Stereotype stereotype) {
+		this.stereotype = stereotype;
 		this.skinParam = skinParam;
 		this.compact = compact;
 		this.ruler = ruler;
 		this.title = Display.getWithNewlines(title);
 	}
 
 	public boolean isCompact() {
 		return compact;
 	}
 
-	protected abstract StyleSignatureBasic getStyleSignature();
-
-	protected abstract SymbolContext getContextLegacy();
-//	private StyleSignature getStyleSignature() {
-//		return StyleSignature.of(SName.root, SName.element, SName.timingDiagram);
-//	}
+	protected abstract StyleSignature getStyleSignature();
 
 	final protected Style getStyle() {
 		return getStyleSignature().getMergedStyle(skinParam.getCurrentStyleBuilder());
-
 	}
 
 	final protected FontConfiguration getFontConfiguration() {
-		if (UseStyle.useBetaStyle() == false)
-			return FontConfiguration.create(skinParam, FontParam.TIMING, null);
-		return FontConfiguration.create(skinParam, StyleSignatureBasic.of(SName.root, SName.element, SName.timingDiagram)
-				.getMergedStyle(skinParam.getCurrentStyleBuilder()));
+		return FontConfiguration.create(skinParam, StyleSignatureBasic
+				.of(SName.root, SName.element, SName.timingDiagram).getMergedStyle(skinParam.getCurrentStyleBuilder()));
 	}
 
 	final protected UStroke getStroke() {
 		final Style style = getStyleSignature().getMergedStyle(skinParam.getCurrentStyleBuilder());
 		return style.getStroke();
 	}
 
 	final protected SymbolContext getContext() {
-		if (UseStyle.useBetaStyle() == false)
-			return getContextLegacy();
 
 		final Style style = getStyleSignature().getMergedStyle(skinParam.getCurrentStyleBuilder());
 		final HColor lineColor = style.value(PName.LineColor).asColor(skinParam.getThemeStyle(),
 				skinParam.getIHtmlColorSet());
 		final HColor backgroundColor = style.value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(),
diff --git a/src/net/sourceforge/plantuml/timingdiagram/PlayerAnalog.java b/src/net/sourceforge/plantuml/timingdiagram/PlayerAnalog.java
index 7058ebd0b..341831ad7 100644
--- a/src/net/sourceforge/plantuml/timingdiagram/PlayerAnalog.java
+++ b/src/net/sourceforge/plantuml/timingdiagram/PlayerAnalog.java
@@ -32,36 +32,33 @@
  * Original Author:  Arnaud Roques
  *
  */
 package net.sourceforge.plantuml.timingdiagram;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.awt.geom.Point2D;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.SortedMap;
 import java.util.TreeMap;
 
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.ISkinParam;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.command.Position;
 import net.sourceforge.plantuml.cucadiagram.Display;
 import net.sourceforge.plantuml.graphic.AbstractTextBlock;
 import net.sourceforge.plantuml.graphic.HorizontalAlignment;
 import net.sourceforge.plantuml.graphic.StringBounder;
-import net.sourceforge.plantuml.graphic.SymbolContext;
 import net.sourceforge.plantuml.graphic.TextBlock;
 import net.sourceforge.plantuml.graphic.UDrawable;
 import net.sourceforge.plantuml.graphic.color.Colors;
 import net.sourceforge.plantuml.style.SName;
 import net.sourceforge.plantuml.style.StyleSignatureBasic;
 import net.sourceforge.plantuml.timingdiagram.graphic.IntricatedPoint;
 import net.sourceforge.plantuml.ugraphic.UGraphic;
 import net.sourceforge.plantuml.ugraphic.ULine;
-import net.sourceforge.plantuml.ugraphic.UStroke;
 import net.sourceforge.plantuml.ugraphic.UTranslate;
-import net.sourceforge.plantuml.ugraphic.color.HColorUtils;
 
 public class PlayerAnalog extends Player {
 
 	private final SortedMap<TimeTick, Double> values = new TreeMap<TimeTick, Double>();
 	private final double ymargin = 8;
@@ -69,11 +66,11 @@ public class PlayerAnalog extends Player {
 	private Double start;
 	private Double end;
 	private Integer ticksEvery;
 
 	public PlayerAnalog(String code, ISkinParam skinParam, TimingRuler ruler, boolean compact) {
-		super(code, skinParam, ruler, compact);
+		super(code, skinParam, ruler, compact, null);
 		this.suggestedHeight = 100;
 	}
 
 	private double getMin() {
 		if (start != null)
@@ -98,15 +95,10 @@ public class PlayerAnalog extends Player {
 
 	public double getFullHeight(StringBounder stringBounder) {
 		return suggestedHeight;
 	}
 
-	@Override
-	protected SymbolContext getContextLegacy() {
-		return new SymbolContext(HColorUtils.COL_D7E0F2, HColorUtils.COL_038048).withStroke(new UStroke(1.5));
-	}
-
 	public IntricatedPoint getTimeProjection(StringBounder stringBounder, TimeTick tick) {
 		final double x = ruler.getPosInPixel(tick);
 		final double value = getValueAt(tick);
 		return new IntricatedPoint(new Point2D.Double(x, getYpos(value)), new Point2D.Double(x, getYpos(value)));
 	}
diff --git a/src/net/sourceforge/plantuml/timingdiagram/PlayerBinary.java b/src/net/sourceforge/plantuml/timingdiagram/PlayerBinary.java
index 5fd2c4928..c61858a0a 100644
--- a/src/net/sourceforge/plantuml/timingdiagram/PlayerBinary.java
+++ b/src/net/sourceforge/plantuml/timingdiagram/PlayerBinary.java
@@ -32,11 +32,10 @@
  * Original Author:  Arnaud Roques
  *
  */
 package net.sourceforge.plantuml.timingdiagram;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.awt.geom.Point2D;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.SortedMap;
@@ -44,45 +43,40 @@ import java.util.TreeMap;
 
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.FontParam;
 import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.command.Position;
 import net.sourceforge.plantuml.cucadiagram.Display;
+import net.sourceforge.plantuml.cucadiagram.Stereotype;
 import net.sourceforge.plantuml.graphic.AbstractTextBlock;
 import net.sourceforge.plantuml.graphic.FontConfiguration;
 import net.sourceforge.plantuml.graphic.HorizontalAlignment;
 import net.sourceforge.plantuml.graphic.StringBounder;
-import net.sourceforge.plantuml.graphic.SymbolContext;
 import net.sourceforge.plantuml.graphic.TextBlock;
 import net.sourceforge.plantuml.graphic.UDrawable;
 import net.sourceforge.plantuml.graphic.color.Colors;
-import net.sourceforge.plantuml.style.PName;
 import net.sourceforge.plantuml.style.SName;
-import net.sourceforge.plantuml.style.Style;
+import net.sourceforge.plantuml.style.StyleSignature;
 import net.sourceforge.plantuml.style.StyleSignatureBasic;
 import net.sourceforge.plantuml.timingdiagram.graphic.IntricatedPoint;
 import net.sourceforge.plantuml.ugraphic.UGraphic;
 import net.sourceforge.plantuml.ugraphic.ULine;
-import net.sourceforge.plantuml.ugraphic.UStroke;
 import net.sourceforge.plantuml.ugraphic.UTranslate;
-import net.sourceforge.plantuml.ugraphic.color.HColor;
-import net.sourceforge.plantuml.ugraphic.color.HColorUtils;
 
 public class PlayerBinary extends Player {
 
 	private static final String LOW_STRING = "0";
 	private static final String HIGH_STRING = "1";
 
 	private final List<TimeConstraint> constraints = new ArrayList<>();
 	private final SortedMap<TimeTick, ChangeState> values = new TreeMap<>();
 	private ChangeState initialState;
-	private final Style style;
 
-	public PlayerBinary(String code, ISkinParam skinParam, TimingRuler ruler, boolean compact) {
-		super(code, skinParam, ruler, compact);
-		this.style = getStyleSignature().getMergedStyle(skinParam.getCurrentStyleBuilder());
+	public PlayerBinary(String code, ISkinParam skinParam, TimingRuler ruler, boolean compact, Stereotype stereotype) {
+		super(code, skinParam, ruler, compact, stereotype);
 		this.suggestedHeight = 30;
 	}
 
 	private double getHeightForConstraints(StringBounder stringBounder) {
 		return TimeConstraint.getHeightForConstraints(stringBounder, constraints);
@@ -91,27 +85,12 @@ public class PlayerBinary extends Player {
 	public double getFullHeight(StringBounder stringBounder) {
 		return getHeightForConstraints(stringBounder) + suggestedHeight;
 	}
 
 	@Override
-	protected StyleSignatureBasic getStyleSignature() {
-		return StyleSignatureBasic.of(SName.root, SName.element, SName.timingDiagram, SName.binary);
-	}
-
-	@Override
-	protected SymbolContext getContextLegacy() {
-
-		if (UseStyle.useBetaStyle() == false)
-			return new SymbolContext(HColorUtils.COL_D7E0F2, HColorUtils.COL_038048).withStroke(new UStroke(2));
-
-		final HColor lineColor = style.value(PName.LineColor).asColor(skinParam.getThemeStyle(),
-				skinParam.getIHtmlColorSet());
-		final HColor backgroundColor = style.value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(),
-				skinParam.getIHtmlColorSet());
-
-		return new SymbolContext(backgroundColor, lineColor).withStroke(getStroke());
-
+	protected StyleSignature getStyleSignature() {
+		return StyleSignatureBasic.of(SName.root, SName.element, SName.timingDiagram, SName.binary).withTOBECHANGED(stereotype);
 	}
 
 	public IntricatedPoint getTimeProjection(StringBounder stringBounder, TimeTick tick) {
 		final double x = ruler.getPosInPixel(tick);
 		return new IntricatedPoint(new Point2D.Double(x, getYpos(stringBounder, HIGH_STRING)),
diff --git a/src/net/sourceforge/plantuml/timingdiagram/PlayerClock.java b/src/net/sourceforge/plantuml/timingdiagram/PlayerClock.java
index 302039e1e..70cfc11e7 100644
--- a/src/net/sourceforge/plantuml/timingdiagram/PlayerClock.java
+++ b/src/net/sourceforge/plantuml/timingdiagram/PlayerClock.java
@@ -32,36 +32,29 @@
  * Original Author:  Arnaud Roques
  *
  */
 package net.sourceforge.plantuml.timingdiagram;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.math.BigDecimal;
 
-import net.sourceforge.plantuml.FontParam;
 import net.sourceforge.plantuml.ISkinParam;
-import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.command.Position;
 import net.sourceforge.plantuml.cucadiagram.Display;
 import net.sourceforge.plantuml.graphic.AbstractTextBlock;
-import net.sourceforge.plantuml.graphic.FontConfiguration;
 import net.sourceforge.plantuml.graphic.StringBounder;
-import net.sourceforge.plantuml.graphic.SymbolContext;
 import net.sourceforge.plantuml.graphic.TextBlock;
 import net.sourceforge.plantuml.graphic.TextBlockUtils;
 import net.sourceforge.plantuml.graphic.UDrawable;
 import net.sourceforge.plantuml.graphic.color.Colors;
 import net.sourceforge.plantuml.style.SName;
-import net.sourceforge.plantuml.style.Style;
 import net.sourceforge.plantuml.style.StyleSignatureBasic;
 import net.sourceforge.plantuml.timingdiagram.graphic.IntricatedPoint;
 import net.sourceforge.plantuml.timingdiagram.graphic.PlayerFrame;
 import net.sourceforge.plantuml.ugraphic.UGraphic;
 import net.sourceforge.plantuml.ugraphic.ULine;
-import net.sourceforge.plantuml.ugraphic.UStroke;
 import net.sourceforge.plantuml.ugraphic.UTranslate;
-import net.sourceforge.plantuml.ugraphic.color.HColorUtils;
 
 public class PlayerClock extends Player {
 
 	private final int period;
 	private final int pulse;
@@ -69,11 +62,11 @@ public class PlayerClock extends Player {
 	private final double ymargin = 8;
 	private final boolean displayTitle;
 
 	public PlayerClock(String title, ISkinParam skinParam, TimingRuler ruler, int period, int pulse, int offset,
 			boolean compact) {
-		super(title, skinParam, ruler, compact);
+		super(title, skinParam, ruler, compact, null);
 		this.displayTitle = title.length() > 0;
 		this.period = period;
 		this.pulse = pulse;
 		this.offset = offset;
 		this.suggestedHeight = 30;
@@ -91,15 +84,10 @@ public class PlayerClock extends Player {
 		if (displayTitle)
 			return getTitle().calculateDimension(stringBounder).getHeight();
 		return 0;
 	}
 
-	@Override
-	protected SymbolContext getContextLegacy() {
-		return new SymbolContext(HColorUtils.COL_D7E0F2, HColorUtils.COL_038048).withStroke(new UStroke(1.5));
-	}
-
 	protected StyleSignatureBasic getStyleSignature() {
 		return StyleSignatureBasic.of(SName.root, SName.element, SName.timingDiagram, SName.clock);
 	}
 
 	public IntricatedPoint getTimeProjection(StringBounder stringBounder, TimeTick tick) {
diff --git a/src/net/sourceforge/plantuml/timingdiagram/PlayerRobustConcise.java b/src/net/sourceforge/plantuml/timingdiagram/PlayerRobustConcise.java
index 1dc690167..a7266cfac 100644
--- a/src/net/sourceforge/plantuml/timingdiagram/PlayerRobustConcise.java
+++ b/src/net/sourceforge/plantuml/timingdiagram/PlayerRobustConcise.java
@@ -32,30 +32,31 @@
  * Original Author:  Arnaud Roques
  *
  */
 package net.sourceforge.plantuml.timingdiagram;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
 
 import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.command.Position;
 import net.sourceforge.plantuml.cucadiagram.Display;
+import net.sourceforge.plantuml.cucadiagram.Stereotype;
 import net.sourceforge.plantuml.graphic.AbstractTextBlock;
 import net.sourceforge.plantuml.graphic.StringBounder;
-import net.sourceforge.plantuml.graphic.SymbolContext;
 import net.sourceforge.plantuml.graphic.TextBlock;
 import net.sourceforge.plantuml.graphic.UDrawable;
 import net.sourceforge.plantuml.graphic.color.Colors;
 import net.sourceforge.plantuml.style.SName;
 import net.sourceforge.plantuml.style.Style;
+import net.sourceforge.plantuml.style.StyleSignature;
 import net.sourceforge.plantuml.style.StyleSignatureBasic;
 import net.sourceforge.plantuml.timingdiagram.graphic.Histogram;
 import net.sourceforge.plantuml.timingdiagram.graphic.IntricatedPoint;
 import net.sourceforge.plantuml.timingdiagram.graphic.PDrawing;
 import net.sourceforge.plantuml.timingdiagram.graphic.PlayerFrame;
@@ -73,31 +74,26 @@ public final class PlayerRobustConcise extends Player {
 
 	private String initialState;
 	private PDrawing cached;
 	private Colors initialColors;
 
-	public PlayerRobustConcise(TimingStyle type, String full, ISkinParam skinParam, TimingRuler ruler,
-			boolean compact) {
-		super(full, skinParam, ruler, compact);
+	public PlayerRobustConcise(TimingStyle type, String full, ISkinParam skinParam, TimingRuler ruler, boolean compact,
+			Stereotype stereotype) {
+		super(full, skinParam, ruler, compact, stereotype);
 		this.type = type;
 		this.suggestedHeight = 0;
 	}
 
 	@Override
-	protected StyleSignatureBasic getStyleSignature() {
+	protected StyleSignature getStyleSignature() {
 		if (type == TimingStyle.CONCISE)
-			return StyleSignatureBasic.of(SName.root, SName.element, SName.timingDiagram, SName.concise);
+			return StyleSignatureBasic.of(SName.root, SName.element, SName.timingDiagram, SName.concise).withTOBECHANGED(stereotype);
 		if (type == TimingStyle.ROBUST)
-			return StyleSignatureBasic.of(SName.root, SName.element, SName.timingDiagram, SName.robust);
+			return StyleSignatureBasic.of(SName.root, SName.element, SName.timingDiagram, SName.robust).withTOBECHANGED(stereotype);
 		throw new IllegalStateException();
 	}
 
-	@Override
-	protected SymbolContext getContextLegacy() {
-		throw new UnsupportedOperationException();
-	}
-
 	private PDrawing buildPDrawing() {
 		final Style style = getStyleSignature().getMergedStyle(skinParam.getCurrentStyleBuilder());
 		if (type == TimingStyle.CONCISE)
 			return new Ribbon(ruler, skinParam, notes, isCompact(), getTitle(), suggestedHeight, style);
 
diff --git a/src/net/sourceforge/plantuml/timingdiagram/TimeConstraint.java b/src/net/sourceforge/plantuml/timingdiagram/TimeConstraint.java
index bb68132c2..7a5015d5b 100644
--- a/src/net/sourceforge/plantuml/timingdiagram/TimeConstraint.java
+++ b/src/net/sourceforge/plantuml/timingdiagram/TimeConstraint.java
@@ -32,17 +32,17 @@
  * Original Author:  Arnaud Roques
  *
  */
 package net.sourceforge.plantuml.timingdiagram;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.awt.geom.Point2D;
 import java.util.List;
 import java.util.Objects;
 
 import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.Display;
 import net.sourceforge.plantuml.graphic.FontConfiguration;
 import net.sourceforge.plantuml.graphic.HorizontalAlignment;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.graphic.TextBlock;
diff --git a/src/net/sourceforge/plantuml/timingdiagram/TimingDiagram.java b/src/net/sourceforge/plantuml/timingdiagram/TimingDiagram.java
index ae5ac0c8c..4af1f9b28 100644
--- a/src/net/sourceforge/plantuml/timingdiagram/TimingDiagram.java
+++ b/src/net/sourceforge/plantuml/timingdiagram/TimingDiagram.java
@@ -32,11 +32,10 @@
  * Original Author:  Arnaud Roques
  *
  */
 package net.sourceforge.plantuml.timingdiagram;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.awt.geom.Rectangle2D;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.math.BigDecimal;
 import java.util.ArrayList;
@@ -49,15 +48,17 @@ import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.FileFormatOption;
 import net.sourceforge.plantuml.UmlDiagram;
 import net.sourceforge.plantuml.UmlDiagramType;
 import net.sourceforge.plantuml.UseStyle;
 import net.sourceforge.plantuml.api.ThemeStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.command.CommandExecutionResult;
 import net.sourceforge.plantuml.core.DiagramDescription;
 import net.sourceforge.plantuml.core.ImageData;
 import net.sourceforge.plantuml.core.UmlSource;
 import net.sourceforge.plantuml.cucadiagram.Display;
+import net.sourceforge.plantuml.cucadiagram.Stereotype;
 import net.sourceforge.plantuml.graphic.InnerStrategy;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.graphic.TextBlock;
 import net.sourceforge.plantuml.graphic.color.Colors;
 import net.sourceforge.plantuml.style.PName;
@@ -294,12 +295,14 @@ public class TimingDiagram extends UmlDiagram implements Clocks {
 			return UTranslate.dy(y);
 
 		throw new IllegalArgumentException();
 	}
 
-	public CommandExecutionResult createRobustConcise(String code, String full, TimingStyle type, boolean compact) {
-		final Player player = new PlayerRobustConcise(type, full, getSkinParam(), ruler, compactByDefault || compact);
+	public CommandExecutionResult createRobustConcise(String code, String full, TimingStyle type, boolean compact,
+			Stereotype stereotype) {
+		final Player player = new PlayerRobustConcise(type, full, getSkinParam(), ruler, compactByDefault || compact,
+				stereotype);
 		players.put(code, player);
 		lastPlayer = player;
 		return CommandExecutionResult.ok();
 	}
 
@@ -318,12 +321,12 @@ public class TimingDiagram extends UmlDiagram implements Clocks {
 		final PlayerAnalog player = new PlayerAnalog(full, getSkinParam(), ruler, compactByDefault);
 		players.put(code, player);
 		return player;
 	}
 
-	public CommandExecutionResult createBinary(String code, String full, boolean compact) {
-		final Player player = new PlayerBinary(full, getSkinParam(), ruler, compactByDefault);
+	public CommandExecutionResult createBinary(String code, String full, boolean compact, Stereotype stereotype) {
+		final Player player = new PlayerBinary(full, getSkinParam(), ruler, compactByDefault, stereotype);
 		players.put(code, player);
 		return CommandExecutionResult.ok();
 	}
 
 	public TimeMessage createTimeMessage(Player player1, TimeTick time1, Player player2, TimeTick time2, String label) {
diff --git a/src/net/sourceforge/plantuml/timingdiagram/TimingRuler.java b/src/net/sourceforge/plantuml/timingdiagram/TimingRuler.java
index 900a16212..f6816e9e5 100644
--- a/src/net/sourceforge/plantuml/timingdiagram/TimingRuler.java
+++ b/src/net/sourceforge/plantuml/timingdiagram/TimingRuler.java
@@ -32,11 +32,10 @@
  * Original Author:  Arnaud Roques
  *
  */
 package net.sourceforge.plantuml.timingdiagram;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.math.BigDecimal;
 import java.util.Collection;
 import java.util.Comparator;
 import java.util.Set;
 import java.util.SortedSet;
@@ -44,10 +43,11 @@ import java.util.TreeSet;
 
 import net.sourceforge.plantuml.FontParam;
 import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.UseStyle;
 import net.sourceforge.plantuml.api.ThemeStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.Display;
 import net.sourceforge.plantuml.graphic.FontConfiguration;
 import net.sourceforge.plantuml.graphic.HorizontalAlignment;
 import net.sourceforge.plantuml.graphic.StringBounder;
 import net.sourceforge.plantuml.graphic.TextBlock;
@@ -59,11 +59,10 @@ import net.sourceforge.plantuml.ugraphic.UGraphic;
 import net.sourceforge.plantuml.ugraphic.ULine;
 import net.sourceforge.plantuml.ugraphic.UStroke;
 import net.sourceforge.plantuml.ugraphic.UTranslate;
 import net.sourceforge.plantuml.ugraphic.color.HColor;
 import net.sourceforge.plantuml.ugraphic.color.HColorSet;
-import net.sourceforge.plantuml.ugraphic.color.HColorSimple;
 import net.sourceforge.plantuml.ugraphic.color.HColorUtils;
 
 public class TimingRuler {
 
 	private final SortedSet<TimeTick> times = new TreeSet<>();
diff --git a/src/net/sourceforge/plantuml/timingdiagram/command/CommandBinary.java b/src/net/sourceforge/plantuml/timingdiagram/command/CommandBinary.java
index 8b894f05f..449de6e36 100644
--- a/src/net/sourceforge/plantuml/timingdiagram/command/CommandBinary.java
+++ b/src/net/sourceforge/plantuml/timingdiagram/command/CommandBinary.java
@@ -41,10 +41,11 @@ import net.sourceforge.plantuml.command.SingleLineCommand2;
 import net.sourceforge.plantuml.command.regex.IRegex;
 import net.sourceforge.plantuml.command.regex.RegexConcat;
 import net.sourceforge.plantuml.command.regex.RegexLeaf;
 import net.sourceforge.plantuml.command.regex.RegexOptional;
 import net.sourceforge.plantuml.command.regex.RegexResult;
+import net.sourceforge.plantuml.cucadiagram.Stereotype;
 import net.sourceforge.plantuml.timingdiagram.TimingDiagram;
 
 public class CommandBinary extends SingleLineCommand2<TimingDiagram> {
 
 	public CommandBinary() {
@@ -58,20 +59,33 @@ public class CommandBinary extends SingleLineCommand2<TimingDiagram> {
 								new RegexLeaf("COMPACT", "(compact)"), //
 								RegexLeaf.spaceOneOrMore())), //
 				new RegexLeaf("binary"), //
 				RegexLeaf.spaceOneOrMore(), //
 				new RegexLeaf("FULL", "[%g]([^%g]+)[%g]"), //
+				RegexLeaf.spaceZeroOrMore(), //
+				new RegexLeaf("STEREOTYPE", "(\\<\\<.*\\>\\>)?"), //
 				RegexLeaf.spaceOneOrMore(), //
 				new RegexLeaf("as"), //
 				RegexLeaf.spaceOneOrMore(), //
-				new RegexLeaf("CODE", "([%pLN_.@]+)"), RegexLeaf.end());
+				new RegexLeaf("CODE", "([%pLN_.@]+)"), //
+				RegexLeaf.spaceZeroOrMore(), //
+				new RegexLeaf("STEREOTYPE2", "(\\<\\<.*\\>\\>)?"), //
+				RegexLeaf.spaceZeroOrMore(), //
+				RegexLeaf.end());
 	}
 
 	@Override
 	final protected CommandExecutionResult executeArg(TimingDiagram diagram, LineLocation location, RegexResult arg) {
 		final String compact = arg.get("COMPACT", 0);
 		final String code = arg.get("CODE", 0);
 		final String full = arg.get("FULL", 0);
-		return diagram.createBinary(code, full, compact != null);
+
+		Stereotype stereotype = null;
+		if (arg.get("STEREOTYPE", 0) != null)
+			stereotype = Stereotype.build(arg.get("STEREOTYPE", 0));
+		else if (arg.get("STEREOTYPE2", 0) != null)
+			stereotype = Stereotype.build(arg.get("STEREOTYPE2", 0));
+
+		return diagram.createBinary(code, full, compact != null, stereotype);
 	}
 
 }
diff --git a/src/net/sourceforge/plantuml/timingdiagram/command/CommandRobustConcise.java b/src/net/sourceforge/plantuml/timingdiagram/command/CommandRobustConcise.java
index d472d1e8b..1e8199240 100644
--- a/src/net/sourceforge/plantuml/timingdiagram/command/CommandRobustConcise.java
+++ b/src/net/sourceforge/plantuml/timingdiagram/command/CommandRobustConcise.java
@@ -41,10 +41,11 @@ import net.sourceforge.plantuml.command.SingleLineCommand2;
 import net.sourceforge.plantuml.command.regex.IRegex;
 import net.sourceforge.plantuml.command.regex.RegexConcat;
 import net.sourceforge.plantuml.command.regex.RegexLeaf;
 import net.sourceforge.plantuml.command.regex.RegexOptional;
 import net.sourceforge.plantuml.command.regex.RegexResult;
+import net.sourceforge.plantuml.cucadiagram.Stereotype;
 import net.sourceforge.plantuml.timingdiagram.TimingDiagram;
 import net.sourceforge.plantuml.timingdiagram.TimingStyle;
 
 public class CommandRobustConcise extends SingleLineCommand2<TimingDiagram> {
 
@@ -62,24 +63,35 @@ public class CommandRobustConcise extends SingleLineCommand2<TimingDiagram> {
 				RegexLeaf.spaceOneOrMore(), //
 				new RegexOptional( //
 						new RegexConcat( //
 								new RegexLeaf("FULL", "[%g]([^%g]+)[%g]"), //
 								RegexLeaf.spaceOneOrMore(), //
+								new RegexLeaf("STEREOTYPE", "(\\<\\<.*\\>\\>)?"), //
+								RegexLeaf.spaceZeroOrMore(), //
 								new RegexLeaf("as"), //
 								RegexLeaf.spaceOneOrMore())), //
 				new RegexLeaf("CODE", "([%pLN_.@]+)"), //
+				RegexLeaf.spaceZeroOrMore(), //
+				new RegexLeaf("STEREOTYPE2", "(\\<\\<.*\\>\\>)?"), //
+				RegexLeaf.spaceZeroOrMore(), //
 				RegexLeaf.end());
 	}
 
 	@Override
 	final protected CommandExecutionResult executeArg(TimingDiagram diagram, LineLocation location, RegexResult arg) {
 		final String compact = arg.get("COMPACT", 0);
 		final String code = arg.get("CODE", 0);
 		String full = arg.get("FULL", 0);
-		if (full == null) {
+		if (full == null)
 			full = code;
-		}
+
+		Stereotype stereotype = null;
+		if (arg.get("STEREOTYPE", 0) != null)
+			stereotype = Stereotype.build(arg.get("STEREOTYPE", 0));
+		else if (arg.get("STEREOTYPE2", 0) != null)
+			stereotype = Stereotype.build(arg.get("STEREOTYPE2", 0));
+
 		final TimingStyle type = TimingStyle.valueOf(arg.get("TYPE", 0).toUpperCase());
-		return diagram.createRobustConcise(code, full, type, compact != null);
+		return diagram.createRobustConcise(code, full, type, compact != null, stereotype);
 	}
 
 }
diff --git a/src/net/sourceforge/plantuml/timingdiagram/graphic/PlayerFrame.java b/src/net/sourceforge/plantuml/timingdiagram/graphic/PlayerFrame.java
index 5bee3ebec..40154bcae 100644
--- a/src/net/sourceforge/plantuml/timingdiagram/graphic/PlayerFrame.java
+++ b/src/net/sourceforge/plantuml/timingdiagram/graphic/PlayerFrame.java
@@ -32,14 +32,13 @@
  * Original Author:  Arnaud Roques
  *
  */
 package net.sourceforge.plantuml.timingdiagram.graphic;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
-
 import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.graphic.TextBlock;
 import net.sourceforge.plantuml.style.PName;
 import net.sourceforge.plantuml.style.SName;
 import net.sourceforge.plantuml.style.Style;
 import net.sourceforge.plantuml.style.StyleSignatureBasic;
diff --git a/src/net/sourceforge/plantuml/timingdiagram/graphic/Ribbon.java b/src/net/sourceforge/plantuml/timingdiagram/graphic/Ribbon.java
index c43e80050..3367b8187 100644
--- a/src/net/sourceforge/plantuml/timingdiagram/graphic/Ribbon.java
+++ b/src/net/sourceforge/plantuml/timingdiagram/graphic/Ribbon.java
@@ -32,19 +32,19 @@
  * Original Author:  Arnaud Roques
  *
  */
 package net.sourceforge.plantuml.timingdiagram.graphic;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.awt.geom.Point2D;
 import java.util.ArrayList;
 import java.util.List;
 
 import net.sourceforge.plantuml.Dimension2DDouble;
 import net.sourceforge.plantuml.FontParam;
 import net.sourceforge.plantuml.ISkinParam;
 import net.sourceforge.plantuml.UseStyle;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.command.Position;
 import net.sourceforge.plantuml.cucadiagram.Display;
 import net.sourceforge.plantuml.graphic.AbstractTextBlock;
 import net.sourceforge.plantuml.graphic.FontConfiguration;
 import net.sourceforge.plantuml.graphic.HorizontalAlignment;
diff --git a/src/net/sourceforge/plantuml/timingdiagram/graphic/TimeArrow.java b/src/net/sourceforge/plantuml/timingdiagram/graphic/TimeArrow.java
index f3e5d958b..12f6fe4dd 100644
--- a/src/net/sourceforge/plantuml/timingdiagram/graphic/TimeArrow.java
+++ b/src/net/sourceforge/plantuml/timingdiagram/graphic/TimeArrow.java
@@ -32,14 +32,14 @@
  * Original Author:  Arnaud Roques
  *
  */
 package net.sourceforge.plantuml.timingdiagram.graphic;
 
-import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import java.awt.geom.Point2D;
 
 import net.sourceforge.plantuml.ISkinSimple;
+import net.sourceforge.plantuml.awt.geom.Dimension2D;
 import net.sourceforge.plantuml.cucadiagram.Display;
 import net.sourceforge.plantuml.cucadiagram.WithLinkType;
 import net.sourceforge.plantuml.graphic.FontConfiguration;
 import net.sourceforge.plantuml.graphic.HorizontalAlignment;
 import net.sourceforge.plantuml.graphic.TextBlock;
diff --git a/src/net/sourceforge/plantuml/ugraphic/UImageSvg.java b/src/net/sourceforge/plantuml/ugraphic/UImageSvg.java
index f122518b5..6152a05ff 100644
--- a/src/net/sourceforge/plantuml/ugraphic/UImageSvg.java
+++ b/src/net/sourceforge/plantuml/ugraphic/UImageSvg.java
@@ -53,10 +53,14 @@ public class UImageSvg implements UShape {
 
 	public String getMD5Hex() {
 		return SignatureUtils.getMD5Hex(svg);
 	}
 
+	public boolean containsXlink() {
+		return svg.contains("xmlns:xlink=\"http://www.w3.org/1999/xlink\"");
+	}
+
 	public String getSvg(boolean raw) {
 		String result = svg;
 		if (raw)
 			return result;
 
diff --git a/src/net/sourceforge/plantuml/ugraphic/color/HColorUtils.java b/src/net/sourceforge/plantuml/ugraphic/color/HColorUtils.java
index cafbf53a2..6e3e81518 100644
--- a/src/net/sourceforge/plantuml/ugraphic/color/HColorUtils.java
+++ b/src/net/sourceforge/plantuml/ugraphic/color/HColorUtils.java
@@ -117,52 +117,52 @@ public class HColorUtils {
 		COL_BBBBBB = set.getColorOrWhite("#BBBBBB");
 
 	}
 
 	public static HColor noGradient(HColor color) {
-		if (color instanceof HColorGradient) {
+		if (color instanceof HColorGradient)
 			return ((HColorGradient) color).getColor1();
-		}
+
 		return color;
 	}
 
 	public static UChange changeBack(UGraphic ug) {
 		final HColor color = ug.getParam().getColor();
-		if (color == null) {
+		if (color == null)
 			return new HColorNone().bg();
-		}
+
 		return color.bg();
 	}
 
 	final private static HColorSimple TRANSPARENT = new HColorSimple(new Color(0, 0, 0, 0), false);
 
 	public static HColor transparent() {
 		return TRANSPARENT;
 	}
 
 	public static boolean isTransparent(HColor back) {
-		if (back == TRANSPARENT) {
+		if (back == TRANSPARENT)
 			return true;
-		}
-		if (back instanceof HColorBackground && ((HColorBackground) back).getBack() == TRANSPARENT) {
+
+		if (back instanceof HColorBackground && ((HColorBackground) back).getBack() == TRANSPARENT)
 			return true;
-		}
-		if (back instanceof HColorSimple && ((HColorSimple) back).isTransparent()) {
+
+		if (back instanceof HColorSimple && ((HColorSimple) back).isTransparent())
 			return true;
-		}
+
 		return false;
 	}
 
 	public static HColor unlinear(HColor color1, HColor color2, int completion) {
-		if (completion == 0) {
+		if (completion == 0)
 			return color1;
-		}
-		if (completion == 100) {
+
+		if (completion == 100)
 			return color2;
-		}
-		if (color1 instanceof HColorSimple && color2 instanceof HColorSimple) {
+
+		if (color1 instanceof HColorSimple && color2 instanceof HColorSimple)
 			return HColorSimple.unlinear((HColorSimple) color1, (HColorSimple) color2, completion);
-		}
+
 		return color1;
 	}
 
 }
diff --git a/src/net/sourceforge/plantuml/ugraphic/hand/UPathHand.java b/src/net/sourceforge/plantuml/ugraphic/hand/UPathHand.java
index f48f85c21..a276629b7 100644
--- a/src/net/sourceforge/plantuml/ugraphic/hand/UPathHand.java
+++ b/src/net/sourceforge/plantuml/ugraphic/hand/UPathHand.java
@@ -73,15 +73,19 @@ public class UPathHand {
 			} else if (type == USegmentType.SEG_LINETO) {
 				final double x = segment.getCoord()[0];
 				final double y = segment.getCoord()[1];
 				final HandJiggle jiggle = new HandJiggle(last.getX(), last.getY(), defaultVariation, rnd);
 				jiggle.lineTo(x, y);
-				for (USegment seg2 : jiggle.toUPath()) {
-					if (seg2.getSegmentType() == USegmentType.SEG_LINETO) {
+				for (USegment seg2 : jiggle.toUPath())
+					if (seg2.getSegmentType() == USegmentType.SEG_LINETO)
 						result.lineTo(seg2.getCoord()[0], seg2.getCoord()[1]);
-					}
-				}
+
+				last = new Point2D.Double(x, y);
+			} else if (type == USegmentType.SEG_ARCTO) {
+				final double x = segment.getCoord()[5];
+				final double y = segment.getCoord()[6];
+				result.lineTo(x, y);
 				last = new Point2D.Double(x, y);
 			} else {
 				this.path = source;
 				return;
 			}
diff --git a/src/net/sourceforge/plantuml/version/Version.java b/src/net/sourceforge/plantuml/version/Version.java
index a587da53c..2baab756a 100644
--- a/src/net/sourceforge/plantuml/version/Version.java
+++ b/src/net/sourceforge/plantuml/version/Version.java
@@ -42,11 +42,11 @@ import net.sourceforge.plantuml.security.SURL;
 public class Version {
 
 	private static final int MAJOR_SEPARATOR = 1000000;
 
 	public static int version() {
-		return 1202204;
+		return 1202205;
 	}
 
 	public static int versionPatched() {
 		if (beta() != 0) {
 			return version() + 1;
@@ -78,11 +78,11 @@ public class Version {
 		}
 		return sb.toString();
 	}
 
 	public static int beta() {
-		final int beta = 1;
+		final int beta = 0;
 		return beta;
 	}
 
 	public static String etag() {
 		return Integer.toString(version() % MAJOR_SEPARATOR - 201670, 36) + Integer.toString(beta(), 36);
@@ -91,11 +91,11 @@ public class Version {
 	public static String turningId() {
 		return etag();
 	}
 
 	public static long compileTime() {
-		return 1649510957985L;
+		return 1651316152000L;
 	}
 
 	public static String compileTimeString() {
 		if (beta() != 0) {
 			return "Unknown compile time";
diff --git a/stdlib/classy-abx.repx b/stdlib/classy-abx.repx
new file mode 100644
index 000000000..8a3745247
Binary files /dev/null and b/stdlib/classy-abx.repx differ
diff --git a/stdlib/classy-c4-abx.repx b/stdlib/classy-c4-abx.repx
new file mode 100644
index 000000000..ba2438fc2
Binary files /dev/null and b/stdlib/classy-c4-abx.repx differ
diff --git a/stdlib/classy-c4-dex.repx b/stdlib/classy-c4-dex.repx
new file mode 100644
index 000000000..1c8a0e797
--- /dev/null
+++ b/stdlib/classy-c4-dex.repx
@@ -0,0 +1 @@
+;
\ No newline at end of file
diff --git a/stdlib/classy-dex.repx b/stdlib/classy-dex.repx
new file mode 100644
index 000000000..1c8a0e797
--- /dev/null
+++ b/stdlib/classy-dex.repx
@@ -0,0 +1 @@
+;
\ No newline at end of file
diff --git a/stdlib/domainstory-abx.repx b/stdlib/domainstory-abx.repx
new file mode 100644
index 000000000..31fedd15c
Binary files /dev/null and b/stdlib/domainstory-abx.repx differ
diff --git a/stdlib/domainstory-dex.repx b/stdlib/domainstory-dex.repx
new file mode 100644
index 000000000..1c8a0e797
--- /dev/null
+++ b/stdlib/domainstory-dex.repx
@@ -0,0 +1 @@
+;
\ No newline at end of file
diff --git a/stdlib/home.repx b/stdlib/home.repx
index 034b9e7a7..94f621da5 100644
--- a/stdlib/home.repx
+++ b/stdlib/home.repx
@@ -1,14 +1,17 @@
-azure
+archimate
 aws
 awslib
+azure
+c4
+classy
+classy-c4
 cloudinsight
 cloudogu
-tupadr3
+domainstory
+elastic
+kubernetes
+logos
 material
 office
-c4
 osa
-kubernetes
-logos
-elastic
-archimate
\ No newline at end of file
+tupadr3

Vulnerable code: 		<javac target="1.7" source="1.7" srcdir="src" destdir="build" debug="on" />
      LineThickness 2
		key = key.replaceAll("_|\\.|\\s", "");
			final UStroke stroke = Cluster.getStrokeInternal(group, skinParam, style);
	private static final Pattern PATTERN_USERINFO = Pattern.compile("(^https?://)([-_:0-9a-zA-Z]+@)([^@]*)");
import net.sourceforge.plantuml.UseStyle;
					tmp.add(ss.add(name));
		addConvert(cleanName + "StereotypeFontColor", PName.FontColor, SName.stereotype, sname);
			this.stereo = st.hasMoreTokens() ? st.nextToken() : null;
				String names = mKeyNames.group(1).replace(" ", "");
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.skin.rose.Rose;
import net.sourceforge.plantuml.style.StyleSignature;
	public void drawU(UGraphic ug, UmlDiagramType umlDiagramType, ISkinParam skinParam2) {
		Style style = null;
		final double rounded;
		final double diagonalCorner;
		final double shadowing;
		if (UseStyle.useBetaStyle()) {
			final USymbol uSymbol = group.getUSymbol() == null ? USymbols.PACKAGE : group.getUSymbol();
			final StyleSignatureBasic tmp = getDefaultStyleDefinition(umlDiagramType.getStyleName(), uSymbol);
			style = tmp.withTOBECHANGED(group.getStereotype()).getMergedStyle(skinParam.getCurrentStyleBuilder());
			shadowing = style.value(PName.Shadowing).asDouble();
			if (group.getColors().getColor(ColorType.LINE) != null)
				borderColor = group.getColors().getColor(ColorType.LINE);
			else
				borderColor = style.value(PName.LineColor).asColor(skinParam2.getThemeStyle(),
						skinParam2.getIHtmlColorSet());
			rounded = style.value(PName.RoundCorner).asDouble();
			diagonalCorner = style.value(PName.DiagonalCorner).asDouble();

		} else {
			if (group.getUSymbol() == null)
				shadowing = skinParam2.shadowing2(group.getStereotype(), USymbols.PACKAGE.getSkinParameter()) ? 3 : 0;
			else
				shadowing = skinParam2.shadowing2(group.getStereotype(), group.getUSymbol().getSkinParameter()) ? 3 : 0;

			rounded = IEntityImage.CORNER;
			if (umlDiagramType == UmlDiagramType.STATE)
				borderColor = getColor(ColorParam.stateBorder, skinParam, group.getStereotype());
			else if (umlDiagramType == UmlDiagramType.ACTIVITY)
				borderColor = getColor(ColorParam.packageBorder, skinParam, group.getStereotype());
			else
				borderColor = getColor(ColorParam.packageBorder, skinParam, group.getStereotype());
			diagonalCorner = 0;

		}
				UStroke strokeForState = getDefaultStyleDefinition(SName.stateDiagram, null)
						.getMergedStyle(skinParam.getCurrentStyleBuilder()).getStroke();
				if (group.getColors().getSpecificLineStroke() != null)
					strokeForState = group.getColors().getSpecificLineStroke();

				if (group.getColors().getColor(ColorType.LINE) != null)
					borderColor = group.getColors().getColor(ColorType.LINE);

				drawUState(ug, borderColor, skinParam2, strokeForState, umlDiagramType, rounded, shadowing);
				packageStyle = skinParam2.packageStyle();
				final HColor tmp = skinParam2.getHtmlColor(border, group.getStereotype(), false);
			final UStroke stroke;
			if (UseStyle.useBetaStyle())
				stroke = getStrokeInternal(group, skinParam2, style);
			else
				stroke = getStrokeInternal(group, skinParam2, null);
			backColor = getBackColor(backColor, skinParam2, group.getStereotype(), umlDiagramType.getStyleName(),
				final double roundCorner;
				if (UseStyle.useBetaStyle())
					roundCorner = rounded;
				else
					roundCorner = group.getUSymbol() == null ? 0
							: group.getUSymbol().getSkinParameter().getRoundCorner(skinParam, group.getStereotype());

				decoration.drawU(ug, backColor, borderColor, shadowing, roundCorner,
						skinParam2.getHorizontalAlignment(AlignmentParam.packageTitleAlignment, null, false, null),
						skinParam2.getStereotypeAlignment(), diagonalCorner);
	static public UStroke getStrokeInternal(IGroup group, ISkinParam skinParam, Style style) {
		if (style != null)
			return style.getStroke();

		if (group.getUSymbol() != null && group.getUSymbol() != USymbols.PACKAGE)
			return group.getUSymbol().getSkinParameter().getStroke(skinParam, group.getStereotype());

		return GeneralImageBuilder.getForcedStroke(group.getStereotype(), skinParam);
	private HColor getColorLegacy(ISkinParam skinParam, ColorParam colorParam, Stereotype stereo) {
		return new Rose().getHtmlColor(skinParam, stereo, colorParam);
	private void drawUState(UGraphic ug, HColor borderColor, ISkinParam skinParam2, UStroke stroke,
			UmlDiagramType umlDiagramType, double rounded, double shadowing) {
		HColor stateBack = getBackColor(umlDiagramType, styleGroup);
		if (UseStyle.useBetaStyle() == false && stateBack == null)
			stateBack = getColorLegacy(skinParam2, ColorParam.stateBackground, group.getStereotype());
		final HColor background;
		if (UseStyle.useBetaStyle() == false)
			background = getColorLegacy(skinParam2, ColorParam.background, null);
		else
			background = stateBack;
		final TextBlock attribute = GeneralImageBuilder.stateHeader(group, styleGroup, skinParam2);
				attributeHeight + (attributeHeight > 0 ? IEntityImage.MARGIN : 0), borderColor, stateBack, background,
		if (UseStyle.useBetaStyle())
			return style.value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());

		final USymbol sym = group.getUSymbol() == null ? USymbols.PACKAGE : group.getUSymbol();
		final ColorParam backparam = umlDiagramType == UmlDiagramType.ACTIVITY ? ColorParam.partitionBackground
				: sym.getColorParamBack();
		final HColor c1 = skinParam.getHtmlColor(backparam, stereo, false);
		if (c1 != null)
			return c1;

		if (parentCluster == null)
			return null;

		return parentCluster.getBackColor(umlDiagramType, style);
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.style.StyleSignature;
		final FontConfiguration fontConfiguration;
		if (UseStyle.useBetaStyle()) {
			final SName sname = dotData.getUmlDiagramType().getStyleName();
			final StyleSignatureBasic signature;
			final USymbol uSymbol = g.getUSymbol();
			if (uSymbol == USymbols.RECTANGLE)
				signature = StyleSignatureBasic.of(SName.root, SName.element, sname, uSymbol.getSName(), SName.title);
			else
				signature = StyleSignatureBasic.of(SName.root, SName.element, sname, SName.title);
			final Style style = signature //
					.withTOBECHANGED(g.getStereotype()) //
					.with(g.getStereostyles()) //
					.getMergedStyle(skinParam.getCurrentStyleBuilder());
			fontConfiguration = style.getFontConfiguration(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());
		} else
			fontConfiguration = g.getFontConfigurationForTitle(skinParam);
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.ColorParam;
import net.sourceforge.plantuml.FontParam;
import net.sourceforge.plantuml.UseStyle;
import net.sourceforge.plantuml.skin.rose.Rose;
		return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state).withTOBECHANGED(group.getStereotype())
				.getMergedStyle(diagram.getSkinParam().getCurrentStyleBuilder());
		final FontConfiguration fontConfiguration;
		final double rounded;
		double shadowing = 0;

		if (UseStyle.useBetaStyle()) {
			rounded = getStyleState().value(PName.RoundCorner).asDouble();
			shadowing = getStyleState().value(PName.Shadowing).asDouble();
			fontConfiguration = getStyleStateHeader().getFontConfiguration(skinParam.getThemeStyle(),
					skinParam.getIHtmlColorSet());
		} else {
			rounded = IEntityImage.CORNER;
			fontConfiguration = FontConfiguration.create(skinParam, FontParam.STATE, group.getStereotype());
			if (skinParam.shadowing(group.getStereotype()))
				shadowing = 3.0;
		}

			if (UseStyle.useBetaStyle())
				borderColor = getStyleState().value(PName.LineColor).asColor(skinParam.getThemeStyle(),
						skinParam.getIHtmlColorSet());
			else
				borderColor = getColor(ColorParam.stateBorder, group.getStereotype());
		final HColor tmp = group.getColors().getColor(ColorType.BACK);
		final HColor backColor;
		if (tmp == null)
			if (UseStyle.useBetaStyle())
				backColor = getStyleState().value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(),
						skinParam.getIHtmlColorSet());
			else
				backColor = getColor(ColorParam.stateBackground, stereo);
		else
			backColor = tmp;
			if (UseStyle.useBetaStyle())
				stroke = getStyleState().getStroke();
			else
				stroke = new UStroke(1.5);
	private final Rose rose = new Rose();

	private HColor getColor(ColorParam colorParam, Stereotype stereo) {
		final ISkinParam skinParam = diagram.getSkinParam();
		return rose.getHtmlColor(skinParam, stereo, colorParam);
	}
import net.sourceforge.plantuml.awt.geom.Dimension2D;


import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;

		if (dim.getWidth() == 0) {
		}
		ug = ug.apply(backColor.bg()).apply(borderColor);
		rect.setDeltaShadow(shadowing);
		ug.apply(stroke).draw(rect);

		final double yLine = titleHeight + attributeHeight;
		ug = ug.apply(imgBackcolor.bg());
		final double thickness = stroke.getThickness();
		final URectangle inner = new URectangle(dim.getWidth() - 4 * thickness,
				dim.getHeight() - titleHeight - 4 * thickness - attributeHeight).rounded(rounded);
		ug.apply(imgBackcolor).apply(new UTranslate(2 * thickness, yLine + 2 * thickness)).draw(inner);
		if (titleHeight > 0) {
			ug.apply(stroke).apply(UTranslate.dy(yLine)).draw(ULine.hline(dim.getWidth()));
		}
		if (attributeHeight > 0) {
			ug.apply(stroke).apply(UTranslate.dy(yLine - attributeHeight)).draw(ULine.hline(dim.getWidth()));
		}
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.style.StyleSignature;
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.style.StyleSignature;
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.style.StyleSignature;
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import java.util.EnumMap;
import java.util.Map;

import net.sourceforge.plantuml.ugraphic.UGroupType;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.style.StyleSignature;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import java.util.Collection;
import java.util.LinkedHashSet;
			final String svgHeader = "<svg height=\"" + (int) (image.getHeight() * scale) + "\" width=\""
					+ (int) (image.getWidth() * scale) + "\" xmlns=\"http://www.w3.org/2000/svg\" >";
		if (states.length == 0) {
		}
		if (colors == null || colors.getColor(ColorType.BACK) == null) {
			if (UseStyle.useBetaStyle() == false)
				return HColorUtils.COL_D7E0F2;

		}
		if (colors == null || colors.getColor(ColorType.LINE) == null) {
			if (UseStyle.useBetaStyle() == false)
				return HColorUtils.COL_038048;

		}
				.withStroke(new UStroke(1.5));
import net.sourceforge.plantuml.FontParam;
import net.sourceforge.plantuml.UseStyle;
import net.sourceforge.plantuml.ugraphic.color.HColorUtils;
	public Player(String title, ISkinParam skinParam, TimingRuler ruler, boolean compact) {
	protected abstract StyleSignatureBasic getStyleSignature();

	protected abstract SymbolContext getContextLegacy();
//	private StyleSignature getStyleSignature() {
//		return StyleSignature.of(SName.root, SName.element, SName.timingDiagram);
//	}

		if (UseStyle.useBetaStyle() == false)
			return FontConfiguration.create(skinParam, FontParam.TIMING, null);
		return FontConfiguration.create(skinParam, StyleSignatureBasic.of(SName.root, SName.element, SName.timingDiagram)
				.getMergedStyle(skinParam.getCurrentStyleBuilder()));
		if (UseStyle.useBetaStyle() == false)
			return getContextLegacy();
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.graphic.SymbolContext;
import net.sourceforge.plantuml.ugraphic.UStroke;
import net.sourceforge.plantuml.ugraphic.color.HColorUtils;
		super(code, skinParam, ruler, compact);
	@Override
	protected SymbolContext getContextLegacy() {
		return new SymbolContext(HColorUtils.COL_D7E0F2, HColorUtils.COL_038048).withStroke(new UStroke(1.5));
	}

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.graphic.SymbolContext;
import net.sourceforge.plantuml.style.PName;
import net.sourceforge.plantuml.style.Style;
import net.sourceforge.plantuml.ugraphic.UStroke;
import net.sourceforge.plantuml.ugraphic.color.HColor;
import net.sourceforge.plantuml.ugraphic.color.HColorUtils;
	private final Style style;
	public PlayerBinary(String code, ISkinParam skinParam, TimingRuler ruler, boolean compact) {
		super(code, skinParam, ruler, compact);
		this.style = getStyleSignature().getMergedStyle(skinParam.getCurrentStyleBuilder());
	protected StyleSignatureBasic getStyleSignature() {
		return StyleSignatureBasic.of(SName.root, SName.element, SName.timingDiagram, SName.binary);
	}

	@Override
	protected SymbolContext getContextLegacy() {

		if (UseStyle.useBetaStyle() == false)
			return new SymbolContext(HColorUtils.COL_D7E0F2, HColorUtils.COL_038048).withStroke(new UStroke(2));

		final HColor lineColor = style.value(PName.LineColor).asColor(skinParam.getThemeStyle(),
				skinParam.getIHtmlColorSet());
		final HColor backgroundColor = style.value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(),
				skinParam.getIHtmlColorSet());

		return new SymbolContext(backgroundColor, lineColor).withStroke(getStroke());

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.FontParam;
import net.sourceforge.plantuml.UseStyle;
import net.sourceforge.plantuml.graphic.FontConfiguration;
import net.sourceforge.plantuml.graphic.SymbolContext;
import net.sourceforge.plantuml.style.Style;
import net.sourceforge.plantuml.ugraphic.UStroke;
import net.sourceforge.plantuml.ugraphic.color.HColorUtils;
		super(title, skinParam, ruler, compact);
	@Override
	protected SymbolContext getContextLegacy() {
		return new SymbolContext(HColorUtils.COL_D7E0F2, HColorUtils.COL_038048).withStroke(new UStroke(1.5));
	}

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.graphic.SymbolContext;
	public PlayerRobustConcise(TimingStyle type, String full, ISkinParam skinParam, TimingRuler ruler,
			boolean compact) {
		super(full, skinParam, ruler, compact);
	protected StyleSignatureBasic getStyleSignature() {
			return StyleSignatureBasic.of(SName.root, SName.element, SName.timingDiagram, SName.concise);
			return StyleSignatureBasic.of(SName.root, SName.element, SName.timingDiagram, SName.robust);
	@Override
	protected SymbolContext getContextLegacy() {
		throw new UnsupportedOperationException();
	}

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
	public CommandExecutionResult createRobustConcise(String code, String full, TimingStyle type, boolean compact) {
		final Player player = new PlayerRobustConcise(type, full, getSkinParam(), ruler, compactByDefault || compact);
	public CommandExecutionResult createBinary(String code, String full, boolean compact) {
		final Player player = new PlayerBinary(full, getSkinParam(), ruler, compactByDefault);
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.ugraphic.color.HColorSimple;
				new RegexLeaf("CODE", "([%pLN_.@]+)"), RegexLeaf.end());
		return diagram.createBinary(code, full, compact != null);
		if (full == null) {
		}
		return diagram.createRobustConcise(code, full, type, compact != null);
import net.sourceforge.plantuml.awt.geom.Dimension2D;

import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
		if (color instanceof HColorGradient) {
		}
		if (color == null) {
		}
		if (back == TRANSPARENT) {
		}
		if (back instanceof HColorBackground && ((HColorBackground) back).getBack() == TRANSPARENT) {
		}
		if (back instanceof HColorSimple && ((HColorSimple) back).isTransparent()) {
		}
		if (completion == 0) {
		}
		if (completion == 100) {
		}
		if (color1 instanceof HColorSimple && color2 instanceof HColorSimple) {
		}
				for (USegment seg2 : jiggle.toUPath()) {
					if (seg2.getSegmentType() == USegmentType.SEG_LINETO) {
					}
				}
		return 1202204;
		final int beta = 1;
		return 1649510957985L;
azure
tupadr3
c4
kubernetes
logos
elastic
archimate
Fixed code: 		<javac target="1.8" source="1.8" srcdir="src" destdir="build" debug="on" />
      LineThickness 1.5
componentDiagram {
  node, rectangle {
    LineColor black
    LineThickness 1.5
  }
}


      LineThickness 1.5
		key = key.replaceAll("_|\\.", "");
			final UStroke stroke = Cluster.getStrokeInternal(group, style);
	private static final Pattern PATTERN_USERINFO = Pattern.compile("(^https?://)([-_0-9a-zA-Z]+@)([^@]*)");
					tmp.add(ss.add(name.trim()));
		
		
//		addConvert("nodeStereotypeFontSize", PName.FontSize, SName.node, SName.stereotype);
//		addConvert("sequenceStereotypeFontSize", PName.FontSize, SName.stereotype);
//		addConvert("sequenceStereotypeFontStyle", PName.FontStyle, SName.stereotype);
//		addConvert("sequenceStereotypeFontColor", PName.FontColor, SName.stereotype);
//		addConvert("sequenceStereotypeFontName", PName.FontName, SName.stereotype);

		addConvert(cleanName + "Shadowing", PName.Shadowing, sname);
		
		addConvert(cleanName + "StereotypeFontSize", PName.FontSize, SName.stereotype, sname);
		addConvert(cleanName + "StereotypeFontStyle", PName.FontStyle, SName.stereotype, sname);
		addConvert(cleanName + "StereotypeFontColor", PName.FontColor, SName.stereotype, sname);
		addConvert(cleanName + "StereotypeFontName", PName.FontName, SName.stereotype, sname);

			this.stereo = st.hasMoreTokens() ? st.nextToken().trim() : null;
		if (key.endsWith("shadowing")) {
			if (value.equalsIgnoreCase("false"))
				value = "0";
			else if (value.equalsIgnoreCase("true"))
				value = "3";
		}
				String names = mKeyNames.group(1);
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.style.StyleSignature;
	public void drawU(UGraphic ug, UmlDiagramType umlDiagramType, ISkinParam skinParam2unused) {
		final USymbol uSymbol = group.getUSymbol() == null ? USymbols.PACKAGE : group.getUSymbol();
		Style style = getDefaultStyleDefinition(umlDiagramType.getStyleName(), uSymbol)
				.withTOBECHANGED(group.getStereotype()).getMergedStyle(skinParam.getCurrentStyleBuilder());
		final double shadowing = style.value(PName.Shadowing).asDouble();
		if (group.getColors().getColor(ColorType.LINE) != null)
			borderColor = group.getColors().getColor(ColorType.LINE);
		else
			borderColor = style.value(PName.LineColor).asColor(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());
		final double rounded = style.value(PName.RoundCorner).asDouble();
		final double diagonalCorner = style.value(PName.DiagonalCorner).asDouble();
				drawUState(ug, umlDiagramType, rounded, shadowing);
				packageStyle = skinParam.packageStyle();
				final HColor tmp = skinParam.getHtmlColor(border, group.getStereotype(), false);
			final UStroke stroke = getStrokeInternal(group, style);
			backColor = getBackColor(backColor, skinParam, group.getStereotype(), umlDiagramType.getStyleName(),
				decoration.drawU(ug, backColor, borderColor, shadowing, rounded,
						skinParam.getHorizontalAlignment(AlignmentParam.packageTitleAlignment, null, false, null),
						skinParam.getStereotypeAlignment(), diagonalCorner);
	static public UStroke getStrokeInternal(IGroup group, Style style) {
		return style.getStroke();
	// GroupPngMakerState
	private Style getStyleStateHeader() {
		return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state, SName.header)
				.withTOBECHANGED(group.getStereotype()).getMergedStyle(skinParam.getCurrentStyleBuilder());
	private Style getStyleState() {
		return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state)
				.withTOBECHANGED(group.getStereotype()).getMergedStyle(skinParam.getCurrentStyleBuilder());
	}
	// GroupPngMakerState

	private void drawUState(UGraphic ug, UmlDiagramType umlDiagramType, double rounded, double shadowing) {
		HColor borderColor = group.getColors().getColor(ColorType.LINE);
		if (borderColor == null)
			borderColor = getStyleState().value(PName.LineColor).asColor(skinParam.getThemeStyle(),
					skinParam.getIHtmlColorSet());
		HColor backColor = group.getColors().getColor(ColorType.BACK);
		if (backColor == null)
			backColor = getStyleState().value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(),
					skinParam.getIHtmlColorSet());

		final HColor imgBackcolor = getBackColor(umlDiagramType, styleGroup);
		final TextBlock attribute = GeneralImageBuilder.stateHeader(group, styleGroup, skinParam);

		UStroke stroke = group.getColors().getSpecificLineStroke();
		if (stroke == null)
			stroke = getStyleState().getStroke();

				attributeHeight + (attributeHeight > 0 ? IEntityImage.MARGIN : 0), borderColor, backColor, imgBackcolor,
		return style.value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());

//		final USymbol sym = group.getUSymbol() == null ? USymbols.PACKAGE : group.getUSymbol();
//		final ColorParam backparam = umlDiagramType == UmlDiagramType.ACTIVITY ? ColorParam.partitionBackground
//				: sym.getColorParamBack();
//		final HColor c1 = skinParam.getHtmlColor(backparam, stereo, false);
//		if (c1 != null)
//			return c1;
//
//		if (parentCluster == null)
//			return null;
//
//		return parentCluster.getBackColor(umlDiagramType, style);
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.style.StyleSignature;
		final SName sname = dotData.getUmlDiagramType().getStyleName();
		final StyleSignatureBasic signature;
		final USymbol uSymbol = g.getUSymbol();
		if (g.getGroupType() == GroupType.STATE)
			signature = StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state,
					SName.header);
		else if (uSymbol == USymbols.RECTANGLE)
			signature = StyleSignatureBasic.of(SName.root, SName.element, sname, uSymbol.getSName(), SName.title);
		else
			signature = StyleSignatureBasic.of(SName.root, SName.element, sname, SName.title);

		final Style style = signature //
				.withTOBECHANGED(g.getStereotype()) //
				.with(g.getStereostyles()) //
				.getMergedStyle(skinParam.getCurrentStyleBuilder());

		final FontConfiguration fontConfiguration = style.getFontConfiguration(skinParam.getThemeStyle(),
				skinParam.getIHtmlColorSet());
import net.sourceforge.plantuml.awt.geom.Dimension2D;
		return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state)
				.withTOBECHANGED(group.getStereotype()).getMergedStyle(diagram.getSkinParam().getCurrentStyleBuilder());
		final double rounded = getStyleState().value(PName.RoundCorner).asDouble();
		final double shadowing = getStyleState().value(PName.Shadowing).asDouble();
		final FontConfiguration fontConfiguration = getStyleStateHeader()
				.getFontConfiguration(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());
			borderColor = getStyleState().value(PName.LineColor).asColor(skinParam.getThemeStyle(),
					skinParam.getIHtmlColorSet());
		HColor backColor = group.getColors().getColor(ColorType.BACK);
		if (backColor == null)
			backColor = getStyleState().value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(),
					skinParam.getIHtmlColorSet());
			stroke = getStyleState().getStroke();
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.ugraphic.UPath;
import net.sourceforge.plantuml.ugraphic.UShape;
import net.sourceforge.plantuml.ugraphic.color.HColorUtils;
		if (dim.getWidth() == 0)

		ug = ug.apply(backColor.bg()).apply(borderColor).apply(stroke);
		if (shadowing > 0) {
			rect.setDeltaShadow(shadowing);
			ug.apply(HColorUtils.transparent().bg()).draw(rect);
			rect.setDeltaShadow(0);
			
		}
		final double headerHeight = titleHeight + attributeHeight;
		new RoundedNorth(dim.getWidth(), headerHeight, backColor, rounded).drawU(ug);
		new RoundedSouth(dim.getWidth(), dim.getHeight() - headerHeight, imgBackcolor, rounded)
				.drawU(ug.apply(UTranslate.dy(headerHeight)));
		ug.apply(HColorUtils.transparent().bg()).draw(rect);
		if (headerHeight > 0)
			ug.apply(UTranslate.dy(headerHeight)).draw(ULine.hline(dim.getWidth()));
		if (attributeHeight > 0)
			ug.apply(UTranslate.dy(titleHeight)).draw(ULine.hline(dim.getWidth()));
/* ========================================================================
 * PlantUML : a free UML diagram generator
 * ========================================================================
 *
 * (C) Copyright 2009-2023, Arnaud Roques
 *
 * Project Info:  http://plantuml.com
 * 
 * If you like this project or if you find it useful, you can support us at:
 * 
 * http://plantuml.com/patreon (only 1$ per month!)
 * http://plantuml.com/paypal
 * 
 * This file is part of PlantUML.
 *
 * PlantUML is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * PlantUML distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
 * License for more details.
 *
 * You should have received a copy of the GNU General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
 * USA.
 *
 *
 * Original Author:  Arnaud Roques
 * 
 *
 */
package net.sourceforge.plantuml.svek;

import net.sourceforge.plantuml.graphic.UDrawable;
import net.sourceforge.plantuml.ugraphic.UGraphic;
import net.sourceforge.plantuml.ugraphic.UPath;
import net.sourceforge.plantuml.ugraphic.URectangle;
import net.sourceforge.plantuml.ugraphic.UShape;
import net.sourceforge.plantuml.ugraphic.UStroke;
import net.sourceforge.plantuml.ugraphic.color.HColor;
import net.sourceforge.plantuml.ugraphic.color.HColorUtils;

public final class RoundedNorth implements UDrawable {

	private final double width;
	private final double height;
	private final HColor backColor;
	private final double rounded;

	public RoundedNorth(double width, double height, HColor backColor, double rounded) {
		if (width == 0)
			throw new IllegalArgumentException();
		if (height == 0)
			throw new IllegalArgumentException();

		this.width = width;
		this.height = height;
		this.rounded = rounded;
		this.backColor = backColor;
	}

	public void drawU(UGraphic ug) {
		if (HColorUtils.isTransparent(backColor))
			return;

		final UShape header;
		if (rounded == 0) {
			header = new URectangle(width, height);
		} else {
			final UPath path = new UPath();
			path.moveTo(rounded / 2, 0);
			path.lineTo(width - rounded / 2, 0);
			path.arcTo(rounded / 2, rounded / 2, 0, 0, 1, width, rounded / 2);
			path.lineTo(width, height);
			path.lineTo(0, height);
			path.lineTo(0, rounded / 2);
			path.arcTo(rounded / 2, rounded / 2, 0, 0, 1, rounded / 2, 0);
			path.closePath();
			header = path;
		}
		ug.apply(new UStroke()).apply(backColor).apply(backColor.bg()).draw(header);

	}
}
/* ========================================================================
 * PlantUML : a free UML diagram generator
 * ========================================================================
 *
 * (C) Copyright 2009-2023, Arnaud Roques
 *
 * Project Info:  http://plantuml.com
 * 
 * If you like this project or if you find it useful, you can support us at:
 * 
 * http://plantuml.com/patreon (only 1$ per month!)
 * http://plantuml.com/paypal
 * 
 * This file is part of PlantUML.
 *
 * PlantUML is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * PlantUML distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
 * License for more details.
 *
 * You should have received a copy of the GNU General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
 * USA.
 *
 *
 * Original Author:  Arnaud Roques
 * 
 *
 */
package net.sourceforge.plantuml.svek;

import net.sourceforge.plantuml.graphic.UDrawable;
import net.sourceforge.plantuml.ugraphic.UGraphic;
import net.sourceforge.plantuml.ugraphic.UPath;
import net.sourceforge.plantuml.ugraphic.URectangle;
import net.sourceforge.plantuml.ugraphic.UShape;
import net.sourceforge.plantuml.ugraphic.UStroke;
import net.sourceforge.plantuml.ugraphic.color.HColor;
import net.sourceforge.plantuml.ugraphic.color.HColorUtils;

public final class RoundedSouth implements UDrawable {

	private final double width;
	private final double height;
	private final HColor backColor;
	private final double rounded;

	public RoundedSouth(double width, double height, HColor backColor, double rounded) {
		if (width == 0)
			throw new IllegalArgumentException();
		if (height == 0)
			throw new IllegalArgumentException();

		this.width = width;
		this.height = height;
		this.rounded = rounded;
		this.backColor = backColor;
	}

	public void drawU(UGraphic ug) {
		if (HColorUtils.isTransparent(backColor))
			return;

		final UShape header;
		if (rounded == 0) {
			header = new URectangle(width, height);
		} else {
			final UPath path = new UPath();
			path.moveTo(0, 0);
			path.lineTo(width, 0);
			path.lineTo(width, height - rounded / 2);
			path.arcTo(rounded / 2, rounded / 2, 0, 0, 1, width - rounded / 2, height);
			path.lineTo(rounded / 2, height);
			path.arcTo(rounded / 2, rounded / 2, 0, 0, 1, 0, height - rounded / 2);
			path.lineTo(0, 0);
			path.closePath();
			header = path;
		}
		ug.apply(new UStroke()).apply(backColor).apply(backColor.bg()).draw(header);

	}
}
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.style.StyleSignature;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.style.StyleSignature;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.style.StyleSignature;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.style.StyleSignature;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
			final String svgHeader;
			if (image.containsXlink())
				svgHeader = "<svg height=\"" + (int) (image.getHeight() * scale) + "\" width=\""
						+ (int) (image.getWidth() * scale)
						+ "\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns=\"http://www.w3.org/2000/svg\" >";
			else
				svgHeader = "<svg height=\"" + (int) (image.getHeight() * scale) + "\" width=\""
						+ (int) (image.getWidth() * scale) + "\" xmlns=\"http://www.w3.org/2000/svg\" >";
		if (states.length == 0)

		if (colors == null || colors.getColor(ColorType.BACK) == null)

		if (colors == null || colors.getColor(ColorType.LINE) == null)

	private UStroke getStroke(Style style) {
		return style.getStroke();
	}

				.withStroke(getStroke(style));
import net.sourceforge.plantuml.cucadiagram.Stereotype;
import net.sourceforge.plantuml.style.StyleSignature;
	protected final Stereotype stereotype;
	public Player(String title, ISkinParam skinParam, TimingRuler ruler, boolean compact, Stereotype stereotype) {
		this.stereotype = stereotype;
	protected abstract StyleSignature getStyleSignature();
		return FontConfiguration.create(skinParam, StyleSignatureBasic
				.of(SName.root, SName.element, SName.timingDiagram).getMergedStyle(skinParam.getCurrentStyleBuilder()));
import net.sourceforge.plantuml.awt.geom.Dimension2D;
		super(code, skinParam, ruler, compact, null);
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.cucadiagram.Stereotype;
import net.sourceforge.plantuml.style.StyleSignature;
	public PlayerBinary(String code, ISkinParam skinParam, TimingRuler ruler, boolean compact, Stereotype stereotype) {
		super(code, skinParam, ruler, compact, stereotype);
	protected StyleSignature getStyleSignature() {
		return StyleSignatureBasic.of(SName.root, SName.element, SName.timingDiagram, SName.binary).withTOBECHANGED(stereotype);
import net.sourceforge.plantuml.awt.geom.Dimension2D;
		super(title, skinParam, ruler, compact, null);
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.cucadiagram.Stereotype;
import net.sourceforge.plantuml.style.StyleSignature;
	public PlayerRobustConcise(TimingStyle type, String full, ISkinParam skinParam, TimingRuler ruler, boolean compact,
			Stereotype stereotype) {
		super(full, skinParam, ruler, compact, stereotype);
	protected StyleSignature getStyleSignature() {
			return StyleSignatureBasic.of(SName.root, SName.element, SName.timingDiagram, SName.concise).withTOBECHANGED(stereotype);
			return StyleSignatureBasic.of(SName.root, SName.element, SName.timingDiagram, SName.robust).withTOBECHANGED(stereotype);
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.cucadiagram.Stereotype;
	public CommandExecutionResult createRobustConcise(String code, String full, TimingStyle type, boolean compact,
			Stereotype stereotype) {
		final Player player = new PlayerRobustConcise(type, full, getSkinParam(), ruler, compactByDefault || compact,
				stereotype);
	public CommandExecutionResult createBinary(String code, String full, boolean compact, Stereotype stereotype) {
		final Player player = new PlayerBinary(full, getSkinParam(), ruler, compactByDefault, stereotype);
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.cucadiagram.Stereotype;
				RegexLeaf.spaceZeroOrMore(), //
				new RegexLeaf("STEREOTYPE", "(\\<\\<.*\\>\\>)?"), //
				new RegexLeaf("CODE", "([%pLN_.@]+)"), //
				RegexLeaf.spaceZeroOrMore(), //
				new RegexLeaf("STEREOTYPE2", "(\\<\\<.*\\>\\>)?"), //
				RegexLeaf.spaceZeroOrMore(), //
				RegexLeaf.end());

		Stereotype stereotype = null;
		if (arg.get("STEREOTYPE", 0) != null)
			stereotype = Stereotype.build(arg.get("STEREOTYPE", 0));
		else if (arg.get("STEREOTYPE2", 0) != null)
			stereotype = Stereotype.build(arg.get("STEREOTYPE2", 0));

		return diagram.createBinary(code, full, compact != null, stereotype);
import net.sourceforge.plantuml.cucadiagram.Stereotype;
								new RegexLeaf("STEREOTYPE", "(\\<\\<.*\\>\\>)?"), //
								RegexLeaf.spaceZeroOrMore(), //
				RegexLeaf.spaceZeroOrMore(), //
				new RegexLeaf("STEREOTYPE2", "(\\<\\<.*\\>\\>)?"), //
				RegexLeaf.spaceZeroOrMore(), //
		if (full == null)

		Stereotype stereotype = null;
		if (arg.get("STEREOTYPE", 0) != null)
			stereotype = Stereotype.build(arg.get("STEREOTYPE", 0));
		else if (arg.get("STEREOTYPE2", 0) != null)
			stereotype = Stereotype.build(arg.get("STEREOTYPE2", 0));

		return diagram.createRobustConcise(code, full, type, compact != null, stereotype);
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
import net.sourceforge.plantuml.awt.geom.Dimension2D;
	public boolean containsXlink() {
		return svg.contains("xmlns:xlink=\"http://www.w3.org/1999/xlink\"");
	}

		if (color instanceof HColorGradient)

		if (color == null)

		if (back == TRANSPARENT)

		if (back instanceof HColorBackground && ((HColorBackground) back).getBack() == TRANSPARENT)

		if (back instanceof HColorSimple && ((HColorSimple) back).isTransparent())

		if (completion == 0)

		if (completion == 100)

		if (color1 instanceof HColorSimple && color2 instanceof HColorSimple)

				for (USegment seg2 : jiggle.toUPath())
					if (seg2.getSegmentType() == USegmentType.SEG_LINETO)

				last = new Point2D.Double(x, y);
			} else if (type == USegmentType.SEG_ARCTO) {
				final double x = segment.getCoord()[5];
				final double y = segment.getCoord()[6];
				result.lineTo(x, y);
		return 1202205;
		final int beta = 0;
		return 1651316152000L;
;
;
;
archimate
azure
c4
classy
classy-c4
domainstory
elastic
kubernetes
logos
tupadr3