diff --git a/CellDesigner-plugin/src/main/java/lcsb/mapviewer/cdplugin/copypaste/CopyPastePlugin.java b/CellDesigner-plugin/src/main/java/lcsb/mapviewer/cdplugin/copypaste/CopyPastePlugin.java
index c9a139cf0dcf04f5b108477a56569103268e7415..f46d33752d4fec1cac99e97f1e9e54a97095c97d 100644
--- a/CellDesigner-plugin/src/main/java/lcsb/mapviewer/cdplugin/copypaste/CopyPastePlugin.java
+++ b/CellDesigner-plugin/src/main/java/lcsb/mapviewer/cdplugin/copypaste/CopyPastePlugin.java
@@ -41,12 +41,12 @@ public class CopyPastePlugin extends CellDesignerPlugin {
   /**
    * Paste action.
    */
-  private PastePluginAction ppa;
+  private PastePluginAction pastePluginAction;
 
   /**
    * Paste action.
    */
-  private CopyPluginAction cpa;
+  private CopyPluginAction copyPluginAction;
 
   /**
    * Default constructor. Creates menu and InfoFrame.
@@ -58,38 +58,42 @@ public class CopyPastePlugin extends CellDesignerPlugin {
 
       win = MainWindow.getLastInstance();
 
-      ppa = new PastePluginAction(this, win);
-      cpa = new CopyPluginAction(this, win);
+      pastePluginAction = new PastePluginAction(this, win);
+      copyPluginAction = new CopyPluginAction(this, win);
 
       // create keyboard listener for shortcuts
-      KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() {
-        public boolean dispatchKeyEvent(KeyEvent e) {
-          switch (e.getID()) {
-          case KeyEvent.KEY_PRESSED:
-            if (e.getKeyCode() == java.awt.event.KeyEvent.VK_V
-                && e.isControlDown()
-                && e.isAltDown()) {
-              ppa.myActionPerformed(null);
-              return true;
-            } else if (e.getKeyCode() == java.awt.event.KeyEvent.VK_C
-                && e.isControlDown()
-                && e.isAltDown()) {
-              cpa.myActionPerformed(null);
-              return true;
-            } else {
-              return false;
-            }
-          default:
-            return false;
-          }
-        }
-      });
+      KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(createKeyEventDispatcher());
 
     } catch (Exception exception) {
       logger.error(exception, exception);
     }
   }
 
+  protected KeyEventDispatcher createKeyEventDispatcher() {
+    return new KeyEventDispatcher() {
+      public boolean dispatchKeyEvent(KeyEvent e) {
+        switch (e.getID()) {
+        case KeyEvent.KEY_PRESSED:
+          if (e.getKeyCode() == java.awt.event.KeyEvent.VK_V
+              && e.isControlDown()
+              && e.isAltDown()) {
+            getPastePluginAction().myActionPerformed(null);
+            return true;
+          } else if (e.getKeyCode() == java.awt.event.KeyEvent.VK_C
+              && e.isControlDown()
+              && e.isAltDown()) {
+            getCopyPluginAction().myActionPerformed(null);
+            return true;
+          } else {
+            return false;
+          }
+        default:
+          return false;
+        }
+      }
+    };
+  }
+
   // CHECKSTYLE:OFF
   @Override
   public void SBaseAdded(PluginSBase arg0) {
@@ -126,4 +130,11 @@ public class CopyPastePlugin extends CellDesignerPlugin {
 
   }
 
+  protected CopyPluginAction getCopyPluginAction() {
+    return copyPluginAction;
+  }
+
+  protected PastePluginAction getPastePluginAction() {
+    return pastePluginAction;
+  }
 }
\ No newline at end of file
diff --git a/CellDesigner-plugin/src/main/java/lcsb/mapviewer/cdplugin/copypaste/CopyPluginAction.java b/CellDesigner-plugin/src/main/java/lcsb/mapviewer/cdplugin/copypaste/CopyPluginAction.java
index 136e2735250b04a449ded2223aa83f1dde737e21..1e4df5508ac9fae126c5460915f351b7dc92cf1f 100644
--- a/CellDesigner-plugin/src/main/java/lcsb/mapviewer/cdplugin/copypaste/CopyPluginAction.java
+++ b/CellDesigner-plugin/src/main/java/lcsb/mapviewer/cdplugin/copypaste/CopyPluginAction.java
@@ -30,29 +30,37 @@ public class CopyPluginAction extends PluginAction {
   /**
    * Plugin that access this action.
    */
-  private CopyPastePlugin plug = null;
+  private CopyPastePlugin plugin = null;
 
   /**
    * Default constructor.
    * 
    * @param plugin
-   *          {@link #plug}
+   *          {@link #plugin}
    * @param win
    *          {@link #window}
    */
   public CopyPluginAction(CopyPastePlugin plugin, MainWindow win) {
-    this.plug = plugin;
+    this.plugin = plugin;
   }
 
   @Override
   public void myActionPerformed(ActionEvent e) {
     try {
       CopyAction annotateAction = new CopyAction();
-      PluginListOf list = plug.getSelectedAllNode();
-      annotateAction.performAnnotation(plug, list);
+      PluginListOf list = getPlugin().getSelectedAllNode();
+      annotateAction.performAnnotation(getPlugin(), list);
     } catch (Exception ex) {
       logger.error(ex, ex);
     }
   }
 
+  protected CopyPastePlugin getPlugin() {
+    return plugin;
+  }
+
+  protected void setPlugin(CopyPastePlugin plugin) {
+    this.plugin = plugin;
+  }
+
 }
