diff --git a/plugins/ldapbrowser.common/src/main/java/org/apache/directory/studio/ldapbrowser/common/dialogs/HexDialog.java b/plugins/ldapbrowser.common/src/main/java/org/apache/directory/studio/ldapbrowser/common/dialogs/HexDialog.java
index d072388..d97864b 100644
--- a/plugins/ldapbrowser.common/src/main/java/org/apache/directory/studio/ldapbrowser/common/dialogs/HexDialog.java
+++ b/plugins/ldapbrowser.common/src/main/java/org/apache/directory/studio/ldapbrowser/common/dialogs/HexDialog.java
@@ -35,7 +35,10 @@
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.FileDialog;
@@ -52,6 +55,8 @@
 public class HexDialog extends Dialog
 {
 
+    public static final String LOAD_FILE_NAME_TOOLTIP = "LoadFileName";
+
     /** The default title. */
     private static final String DIALOG_TITLE = Messages.getString( "HexDialog.HexEditor" ); //$NON-NLS-1$
 
@@ -64,6 +69,9 @@
     /** The button ID for the save button. */
     private static final int SAVE_BUTTON_ID = 9999;
 
+    /** Hidden text to set the filename, used for UI tests. */
+    private Text loadFilenameText;
+
     /** The current data. */
     private byte[] currentData;
 
@@ -134,18 +142,7 @@
             String returnedFileName = fileDialog.open();
             if ( returnedFileName != null )
             {
-                try
-                {
-                    File file = new File( returnedFileName );
-                    currentData = FileUtils.readFileToByteArray( file );
-                    hexText.setText( toFormattedHex( currentData ) );
-                }
-                catch ( IOException e )
-                {
-                    ConnectionUIPlugin.getDefault().getExceptionHandler().handleException(
-                        new Status( IStatus.ERROR, BrowserCommonConstants.PLUGIN_ID, IStatus.ERROR, Messages
-                            .getString( "HexDialog.CantReadFile" ), e ) ); //$NON-NLS-1$
-                }
+                loadFile( returnedFileName );
             }
         }
         else
@@ -157,6 +154,23 @@
     }
 
 
+    private void loadFile( String fileName )
+    {
+        try
+        {
+            File file = new File( fileName );
+            currentData = FileUtils.readFileToByteArray( file );
+            hexText.setText( toFormattedHex( currentData ) );
+        }
+        catch ( IOException e )
+        {
+            ConnectionUIPlugin.getDefault().getExceptionHandler().handleException(
+                new Status( IStatus.ERROR, BrowserCommonConstants.PLUGIN_ID, IStatus.ERROR, Messages
+                    .getString( "HexDialog.CantReadFile" ), e ) ); //$NON-NLS-1$
+        }
+    }
+
+
     /**
      * Small helper.
      */
@@ -187,11 +201,23 @@
      */
     protected void createButtonsForButtonBar( Composite parent )
     {
+        ((GridLayout) parent.getLayout()).numColumns++;
+        loadFilenameText = new Text( parent, SWT.NONE );
+        loadFilenameText.setToolTipText( LOAD_FILE_NAME_TOOLTIP );
+        loadFilenameText.setBackground( parent.getBackground() );
+        loadFilenameText.addModifyListener( new ModifyListener()
+        {
+            public void modifyText( ModifyEvent e )
+            {
+                loadFile( loadFilenameText.getText() );
+            }
+        } );
+
         if ( isEditable( currentData ) )
         {
            createButton( parent, EDIT_AS_TEXT_BUTTON_ID, Messages.getString( "HexDialog.EditAsText" ), false ); //$NON-NLS-1$
         }
-        
+
         createButton( parent, LOAD_BUTTON_ID, Messages.getString( "HexDialog.LoadDataButton" ), false ); //$NON-NLS-1$
         createButton( parent, SAVE_BUTTON_ID, Messages.getString( "HexDialog.SaveDataButton" ), false ); //$NON-NLS-1$
         createButton( parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, false );
diff --git a/plugins/ldapbrowser.common/src/main/java/org/apache/directory/studio/ldapbrowser/common/wizards/NewEntryAttributesWizardPage.java b/plugins/ldapbrowser.common/src/main/java/org/apache/directory/studio/ldapbrowser/common/wizards/NewEntryAttributesWizardPage.java
index b6409ea..ebba3c7 100644
--- a/plugins/ldapbrowser.common/src/main/java/org/apache/directory/studio/ldapbrowser/common/wizards/NewEntryAttributesWizardPage.java
+++ b/plugins/ldapbrowser.common/src/main/java/org/apache/directory/studio/ldapbrowser/common/wizards/NewEntryAttributesWizardPage.java
@@ -184,7 +184,7 @@
 
                 // remove empty must attributes
                 // necessary when navigating back, modifying object classes
-                // and Dn and navigation forward again.
+                // and Dn and navigating forward again.
                 Collection<AttributeType> oldMusts = SchemaUtils.getMustAttributeTypeDescriptions( newEntry );
                 for ( AttributeType oldMust : oldMusts )
                 {
diff --git a/plugins/ldapbrowser.core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/IEntry.java b/plugins/ldapbrowser.core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/IEntry.java
index d7a942f..b7741e3 100644
--- a/plugins/ldapbrowser.core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/IEntry.java
+++ b/plugins/ldapbrowser.core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/IEntry.java
@@ -24,18 +24,11 @@
 import java.io.Serializable;
 import java.util.Collection;
 
-import org.apache.directory.api.ldap.model.entry.Attribute;
-import org.apache.directory.api.ldap.model.entry.DefaultAttribute;
-import org.apache.directory.api.ldap.model.entry.DefaultEntry;
-import org.apache.directory.api.ldap.model.entry.Entry;
-import org.apache.directory.api.ldap.model.exception.LdapException;
-import org.apache.directory.api.ldap.model.exception.LdapInvalidAttributeValueException;
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.api.ldap.model.name.Rdn;
 import org.apache.directory.api.ldap.model.schema.ObjectClass;
 import org.apache.directory.api.ldap.model.url.LdapUrl;
 import org.apache.directory.studio.connection.core.ConnectionPropertyPageProvider;
-import org.apache.directory.studio.connection.core.io.LdapRuntimeException;
 import org.apache.directory.studio.connection.core.jobs.StudioConnectionBulkRunnableWithProgress;
 import org.apache.directory.studio.ldapbrowser.core.propertypageproviders.EntryPropertyPageProvider;
 import org.eclipse.core.runtime.IAdaptable;
@@ -471,38 +464,4 @@
      */
     Collection<ObjectClass> getObjectClassDescriptions();
 
-
-    default Entry toEntry()
-    {
-        try
-        {
-            Entry entry = new DefaultEntry( getDn() );
-            for ( IAttribute iAttribute : getAttributes() )
-            {
-                Attribute attribute = new DefaultAttribute( iAttribute.getType() );
-                for ( IValue iValue : iAttribute.getValues() )
-                {
-                    Object rawValue = iValue.getRawValue();
-                    if ( rawValue instanceof String )
-                    {
-                        attribute.add( ( String ) rawValue );
-                    }
-                    else if ( rawValue instanceof byte[] )
-                    {
-                        attribute.add( ( byte[] ) rawValue );
-                    }
-                    else
-                    {
-                        attribute.add( ( String ) null );
-                    }
-                }
-                entry.add( attribute );
-            }
-            return entry;
-        }
-        catch ( LdapException e )
-        {
-            throw new LdapRuntimeException( e );
-        }
-    }
 }
diff --git a/plugins/ldapbrowser.core/src/main/java/org/apache/directory/studio/ldapbrowser/core/utils/ModelConverter.java b/plugins/ldapbrowser.core/src/main/java/org/apache/directory/studio/ldapbrowser/core/utils/ModelConverter.java
index 34e2163..1ee7a31 100644
--- a/plugins/ldapbrowser.core/src/main/java/org/apache/directory/studio/ldapbrowser/core/utils/ModelConverter.java
+++ b/plugins/ldapbrowser.core/src/main/java/org/apache/directory/studio/ldapbrowser/core/utils/ModelConverter.java
@@ -336,14 +336,14 @@
         {
             for ( IValue value : iAttribute.getValues() )
             {
-                String attributeType = value.getAttribute().getType();
+                String attributeDescription = value.getAttribute().getDescription();
                 if ( value.isString() )
                 {
-                    ldapApiEntry.add( attributeType, value.getStringValue() );
+                    ldapApiEntry.add( attributeDescription, value.getStringValue() );
                 }
                 else
                 {
-                    ldapApiEntry.add( attributeType, value.getBinaryValue() );
+                    ldapApiEntry.add( attributeDescription, value.getBinaryValue() );
                 }
             }
         }
diff --git a/plugins/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/certificate/CertificateDialog.java b/plugins/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/certificate/CertificateDialog.java
index 99c501d..c139d8a 100644
--- a/plugins/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/certificate/CertificateDialog.java
+++ b/plugins/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/certificate/CertificateDialog.java
@@ -41,11 +41,15 @@
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.FileDialog;
 import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
 
 
 /**
@@ -57,6 +61,8 @@
 public class CertificateDialog extends Dialog
 {
 
+    public static final String LOAD_FILE_NAME_TOOLTIP = "LoadFileName";
+
     /** The default title. */
     private static final String DIALOG_TITLE = Messages.getString( "CertificateDialog.CertificateDialog" ); //$NON-NLS-1$
 
@@ -66,6 +72,9 @@
     /** The button ID for the save button. */
     private static final int SAVE_BUTTON_ID = 9999;
 
+    /** Hidden text to set the filename, used for UI tests. */
+    private Text loadFilenameText;
+
     /** The current certificate binary data. */
     private byte[] currentData;
 
@@ -130,18 +139,7 @@
             String returnedFileName = fileDialog.open();
             if ( returnedFileName != null )
             {
-                try
-                {
-                    File file = new File( returnedFileName );
-                    currentData = FileUtils.readFileToByteArray( file );
-                    updateInput();
-                }
-                catch ( IOException e )
-                {
-                    ConnectionUIPlugin.getDefault().getExceptionHandler().handleException(
-                        new Status( IStatus.ERROR, ValueEditorsConstants.PLUGIN_ID, IStatus.ERROR, Messages
-                            .getString( "CertificateDialog.CantReadFile" ), e ) ); //$NON-NLS-1$
-                }
+                loadFile( returnedFileName );
             }
         }
         else
