diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index de62bd8..bad3c5d 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -8,6 +8,9 @@
 	<body>
 	    <release version="1.9-SNAPSHOT" date="in Mercurial" description="Development">
             <action dev="py4fun" type="add" issue="124">
+                Deprecate DumperOptions.explicitRoot (2011-07-20)
+            </action>
+            <action dev="py4fun" type="add" issue="124">
                 Add Yaml.dumpAs(Object, Tag.MAP) method. JavaBeanDumper is marked as deprecated (2011-07-16)
             </action>
             <action dev="py4fun" type="add" issue="127">
diff --git a/src/main/java/org/yaml/snakeyaml/DumperOptions.java b/src/main/java/org/yaml/snakeyaml/DumperOptions.java
index 74ae92c..733931e 100644
--- a/src/main/java/org/yaml/snakeyaml/DumperOptions.java
+++ b/src/main/java/org/yaml/snakeyaml/DumperOptions.java
@@ -161,6 +161,10 @@
     private LineBreak lineBreak = LineBreak.UNIX;
     private boolean explicitStart = false;
     private boolean explicitEnd = false;
+
+    /**
+     * @deprecated do not use explicit root Tag
+     */
     private Tag explicitRoot = null;
     private Version version = null;
     private Map<String, String> tags = null;
@@ -283,6 +287,9 @@
         return defaultFlowStyle;
     }
 
+    /**
+     * @deprecated do not use explicit root Tag
+     */
     public Tag getExplicitRoot() {
         return explicitRoot;
     }
@@ -301,6 +308,7 @@
      * @param expRoot
      *            tag to be used for the root node. (JavaBeans may use
      *            Tag.MAP="tag:yaml.org,2002:map")
