diff --git a/src/main/java/org/yaml/snakeyaml/representer/Representer.java b/src/main/java/org/yaml/snakeyaml/representer/Representer.java
index 4d2a68a..cf32873 100644
--- a/src/main/java/org/yaml/snakeyaml/representer/Representer.java
+++ b/src/main/java/org/yaml/snakeyaml/representer/Representer.java
@@ -127,10 +127,10 @@
                     && !property.getReadMethod().getName().equals("getClass")) {
                 properties.add(new MethodProperty(property));
             }
+        // add public fields
         for (Field field : type.getFields()) {
             int modifiers = field.getModifiers();
-            if (!Modifier.isPublic(modifiers) || Modifier.isStatic(modifiers)
-                    || Modifier.isTransient(modifiers))
+            if (Modifier.isStatic(modifiers) || Modifier.isTransient(modifiers))
                 continue;
             properties.add(new FieldProperty(field));
         }
diff --git a/src/test/java/org/yaml/snakeyaml/constructor/ConstructorTest.java b/src/test/java/org/yaml/snakeyaml/constructor/ConstructorTest.java
index 9ee76be..32ae6d6 100644
--- a/src/test/java/org/yaml/snakeyaml/constructor/ConstructorTest.java
+++ b/src/test/java/org/yaml/snakeyaml/constructor/ConstructorTest.java
@@ -82,6 +82,17 @@
                 construct("--- !!org.yaml.snakeyaml.constructor.TestBean\nname: Ola Bini\nage: 24\nborn: 1982-05-03\n"));
     }
 
+    public void testWrongName() {
+        try {
+            construct("--- !!org.yaml.snakeyaml.constructor.TestBean\nwrongName: No one\nage: 24\nborn: 1982-05-03\n");
+            fail("IntrospectionException expected.");
+        } catch (Exception e) {
+            assertEquals(
+                    "null; Can't construct a java object for tag:yaml.org,2002:org.yaml.snakeyaml.constructor.TestBean; exception=org.yaml.snakeyaml.error.YAMLException: Unable to find property 'wrongName' on class: org.yaml.snakeyaml.constructor.TestBean",
+                    e.getMessage());
+        }
+    }
+
     private Object construct(String data) {
         Yaml yaml = new Yaml();
         return yaml.load(data);
diff --git a/src/test/java/org/yaml/snakeyaml/representer/RepresentFieldTest.java b/src/test/java/org/yaml/snakeyaml/representer/RepresentFieldTest.java
new file mode 100644
index 0000000..80d0b3d
--- /dev/null
+++ b/src/test/java/org/yaml/snakeyaml/representer/RepresentFieldTest.java
@@ -0,0 +1,50 @@
+/*
+ * See LICENSE file in distribution for copyright and licensing information.
+ */
+package org.yaml.snakeyaml.representer;
+
+import junit.framework.TestCase;
+
+import org.yaml.snakeyaml.Yaml;
+
+public class RepresentFieldTest extends TestCase {
+
+    public void testRepresent1() {
+        Yaml yaml = new Yaml();
+        WrongJavaBean bean = new WrongJavaBean();
+        bean.packageField = "Value";// the field is present
+        bean.publicField = "Michael Jackson";
+        WrongJavaBean.staticField = "Another value";
+        String output = yaml.dump(bean);
+        assertEquals(
+                "!!org.yaml.snakeyaml.representer.WrongJavaBean {publicField: Michael Jackson}\n",
+                output);
+    }
+
+    public void testWrongNotPublicField() {
+        Yaml yaml = new Yaml();
+        WrongJavaBean bean = new WrongJavaBean();
+        bean.packageField = "Value";// the field is present
+        try {
+            yaml.load("!!org.yaml.snakeyaml.representer.WrongJavaBean {packageField: Gnome}\n");
+            fail("Only public fields can be used.");
+        } catch (Exception e) {
+            assertEquals(
+                    "null; Can't construct a java object for tag:yaml.org,2002:org.yaml.snakeyaml.representer.WrongJavaBean; exception=org.yaml.snakeyaml.error.YAMLException: Unable to find property 'packageField' on class: org.yaml.snakeyaml.representer.WrongJavaBean",
+                    e.getMessage());
+        }
+    }
+
+    public void testStaticField() {
+        Yaml yaml = new Yaml();
+        WrongJavaBean.staticField = "Value";// the field is present
+        try {
+            yaml.load("!!org.yaml.snakeyaml.representer.WrongJavaBean {staticField: Gnome}\n");
+            fail("Static fields cannot be used.");
+        } catch (Exception e) {
+            assertEquals(
+                    "null; Can't construct a java object for tag:yaml.org,2002:org.yaml.snakeyaml.representer.WrongJavaBean; exception=org.yaml.snakeyaml.error.YAMLException: Unable to find property 'staticField' on class: org.yaml.snakeyaml.representer.WrongJavaBean",
+                    e.getMessage());
+        }
+    }
+}
diff --git a/src/test/java/org/yaml/snakeyaml/representer/WrongJavaBean.java b/src/test/java/org/yaml/snakeyaml/representer/WrongJavaBean.java
new file mode 100644
index 0000000..b80a009
--- /dev/null
+++ b/src/test/java/org/yaml/snakeyaml/representer/WrongJavaBean.java
@@ -0,0 +1,20 @@
+/*
+ * See LICENSE file in distribution for copyright and licensing information.
+ */
+package org.yaml.snakeyaml.representer;
+
+public class WrongJavaBean {
+    String packageField;
+    static String staticField;
+    public transient String dynamo;
+    public String publicField;
+    private int privateValue;
+
+    public WrongJavaBean() {
+        method();
+    }
+
+    private void method() {
+        privateValue++;
+    }
+}
