diff --git a/jni/com_android_terminal_Terminal.cpp b/jni/com_android_terminal_Terminal.cpp
index 8260316..9dc9139 100644
--- a/jni/com_android_terminal_Terminal.cpp
+++ b/jni/com_android_terminal_Terminal.cpp
@@ -550,24 +550,24 @@
  * JNI glue
  */
 
-static jint com_android_terminal_Terminal_nativeInit(JNIEnv* env, jclass clazz, jobject callbacks,
+static jlong com_android_terminal_Terminal_nativeInit(JNIEnv* env, jclass clazz, jobject callbacks,
         jint rows, jint cols) {
-    return reinterpret_cast<jint>(new Terminal(callbacks, rows, cols));
+    return reinterpret_cast<jlong>(new Terminal(callbacks, rows, cols));
 }
 
-static jint com_android_terminal_Terminal_nativeDestroy(JNIEnv* env, jclass clazz, jint ptr) {
+static jint com_android_terminal_Terminal_nativeDestroy(JNIEnv* env, jclass clazz, jlong ptr) {
     Terminal* term = reinterpret_cast<Terminal*>(ptr);
     delete term;
     return 0;
 }
 
-static jint com_android_terminal_Terminal_nativeRun(JNIEnv* env, jclass clazz, jint ptr) {
+static jint com_android_terminal_Terminal_nativeRun(JNIEnv* env, jclass clazz, jlong ptr) {
     Terminal* term = reinterpret_cast<Terminal*>(ptr);
     return term->run();
 }
 
 static jint com_android_terminal_Terminal_nativeResize(JNIEnv* env,
-        jclass clazz, jint ptr, jint rows, jint cols, jint scrollRows) {
+        jclass clazz, jlong ptr, jint rows, jint cols, jint scrollRows) {
     Terminal* term = reinterpret_cast<Terminal*>(ptr);
     return term->resize(rows, cols, scrollRows);
 }
@@ -592,7 +592,7 @@
 }
 
 static jint com_android_terminal_Terminal_nativeGetCellRun(JNIEnv* env,
-        jclass clazz, jint ptr, jint row, jint col, jobject run) {
+        jclass clazz, jlong ptr, jint row, jint col, jobject run) {
     Terminal* term = reinterpret_cast<Terminal*>(ptr);
     Mutex::Autolock lock(term->mLock);
 
@@ -653,44 +653,44 @@
     return 0;
 }
 
-static jint com_android_terminal_Terminal_nativeGetRows(JNIEnv* env, jclass clazz, jint ptr) {
+static jint com_android_terminal_Terminal_nativeGetRows(JNIEnv* env, jclass clazz, jlong ptr) {
     Terminal* term = reinterpret_cast<Terminal*>(ptr);
     return term->getRows();
 }
 
-static jint com_android_terminal_Terminal_nativeGetCols(JNIEnv* env, jclass clazz, jint ptr) {
+static jint com_android_terminal_Terminal_nativeGetCols(JNIEnv* env, jclass clazz, jlong ptr) {
     Terminal* term = reinterpret_cast<Terminal*>(ptr);
     return term->getCols();
 }
 
-static jint com_android_terminal_Terminal_nativeGetScrollRows(JNIEnv* env, jclass clazz, jint ptr) {
+static jint com_android_terminal_Terminal_nativeGetScrollRows(JNIEnv* env, jclass clazz, jlong ptr) {
     Terminal* term = reinterpret_cast<Terminal*>(ptr);
     return term->getScrollRows();
 }
 
 static jboolean com_android_terminal_Terminal_nativeDispatchCharacter(JNIEnv *env, jclass clazz,
-        jint ptr, jint mod, jint c) {
+        jlong ptr, jint mod, jint c) {
     Terminal* term = reinterpret_cast<Terminal*>(ptr);
     return term->dispatchCharacter(mod, c);
 }
 
 static jboolean com_android_terminal_Terminal_nativeDispatchKey(JNIEnv *env, jclass clazz,
-        jint ptr, jint mod, jint c) {
+        jlong ptr, jint mod, jint c) {
     Terminal* term = reinterpret_cast<Terminal*>(ptr);
     return term->dispatchKey(mod, c);
 }
 
 static JNINativeMethod gMethods[] = {
-    { "nativeInit", "(Lcom/android/terminal/TerminalCallbacks;II)I", (void*)com_android_terminal_Terminal_nativeInit },
-    { "nativeDestroy", "(I)I", (void*)com_android_terminal_Terminal_nativeDestroy },
-    { "nativeRun", "(I)I", (void*)com_android_terminal_Terminal_nativeRun },
-    { "nativeResize", "(IIII)I", (void*)com_android_terminal_Terminal_nativeResize },
-    { "nativeGetCellRun", "(IIILcom/android/terminal/Terminal$CellRun;)I", (void*)com_android_terminal_Terminal_nativeGetCellRun },
-    { "nativeGetRows", "(I)I", (void*)com_android_terminal_Terminal_nativeGetRows },
-    { "nativeGetCols", "(I)I", (void*)com_android_terminal_Terminal_nativeGetCols },
-    { "nativeGetScrollRows", "(I)I", (void*)com_android_terminal_Terminal_nativeGetScrollRows },
-    { "nativeDispatchCharacter", "(III)Z", (void*)com_android_terminal_Terminal_nativeDispatchCharacter},
-    { "nativeDispatchKey", "(III)Z", (void*)com_android_terminal_Terminal_nativeDispatchKey },
+    { "nativeInit", "(Lcom/android/terminal/TerminalCallbacks;II)L", (void*)com_android_terminal_Terminal_nativeInit },
+    { "nativeDestroy", "(J)I", (void*)com_android_terminal_Terminal_nativeDestroy },
+    { "nativeRun", "(J)I", (void*)com_android_terminal_Terminal_nativeRun },
+    { "nativeResize", "(JIII)I", (void*)com_android_terminal_Terminal_nativeResize },
+    { "nativeGetCellRun", "(JIILcom/android/terminal/Terminal$CellRun;)I", (void*)com_android_terminal_Terminal_nativeGetCellRun },
+    { "nativeGetRows", "(J)I", (void*)com_android_terminal_Terminal_nativeGetRows },
+    { "nativeGetCols", "(J)I", (void*)com_android_terminal_Terminal_nativeGetCols },
+    { "nativeGetScrollRows", "(J)I", (void*)com_android_terminal_Terminal_nativeGetScrollRows },
+    { "nativeDispatchCharacter", "(JII)Z", (void*)com_android_terminal_Terminal_nativeDispatchCharacter},
+    { "nativeDispatchKey", "(JII)Z", (void*)com_android_terminal_Terminal_nativeDispatchKey },
 };
 
 int register_com_android_terminal_Terminal(JNIEnv* env) {
diff --git a/src/com/android/terminal/Terminal.java b/src/com/android/terminal/Terminal.java
index cdf3f60..c8739b1 100644
--- a/src/com/android/terminal/Terminal.java
+++ b/src/com/android/terminal/Terminal.java
@@ -61,7 +61,7 @@
         public void onBell();
     }
 
-    private final int mNativePtr;
+    private final long mNativePtr;
     private final Thread mThread;
 
     private String mTitle;
@@ -162,16 +162,16 @@
         return nativeDispatchCharacter(mNativePtr, modifiers, character);
     }
 
-    private static native int nativeInit(TerminalCallbacks callbacks, int rows, int cols);
-    private static native int nativeDestroy(int ptr);
+    private static native long nativeInit(TerminalCallbacks callbacks, int rows, int cols);
+    private static native int nativeDestroy(long ptr);
 
-    private static native int nativeRun(int ptr);
-    private static native int nativeResize(int ptr, int rows, int cols, int scrollRows);
-    private static native int nativeGetCellRun(int ptr, int row, int col, CellRun run);
-    private static native int nativeGetRows(int ptr);
-    private static native int nativeGetCols(int ptr);
-    private static native int nativeGetScrollRows(int ptr);
+    private static native int nativeRun(long ptr);
+    private static native int nativeResize(long ptr, int rows, int cols, int scrollRows);
+    private static native int nativeGetCellRun(long ptr, int row, int col, CellRun run);
+    private static native int nativeGetRows(long ptr);
+    private static native int nativeGetCols(long ptr);
+    private static native int nativeGetScrollRows(long ptr);
 
-    private static native boolean nativeDispatchKey(int ptr, int modifiers, int key);
-    private static native boolean nativeDispatchCharacter(int ptr, int modifiers, int character);
+    private static native boolean nativeDispatchKey(long ptr, int modifiers, int key);
+    private static native boolean nativeDispatchCharacter(long ptr, int modifiers, int character);
 }