+     * @deprecated do not use explicit root Tag
      */
     public void setExplicitRoot(Tag expRoot) {
         if (expRoot == null) {
diff --git a/src/main/java/org/yaml/snakeyaml/Yaml.java b/src/main/java/org/yaml/snakeyaml/Yaml.java
index 19437b4..b415b43 100644
--- a/src/main/java/org/yaml/snakeyaml/Yaml.java
+++ b/src/main/java/org/yaml/snakeyaml/Yaml.java
@@ -256,9 +256,14 @@
      * @param output
      *            stream to write to
      */
+    @SuppressWarnings("deprecation")
     public void dumpAll(Iterator<? extends Object> data, Writer output) {
+        dumpAll(data, output, dumperOptions.getExplicitRoot());
+    }
+
+    private void dumpAll(Iterator<? extends Object> data, Writer output, Tag rootTag) {
         Serializer serializer = new Serializer(new Emitter(output, dumperOptions), resolver,
-                dumperOptions);
+                dumperOptions, rootTag);
         try {
             serializer.open();
             while (data.hasNext()) {
@@ -309,9 +314,12 @@
      * @return YAML String
      */
     public String dumpAs(Object data, Tag rootTag) {
-        dumperOptions.setExplicitRoot(rootTag);
         representer.setDefaultFlowStyle(FlowStyle.BLOCK);
-        return dump(data);
+        List<Object> list = new ArrayList<Object>(1);
+        list.add(data);
+        StringWriter buffer = new StringWriter();
+        dumpAll(list.iterator(), buffer, rootTag);
+        return buffer.toString();
     }
 
     /**
@@ -324,7 +332,9 @@
      */
     public List<Event> serialize(Node data) {
         SilentEmitter emitter = new SilentEmitter();
-        Serializer serializer = new Serializer(emitter, resolver, dumperOptions);
+        @SuppressWarnings("deprecation")
+        Serializer serializer = new Serializer(emitter, resolver, dumperOptions,
+                dumperOptions.getExplicitRoot());
         try {
             serializer.open();
             serializer.serialize(data);
diff --git a/src/main/java/org/yaml/snakeyaml/serializer/Serializer.java b/src/main/java/org/yaml/snakeyaml/serializer/Serializer.java
index 98b4620..ef89b51 100644
--- a/src/main/java/org/yaml/snakeyaml/serializer/Serializer.java
+++ b/src/main/java/org/yaml/snakeyaml/serializer/Serializer.java
@@ -61,7 +61,7 @@
     private Boolean closed;
     private Tag explicitRoot;
 
-    public Serializer(Emitable emitter, Resolver resolver, DumperOptions opts) {
+    public Serializer(Emitable emitter, Resolver resolver, DumperOptions opts, Tag rootTag) {
         this.emitter = emitter;
         this.resolver = resolver;
         this.explicitStart = opts.isExplicitStart();
@@ -74,7 +74,7 @@
         this.anchors = new HashMap<Node, String>();
         this.lastAnchorId = 0;
         this.closed = null;
-        this.explicitRoot = opts.getExplicitRoot();
+        this.explicitRoot = rootTag;
     }
 
     public void open() throws IOException {
diff --git a/src/test/java/org/yaml/snakeyaml/DumperOptionsTest.java b/src/test/java/org/yaml/snakeyaml/DumperOptionsTest.java
index 5515df3..10bed8c 100644
--- a/src/test/java/org/yaml/snakeyaml/DumperOptionsTest.java
+++ b/src/test/java/org/yaml/snakeyaml/DumperOptionsTest.java
@@ -322,6 +322,7 @@
         assertEquals("\"\\xdcber\"\n", yaml.dump("\u00DCber"));
     }
 
+    @SuppressWarnings("deprecation")
     public void testSetRootTag() {
         DumperOptions options = new DumperOptions();
         try {
diff --git a/src/test/java/org/yaml/snakeyaml/JavaBeanTimeStampTest.java b/src/test/java/org/yaml/snakeyaml/JavaBeanTimeStampTest.java
index 23041e7..47288fb 100644
--- a/src/test/java/org/yaml/snakeyaml/JavaBeanTimeStampTest.java
+++ b/src/test/java/org/yaml/snakeyaml/JavaBeanTimeStampTest.java
@@ -51,11 +51,8 @@
         javaBeanToDump.setTimestamp(stamp);
         Date date = new Date(1001376000000L);
         javaBeanToDump.setDate(date);
-        DumperOptions options = new DumperOptions();
-        options.setDefaultFlowStyle(FlowStyle.BLOCK);
-        options.setExplicitRoot(Tag.MAP);
-        Yaml yaml = new Yaml(options);
-        String dumpStr = yaml.dump(javaBeanToDump);
+        Yaml yaml = new Yaml();
+        String dumpStr = yaml.dumpAs(javaBeanToDump, Tag.MAP);
         assertEquals("date: 2001-09-25T00:00:00Z\ntimestamp: 2001-09-09T01:46:40Z\n", dumpStr);
         Yaml loader = new Yaml();
         JavaBeanWithSqlTimestamp javaBeanToLoad = loader.loadAs(dumpStr,
diff --git a/src/test/java/org/yaml/snakeyaml/JavaBeanWithNullValuesTest.java b/src/test/java/org/yaml/snakeyaml/JavaBeanWithNullValuesTest.java
index dc71394..7edcab0 100644
--- a/src/test/java/org/yaml/snakeyaml/JavaBeanWithNullValuesTest.java
+++ b/src/test/java/org/yaml/snakeyaml/JavaBeanWithNullValuesTest.java
@@ -102,7 +102,6 @@
         options.setDefaultScalarStyle(DumperOptions.ScalarStyle.DOUBLE_QUOTED);
         options.setExplicitStart(true);
         options.setExplicitEnd(true);
-        options.setExplicitRoot(Tag.MAP);
         Yaml yaml = new Yaml(new CustomRepresenter(), options);
         javaBeanWithNullValues.setBoolean1(null);
         javaBeanWithNullValues.setDate(new Date(System.currentTimeMillis()));
@@ -114,7 +113,7 @@
         javaBeanWithNullValues.setString(null); // ok
         javaBeanWithNullValues.setTimestamp(new Timestamp(System.currentTimeMillis()));
 
-        String dumpStr = yaml.dump(javaBeanWithNullValues);
+        String dumpStr = yaml.dumpAs(javaBeanWithNullValues, Tag.MAP);
         // System.out.println(dumpStr);
         assertFalse("No explicit root tag must be used.",
                 dumpStr.contains("JavaBeanWithNullValues"));
diff --git a/src/test/java/org/yaml/snakeyaml/constructor/ImplicitTagsTest.java b/src/test/java/org/yaml/snakeyaml/constructor/ImplicitTagsTest.java
index 343e90c..16cda4f 100644
--- a/src/test/java/org/yaml/snakeyaml/constructor/ImplicitTagsTest.java
+++ b/src/test/java/org/yaml/snakeyaml/constructor/ImplicitTagsTest.java
@@ -23,7 +23,6 @@
 
 import junit.framework.TestCase;
 
-import org.yaml.snakeyaml.DumperOptions;
 import org.yaml.snakeyaml.TypeDescription;
 import org.yaml.snakeyaml.Util;
 import org.yaml.snakeyaml.Yaml;
@@ -60,14 +59,12 @@
         map.put("id", 3);
         car1.setMap(map);
         car1.setYear("2008");
-        DumperOptions options = new DumperOptions();
-        options.setExplicitRoot(Tag.MAP);
-        String carYaml1 = new Yaml(options).dump(car1);
+        String carYaml1 = new Yaml().dumpAs(car1, Tag.MAP);
         assertEquals(Util.getLocalResource("constructor/car-without-root-tag.yaml"), carYaml1);
         //
         Constructor contructor = new Constructor(CarWithWheel.class);
         CarWithWheel car2 = (CarWithWheel) new Yaml(contructor).load(carYaml1);
-        String carYaml2 = new Yaml(options).dump(car2);
+        String carYaml2 = new Yaml().dumpAs(car2, Tag.MAP);
         assertEquals(carYaml1, carYaml2);
     }
 
diff --git a/src/test/java/org/yaml/snakeyaml/generics/BirdTest.java b/src/test/java/org/yaml/snakeyaml/generics/BirdTest.java
index 9fbe65e..4973ab6 100644
--- a/src/test/java/org/yaml/snakeyaml/generics/BirdTest.java
+++ b/src/test/java/org/yaml/snakeyaml/generics/BirdTest.java
@@ -20,7 +20,6 @@
 
 import junit.framework.TestCase;
 
-import org.yaml.snakeyaml.DumperOptions;
 import org.yaml.snakeyaml.Yaml;
 import org.yaml.snakeyaml.nodes.Tag;
 
@@ -33,10 +32,8 @@
         home = new Nest();
         home.setHeight(3);
         bird.setHome(home);
-        DumperOptions options = new DumperOptions();
-        options.setExplicitRoot(Tag.MAP);
-        Yaml yaml = new Yaml(options);
-        String output = yaml.dump(bird);
+        Yaml yaml = new Yaml();
+        String output = yaml.dumpAs(bird, Tag.MAP);
         Bird parsed;
         String javaVendor = System.getProperty("java.vm.name");
         Yaml loader = new Yaml();
@@ -53,7 +50,7 @@
                     .println("JDK requires global tags for JavaBean properties with Java Generics. java.vm.name: "
                             + javaVendor);
             assertEquals("global tags are inevitable here.",
-                    "home: !!org.yaml.snakeyaml.generics.Nest {height: 3}\nname: Eagle\n", output);
+                    "home: !!org.yaml.snakeyaml.generics.Nest\n  height: 3\nname: Eagle\n", output);
             parsed = loader.loadAs(output, Bird.class);
         }
         assertEquals(bird.getName(), parsed.getName());
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue55/YamlFieldAccessCollectionTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue55/YamlFieldAccessCollectionTest.java
index 89be26f..f17e4fb 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue55/YamlFieldAccessCollectionTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue55/YamlFieldAccessCollectionTest.java
@@ -21,8 +21,6 @@
 
 import junit.framework.TestCase;
 
-import org.yaml.snakeyaml.DumperOptions;
-import org.yaml.snakeyaml.DumperOptions.FlowStyle;
 import org.yaml.snakeyaml.Util;
 import org.yaml.snakeyaml.Yaml;
 import org.yaml.snakeyaml.introspector.BeanAccess;
@@ -34,7 +32,7 @@
     public void testYaml() {
         Blog original = createTestBlog();
         Yaml yamlDumper = constructYamlDumper();
-        String serialized = yamlDumper.dump(original);
+        String serialized = yamlDumper.dumpAs(original, Tag.MAP);
         // System.out.println(serialized);
         assertEquals(Util.getLocalResource("issues/issue55_1.txt"), serialized);
         Yaml blogLoader = new Yaml();
@@ -74,10 +72,7 @@
     protected Yaml constructYamlDumper() {
         Representer representer = new Representer();
         representer.getPropertyUtils().setBeanAccess(BeanAccess.FIELD);
-        DumperOptions options = new DumperOptions();
-        options.setDefaultFlowStyle(FlowStyle.BLOCK);
-        options.setExplicitRoot(Tag.MAP);
-        Yaml yaml = new Yaml(representer, options);
+        Yaml yaml = new Yaml(representer);
         return yaml;
     }
 
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue95/ArrayInGenericCollectionTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue95/ArrayInGenericCollectionTest.java
index 2179a83..f0bc298 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue95/ArrayInGenericCollectionTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue95/ArrayInGenericCollectionTest.java
@@ -26,7 +26,6 @@
 import junit.framework.TestCase;
 
 import org.junit.Assert;
-import org.yaml.snakeyaml.DumperOptions;
 import org.yaml.snakeyaml.TypeDescription;
 import org.yaml.snakeyaml.Yaml;
 import org.yaml.snakeyaml.constructor.Constructor;
@@ -136,12 +135,10 @@
     }
 
     public void testNoTags() {
-        DumperOptions options = new DumperOptions();
-        options.setExplicitRoot(Tag.MAP);
-        Yaml yaml2dump = new Yaml(options);
+        Yaml yaml2dump = new Yaml();
         yaml2dump.setBeanAccess(BeanAccess.FIELD);
         B data = createB();
-        String dump = yaml2dump.dump(data);
+        String dump = yaml2dump.dumpAs(data, Tag.MAP);
         // System.out.println(dump);
         assertEquals("meta:\n- [whatever]\n- [something, something else]\n", dump);
         //
diff --git a/src/test/java/org/yaml/snakeyaml/javabeans/HouseTest.java b/src/test/java/org/yaml/snakeyaml/javabeans/HouseTest.java
index 5cc737e..f820bfa 100644
--- a/src/test/java/org/yaml/snakeyaml/javabeans/HouseTest.java
+++ b/src/test/java/org/yaml/snakeyaml/javabeans/HouseTest.java
@@ -60,7 +60,7 @@
         assertNotNull(loadedHouse);
         assertEquals("Wall Street", loadedHouse.getStreet());
         // dump again
-        String yaml3 = beanDumper.dump(loadedHouse);
+        String yaml3 = beanDumper.dumpAs(loadedHouse, Tag.MAP);
         assertEquals(yaml, yaml3);
     }
 
@@ -106,7 +106,7 @@
         List<Room> loadedRooms = loadedHouse.getRooms();
         assertEquals(rooms, loadedRooms);
         // dump again
-        String yaml3 = beanDumper.dump(loadedHouse);
+        String yaml3 = beanDumper.dumpAs(loadedHouse, Tag.MAP);
         assertEquals(yaml, yaml3);
     }
 
diff --git a/src/test/java/org/yaml/snakeyaml/recursive/Human_WithArrayOfChildrenTest.java b/src/test/java/org/yaml/snakeyaml/recursive/Human_WithArrayOfChildrenTest.java
index 71abc0c..68a3915 100644
--- a/src/test/java/org/yaml/snakeyaml/recursive/Human_WithArrayOfChildrenTest.java
+++ b/src/test/java/org/yaml/snakeyaml/recursive/Human_WithArrayOfChildrenTest.java
@@ -21,7 +21,6 @@
 
 import junit.framework.TestCase;
 
-import org.yaml.snakeyaml.DumperOptions;
 import org.yaml.snakeyaml.TypeDescription;
 import org.yaml.snakeyaml.Util;
 import org.yaml.snakeyaml.Yaml;
@@ -164,11 +163,9 @@
     }
 
     public void testDumpChildrenArrayWithoutRootTag() throws IOException {
-        DumperOptions options = new DumperOptions();
-        options.setExplicitRoot(Tag.MAP);
-        Yaml yaml = new Yaml(options);
+        Yaml yaml = new Yaml();
         Human_WithArrayOfChildren son = createSon();
-        String output = yaml.dump(son);
+        String output = yaml.dumpAs(son, Tag.MAP);
         // System.out.println(output);
         String etalon = Util.getLocalResource("recursive/with-childrenArray-no-root-tag.yaml");
         assertEquals(etalon, output);
diff --git a/src/test/java/org/yaml/snakeyaml/recursive/generics/HumanGenericsTest.java b/src/test/java/org/yaml/snakeyaml/recursive/generics/HumanGenericsTest.java
index e8ba439..a009007 100644
--- a/src/test/java/org/yaml/snakeyaml/recursive/generics/HumanGenericsTest.java
+++ b/src/test/java/org/yaml/snakeyaml/recursive/generics/HumanGenericsTest.java
@@ -30,7 +30,6 @@
 
 import junit.framework.TestCase;
 
-import org.yaml.snakeyaml.DumperOptions;
 import org.yaml.snakeyaml.TypeDescription;
 import org.yaml.snakeyaml.Util;
 import org.yaml.snakeyaml.Yaml;
@@ -91,10 +90,8 @@
         father.setPartner(mother);
         mother.setPartner(father);
         mother.setBankAccountOwner(father);
-        DumperOptions options = new DumperOptions();
-        options.setExplicitRoot(Tag.MAP);
-        Yaml yaml = new Yaml(options);
-        String output = yaml.dump(father);
+        Yaml yaml = new Yaml();
+        String output = yaml.dumpAs(father, Tag.MAP);
         String etalon = Util.getLocalResource("recursive/generics/no-children-2.yaml");
         assertEquals(etalon, output);
         //
diff --git a/src/test/java/org/yaml/snakeyaml/ruby/RubyTest.java b/src/test/java/org/yaml/snakeyaml/ruby/RubyTest.java
index c43e3dd..e137951 100644
--- a/src/test/java/org/yaml/snakeyaml/ruby/RubyTest.java
+++ b/src/test/java/org/yaml/snakeyaml/ruby/RubyTest.java
@@ -41,9 +41,8 @@
         TestObject result = parseObject(Util.getLocalResource("ruby/ruby1.yaml"));
         DumperOptions options = new DumperOptions();
         options.setExplicitStart(true);
-        options.setExplicitRoot(Tag.MAP);
         Yaml yaml2 = new Yaml(options);
-        String output = yaml2.dump(result);
+        String output = yaml2.dumpAs(result, Tag.MAP);
         assertFalse("No tags expected.", output.contains("Sub1"));
         // System.out.println(output);
         // parse back. Without tags it shall still work
diff --git a/src/test/java/org/yaml/snakeyaml/serializer/SerializerTest.java b/src/test/java/org/yaml/snakeyaml/serializer/SerializerTest.java
index 7c6ea94..c01d100 100644
--- a/src/test/java/org/yaml/snakeyaml/serializer/SerializerTest.java
+++ b/src/test/java/org/yaml/snakeyaml/serializer/SerializerTest.java
@@ -35,7 +35,7 @@
     protected void setUp() throws Exception {
         DumperOptions config = new DumperOptions();
         StringWriter writer = new StringWriter();
-        serializer = new Serializer(new Emitter(writer, config), new Resolver(), config);
+        serializer = new Serializer(new Emitter(writer, config), new Resolver(), config, null);
     }
 
     public void testSerializerIsAlreadyOpened() throws IOException {
