diff --git a/7. labor/caesarCode/src/caesarcode/CaesarCode.java b/7. labor/caesarCode/src/caesarcode/CaesarCode.java
index ee5a02205db0c81db794a7e9e6d476e5d22ffdbd..7c168055a40149fa8ac592b68d1ab0ae38d0803b 100644
--- a/7. labor/caesarCode/src/caesarcode/CaesarCode.java	
+++ b/7. labor/caesarCode/src/caesarcode/CaesarCode.java	
@@ -17,4 +17,20 @@ public class CaesarCode {
 		}
 		return s;
 	}
+	public static String caesarDeCode(String input, char offset)
+	{
+		String s = "";
+		input=input.toUpperCase();
+		offset=Character.toUpperCase(offset);
+		int numericOffset=(int)offset - (int)'A';
+		int len = input.length();
+		for(int x = 0; x < len; x++){
+			char c = (char)(input.charAt(x) - numericOffset);
+			if (c < 'A')
+				s += (char)(input.charAt(x) + (26-numericOffset));
+			else
+				s += (char)(input.charAt(x) - numericOffset);
+		}
+		return s;
+	}
 }
diff --git a/7. labor/caesarCode/src/caesarcode/caesarFrame.java b/7. labor/caesarCode/src/caesarcode/caesarFrame.java
index 0e7cb27212e1e475305d76e569146ca3796fc3fc..5e8ae79f21c592c1353922c5ac301eb89ca33581 100644
--- a/7. labor/caesarCode/src/caesarcode/caesarFrame.java	
+++ b/7. labor/caesarCode/src/caesarcode/caesarFrame.java	
@@ -6,12 +6,16 @@ import java.awt.GridLayout;
 import java.awt.HeadlessException;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
 import javax.swing.JButton;
 import javax.swing.JComboBox;
 import javax.swing.JFrame;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JTextField;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
 
 public class caesarFrame extends JFrame{
 
@@ -20,6 +24,8 @@ public class caesarFrame extends JFrame{
 	private final JTextField f1, f2;
 	private final JButton btn;
 	
+	private boolean decode=false;
+	
 	public caesarFrame() throws HeadlessException {
 		super("SwingLab");
 //		this.setTitle("SwingLab");
@@ -37,7 +43,11 @@ public class caesarFrame extends JFrame{
 		for(int i=(int)'A';i<=(int)'Z';i++)
 			chars[i-(int)'A']=(char)i;
 		jcb=new JComboBox(chars); p1.add(jcb);
-		f1=new JTextField(20); f1.setEnabled(true); p1.add(f1);
+		f1=new JTextField(20); 
+		f1.addFocusListener(new FocuseLoseListener(false));
+		f1.setEnabled(true); 
+		f1.getDocument().addDocumentListener(new InputKeyFieldListener()); 
+		p1.add(f1);
 		btn=new JButton(); btn.setText("Code!");
 		btn.addActionListener(new OkButtonActionListener());
 		p1.add(btn);
@@ -48,7 +58,8 @@ public class caesarFrame extends JFrame{
 		add(p2);
 		p2.add(new JLabel("Output:"),BorderLayout.WEST);
 		f2=new JTextField(20);
-		f2.setEnabled(false);
+		f2.setEditable(true);
+		f2.addFocusListener(new FocuseLoseListener(true));
 		p2.add(f2);
 		//-----------------------------------------------
 		
@@ -56,11 +67,52 @@ public class caesarFrame extends JFrame{
 		setVisible(true);
 	}
 	
-	private class OkButtonActionListener extends CaesarCode implements ActionListener
-	{
+	private class OkButtonActionListener implements ActionListener
+	{		
 		@Override
 		public void actionPerformed(ActionEvent ae) {
-			f2.setText(caesarCode(f1.getText(), (char)jcb.getSelectedItem()));
+			if(decode==true)
+				f1.setText(CaesarCode.caesarDeCode(f2.getText(), (char)jcb.getSelectedItem()));
+			else
+				f2.setText(CaesarCode.caesarCode(f1.getText(), (char)jcb.getSelectedItem()));
+		}
+	}
+	
+	private class FocuseLoseListener implements FocusListener
+	{
+		private boolean dir;
+		public FocuseLoseListener(boolean b)
+		{
+			dir=b;
+		}
+		
+		@Override
+		public void focusGained(FocusEvent fe) {
+//			throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+		}
+
+		@Override
+		public void focusLost(FocusEvent fe) {
+			decode=dir;
+		}
+		
+	}
+	
+	private class InputKeyFieldListener implements DocumentListener
+	{
+		@Override
+		public void insertUpdate(DocumentEvent de) {
+			f2.setText(CaesarCode.caesarCode(f1.getText(), (char)jcb.getSelectedItem()));
+		}
+
+		@Override
+		public void removeUpdate(DocumentEvent de) {
+			f2.setText(CaesarCode.caesarCode(f1.getText(), (char)jcb.getSelectedItem()));
+		}
+
+		@Override
+		public void changedUpdate(DocumentEvent de) {
+			f2.setText(CaesarCode.caesarCode(f1.getText(), (char)jcb.getSelectedItem()));
 		}
 	}
 }
\ No newline at end of file