diff --git a/src/main/java/org/yaml/snakeyaml/constructor/Constructor.java b/src/main/java/org/yaml/snakeyaml/constructor/Constructor.java
index 691333d..601f8ed 100644
--- a/src/main/java/org/yaml/snakeyaml/constructor/Constructor.java
+++ b/src/main/java/org/yaml/snakeyaml/constructor/Constructor.java
@@ -22,6 +22,7 @@
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
 import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.ArrayList;
@@ -273,7 +274,8 @@
                     if (!typeDetected && valueNode.getNodeId() != NodeId.scalar) {
                         // only if there is no explicit TypeDescription
                         Type[] arguments = property.getActualTypeArguments();
-                        if (arguments != null) {
+                        if (arguments != null && !(arguments[0] instanceof TypeVariable)) {
+                            // TODO check non Java HotSpot(TM) Server VM
                             // type safe (generic) collection may contain the
                             // proper class
                             if (valueNode.getNodeId() == NodeId.sequence) {
diff --git a/src/main/java/org/yaml/snakeyaml/representer/Representer.java b/src/main/java/org/yaml/snakeyaml/representer/Representer.java
index af6d0b1..5fb4bb9 100644
--- a/src/main/java/org/yaml/snakeyaml/representer/Representer.java
+++ b/src/main/java/org/yaml/snakeyaml/representer/Representer.java
@@ -179,13 +179,9 @@
     @SuppressWarnings("unchecked")
     protected void checkGlobalTag(Property property, Node node, Object object) {
         Type[] arguments = property.getActualTypeArguments();
-        if (arguments != null) {
+        if (arguments != null && !(arguments[0] instanceof TypeVariable)) {
             if (node.getNodeId() == NodeId.sequence) {
                 // apply map tag where class is the same
-                if (arguments[0] instanceof TypeVariable) {
-                    // generic collections need the tag
-                    return;
-                }
                 Class<? extends Object> t = (Class<? extends Object>) arguments[0];
                 SequenceNode snode = (SequenceNode) node;
                 List<Object> memberList = (List<Object>) object;
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue61/GenericBeanTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue61/GenericListBeanTest.java
similarity index 65%
rename from src/test/java/org/yaml/snakeyaml/issues/issue61/GenericBeanTest.java
rename to src/test/java/org/yaml/snakeyaml/issues/issue61/GenericListBeanTest.java
index 727254f..06d91f9 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue61/GenericBeanTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue61/GenericListBeanTest.java
@@ -22,9 +22,11 @@
 import junit.framework.TestCase;
 
 import org.yaml.snakeyaml.JavaBeanDumper;
+import org.yaml.snakeyaml.JavaBeanLoader;
 import org.yaml.snakeyaml.Util;
 
-public class GenericBeanTest extends TestCase {
+public class GenericListBeanTest extends TestCase {
+    @SuppressWarnings("unchecked")
     public void testGenericList() throws Exception {
         JavaBeanDumper beanDumper = new JavaBeanDumper();
         ListProvider<String> listProvider = new ListProvider<String>();
@@ -34,13 +36,14 @@
         // System.out.println(s);
         assertEquals("list:\n- foo\n- bar\n", s);
         // parse
-        // JavaBeanLoader<ListProvider> loader = new
-        // JavaBeanLoader<ListProvider>(ListProvider.class);
-        // ListProvider listProvider2 = loader.load(s);
-        // assertEquals("foo", listProvider2.getList().get(0));
-        // assertEquals("bar", listProvider2.getList().get(1));
+        JavaBeanLoader<ListProvider> loader = new JavaBeanLoader<ListProvider>(ListProvider.class);
+        ListProvider<String> listProvider2 = loader.load(s);
+        assertEquals("foo", listProvider2.getList().get(0));
+        assertEquals("bar", listProvider2.getList().get(1));
+        assertEquals(listProvider, listProvider2);
     }
 
+    @SuppressWarnings("unchecked")
     public void testGenericBean() throws Exception {
         JavaBeanDumper beanDumper = new JavaBeanDumper();
         ListProvider<Bean> listProvider = new ListProvider<Bean>();
@@ -55,6 +58,15 @@
         // System.out.println(s);
         String etalon = Util.getLocalResource("issues/issue61-1.yaml");
         assertEquals(etalon, s);
+        // parse
+        JavaBeanLoader<ListProvider> loader = new JavaBeanLoader<ListProvider>(ListProvider.class);
+        ListProvider listProvider2 = loader.load(s);
+        Bean foo2 = (Bean) listProvider2.getList().get(0);
+        assertEquals("foo", foo2.getName());
+        assertEquals(0, foo2.getNumber());
+        Bean bar2 = (Bean) listProvider2.getList().get(1);
+        assertEquals("bar", bar2.getName());
+        assertEquals(3, bar2.getNumber());
     }
 
     public static class ListProvider<T> {
@@ -67,6 +79,21 @@
         public void setList(List<T> list) {
             this.list = list;
         }
+
+        @SuppressWarnings("unchecked")
+        @Override
+        public boolean equals(Object obj) {
+            if (obj instanceof ListProvider) {
+                return list.equals(((ListProvider) obj).getList());
+            } else {
+                return false;
+            }
+        }
+
+        @Override
+        public int hashCode() {
+            return list.hashCode();
+        }
     }
 
     public static class Bean {
@@ -89,5 +116,4 @@
             this.number = number;
         }
     }
-
 }
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue61/GenericMapBeanTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue61/GenericMapBeanTest.java
new file mode 100644
index 0000000..859fa67
--- /dev/null
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue61/GenericMapBeanTest.java
@@ -0,0 +1,119 @@
+/**
+ * Copyright (c) 2008-2010 Andrey Somov
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.yaml.snakeyaml.issues.issue61;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.yaml.snakeyaml.JavaBeanDumper;
+import org.yaml.snakeyaml.JavaBeanLoader;
+import org.yaml.snakeyaml.Util;
+
+public class GenericMapBeanTest extends TestCase {
+    @SuppressWarnings("unchecked")
+    public void testGenericMap() throws Exception {
+        JavaBeanDumper beanDumper = new JavaBeanDumper();
+        MapProvider<String, Integer> listProvider = new MapProvider<String, Integer>();
+        listProvider.getMap().put("foo", 17);
+        listProvider.getMap().put("bar", 19);
+        String s = beanDumper.dump(listProvider);
+        // System.out.println(s);
+        assertEquals("map:\n  foo: 17\n  bar: 19\n", s);
+        // parse
+        JavaBeanLoader<MapProvider> loader = new JavaBeanLoader<MapProvider>(MapProvider.class);
+        MapProvider<String, Integer> listProvider2 = loader.load(s);
+        assertEquals(new Integer(17), listProvider2.getMap().get("foo"));
+        assertEquals(new Integer(19), listProvider2.getMap().get("bar"));
+        assertEquals(listProvider, listProvider2);
+    }
+
+    @SuppressWarnings("unchecked")
+    public void testGenericBean() throws Exception {
+        JavaBeanDumper beanDumper = new JavaBeanDumper();
+        MapProvider<String, Bean> listProvider = new MapProvider<String, Bean>();
+        Bean foo = new Bean();
+        foo.setName("foo");
+        listProvider.getMap().put("foo", foo);
+        Bean bar = new Bean();
+        bar.setName("bar");
+        bar.setNumber(3);
+        listProvider.getMap().put("bar", bar);
+        String s = beanDumper.dump(listProvider);
+        // System.out.println(s);
+        String etalon = Util.getLocalResource("issues/issue61-2.yaml");
+        assertEquals(etalon, s);
+        // parse
+        JavaBeanLoader<MapProvider> loader = new JavaBeanLoader<MapProvider>(MapProvider.class);
+        MapProvider listProvider2 = loader.load(s);
+        Bean foo2 = (Bean) listProvider2.getMap().get("foo");
+        assertEquals("foo", foo2.getName());
+        assertEquals(0, foo2.getNumber());
+        Bean bar2 = (Bean) listProvider2.getMap().get("bar");
+        assertEquals("bar", bar2.getName());
+        assertEquals(3, bar2.getNumber());
+    }
+
+    public static class MapProvider<K, V> {
+        private Map<K, V> map = new HashMap<K, V>();
+
+        public Map<K, V> getMap() {
+            return map;
+        }
+
+        public void setMap(Map<K, V> map) {
+            this.map = map;
+        }
+
+        @SuppressWarnings("unchecked")
+        @Override
+        public boolean equals(Object obj) {
+            if (obj instanceof MapProvider) {
+                return map.equals(((MapProvider) obj).getMap());
+            } else {
+                return false;
+            }
+        }
+
+        @Override
+        public int hashCode() {
+            return map.hashCode();
+        }
+    }
+
+    public static class Bean {
+        private String name;
+        private int number;
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public int getNumber() {
+            return number;
+        }
+
+        public void setNumber(int number) {
+            this.number = number;
+        }
+    }
+}
diff --git a/src/test/resources/issues/issue61-1.yaml b/src/test/resources/issues/issue61-1.yaml
index 52e1f43..80361f2 100644
--- a/src/test/resources/issues/issue61-1.yaml
+++ b/src/test/resources/issues/issue61-1.yaml
@@ -1,7 +1,7 @@
 list:
-- !!org.yaml.snakeyaml.issues.issue61.GenericBeanTest$Bean
+- !!org.yaml.snakeyaml.issues.issue61.GenericListBeanTest$Bean
   name: foo
   number: 0
-- !!org.yaml.snakeyaml.issues.issue61.GenericBeanTest$Bean
+- !!org.yaml.snakeyaml.issues.issue61.GenericListBeanTest$Bean
   name: bar
   number: 3
diff --git a/src/test/resources/issues/issue61-2.yaml b/src/test/resources/issues/issue61-2.yaml
new file mode 100644
index 0000000..2aea65c
--- /dev/null
+++ b/src/test/resources/issues/issue61-2.yaml
@@ -0,0 +1,7 @@
+map:
+  foo: !!org.yaml.snakeyaml.issues.issue61.GenericMapBeanTest$Bean
+    name: foo
+    number: 0
+  bar: !!org.yaml.snakeyaml.issues.issue61.GenericMapBeanTest$Bean
+    name: bar
+    number: 3
