text: diff --git a/sara.c b/sara.c
  index f8295ef..919af7c 100644
  --- a/sara.c
  +++ b/sara.c
  @@ -213,6 +213,7 @@ static void toggledesktop(const Arg arg);
   static void togglefloat(const Arg arg);
   static void togglefs(const Arg arg);
   static void tomon(const Arg arg);
  +static void tomonabs(const Arg arg);
   static void unmanage(client* c);
   static void updatefocus(monitor* m);
   static void zoom(const Arg arg);
  @@ -222,8 +223,10 @@ static void cleanupmon(monitor* m);
   static monitor* coordstomon(int x, int y);
   static monitor* createmon(int num, int x, int y, int w, int h);
   static monitor* dirtomon(int dir);
  +static monitor* numtomon(int num);
   static monitor* findmon(Window w);
   static void focusmon(const Arg arg);
  +static void focusmonabs(const Arg arg);
   static void updategeom();
   /* Client Interfacing */
   static client* findclient(Window w);
  @@ -257,6 +260,7 @@ struct {
   } conversions [] = {
   	{changemsize,   "changemsize"},
   	{focusmon,      "focusmon"},
  +	{focusmonabs,   "focusmonabs"},
   	{killclient,    "killclient"},
   	{moveclient,    "moveclient"},
   	{movefocus,     "movefocus"},
  @@ -267,6 +271,7 @@ struct {
   	{togglefs,      "togglefs"},
   	{toggleview,    "toggleview"},
   	{tomon,         "tomon"},
  +	{tomonabs,      "tomonabs"},
   	{setlayout,     "setlayout"},
   	{view,          "view"},
   	{zoom,          "zoom"},
  @@ -1001,6 +1006,18 @@ tomon(const Arg arg){
   	outputstats();
   }
   
  +void
  +tomonabs(const Arg arg){
  +	if (!curmon->current || !mhead->next)
  +		return;
  +	
  +	parser[WantInt](arg.s, &parg);
  +
  +	sendmon(curmon->current, numtomon(parg.i));
  +	outputstats();
  +}
  +
  +
   void
   unmanage(client* c){
   	monitor* m = c->mon;
  @@ -1114,6 +1131,16 @@ dirtomon(int dir){
   	return m;
   }
   
  +monitor*
  +numtomon(int num){
  +	for EACHMON(mhead)
  +		if (im->num == num)
  +			return im;
  +
  +	return NULL;
  +}
  +
  +
   monitor*
   findmon(Window w){
   	for EACHMON(mhead)
  @@ -1138,6 +1165,20 @@ focusmon(const Arg arg){
   	changemon(m, YesFocus);
   }
   
  +void
  +focusmonabs(const Arg arg){
  +	monitor* m;
  +
  +	if (!mhead->next)
  +		return;
  +
  +	parser[WantInt](arg.s, &parg);
  +
  +	if ( (m = numtomon(parg.i)) && m == curmon )
  +		return;
  +	changemon(m, YesFocus);
  +}
  +
   #ifdef XINERAMA
   static int isuniquegeom(XineramaScreenInfo* unique, size_t n, XineramaScreenInfo* info){
   	while (n--)
  