@@ -153,6 +151,23 @@
     }
 
 
+    private void loadFile( String fileName )
+    {
+        try
+        {
+            File file = new File( fileName );
+            currentData = FileUtils.readFileToByteArray( file );
+            updateInput();
+        }
+        catch ( IOException e )
+        {
+            ConnectionUIPlugin.getDefault().getExceptionHandler().handleException(
+                new Status( IStatus.ERROR, ValueEditorsConstants.PLUGIN_ID, IStatus.ERROR, Messages
+                    .getString( "CertificateDialog.CantReadFile" ), e ) ); //$NON-NLS-1$
+        }
+    }
+
+
     /**
      * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
      */
@@ -169,6 +184,18 @@
      */
     protected void createButtonsForButtonBar( Composite parent )
     {
+        ((GridLayout) parent.getLayout()).numColumns++;
+        loadFilenameText = new Text( parent, SWT.NONE );
+        loadFilenameText.setToolTipText( LOAD_FILE_NAME_TOOLTIP );
+        loadFilenameText.setBackground( parent.getBackground() );
+        loadFilenameText.addModifyListener( new ModifyListener()
+        {
+            public void modifyText( ModifyEvent e )
+            {
+                loadFile( loadFilenameText.getText() );
+            }
+        } );
+
         createButton( parent, LOAD_BUTTON_ID, Messages.getString( "CertificateDialog.LoadCertificateButton" ), false ); //$NON-NLS-1$
         createButton( parent, SAVE_BUTTON_ID, Messages.getString( "CertificateDialog.SaveCertificateButton" ), false ); //$NON-NLS-1$
         createButton( parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, false );
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/EntryEditorTest.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/EntryEditorTest.java
index 04fcbec..7565099 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/EntryEditorTest.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/EntryEditorTest.java
@@ -28,37 +28,25 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
-import java.io.File;
-import java.io.InputStream;
-import java.net.URL;
-import java.security.KeyPair;
-import java.security.KeyPairGenerator;
-import java.security.cert.X509Certificate;
-
 import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.directory.api.ldap.model.constants.AuthenticationLevel;
 import org.apache.directory.api.ldap.model.constants.LdapSecurityConstants;
-import org.apache.directory.api.ldap.model.entry.DefaultModification;
 import org.apache.directory.api.ldap.model.entry.Entry;
-import org.apache.directory.api.ldap.model.entry.ModificationOperation;
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.api.ldap.model.password.PasswordUtil;
-import org.apache.directory.api.util.FileUtils;
-import org.apache.directory.api.util.IOUtils;
 import org.apache.directory.api.util.Strings;
 import org.apache.directory.server.annotations.CreateLdapServer;
 import org.apache.directory.server.annotations.CreateTransport;
 import org.apache.directory.server.core.annotations.ApplyLdifFiles;
 import org.apache.directory.server.core.integ.AbstractLdapTestUnit;
-import org.apache.directory.server.core.security.CertificateUtil;
 import org.apache.directory.studio.ldapbrowser.core.BrowserCoreMessages;
 import org.apache.directory.studio.ldifparser.LdifFormatParameters;
 import org.apache.directory.studio.ldifparser.LdifParserConstants;
 import org.apache.directory.studio.ldifparser.model.lines.LdifAttrValLine;
 import org.apache.directory.studio.test.integration.ui.bots.AciItemEditorDialogBot;
-import org.apache.directory.studio.test.integration.ui.bots.BotUtils;
 import org.apache.directory.studio.test.integration.ui.bots.BrowserViewBot;
+import org.apache.directory.studio.test.integration.ui.bots.CertificateEditorDialogBot;
 import org.apache.directory.studio.test.integration.ui.bots.ConnectionsViewBot;
 import org.apache.directory.studio.test.integration.ui.bots.DnEditorDialogBot;
 import org.apache.directory.studio.test.integration.ui.bots.EntryEditorBot;
@@ -75,15 +63,12 @@
 import org.apache.directory.studio.test.integration.ui.bots.utils.Characters;
 import org.apache.directory.studio.test.integration.ui.bots.utils.FrameworkRunnerWithScreenshotCaptureListener;
 import org.apache.directory.studio.test.integration.ui.bots.utils.JobWatcher;
-import org.eclipse.core.runtime.Platform;
 import org.eclipse.swtbot.swt.finder.utils.SWTUtils;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import sun.security.x509.X500Name;
-
 
 /**
  * Tests the entry editor.
@@ -523,29 +508,33 @@
 
 
     /**
-     * DIRSTUDIO-1199, DIRSTUDIO-1204: Binary attributes
+     * DIRSTUDIO-1199, DIRSTUDIO-1204, DIRSTUDIO-1267: Binary attributes
      */
     @Test
     public void testCertificateValueEditor() throws Exception
     {
-        X500Name issuer = new X500Name( "Foo", "Bar", "Baz", "US" );
-        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance( "EC" );
-        keyPairGenerator.initialize( 256 );
-        KeyPair keyPair = keyPairGenerator.generateKeyPair();
-        X509Certificate certificate = CertificateUtil.generateSelfSignedCertificate( issuer, keyPair, 365,
-            "SHA256WithECDSA" );
-        getService().getAdminSession().modify( new Dn( "cn=Barbara Jensen,ou=users,ou=system" ),
-            new DefaultModification( ModificationOperation.ADD_ATTRIBUTE, "userCertificate",
-                certificate.getEncoded() ) );
+        String certFile = ResourceUtils.prepareInputFile( "rfc5280_cert2.cer" );
 
         browserViewBot.selectEntry( "DIT", "Root DSE", "ou=system", "ou=users", "cn=Barbara Jensen" );
 
         EntryEditorBot entryEditorBot = studioBot.getEntryEditorBot( "cn=Barbara Jensen,ou=users,ou=system" );
         entryEditorBot.activate();
 
-        BotUtils.sleep( 1000 );
+        NewAttributeWizardBot wizardBot = entryEditorBot.openNewAttributeWizard();
+        assertTrue( wizardBot.isVisible() );
+        wizardBot.typeAttributeType( "userCertificate" );
+        wizardBot.clickNextButton();
+        wizardBot.selectBinaryOption();
+        CertificateEditorDialogBot certEditorBot = wizardBot.clickFinishButtonExpectingCertificateEditor();
+
+        assertTrue( certEditorBot.isVisible() );
+        certEditorBot.typeFile( certFile );
+
+        certEditorBot.clickOkButton();
+
+        modificationLogsViewBot.waitForText( "add: userCertificate;binary\nuserCertificate;binary:: " );
         assertTrue( entryEditorBot.getAttributeValues()
-            .contains( "userCertificate: X.509v3: CN=Foo,OU=Bar,O=Baz,C=US" ) );
+            .contains( "userCertificate: X.509v3: CN=End Entity,DC=example,DC=com" ) );
     }
 
 
