diff --git a/src/com/android/calculator2/Calculator.java b/src/com/android/calculator2/Calculator.java
index f1c17cd..697e469 100644
--- a/src/com/android/calculator2/Calculator.java
+++ b/src/com/android/calculator2/Calculator.java
@@ -67,13 +67,45 @@
         mHistory.setObserver(historyAdapter);
 
         mPanelSwitcher = (PanelSwitcher) findViewById(R.id.panelswitch);
-        mPanelSwitcher.setCurrentIndex(state==null ? 0 : state.getInt(STATE_CURRENT_VIEW, 0));
-        mPanelSwitcher.setListener(this);
+        if (mPanelSwitcher != null) {
+            mPanelSwitcher.setCurrentIndex(state==null ? 0 : state.getInt(STATE_CURRENT_VIEW, 0));
+            mPanelSwitcher.setListener(this);
+        }
 
         mListener.setHandler(mLogic, mPanelSwitcher);
-
         mDisplay.setOnKeyListener(mListener);
 
+        setOnClickListener(R.id.digit0);
+        setOnClickListener(R.id.digit1);
+        setOnClickListener(R.id.digit2);
+        setOnClickListener(R.id.digit3);
+        setOnClickListener(R.id.digit4);
+        setOnClickListener(R.id.digit5);
+        setOnClickListener(R.id.digit6);
+        setOnClickListener(R.id.digit7);
+        setOnClickListener(R.id.digit8);
+        setOnClickListener(R.id.digit9);
+        setOnClickListener(R.id.dot);
+
+        setOnClickListener(R.id.plus);
+        setOnClickListener(R.id.minus);
+        setOnClickListener(R.id.div);
+        setOnClickListener(R.id.mul);
+        setOnClickListener(R.id.leftParen);
+        setOnClickListener(R.id.rightParen);
+        setOnClickListener(R.id.equal);
+
+        setOnClickListener(R.id.sin);
+        setOnClickListener(R.id.ln);
+        setOnClickListener(R.id.cos);
+        setOnClickListener(R.id.lg);
+        setOnClickListener(R.id.tan);
+        setOnClickListener(R.id.e);
+        setOnClickListener(R.id.pi);
+        setOnClickListener(R.id.power);
+        setOnClickListener(R.id.factorial);
+        setOnClickListener(R.id.sqrt);
+
         View view;
         if ((view = findViewById(R.id.del)) != null) {
 //            view.setOnClickListener(mListener);
@@ -86,6 +118,10 @@
         */
     }
 
+    private void setOnClickListener(int id) {
+        findViewById(id).setOnClickListener(mListener);
+    }
+
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
         super.onCreateOptionsMenu(menu);
@@ -145,7 +181,9 @@
     @Override
     protected void onSaveInstanceState(Bundle state) {
         super.onSaveInstanceState(state);
-        state.putInt(STATE_CURRENT_VIEW, mPanelSwitcher.getCurrentIndex());
+        if (mPanelSwitcher != null) {
+            state.putInt(STATE_CURRENT_VIEW, mPanelSwitcher.getCurrentIndex());
+        }
     }
 
     @Override
@@ -158,7 +196,7 @@
     @Override
     public boolean onKeyDown(int keyCode, KeyEvent keyEvent) {
         if (keyCode == KeyEvent.KEYCODE_BACK
-            && mPanelSwitcher.getCurrentIndex() == ADVANCED_PANEL) {
+            && mPanelSwitcher != null && mPanelSwitcher.getCurrentIndex() == ADVANCED_PANEL) {
             mPanelSwitcher.moveRight();
             return true;
         } else {
