diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/messages.properties b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/messages.properties
index 83e764c..7f8ab24 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/messages.properties
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/messages.properties
@@ -26,6 +26,7 @@
 ProhibitedBothColorsProblem_Both_of_the_foreground_and_background_colors_are_not_allowed_by_the_design_guideline__1=Both foreground and background colors are not allowed by the design guideline.
 ProhibitedForegroundColorProblem_The_foreground_color_is_not_allowed_by_the_design_guideline__1=The foreground color is not allowed by the design guideline.
 ProhibitedBackgroundColorProblem_The_background_color_is_not_allowed_by_the_design_guideline__1=The background color is not allowed by the design guideline.
+ContrastRatio = Contrast Ratio
 #
 # lowvision.ScoreUtil
 #
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/messages_ja.properties b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/messages_ja.properties
index f95ccfc..869b482 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/messages_ja.properties
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/messages_ja.properties
@@ -26,6 +26,7 @@
 ProhibitedBothColorsProblem_Both_of_the_foreground_and_background_colors_are_not_allowed_by_the_design_guideline__1 = \u6587\u5b57\u8272\u3068\u80cc\u666f\u8272\u306e\u4e21\u65b9\u306b\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3067\u8a31\u3055\u308c\u3066\u3044\u306a\u3044\u8272\u304c\u4f7f\u308f\u308c\u3066\u3044\u307e\u3059
 ProhibitedForegroundColorProblem_The_foreground_color_is_not_allowed_by_the_design_guideline__1 = \u6587\u5b57\u8272\u306b\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3067\u8a31\u3055\u308c\u3066\u3044\u306a\u3044\u8272\u304c\u4f7f\u308f\u308c\u3066\u3044\u307e\u3059
 ProhibitedBackgroundColorProblem_The_background_color_is_not_allowed_by_the_design_guideline__1 = \u80cc\u666f\u8272\u306b\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3067\u8a31\u3055\u308c\u3066\u3044\u306a\u3044\u8272\u304c\u4f7f\u308f\u308c\u3066\u3044\u307e\u3059