@@ -555,11 +544,7 @@
     @Test
     public void testImageValueEditor() throws Exception
     {
-        URL url = Platform.getInstanceLocation().getURL();
-        String destFile = url.getFile() + "studio_64x64.jpg";
-        InputStream is = getClass().getResourceAsStream( "studio_64x64.jpg" );
-        byte[] data = IOUtils.toByteArray( is, 2014 );
-        FileUtils.writeByteArrayToFile( new File( destFile ), data );
+        String imgFile = ResourceUtils.prepareInputFile( "studio_64x64.jpg" );
 
         browserViewBot.selectEntry( "DIT", "Root DSE", "ou=system", "ou=users", "cn=Barbara Jensen" );
 
@@ -572,11 +557,11 @@
         wizardBot.typeAttributeType( "jpegPhoto" );
         ImageEditorDialogBot imageEditorBot = wizardBot.clickFinishButtonExpectingImageEditor();
         assertTrue( imageEditorBot.isVisible() );
-        imageEditorBot.typeFile( destFile );
+        imageEditorBot.typeFile( imgFile );
         imageEditorBot.clickOkButton();
 
         // assert value after saved and reloaded from server
-        SWTUtils.sleep( 1000 );
+        modificationLogsViewBot.waitForText( "add: jpegPhoto\njpegPhoto:: " );
         assertTrue( entryEditorBot.getAttributeValues().contains( "jpegPhoto: JPEG-Image (64x64 Pixel, 2014 Bytes)" ) );
     }
 
@@ -780,7 +765,7 @@
 
 
     /**
-     * Test for DIRSTUDIO-1249: userSMIMECertificate is a binary attribute.
+     * Test for DIRSTUDIO-1249, DIRSTUDIO-1267: userSMIMECertificate is a binary attribute.
      */
     @Test
     public void testHexEditor() throws Exception
@@ -789,7 +774,6 @@
 
         EntryEditorBot entryEditorBot = studioBot.getEntryEditorBot( "uid=hnelson,ou=users,ou=system" );
         entryEditorBot.activate();
-        // SWTUtils.sleep( 10000 );
         assertTrue( entryEditorBot.getAttributeValues().contains( "usersmimecertificate: Binary Data (255 Bytes)" ) );
         assertTrue( entryEditorBot.getAttributeValues().contains( "usersmimecertificate: Binary Data (256 Bytes)" ) );
         assertTrue( entryEditorBot.getAttributeValues().contains( "usersmimecertificate: Binary Data (257 Bytes)" ) );
@@ -801,7 +785,6 @@
         assertTrue( hexText.contains( "70 71 72 73 74 75 76 77  78 79 7a 7b 7c 7d 7e 7f     pqrstuvw xyz{|}~." ) );
         assertTrue( hexText.contains( "80 81 82 83 84 85 86 87  88 89 8a 8b 8c 8d 8e 8f     ........ ........" ) );
         assertTrue( hexText.contains( "f0 f1 f2 f3 f4 f5 f6 f7  f8 f9 fa fb fc fd fe ff     ........ ........" ) );
-        // SWTUtils.sleep( 10000 );
         hexEditorDialogBot.clickCancelButton();
 
         hexEditorDialogBot = entryEditorBot.editValueExpectingHexEditor( "usersmimecertificate",
@@ -816,6 +799,25 @@
         assertTrue( hexText.contains( "f0 f1 f2 f3 f4 f5 f6 f7  f8 f9 fa fb fc fd fe ff     ........ ........" ) );
         assertTrue( hexText.contains( "00                                                   ." ) );
         hexEditorDialogBot.clickCancelButton();
+
+        String crtFile = ResourceUtils.prepareInputFile( "rfc5280_cert2.cer" );
+
+        entryEditorBot.activate();
+        NewAttributeWizardBot wizardBot = entryEditorBot.openNewAttributeWizard();
+        assertTrue( wizardBot.isVisible() );
+        wizardBot.typeAttributeType( "userSMIMECertificate" );
+        wizardBot.clickNextButton();
+        wizardBot.selectBinaryOption();
+        HexEditorDialogBot hexEditorBot = wizardBot.clickFinishButtonExpectingHexEditor();
+
+        assertTrue( hexEditorBot.isVisible() );
+        hexEditorBot.typeFile( crtFile );
+
+        hexEditorBot.clickOkButton();
+
+        modificationLogsViewBot.waitForText( "add: userSMIMECertificate;binary\nuserSMIMECertificate;binary:: " );
+        assertTrue( entryEditorBot.getAttributeValues()
+            .contains( "usersmimecertificate: Binary Data (629 Bytes)" ) );
     }
 
 }
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/ImportExportTest.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/ImportExportTest.java
index 4cb5ee8..8c5e652 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/ImportExportTest.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/ImportExportTest.java
@@ -30,18 +30,15 @@
 
 import java.io.File;
 import java.io.IOException;
-import java.io.InputStream;
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
 import java.util.List;
