diff --git a/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/DefaultMTOMAttachment.java b/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/DefaultMTOMAttachment.java
deleted file mode 100644
index efcb6e1..0000000
--- a/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/DefaultMTOMAttachment.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package org.apache.axiom.om.impl;
-
-import javax.activation.DataHandler;
-
-
-/**
- * Default implementation of {@link MTOMAttachment}.
- */
-public class DefaultMTOMAttachment implements MTOMAttachment {
-    private final String id;
-    private final DataHandler dataHandler;
-
-    /**
-     * Creates a new instance with the given data and content ID.
-     */
-    public DefaultMTOMAttachment(DataHandler pDataHandler, String pId) {
-        dataHandler = pDataHandler;
-        id = pId;
-    }
-
-    public String getContentID() {
-        return id;
-    }
-
-    public DataHandler getDataHandler() {
-        return dataHandler;
-    }
-}
diff --git a/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MIMEOutputUtils.java b/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MIMEOutputUtils.java
index 5a70448..751ccf7 100644
--- a/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MIMEOutputUtils.java
+++ b/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MIMEOutputUtils.java
@@ -94,24 +94,10 @@
             // text nodes int the binary node list)
             Iterator binaryNodeIterator = binaryNodeList.iterator();
             while (binaryNodeIterator.hasNext()) {
-                Object o = binaryNodeIterator.next();
-                /* Upwards compatibiliy: Should be an instance of
-                 * MTOMAttachment, if the user calls us via
-                 * {@link MTOMXMLStreamWriter#writeOptimized(OMText)},
-                 * or {@link MTOMXMLStreamWriter#writeOptimized(MTOMAttachment)}.
-                 * However, this is a public method and possibly someone
-                 * invokes us directly.
-                 */
-                final MTOMAttachment attachment;
-                if (o instanceof OMText) {
-                    final OMText omText = (OMText) o;
-                    attachment = new DefaultMTOMAttachment((DataHandler) omText.getDataHandler(), omText.getContentID());
-                } else {
-                    attachment = (MTOMAttachment) o;
-                }
-                writeBodyPart(outStream, createMimeBodyPart(attachment
-                        .getContentID(), attachment.getDataHandler()),
-                        boundary);
+                OMText binaryNode = (OMText) binaryNodeIterator.next();
+                writeBodyPart(outStream, createMimeBodyPart(binaryNode
+                        .getContentID(), (DataHandler) binaryNode
+                        .getDataHandler()), boundary);
             }
             finishWritingMime(outStream);
             outStream.flush();
diff --git a/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MTOMAttachment.java b/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MTOMAttachment.java
deleted file mode 100644
index d8f24e2..0000000
--- a/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MTOMAttachment.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.apache.axiom.om.impl;
-
-import javax.activation.DataHandler;
-
-
-/**
- * Interface of an MTOM attachment, as processed by
- * {@link MTOMXMLStreamWriter#writeOptimized(org.apache.axiom.om.OMText)}
- * and {@link MIMEOutputUtils#complete(java.io.OutputStream, java.io.StringWriter, java.util.LinkedList, String, String, String, String)}.
- */
-public interface MTOMAttachment {
-    /**
-     * Returns the attachments ID.
-     */
-    String getContentID();
-    /**
-     * Returns the attachments contents.
-     */
-    DataHandler getDataHandler();
-}
diff --git a/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MTOMXMLStreamWriter.java b/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MTOMXMLStreamWriter.java
index 949a950..5194921 100644
--- a/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MTOMXMLStreamWriter.java
+++ b/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MTOMXMLStreamWriter.java
@@ -273,46 +273,32 @@
         return format.getContentType();
     }
 
-    private boolean isAttachmentPossible(DataHandler pDataHandler) {
-        if (pDataHandler != null) {
+    public void writeOptimized(OMText node) {
+        if(log.isDebugEnabled()){
+            log.debug("Start MTOMXMLStreamWriter.writeOptimized()");
+        }
+        DataHandler dh = (DataHandler)node.getDataHandler();
+        int optimized = UNSUPPORTED;
+        if(dh!=null){
             if(log.isDebugEnabled()){
                 log.debug("DataHandler fetched, starting optimized Threshold processing");
             }
-            int optimized = BufferUtils.doesDataHandlerExceedLimit(pDataHandler, format.getOptimizedThreshold());
-            return optimized != UNSUPPORTED  &&  optimized != EXCEED_LIMIT;
+            optimized= BufferUtils.doesDataHandlerExceedLimit(dh, format.getOptimizedThreshold());
         }
-        return false;
-    }
-
-    public void writeOptimized(MTOMAttachment attachment) {
-        if (log.isDebugEnabled()){
-            log.debug("Start MTOMXMLStreamWriter.writeOptimized()");
+        if(optimized == UNSUPPORTED || optimized == EXCEED_LIMIT){
+            if(log.isDebugEnabled()){
+                log.debug("node added to binart NodeList for optimization");
+            }
+            binaryNodeList.add(node);    
         }
-        if (isAttachmentPossible(attachment.getDataHandler())) {
-            binaryNodeList.add(attachment);    
-        } else {
-            throw new RuntimeException("Unable to inline an attachment.");
-        }
-        if (log.isDebugEnabled()){
-            log.debug("Exit MTOMXMLStreamWriter.writeOptimized()");
-        }
-    }
-
-    public void writeOptimized(OMText node) {
-        if (log.isDebugEnabled()){
-            log.debug("Start MTOMXMLStreamWriter.writeOptimized()");
-        }
-        final DataHandler dh = (DataHandler) node.getDataHandler();
-        if (isAttachmentPossible(dh)) {
-            binaryNodeList.add(new DefaultMTOMAttachment(dh, node.getContentID()));
-        } else {
+        else{
             try{
                 writeOutput(node);
-            } catch(XMLStreamException e) {
+            }catch(XMLStreamException e){
                 throw new RuntimeException("XMLStreamException in writeOutput() call", e);
             }
         }
-        if (log.isDebugEnabled()){
+        if(log.isDebugEnabled()){
             log.debug("Exit MTOMXMLStreamWriter.writeOptimized()");
         }
     }
