diff --git a/emb/servos.cpp b/emb/servos.cpp
index 0ec79e2a0137f7374e2cac749df22b452260ce44..c51fe1eab41e66a830593efcea8c191fd7897bd1 100644
--- a/emb/servos.cpp
+++ b/emb/servos.cpp
@@ -4,7 +4,6 @@
 #include <avr/interrupt.h>
 #include <stdint.h>
 
-#define NUM_SERVOS 3
 #define MIN_PULSE 999
 #define MAX_PULSE 4999
 
@@ -18,6 +17,7 @@ struct Servo
     const uint8_t pinMask;          // the pin mask for the servo
     uint16_t tempValue;             // stores a temporary value before it's written to the servo
     uint16_t value;                 // current pulse width value
+    int16_t angle;                  // the angle in arc-minutes
 };
 
 static Servo servos[NUM_SERVOS] = {
@@ -43,7 +43,23 @@ void initServos()
 void setServoAngle(uint8_t servo, int16_t arcMin)
 {
     if (0 <= servo && servo < NUM_SERVOS)
+    {
+        if (arcMin < -180 * 60)
+            arcMin = -180 * 60;
+        else if (arcMin > 180 * 60)
+            arcMin = 180 * 60;
+        
         servos[servo].tempValue = MIN_PULSE + (int32_t) (arcMin + 180 * 60)  * (MAX_PULSE - MIN_PULSE) / (360 * 60);
+        servos[servo].angle = arcMin;
+    }
+}
+
+int16_t getServoAngle(uint8_t servo)
+{
+    if (0 <= servo && servo < NUM_SERVOS)
+        return servos[servo].angle;
+    else
+        return 0;
 }
 
 void updateServos()
diff --git a/emb/servos.hpp b/emb/servos.hpp
index c2aeff442780d2dabc02fa3e9d329c89e8b1cec7..910ab3f2aeb7efaae6b10ef6301791a283a66c13 100644
--- a/emb/servos.hpp
+++ b/emb/servos.hpp
@@ -3,6 +3,8 @@
 
 #include <stdint.h>
 
+#define NUM_SERVOS 3
+
 /**
  * Initialises the servos.
  */
@@ -16,6 +18,11 @@ void initServos();
  */
 void setServoAngle(uint8_t servo, int16_t arcMin);
 
+/**
+ * Gets the angle of a servo.
+ */
+int16_t getServoAngle(uint8_t servo);
+
 /**
  * Writes the servo values out to the servos.
  */