-import java.util.UUID;
 import java.util.function.Supplier;
 
 import org.apache.directory.api.ldap.model.entry.DefaultEntry;
 import org.apache.directory.api.ldap.model.message.SearchScope;
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.api.util.FileUtils;
-import org.apache.directory.api.util.IOUtils;
 import org.apache.directory.server.annotations.CreateLdapServer;
 import org.apache.directory.server.annotations.CreateTransport;
 import org.apache.directory.server.core.annotations.ApplyLdifFiles;
@@ -604,6 +601,11 @@
         assertTrue( entryEditorBot.getAttributeValues().contains( "roomNumber: 1234" ) );
         assertTrue( entryEditorBot.getAttributeValues().contains( "roomNumber: 2345" ) );
         assertTrue( entryEditorBot.getAttributeValues().contains( "roomNumber: 3456" ) );
+        assertTrue( entryEditorBot.getAttributeValues()
+            .contains( "userCertificate: X.509v3: CN=End Entity,DC=example,DC=com" ) );
+        modificationLogsViewBot.waitForText( "add: userCertificate;binary\nuserCertificate;binary:: " );
+        modificationLogsViewBot.waitForText( "add: description;lang-en\ndescription;lang-en: " );
+        modificationLogsViewBot.waitForText( "add: description;lang-de\ndescription;lang-de: " );
 
         assertFalse( browserViewBot.existsEntry( "DIT", "Root DSE", "ou=system", "ou=users", "uid=user.2" ) );
 
@@ -684,12 +686,7 @@
 
     private String prepareInputFile( String inputFileName ) throws IOException
     {
-        URL url = Platform.getInstanceLocation().getURL();
-        String destFile = url.getFile() + UUID.randomUUID().toString();
-        InputStream is = getClass().getResourceAsStream( inputFileName );
-        String ldifContent = IOUtils.toString( is, StandardCharsets.UTF_8 );
-        FileUtils.writeStringToFile( new File( destFile ), ldifContent, StandardCharsets.UTF_8, false );
-        return destFile;
+        return ResourceUtils.prepareInputFile( inputFileName );
     }
 
 }
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/NewEntryWizardTest.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/NewEntryWizardTest.java
index 434aa59..6fbaa3d 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/NewEntryWizardTest.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/NewEntryWizardTest.java
@@ -42,14 +42,21 @@
 import org.apache.directory.studio.connection.core.Connection.ReferralHandlingMethod;
 import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection;
 import org.apache.directory.studio.test.integration.ui.bots.BrowserViewBot;
+import org.apache.directory.studio.test.integration.ui.bots.CertificateEditorDialogBot;
 import org.apache.directory.studio.test.integration.ui.bots.ConnectionsViewBot;
 import org.apache.directory.studio.test.integration.ui.bots.DnEditorDialogBot;
+import org.apache.directory.studio.test.integration.ui.bots.EditAttributeWizardBot;
+import org.apache.directory.studio.test.integration.ui.bots.EntryEditorBot;
+import org.apache.directory.studio.test.integration.ui.bots.HexEditorDialogBot;
+import org.apache.directory.studio.test.integration.ui.bots.ModificationLogsViewBot;
+import org.apache.directory.studio.test.integration.ui.bots.NewAttributeWizardBot;
 import org.apache.directory.studio.test.integration.ui.bots.NewEntryWizardBot;
 import org.apache.directory.studio.test.integration.ui.bots.ReferralDialogBot;
 import org.apache.directory.studio.test.integration.ui.bots.StudioBot;
 import org.apache.directory.studio.test.integration.ui.bots.SubtreeSpecificationEditorDialogBot;
 import org.apache.directory.studio.test.integration.ui.bots.utils.Assertions;
 import org.apache.directory.studio.test.integration.ui.bots.utils.FrameworkRunnerWithScreenshotCaptureListener;
+import org.eclipse.swtbot.swt.finder.exceptions.WidgetNotFoundException;
 import org.eclipse.swtbot.swt.finder.utils.SWTUtils;
 import org.junit.After;
 import org.junit.Before;
@@ -71,10 +78,10 @@
     private StudioBot studioBot;
     private ConnectionsViewBot connectionsViewBot;
     private BrowserViewBot browserViewBot;
+    private ModificationLogsViewBot modificationLogsViewBot;
 
     private Connection connection;
 
-
     @Before
     public void setUp() throws Exception
     {
@@ -95,6 +102,7 @@
         connectionsViewBot = studioBot.getConnectionView();
         connection = connectionsViewBot.createTestConnection( "NewEntryWizardTest", ldapServer.getPort() );
         browserViewBot = studioBot.getBrowserView();
+        modificationLogsViewBot = studioBot.getModificationLogsViewBot();
     }
 
 
@@ -570,4 +578,120 @@
         browserViewBot.selectEntry( "DIT", "Root DSE", "ou=system", "l=eu+l=de+l=Berlin" );
     }
 