\ No newline at end of file
diff --git a/CellDesigner-plugin/src/main/java/lcsb/mapviewer/cdplugin/copypaste/PastePluginAction.java b/CellDesigner-plugin/src/main/java/lcsb/mapviewer/cdplugin/copypaste/PastePluginAction.java
index 97a9187efe2d0ee0d665f10700826ab28a08390c..83cb961f68beabae2004e7d45b38ea1632329d5d 100644
--- a/CellDesigner-plugin/src/main/java/lcsb/mapviewer/cdplugin/copypaste/PastePluginAction.java
+++ b/CellDesigner-plugin/src/main/java/lcsb/mapviewer/cdplugin/copypaste/PastePluginAction.java
@@ -28,29 +28,37 @@ public class PastePluginAction extends PluginAction {
   /**
    * Plugin that access this action.
    */
-  private CopyPastePlugin plug = null;
+  private CopyPastePlugin plugin = null;
 
   /**
    * Default constructor.
    * 
    * @param plugin
-   *          {@link #plug}
+   *          {@link #plugin}
    * @param win
    *          {@link #window}
    */
   public PastePluginAction(CopyPastePlugin plugin, MainWindow win) {
-    this.plug = plugin;
+    this.setPlugin(plugin);
   }
 
   @Override
   public void myActionPerformed(ActionEvent e) {
     try {
       PasteAction annotateAction = new PasteAction();
-      PluginListOf list = plug.getSelectedAllNode();
-      annotateAction.performAnnotation(plug, list);
+      PluginListOf list = getPlugin().getSelectedAllNode();
+      annotateAction.performAnnotation(plugin, list);
     } catch (Exception ex) {
       logger.error(ex, ex);
     }
   }
 
+  protected CopyPastePlugin getPlugin() {
+    return plugin;
+  }
+
+  protected void setPlugin(CopyPastePlugin plugin) {
+    this.plugin = plugin;
+  }
+
 }
\ No newline at end of file
diff --git a/CellDesigner-plugin/src/test/java/lcsb/mapviewer/cdplugin/CdPluginFunctions.java b/CellDesigner-plugin/src/test/java/lcsb/mapviewer/cdplugin/CdPluginFunctions.java
index 89ae014dcb61dcbaa64e8a4c27e3eb888898fc6a..381af8d102550394dc3285ce6d6945590b603700 100644
--- a/CellDesigner-plugin/src/test/java/lcsb/mapviewer/cdplugin/CdPluginFunctions.java
+++ b/CellDesigner-plugin/src/test/java/lcsb/mapviewer/cdplugin/CdPluginFunctions.java
@@ -1,11 +1,18 @@
 package lcsb.mapviewer.cdplugin;
 
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.apache.log4j.spi.LoggingEvent;
+import org.junit.After;
+import org.junit.Before;
 import org.mockito.Mockito;
 
 import jp.sbi.celldesigner.plugin.PluginListOf;
 import jp.sbi.celldesigner.plugin.PluginReaction;
 import jp.sbi.celldesigner.plugin.PluginSpecies;
 import jp.sbi.celldesigner.plugin.PluginSpeciesAlias;
