diff --git a/gpm/cli.go b/gpm/cli.go
index 36a35c6..2f8f51d 100644
--- a/gpm/cli.go
+++ b/gpm/cli.go
@@ -24,7 +24,6 @@ import(
   "time"
   "github.com/atotto/clipboard"
   "github.com/olekukonko/tablewriter"
-  "github.com/pquerna/otp/totp"
   "golang.org/x/crypto/ssh/terminal"
 )
 
@@ -268,8 +267,7 @@ func (c *Cli) copyEntry() {
       case "p":
         clipboard.WriteAll(entry.Password)
       case "o":
-        code, _ := totp.GenerateCode(entry.OTP, time.Now())
-        clipboard.WriteAll(code)
+        clipboard.WriteAll(entry.OTPCode())
       case "q":
         os.Exit(0)
       default:
diff --git a/gpm/entry.go b/gpm/entry.go
index a99f3af..77436dc 100644
--- a/gpm/entry.go
+++ b/gpm/entry.go
@@ -18,6 +18,8 @@ import(
   "fmt"
   "time"
   "net/url"
+
+  "github.com/pquerna/otp/totp"
 )
 
 // Entry struct have the password informations
@@ -54,3 +56,9 @@ func (e *Entry) Verify() error {
 func (e *Entry) GenerateID() {
   e.ID = fmt.Sprintf("%d", time.Now().UnixNano())
 }
+
+// OTPCode generate an OTP Code
+func (e *Entry) OTPCode() string {
+  code, _ := totp.GenerateCode(e.OTP, time.Now())
+  return code
+}