+
+    /**
+     * DIRSTUDIO-1267: Test creation of new entry with binary option and language tags.
+     */
+    @Test
+    public void testCreateEntryWithBinaryOptionAndLanguageTags() throws Exception
+    {
+        String certFile = ResourceUtils.prepareInputFile( "rfc5280_cert1.cer" );
+        String crlFile = ResourceUtils.prepareInputFile( "rfc5280_crl.crl" );
+
+        browserViewBot.selectEntry( "DIT", "Root DSE", "ou=system" );
+
+        NewEntryWizardBot wizardBot = browserViewBot.openNewEntryWizard();
+
+        wizardBot.selectCreateEntryFromScratch();
+        wizardBot.clickNextButton();
+        wizardBot.addObjectClasses( "organizationalRole" );
+        wizardBot.addObjectClasses( "certificationAuthority" );
+        wizardBot.clickNextButton();
+
+        wizardBot.setRdnType( 1, "cn" );
+        wizardBot.setRdnValue( 1, "asdf" );
+        wizardBot.clickNextButton();
+
+        // by default the hex or certificate editor is opened, close it
+        try
+        {
+            new HexEditorDialogBot().clickCancelButton();
+        }
+        catch ( WidgetNotFoundException e )
+        {
+        }
+        try
+        {
+            new CertificateEditorDialogBot().clickCancelButton();
+        }
+        catch ( WidgetNotFoundException e )
+        {
+        }
+
+        wizardBot.activate();
+        NewAttributeWizardBot newAttributeWizardBot = wizardBot.openNewAttributeWizard();
+        assertTrue( newAttributeWizardBot.isVisible() );
+        newAttributeWizardBot.typeAttributeType( "description" );
+        newAttributeWizardBot.clickNextButton();
+        newAttributeWizardBot.setLanguageTag( "en", "us" );
+        newAttributeWizardBot.clickFinishButton();
+        wizardBot.cancelEditValue();
+        wizardBot.activate();
+        wizardBot.editValue( "description;lang-en-us", null );
+        SWTUtils.sleep( 1000 );
+        wizardBot.typeValueAndFinish( "English description" );
+
+        wizardBot.activate();
+        EditAttributeWizardBot editAttributeBot = wizardBot.editAttribute( "cACertificate", null );
+        editAttributeBot.clickNextButton();
+        editAttributeBot.selectBinaryOption();
+        editAttributeBot.clickFinishButton();
+
+        wizardBot.activate();
+        wizardBot.editValue( "cACertificate;binary", null );
+        CertificateEditorDialogBot certEditorBot = new CertificateEditorDialogBot();
+        assertTrue( certEditorBot.isVisible() );
+        certEditorBot.typeFile( certFile );
+        certEditorBot.clickOkButton();
+
+        wizardBot.activate();
+        editAttributeBot = wizardBot.editAttribute( "certificateRevocationList", null );
+        editAttributeBot.clickNextButton();
+        editAttributeBot.selectBinaryOption();
+        editAttributeBot.clickFinishButton();
+
+        wizardBot.activate();
+        wizardBot.editValue( "certificateRevocationList;binary", null );
+        HexEditorDialogBot hexEditorBot = new HexEditorDialogBot();
+        assertTrue( hexEditorBot.isVisible() );
+        hexEditorBot.typeFile( crlFile );
+        hexEditorBot.clickOkButton();
+
+        wizardBot.activate();
+        editAttributeBot = wizardBot.editAttribute( "authorityRevocationList", null );
+        editAttributeBot.clickNextButton();
+        editAttributeBot.selectBinaryOption();
+        editAttributeBot.clickFinishButton();
+
+        wizardBot.activate();
+        wizardBot.editValue( "authorityRevocationList;binary", null );
+        assertTrue( hexEditorBot.isVisible() );
+        hexEditorBot.typeFile( crlFile );
+        hexEditorBot.clickOkButton();
+
+        wizardBot.activate();
+        wizardBot.clickFinishButton();
+
+        assertTrue( browserViewBot.existsEntry( "DIT", "Root DSE", "ou=system", "cn=asdf" ) );
+        browserViewBot.selectEntry( "DIT", "Root DSE", "ou=system", "cn=asdf" );
+
+        EntryEditorBot entryEditorBot = studioBot.getEntryEditorBot( "cn=asdf,ou=system" );
+        entryEditorBot.activate();
+
+        modificationLogsViewBot.waitForText( "cACertificate;binary:: MIICPjCCAaeg" );
+        assertTrue( entryEditorBot.getAttributeValues()
+            .contains( "cACertificate;binary: X.509v3: CN=Example CA,DC=example,DC=com" ) );
+
+        modificationLogsViewBot.waitForText( "certificateRevocationList;binary:: MIIBYDCBygIB" );
+        assertTrue( entryEditorBot.getAttributeValues()
+            .contains( "certificateRevocationList;binary: Binary Data (356 Bytes)" ) );
+
+        modificationLogsViewBot.waitForText( "authorityRevocationList;binary:: MIIBYDCBygIB" );
+        assertTrue( entryEditorBot.getAttributeValues()
+            .contains( "authorityRevocationList;binary: Binary Data (356 Bytes)" ) );
+
+        modificationLogsViewBot.waitForText( "description;lang-en-us: English description" );
+        assertTrue( entryEditorBot.getAttributeValues()
+            .contains( "description;lang-en-us: English description" ) );
+    }
 }
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/OpenLdapTest.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/OpenLdapTest.java
index 519e9b3..d5a6af0 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/OpenLdapTest.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/OpenLdapTest.java
@@ -47,17 +47,24 @@
 import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection.ModifyMode;
 import org.apache.directory.studio.ldapbrowser.core.model.schema.Schema;
 import org.apache.directory.studio.test.integration.ui.bots.BrowserViewBot;
+import org.apache.directory.studio.test.integration.ui.bots.CertificateEditorDialogBot;
 import org.apache.directory.studio.test.integration.ui.bots.ConnectionsViewBot;
+import org.apache.directory.studio.test.integration.ui.bots.DeleteDialogBot;
+import org.apache.directory.studio.test.integration.ui.bots.EditAttributeWizardBot;
 import org.apache.directory.studio.test.integration.ui.bots.EntryEditorBot;
 import org.apache.directory.studio.test.integration.ui.bots.ErrorDialogBot;
+import org.apache.directory.studio.test.integration.ui.bots.HexEditorDialogBot;
 import org.apache.directory.studio.test.integration.ui.bots.ModificationLogsViewBot;
 import org.apache.directory.studio.test.integration.ui.bots.NewAttributeWizardBot;
 import org.apache.directory.studio.test.integration.ui.bots.NewConnectionWizardBot;
+import org.apache.directory.studio.test.integration.ui.bots.NewEntryWizardBot;
 import org.apache.directory.studio.test.integration.ui.bots.SchemaBrowserBot;
 import org.apache.directory.studio.test.integration.ui.bots.SearchDialogBot;
 import org.apache.directory.studio.test.integration.ui.bots.StudioBot;
 import org.apache.directory.studio.test.integration.ui.bots.utils.Assertions;
 import org.apache.directory.studio.test.integration.ui.bots.utils.FrameworkRunnerWithScreenshotCaptureListener;
+import org.eclipse.swtbot.swt.finder.exceptions.WidgetNotFoundException;
+import org.eclipse.swtbot.swt.finder.utils.SWTUtils;
 import org.junit.After;
 import org.junit.Assume;
 import org.junit.Before;
@@ -474,4 +481,223 @@
         browserViewBot.selectEntry( "DIT", "Root DSE" );
     }
 