+ContrastRatio = \u30b3\u30f3\u30c8\u30e9\u30b9\u30c8\u6bd4
 #
 # lowvision.ScoreUtil
 #
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/LowVisionProblemConverter.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/LowVisionProblemConverter.java
index ccebac3..d472036 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/LowVisionProblemConverter.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/LowVisionProblemConverter.java
@@ -34,7 +34,13 @@
 					"L_" + target[i].getLowVisionProblemType()); //$NON-NLS-1$
 			tmp.setSubType(target[i].getLowVisionProblemType());
 			try {
-				if (tmp.getSubType() != ILowvisionProblemSubtype.LOWVISION_BACKGROUND_IMAGE_WARNING) {
+				switch (tmp.getSubType()) {
+				case ILowvisionProblemSubtype.LOWVISION_BACKGROUND_IMAGE_WARNING:
+					break;
+				case ILowvisionProblemSubtype.LOWVISION_COLOR_PROBLEM:
+					tmp.setDescription(target[i].getRepresentative().getDescription());
+					break;
+				default:
 					tmp.setDescription(target[i].getDescription());
 				}
 			} catch (Exception e) {
@@ -53,7 +59,7 @@
 			tmp.setWidth(target[i].getWidth());
 			tmp.setHeight(target[i].getHeight());
 			tmp.setArea(target[i].getWidth() * target[i].getHeight());
-			
+
 			// TODO recommendation
 			result.add(tmp);
 		}
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/Messages.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/Messages.java
index e8aeddf..b76eb0f 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/Messages.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/Messages.java
@@ -40,6 +40,7 @@
 	public static String PageEvaluation_Good;
 	public static String PageEvaluation_Poor;
 	public static String ImageDumpUtil_TrueColor;
+	public static String ContrastRatio;
 
 	static {
 		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/PageElement.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/PageElement.java
index 55f37d6..5f61755 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/PageElement.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/PageElement.java
@@ -271,27 +271,17 @@
 
 	private ColorProblem checkColors(LowVisionType _lvType)
 			throws LowVisionException {
-		if (!(_lvType.doChangeColors())) {
-			return (null);
-		}
 		if (!isTextTag()) {
 			return (null);
 		}
 
-		ColorIRGB fgSim = null;
-		ColorIRGB bgSim = null;
-		try {
-			fgSim = new ColorIRGB(_lvType.convertColor(foregroundColor));
-			bgSim = new ColorIRGB(_lvType.convertColor(backgroundColor));
-		} catch (LowVisionException e) {
-			e.printStackTrace();
-			throw new LowVisionException("Could not convert colors."); //$NON-NLS-1$
-		}
+		ColorIRGB fgOrg = new ColorIRGB(foregroundColor);
+		ColorIRGB bgOrg = new ColorIRGB(backgroundColor);
 
-		W3CColorChecker w3c = new W3CColorChecker(fgSim, bgSim);
-		double severity = w3c.calcSeverity();
+		W3CColorChecker w3c = new W3CColorChecker(fgOrg, bgOrg);
+		double contrast = w3c.calcContrast();
 		try {
-			if (severity <= 0.0) {
+			if (contrast > 4.5) {
 				if (style.getBackgroundImage() != null
 						&& !style.getBackgroundImage().equalsIgnoreCase("none")) {
 					ColorProblem result = new ColorProblem(this, _lvType, 0);
@@ -300,16 +290,40 @@
 				}
 				return (null);
 			} else {
-				ColorProblem result = new ColorProblem(this, _lvType, severity);
+				ColorProblem result = new ColorProblem(this, _lvType,
+						w3c.calcSeverity());
 				if (style.getBackgroundImage() != null
-						&& !style.getBackgroundImage().equalsIgnoreCase("none"))
+						&& !style.getBackgroundImage().equalsIgnoreCase("none")){
 					result.setHasBackgroundImage(true);
+				}else{
+					result.setContrast(contrast);
+				}
 				return (result);
 			}
 		} catch (LowVisionProblemException e) {
 			return (null);
 		}
 
+		/*
+		 * if (!(_lvType.doChangeColors())) { //TODO ColorIRGB fgSim = null;
+		 * ColorIRGB bgSim = null; try { fgSim = new
+		 * ColorIRGB(_lvType.convertColor(foregroundColor)); bgSim = new
+		 * ColorIRGB(_lvType.convertColor(backgroundColor)); } catch
+		 * (LowVisionException e) { e.printStackTrace(); throw new
+		 * LowVisionException("Could not convert colors."); //$NON-NLS-1$ }
+		 * 
+		 * W3CColorChecker w3c = new W3CColorChecker(fgSim, bgSim); double
+		 * severity = w3c.calcSeverity(); try { if (severity <= 0.0) { if
+		 * (style.getBackgroundImage() != null &&
+		 * !style.getBackgroundImage().equalsIgnoreCase( "none")) { ColorProblem
+		 * result = new ColorProblem(this, _lvType, 0);
+		 * result.setHasBackgroundImage(true); return (result); } return (null);
+		 * } else { ColorProblem result = new ColorProblem(this, _lvType,
+		 * severity); if (style.getBackgroundImage() != null &&
+		 * !style.getBackgroundImage().equalsIgnoreCase( "none"))
+		 * result.setHasBackgroundImage(true); return (result); } } catch
+		 * (LowVisionProblemException e) { return (null); } } return(null);
+		 */
 	}
 
 	/*
@@ -354,7 +368,7 @@
 
 		String fontStr = style.getFontSize().toLowerCase();
 
-		System.out.println(fontStr);
+		//System.out.println(fontStr);
 
 		// directly under the <BODY>
 		if (fontStr.indexOf(DELIM) == -1) {
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/checker/ColorChecker.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/checker/ColorChecker.java
index 98b7acf..d657aa0 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/checker/ColorChecker.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/checker/ColorChecker.java
@@ -27,4 +27,6 @@
 	}
 	//[0.0, 1.0]
 	public abstract double calcSeverity();
+	
+	public abstract double calcContrast();
 }
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/checker/W3CColorChecker.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/checker/W3CColorChecker.java
index c233e57..128df73 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/checker/W3CColorChecker.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/checker/W3CColorChecker.java
@@ -25,9 +25,13 @@
 	private double sevY;
 
 	private double sevC;
+	
+	private double sevL;
 
 	private double severity;
 
+	private double contrastRatio;
+	
 	public W3CColorChecker(ColorIRGB _c1, ColorIRGB _c2) {
 		super(_c1, _c2);
 		int r1 = color1.getR();
@@ -38,11 +42,24 @@
 		int b2 = color2.getB();
 		double y1 = calcY(r1, g1, b1);
 		double y2 = calcY(r2, g2, b2);
+		
+		double l1 = calcL(r1, g1, b1);
+		double l2 = calcL(r2, g2, b2);
+
+		if(l1>l2){
+			contrastRatio = (l1+0.05)/(l2+0.05);
+		}else{
+			contrastRatio = (l2+0.05)/(l1+0.05);			
+		}
+		
 		diffY = Math.abs(y1 - y2);
 		diffC = Math.abs(r1 - r2) + Math.abs(g1 - g2) + Math.abs(b1 - b2);
 		sevY = calcSevY(diffY);
 		sevC = calcSevC(diffC);
-		severity = Math.min(sevY, sevC);
+		sevL = calcSevL(contrastRatio);
+		//severity = Math.min(sevY, sevC);	WCAG 1.0, simulation
+		severity = sevL;
+				
 	}
 
 	public W3CColorChecker(int _i1, int _i2) {
@@ -94,9 +111,23 @@
 		return ((new W3CColorChecker(_c1, _c2)).calcChrominanceDifference());
 	}
 
+	private static double calcL(int _r, int _g, int _b){
+		return(0.2126*calcRGB(_r)+0.7152*calcRGB(_g)+0.0722*calcRGB(_b));
+	}
+	
 	private static double calcY(int _r, int _g, int _b) {
 		return ( (_r * 299 + _g * 587 + _b * 114) / 1000.0);
 	}
+	
+	private static double calcRGB(int rgb){
+		double tmp = (double)rgb/255;
+		if(tmp<=0.03928){
+			return(tmp/12.92);
+		}else{
+			return(Math.pow((tmp+0.055)/1.055,2.4));
+		}
+	}
+	
 
 	private static double calcSevY(double _diffY) {
 		double sevY = 0.0;
@@ -121,4 +152,17 @@
 			sevC = 1.0;
 		return (sevC);
 	}
+	
+	private static double calcSevL(double contrast){
+		double sevL = 0.0;
+		if(contrast>7){
+			return sevL;
+		}
+		return(1.0-(contrast-1)/(7.0-1));
+	}
+
+	@Override
+	public double calcContrast() {
+		return contrastRatio;
+	}
 }
diff --git a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/problem/ColorProblem.java b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/problem/ColorProblem.java
index ad9f5fb..79922c9 100644
--- a/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/problem/ColorProblem.java
+++ b/plugins/org.eclipse.actf.visualization.engines.lowvision/src/org/eclipse/actf/visualization/internal/engines/lowvision/problem/ColorProblem.java
@@ -11,6 +11,8 @@
 
 package org.eclipse.actf.visualization.internal.engines.lowvision.problem;
 
+import java.math.BigDecimal;
+
 import org.eclipse.actf.visualization.engines.lowvision.LowVisionType;
 import org.eclipse.actf.visualization.internal.engines.lowvision.Messages;
 import org.eclipse.actf.visualization.internal.engines.lowvision.PageElement;
@@ -24,6 +26,7 @@
 	private int foregroundColor = -1;
 	private int backgroundColor = -1;
 	private boolean hasBackgroundImage = false;
+	private double contrast = 0;
 
 	public ColorProblem( PageComponent _pc, LowVisionType _lvType, double _proba ) throws LowVisionProblemException{
 		super( LOWVISION_COLOR_PROBLEM, _lvType, Messages.ColorProblem_Foreground_and_background_colors_are_too_close__1, _pc, _proba );
@@ -63,6 +66,10 @@
 	}
 	
 	public String getDescription() throws LowVisionProblemException{
+		if(contrast>=1&&contrast<=21){
+			BigDecimal bd = new BigDecimal(contrast);
+			return(super.getDescription()+"("+Messages.ContrastRatio+"="+bd.setScale(2,BigDecimal.ROUND_HALF_UP)+")");
+		}
 		return( super.getDescription() );
 	}
 
@@ -86,4 +93,12 @@
 			problemType = LOWVISION_COLOR_PROBLEM;
 		}
 	}
+
+	public double getContrast() {
+		return contrast;
+	}
+
+	public void setContrast(double contrast) {
+		this.contrast = contrast;
+	}
 }
