diff --git a/curse.go b/curse.go
index <HASH>..<HASH> 100644
--- a/curse.go
+++ b/curse.go
@@ -19,6 +19,8 @@ type Cursor struct {
 	Position
 	StartingPosition Position
 	Style
+
+	terminal *term.Terminal
 }
 
 type Position struct {
@@ -38,7 +40,8 @@ func New() (*Cursor, error) {
 	c := &Cursor{}
 	c.Position.X, c.StartingPosition.X = col, col
 	c.Position.Y, c.StartingPosition.Y = line, line
-	return c, nil
+	c.terminal, err = term.New()
+	return c, err
 }
 
 func (c *Cursor) MoveUp(nLines int) *Cursor {
@@ -126,6 +129,18 @@ func (c *Cursor) SetDefaultStyle() *Cursor {
 	return c
 }
 
+func (c *Cursor) ModeRaw() *Cursor {
+	_ = c.terminal.RawMode()
+
+	return c
+}
+
+func (c *Cursor) ModeRestore() *Cursor {
+	_ = c.terminal.Restore()
+
+	return c
+}
+
 // using named returns to help when using the method to know what is what
 func GetScreenDimensions() (cols int, lines int, err error) {
 	// todo: use kless/term to listen in on screen size changes
patch to fix raw mode issues by borrowing code from kless terminal