+
+    /**
+     * DIRSTUDIO-1267: Test creation of new entry with binary option and language tags.
+     */
+    @Test
+    public void testCreateEntryWithBinaryOptionAndLanguageTags() throws Exception
+    {
+        String certFile = ResourceUtils.prepareInputFile( "rfc5280_cert1.cer" );
+        String crlFile = ResourceUtils.prepareInputFile( "rfc5280_crl.crl" );
+
+        browserViewBot.selectEntry( "DIT", "Root DSE", "dc=example,dc=org", "ou=users" );
+
+        NewEntryWizardBot wizardBot = browserViewBot.openNewEntryWizard();
+
+        wizardBot.selectCreateEntryFromScratch();
+        wizardBot.clickNextButton();
+        wizardBot.addObjectClasses( "organizationalRole" );
+        wizardBot.addObjectClasses( "certificationAuthority" );
+        wizardBot.clickNextButton();
+
+        wizardBot.setRdnType( 1, "cn" );
+        wizardBot.setRdnValue( 1, "asdf" );
+        wizardBot.clickNextButton();
+
+        // by default the hex or certificate editor is opened, close it
+        try
+        {
+            new HexEditorDialogBot().clickCancelButton();
+        }
+        catch ( WidgetNotFoundException e )
+        {
+        }
+        try
+        {
+            new CertificateEditorDialogBot().clickCancelButton();
+        }
+        catch ( WidgetNotFoundException e )
+        {
+        }
+
+        wizardBot.activate();
+        NewAttributeWizardBot newAttributeWizardBot = wizardBot.openNewAttributeWizard();
+        assertTrue( newAttributeWizardBot.isVisible() );
+        newAttributeWizardBot.typeAttributeType( "description" );
+        newAttributeWizardBot.clickNextButton();
+        newAttributeWizardBot.setLanguageTag( "en", "us" );
+        newAttributeWizardBot.clickFinishButton();
+        wizardBot.cancelEditValue();
+        wizardBot.activate();
+        wizardBot.editValue( "description;lang-en-us", null );
+        SWTUtils.sleep( 1000 );
+        wizardBot.typeValueAndFinish( "English description" );
+
+        wizardBot.activate();
+        EditAttributeWizardBot editAttributeBot = wizardBot.editAttribute( "cACertificate", null );
+        editAttributeBot.clickNextButton();
+        editAttributeBot.selectBinaryOption();
+        editAttributeBot.clickFinishButton();
+
+        wizardBot.activate();
+        wizardBot.editValue( "cACertificate;binary", null );
+        CertificateEditorDialogBot certEditorBot = new CertificateEditorDialogBot();
+        assertTrue( certEditorBot.isVisible() );
+        certEditorBot.typeFile( certFile );
+        certEditorBot.clickOkButton();
+
+        wizardBot.activate();
+        editAttributeBot = wizardBot.editAttribute( "certificateRevocationList", null );
+        editAttributeBot.clickNextButton();
+        editAttributeBot.selectBinaryOption();
+        editAttributeBot.clickFinishButton();
+
+        wizardBot.activate();
+        wizardBot.editValue( "certificateRevocationList;binary", null );
+        HexEditorDialogBot hexEditorBot = new HexEditorDialogBot();
+        assertTrue( hexEditorBot.isVisible() );
+        hexEditorBot.typeFile( crlFile );
+        hexEditorBot.clickOkButton();
+
+        wizardBot.activate();
+        editAttributeBot = wizardBot.editAttribute( "authorityRevocationList", null );
+        editAttributeBot.clickNextButton();
+        editAttributeBot.selectBinaryOption();
+        editAttributeBot.clickFinishButton();
+
+        wizardBot.activate();
+        wizardBot.editValue( "authorityRevocationList;binary", null );
+        assertTrue( hexEditorBot.isVisible() );
+        hexEditorBot.typeFile( crlFile );
+        hexEditorBot.clickOkButton();
+
+        wizardBot.activate();
+        wizardBot.clickFinishButton();
+
+        assertTrue( browserViewBot.existsEntry( "DIT", "Root DSE", "dc=example,dc=org", "ou=users", "cn=asdf" ) );
+        browserViewBot.selectEntry( "DIT", "Root DSE", "dc=example,dc=org", "ou=users", "cn=asdf" );
+
+        EntryEditorBot entryEditorBot = studioBot.getEntryEditorBot( "cn=asdf,ou=users,dc=example,dc=org" );
+        entryEditorBot.activate();
+
+        modificationLogsViewBot.waitForText( "cACertificate;binary:: MIICPjCCAaeg" );
+        assertTrue( entryEditorBot.getAttributeValues()
+            .contains( "cACertificate;binary: X.509v3: CN=Example CA,DC=example,DC=com" ) );
+
+        modificationLogsViewBot.waitForText( "certificateRevocationList;binary:: MIIBYDCBygIB" );
+        assertTrue( entryEditorBot.getAttributeValues()
+            .contains( "certificateRevocationList;binary: Binary Data (356 Bytes)" ) );
+
+        modificationLogsViewBot.waitForText( "authorityRevocationList;binary:: MIIBYDCBygIB" );
+        assertTrue( entryEditorBot.getAttributeValues()
+            .contains( "authorityRevocationList;binary: Binary Data (356 Bytes)" ) );
+
+        modificationLogsViewBot.waitForText( "description;lang-en-us: English description" );
+        assertTrue( entryEditorBot.getAttributeValues()
+            .contains( "description;lang-en-us: English description" ) );
+
+        browserViewBot.selectEntry( "DIT", "Root DSE", "dc=example,dc=org", "ou=users", "cn=asdf" );
+        DeleteDialogBot deleteDialogBot = browserViewBot.openDeleteDialog();
+        deleteDialogBot.clickOkButton();
+    }
+
+
+    /**
+     * DIRSTUDIO-1267: Test adding, editing and deleting of attributes with binary option in the entry editor. 
+     */
+    @Test
+    public void testAddEditDeleteAttributeWithBinaryOption() throws Exception
+    {
+        String cert2File = ResourceUtils.prepareInputFile( "rfc5280_cert2.cer" );
+        String cert3File = ResourceUtils.prepareInputFile( "rfc5280_cert3.cer" );
+
+        browserViewBot.selectEntry( "DIT", "Root DSE", "dc=example,dc=org", "ou=users", "uid=user.1" );
+
+        EntryEditorBot entryEditorBot = studioBot.getEntryEditorBot( "uid=user.1,ou=users,dc=example,dc=org" );
+        entryEditorBot.activate();
+
+        // add userCertificate;binary
+        NewAttributeWizardBot wizardBot = entryEditorBot.openNewAttributeWizard();
+        assertTrue( wizardBot.isVisible() );
+        wizardBot.typeAttributeType( "userCertificate" );
+        wizardBot.clickNextButton();
+        wizardBot.selectBinaryOption();
+        CertificateEditorDialogBot certEditorBot = wizardBot.clickFinishButtonExpectingCertificateEditor();
+        assertTrue( certEditorBot.isVisible() );
+        certEditorBot.typeFile( cert2File );
+        certEditorBot.clickOkButton();
+        modificationLogsViewBot.waitForText( "add: userCertificate;binary\nuserCertificate;binary:: MIICcTCCAdqg" );
+        assertTrue( entryEditorBot.getAttributeValues()
+            .contains( "userCertificate;binary: X.509v3: CN=End Entity,DC=example,DC=com" ) );
+
+        // edit userCertificate;binary
+        certEditorBot = entryEditorBot.editValueExpectingCertificateEditor( "userCertificate;binary",
+            "X.509v3: CN=End Entity,DC=example,DC=com" );
+        assertTrue( certEditorBot.isVisible() );
+        certEditorBot.typeFile( cert3File );
+        certEditorBot.clickOkButton();
+        modificationLogsViewBot.waitForText( "delete: userCertificate;binary\nuserCertificate;binary:: MIICcTCCAdqg" );
+        modificationLogsViewBot.waitForText( "add: userCertificate;binary\nuserCertificate;binary:: MIIDjjCCA06g" );
+        assertFalse( entryEditorBot.getAttributeValues()
+            .contains( "userCertificate;binary: X.509v3: CN=End Entity,DC=example,DC=com" ) );
+        assertTrue( entryEditorBot.getAttributeValues()
+            .contains( "userCertificate;binary: X.509v3: CN=DSA End Entity,DC=example,DC=com" ) );
+
+        // delete userCertificate;binary
+        entryEditorBot.deleteValue( "userCertificate;binary", "X.509v3: CN=DSA End Entity,DC=example,DC=com" );
+        modificationLogsViewBot.waitForText( "delete: userCertificate;binary\nuserCertificate;binary:: MIIDjjCCA06g" );
+        assertFalse( entryEditorBot.getAttributeValues()
+            .contains( "userCertificate;binary: X.509v3: CN=DSA End Entity,DC=example,DC=com" ) );
+
+    }
+
+
+    /**
+     * DIRSTUDIO-1267:Test adding, editing and deleting of attributes with language tag in the entry editor.
+     */
+    @Test
+    public void testAddEditDeleteAttributeWithLanguageTag() throws Exception
+    {
+        browserViewBot.selectEntry( "DIT", "Root DSE", "dc=example,dc=org", "ou=users", "uid=user.1" );
+
+        EntryEditorBot entryEditorBot = studioBot.getEntryEditorBot( "uid=user.1,ou=users,dc=example,dc=org" );
+        entryEditorBot.activate();
+
+        // add attribute description;lang-en
+        entryEditorBot.activate();
+        NewAttributeWizardBot wizardBot = entryEditorBot.openNewAttributeWizard();
+        assertTrue( wizardBot.isVisible() );
+        wizardBot.typeAttributeType( "description" );
+        wizardBot.clickNextButton();
+        wizardBot.setLanguageTag( "en", "" );
+        wizardBot.clickFinishButton();
+        entryEditorBot.typeValueAndFinish( "English" );
+        modificationLogsViewBot.waitForText( "add: description;lang-en\ndescription;lang-en: English\n-" );
+        assertTrue( entryEditorBot.getAttributeValues().contains( "description;lang-en: English" ) );
+
+        // edit the attribute to description;lang-en
+        EditAttributeWizardBot editWizardBot = entryEditorBot.editAttribute( "description;lang-en", "English" );
+        editWizardBot.clickNextButton();
+        editWizardBot.setLanguageTag( "en", "us" );
+        editWizardBot.clickFinishButton();
+        modificationLogsViewBot.waitForText( "delete: description;lang-en\ndescription;lang-en: English\n-" );
+        modificationLogsViewBot.waitForText( "add: description;lang-en-us\ndescription;lang-en-us: English\n-" );
+        assertFalse( entryEditorBot.getAttributeValues().contains( "description;lang-en: English" ) );
+        assertTrue( entryEditorBot.getAttributeValues().contains( "description;lang-en-us: English" ) );
+
+        // edit the value
+        entryEditorBot.editValue( "description;lang-en-us", "English" );
+        entryEditorBot.typeValueAndFinish( "English US" );
+        modificationLogsViewBot.waitForText( "delete: description;lang-en-us\ndescription;lang-en-us: English\n-" );
+        modificationLogsViewBot.waitForText( "add: description;lang-en-us\ndescription;lang-en-us: English US\n-" );
+        assertFalse( entryEditorBot.getAttributeValues().contains( "description;lang-en-us: English" ) );
+        assertTrue( entryEditorBot.getAttributeValues().contains( "description;lang-en-us: English US" ) );
+
+        // delete the attribute
+        entryEditorBot.deleteValue( "description;lang-en-us", "English US" );
+        modificationLogsViewBot.waitForText( "delete: description;lang-en-us\ndescription;lang-en-us: English US\n-" );
+        assertFalse( entryEditorBot.getAttributeValues().contains( "description;lang-en-us: English US" ) );
+    }
+
 }
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/ResourceUtils.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/ResourceUtils.java
new file mode 100644
index 0000000..2fad2f3
--- /dev/null
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/ResourceUtils.java
@@ -0,0 +1,50 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.apache.directory.studio.test.integration.ui;
+
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.UUID;
+
+import org.apache.directory.api.util.IOUtils;
+import org.eclipse.core.runtime.Platform;
+
+
+public class ResourceUtils
+{
+    public static String prepareInputFile( String inputFileName ) throws IOException
+    {
+        URL url = Platform.getInstanceLocation().getURL();
+        String destFile = url.getFile() + UUID.randomUUID().toString();
+
+        try ( InputStream is = ResourceUtils.class.getResourceAsStream( inputFileName );
+            FileOutputStream fos = new FileOutputStream( new File( destFile ) ); )
+        {
+            IOUtils.copy( is, fos );
+        }
+
+        return destFile;
+    }
+
+}
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/CertificateEditorDialogBot.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/CertificateEditorDialogBot.java
new file mode 100644
index 0000000..cdb02c8
--- /dev/null
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/CertificateEditorDialogBot.java
@@ -0,0 +1,40 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.apache.directory.studio.test.integration.ui.bots;
+
+
+import org.apache.directory.studio.valueeditors.certificate.CertificateDialog;
+
+
+public class CertificateEditorDialogBot extends DialogBot
+{
+
+    public CertificateEditorDialogBot()
+    {
+        super( "Certificate Editor" );
+    }
+
+
+    public void typeFile( String file )
+    {
+        bot.textWithTooltip( CertificateDialog.LOAD_FILE_NAME_TOOLTIP ).setText( file );
+    }
+
+}
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EditAttributeWizardBot.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EditAttributeWizardBot.java
new file mode 100644
index 0000000..cba11d2
--- /dev/null
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EditAttributeWizardBot.java
@@ -0,0 +1,50 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.apache.directory.studio.test.integration.ui.bots;
+
+
+public class EditAttributeWizardBot extends WizardBot
+{
+
+    public EditAttributeWizardBot()
+    {
+        super( "Edit Attribute Description" );
+    }
+
+
+    public void typeAttributeType( String text )
+    {
+        bot.comboBox().setText( text );
+    }
+
+
+    public void setLanguageTag( String lang, String country )
+    {
+        bot.comboBox( 0 ).setText( lang );
+        bot.comboBox( 1 ).setText( country );
+    }
+
+
+    public void selectBinaryOption()
+    {
+        bot.checkBox().select();
+    }
+
+}
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EntryEditorBot.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EntryEditorBot.java
index 1542c6e..dcae169 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EntryEditorBot.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EntryEditorBot.java
@@ -101,6 +101,12 @@
     }
 
 