+import lcsb.mapviewer.common.EventStorageLoggerAppender;
 
 public class CdPluginFunctions {
 
@@ -20,8 +27,30 @@ public class CdPluginFunctions {
       "</rdf:Description>\n" +
       "</rdf:RDF>\n";
 
-  public CdPluginFunctions() {
-    super();
+  private EventStorageLoggerAppender appender;
+
+  @Before
+  public final void _setUp() throws Exception {
+    Logger.getRootLogger().removeAppender(appender);
+    appender = new EventStorageLoggerAppender(false);
+    Logger.getRootLogger().addAppender(appender);
+  }
+
+  @After
+  public final void _tearDown() throws Exception {
+    Logger.getRootLogger().removeAppender(appender);
+  }
+
+  protected List<LoggingEvent> getWarnings() {
+    return appender.getWarnings();
+  }
+
+  protected List<LoggingEvent> getErrors() {
+    return appender.getErrors();
+  }
+
+  protected List<LoggingEvent> getFatals() {
+    return appender.getFatals();
   }
 
   protected PluginListOf createPluginListWithSpecies(int size) {
diff --git a/CellDesigner-plugin/src/test/java/lcsb/mapviewer/cdplugin/copypaste/AllCopyPasteTests.java b/CellDesigner-plugin/src/test/java/lcsb/mapviewer/cdplugin/copypaste/AllCopyPasteTests.java
index c1bf57ac7314c77a74e7f762e34914a05a0ef097..4592dfdabccb1b921afe87f405316f55d719a94f 100644
--- a/CellDesigner-plugin/src/test/java/lcsb/mapviewer/cdplugin/copypaste/AllCopyPasteTests.java
+++ b/CellDesigner-plugin/src/test/java/lcsb/mapviewer/cdplugin/copypaste/AllCopyPasteTests.java
@@ -7,6 +7,7 @@ import org.junit.runners.Suite.SuiteClasses;
 @RunWith(Suite.class)
 @SuiteClasses({ CopyActionTest.class,
     CopyPasteAbstractActionTest.class,
+    CopyPastePluginTest.class,
     PasteActionTest.class,
 })
 public class AllCopyPasteTests {
diff --git a/CellDesigner-plugin/src/test/java/lcsb/mapviewer/cdplugin/copypaste/CopyPastePluginTest.java b/CellDesigner-plugin/src/test/java/lcsb/mapviewer/cdplugin/copypaste/CopyPastePluginTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..ddde8a735011122284b27c63b478826f88584f6d
--- /dev/null
+++ b/CellDesigner-plugin/src/test/java/lcsb/mapviewer/cdplugin/copypaste/CopyPastePluginTest.java
@@ -0,0 +1,67 @@
+package lcsb.mapviewer.cdplugin.copypaste;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.mockito.Mockito.when;
+
+import java.awt.event.KeyEvent;
+
+import org.junit.Test;
+import org.mockito.Mockito;
+
+import jp.sbi.celldesigner.plugin.PluginListOf;
+import lcsb.mapviewer.cdplugin.CdPluginFunctions;
+import lcsb.mapviewer.common.SystemClipboard;
+
+public class CopyPastePluginTest extends CdPluginFunctions {
+
+  SystemClipboard cp = new SystemClipboard();
+
+  @Test
+  public void testConstructor() {
+    new CopyPastePlugin();
+    assertEquals(0, getErrors().size());
+  }
+
+  @Test
+  public void testCopyAction() {
+    String data = cp.getClipboardContents();
+
+    CopyPastePlugin plugin = new CopyPastePlugin();
+    KeyEvent event = Mockito.mock(KeyEvent.class);
+    when(event.getID()).thenReturn(KeyEvent.KEY_PRESSED);
+    when(event.getKeyCode()).thenReturn(java.awt.event.KeyEvent.VK_C);
+    when(event.isControlDown()).thenReturn(true);
+    when(event.isAltDown()).thenReturn(true);
+
+    CopyPastePlugin copyPastePlugin = Mockito.mock(CopyPastePlugin.class);
+    PluginListOf list = createPluginListWithSpecies(1);
+    when(copyPastePlugin.getSelectedAllNode()).thenReturn(list);
+    plugin.getCopyPluginAction().setPlugin(copyPastePlugin);
+    
+    plugin.createKeyEventDispatcher().dispatchKeyEvent(event);
+
+    String newData = cp.getClipboardContents();
+
+    assertNotEquals("Data in clipboard didn't change", data, newData);
+
+  }
+
+  @Test
+  public void testPasteAction() {
+    CopyPastePlugin plugin = new CopyPastePlugin();
+    KeyEvent event = Mockito.mock(KeyEvent.class);
+    when(event.getID()).thenReturn(KeyEvent.KEY_PRESSED);
+    when(event.getKeyCode()).thenReturn(java.awt.event.KeyEvent.VK_V);
+    when(event.isControlDown()).thenReturn(true);
+    when(event.isAltDown()).thenReturn(true);
+
+    CopyPastePlugin copyPastePlugin = Mockito.mock(CopyPastePlugin.class);
+    PluginListOf list = createPluginListWithSpecies(1);
+    when(copyPastePlugin.getSelectedAllNode()).thenReturn(list);
+    plugin.getPastePluginAction().setPlugin(copyPastePlugin);
+    
+    plugin.createKeyEventDispatcher().dispatchKeyEvent(event);
+  }
+
+}