+    public EditAttributeWizardBot editAttribute( String attributeType, String value )
+    {
+        return editorBot.editAttribute( attributeType, value );
+    }
+
+
     public DnEditorDialogBot editValueExpectingDnEditor( String attributeType, String value )
     {
         return editorBot.editValueExpectingDnEditor( attributeType, value );
@@ -119,12 +125,19 @@
     }
 
 
-    public SubtreeSpecificationEditorDialogBot editValueExpectingSubtreeSpecificationEditor( String attributeType, String value )
+    public SubtreeSpecificationEditorDialogBot editValueExpectingSubtreeSpecificationEditor( String attributeType,
+        String value )
     {
         return editorBot.editValueExpectingSubtreeSpecificationEditor( attributeType, value );
     }
 
 
+    public CertificateEditorDialogBot editValueExpectingCertificateEditor( String attributeType, String value )
+    {
+        return editorBot.editValueExpectingCertificateEditor( attributeType, value );
+    }
+
+
     public HexEditorDialogBot editValueExpectingHexEditor( String attributeType, String value )
     {
         return editorBot.editValueExpectingHexEditor( attributeType, value );
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EntryEditorWidgetBot.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EntryEditorWidgetBot.java
index 70bbecc..a768b8a 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EntryEditorWidgetBot.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/EntryEditorWidgetBot.java
@@ -126,6 +126,16 @@
     }
 
 
+    EditAttributeWizardBot editAttribute( String attributeType, String value )
+    {
+        cancelEditValue();
+        SWTBotTreeItem treeItem = getTreeItem( attributeType, value );
+        treeItem.select();
+        ContextMenuHelper.clickContextMenu( bot.tree(), "Edit Attribute Description" );
+        return new EditAttributeWizardBot();
+    }
+
+
     void editValue( String attributeType, String value )
     {
         cancelEditValue();
@@ -164,13 +174,21 @@
     }
 
 
-    SubtreeSpecificationEditorDialogBot editValueExpectingSubtreeSpecificationEditor( String attributeType, String value )
+    SubtreeSpecificationEditorDialogBot editValueExpectingSubtreeSpecificationEditor( String attributeType,
+        String value )
     {
         editValue( attributeType, value );
         return new SubtreeSpecificationEditorDialogBot();
     }
 
 
+    CertificateEditorDialogBot editValueExpectingCertificateEditor( String attributeType, String value )
+    {
+        editValue( attributeType, value );
+        return new CertificateEditorDialogBot();
+    }
+
+
     HexEditorDialogBot editValueExpectingHexEditor( String attributeType, String value )
     {
         editValue( attributeType, value );
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/HexEditorDialogBot.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/HexEditorDialogBot.java
index 077c618..2d76811 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/HexEditorDialogBot.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/HexEditorDialogBot.java
@@ -20,6 +20,9 @@
 package org.apache.directory.studio.test.integration.ui.bots;
 
 
+import org.apache.directory.studio.ldapbrowser.common.dialogs.HexDialog;
+
+
 public class HexEditorDialogBot extends DialogBot
 {
 
@@ -29,6 +32,12 @@
     }
 
 
+    public void typeFile( String file )
+    {
+        bot.textWithTooltip( HexDialog.LOAD_FILE_NAME_TOOLTIP ).setText( file );
+    }
+
+
     public String getHexText()
     {
         return bot.text().getText();
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewAttributeWizardBot.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewAttributeWizardBot.java
index 1562294..62877bd 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewAttributeWizardBot.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewAttributeWizardBot.java
@@ -35,6 +35,19 @@
     }
 
 
+    public void setLanguageTag( String lang, String country )
+    {
+        bot.comboBox( 0 ).setText( lang );
+        bot.comboBox( 1 ).setText( country );
+    }
+
+
+    public void selectBinaryOption()
+    {
+        bot.checkBox().select();
+    }
+
+
     public DnEditorDialogBot clickFinishButtonExpectingDnEditor()
     {
         clickFinishButton();
@@ -55,4 +68,18 @@
         return new ImageEditorDialogBot();
     }
 
+
+    public CertificateEditorDialogBot clickFinishButtonExpectingCertificateEditor()
+    {
+        clickFinishButton();
+        return new CertificateEditorDialogBot();
+    }
+
+
+    public HexEditorDialogBot clickFinishButtonExpectingHexEditor()
+    {
+        clickFinishButton();
+        return new HexEditorDialogBot();
+    }
+
 }
diff --git a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewEntryWizardBot.java b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewEntryWizardBot.java
index 3cf573b..4de6704 100644
--- a/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewEntryWizardBot.java
+++ b/tests/test.integration.ui/src/main/java/org/apache/directory/studio/test/integration/ui/bots/NewEntryWizardBot.java
@@ -19,6 +19,7 @@
  */
 package org.apache.directory.studio.test.integration.ui.bots;
 
+
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.studio.ldapbrowser.core.BrowserCoreMessages;
 import org.apache.directory.studio.test.integration.ui.bots.utils.JobWatcher;
@@ -30,7 +31,6 @@
 
     private EntryEditorWidgetBot widgetBot;
 
-
     public NewEntryWizardBot()
     {
         super( TITLE );
@@ -94,6 +94,20 @@
     }
 
 
+    public NewAttributeWizardBot openNewAttributeWizard()
+    {
+        widgetBot.isVisisble();
+        return widgetBot.openNewAttributeWizard();
+    }
+
+
+    public EditAttributeWizardBot editAttribute( String attributeType, String value )
+    {
+        widgetBot.isVisisble();
+        return widgetBot.editAttribute( attributeType, value );
+    }
+
+
     public void editValue( String attributeType, String value )
     {
         widgetBot.isVisisble();
@@ -113,7 +127,7 @@
         while ( true )
         {
             String text = bot.text( 1 ).getText();
-            
+
             if ( Dn.isValid( text ) )
             {
                 return text;
diff --git a/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/ImportExportTest_Modifications.ldif b/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/ImportExportTest_Modifications.ldif
index c9672be..5034e9c 100644
--- a/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/ImportExportTest_Modifications.ldif
+++ b/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/ImportExportTest_Modifications.ldif
@@ -103,6 +103,12 @@
 add: description
 description:: QSDDqSDigqwg0K8gzrsg16kg2Lkg4ruhIA==
 -
+add: description;lang-en
+description;lang-en: English
+-
+add: description;lang-de
+description;lang-de: Deutsch
+-
 add: roomNumber
 roomNumber: 1234
 roomNumber: 2345
@@ -114,8 +120,22 @@
 employeeType: Intern
 -
 replace: mail
-mail: mail: user.1@example.com
-mail: mail: Aaccf.Amar@example.com
+mail: user.1@example.com
+mail: Aaccf.Amar@example.com
+-
+add: userCertificate;binary
+userCertificate;binary:: MIICcTCCAdqgAwIBAgIBEjANBgkqhkiG9w0BAQUFADBDMRMwEQYKCZImiZPy
+ LGQBGRYDY29tMRcwFQYKCZImiZPyLGQBGRYHZXhhbXBsZTETMBEGA1UEAxMKRXhhbXBsZSBDQTAeF
+ w0wNDA5MTUxMTQ4MjFaFw0wNTAzMTUxMTQ4MjFaMEMxEzARBgoJkiaJk/IsZAEZFgNjb20xFzAVBg
+ oJkiaJk/IsZAEZFgdleGFtcGxlMRMwEQYDVQQDEwpFbmQgRW50aXR5MIGfMA0GCSqGSIb3DQEBAQU
+ AA4GNADCBiQKBgQDhauQDMJcCPPQQ87UeTX8Ue/b10HjppIrwo3Xs7bZWln+ImYWa8j5od4frntGf
+ wLQX3KuJI6QdfhYjTE+oTfUxuHyq4xpJCfRLJtsnZzCCEgFK6Rq2wQxTi2z8L3pD7DM2fjKye9Wqz
+ wEUxhLsE/ItFHqLIVgUE0xGo5ryFpX/IwIDAQABo3UwczAhBgNVHREEGjAYgRZlbmQuZW50aXR5QG
+ V4YW1wbGUuY29tMB0GA1UdDgQWBBQXe5Iw/0TWZuGQECJsFk/AjkHdbTAfBgNVHSMEGDAWgBQIaK+
+ FM8g5Snr4gpOOcGpKIIQsMjAOBgNVHQ8BAf8EBAMCBsAwDQYJKoZIhvcNAQEFBQADgYEAACAoNFto
+ MgG7CjYOrXHFlRrhBM+urcdiFKQbNjHA4gw92R7AANwQoLqFb0HLYnq3TGOBJl7SgEVeM+dwRTs5O
+ yZKnDvyJjZpCHm7+5ZDd0thi6GrkWTg8zdhPBqjpMmKsr9z1E3kWORi6rwgdJKGDs6EYHbpc7vHhd
+ ORRepiXc0=
 
 
 dn: uid=user.2,ou=users,ou=system
diff --git a/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/rfc5280_cert1.cer b/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/rfc5280_cert1.cer
new file mode 100644
index 0000000..bad00d0
--- /dev/null
+++ b/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/rfc5280_cert1.cer
Binary files differ
diff --git a/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/rfc5280_cert2.cer b/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/rfc5280_cert2.cer
new file mode 100644
index 0000000..34af010
--- /dev/null
+++ b/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/rfc5280_cert2.cer
Binary files differ
diff --git a/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/rfc5280_cert3.cer b/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/rfc5280_cert3.cer
new file mode 100644
index 0000000..f9613dc
--- /dev/null
+++ b/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/rfc5280_cert3.cer
Binary files differ
diff --git a/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/rfc5280_crl.crl b/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/rfc5280_crl.crl
new file mode 100644
index 0000000..a4cc405
--- /dev/null
+++ b/tests/test.integration.ui/src/main/resources/org/apache/directory/studio/test/integration/ui/rfc5280_crl.crl
Binary files differ
