diff --git a/channel.c b/channel.c
index b05ea75896069e21a5d00286c643d9b4b0153c27..e4a572af35a9b42e9591b31f57dbcb32beaccb57 100755
--- a/channel.c
+++ b/channel.c
@@ -2496,3 +2496,36 @@ int ast_tonepair(struct ast_channel *chan, int freq1, int freq2, int duration, i
 	return 0;
 }
 
+unsigned int ast_get_group(char *s)
+{
+	char *copy;
+	char *piece;
+	char *c=NULL;
+	int start=0, finish=0,x;
+	unsigned int group = 0;
+	copy = ast_strdupa(s);
+	if (!copy) {
+		ast_log(LOG_ERROR, "Out of memory\n");
+		return 0;
+	}
+	c = copy;
+	
+	while((piece = strsep(&c, ","))) {
+		if (sscanf(piece, "%d-%d", &start, &finish) == 2) {
+			/* Range */
+		} else if (sscanf(piece, "%d", &start)) {
+			/* Just one */
+			finish = start;
+		} else {
+			ast_log(LOG_ERROR, "Syntax error parsing '%s' at '%s'.  Using '0'\n", s,piece);
+			return 0;
+		}
+		for (x=start;x<=finish;x++) {
+			if ((x > 31) || (x < 0)) {
+				ast_log(LOG_WARNING, "Ignoring invalid group %d\n", x);
+			} else
+				group |= (1 << x);
+		}
+	}
+	return group;
+}
diff --git a/include/asterisk/channel.h b/include/asterisk/channel.h
index 71043ea7c01ddd0451a8155ec22d6b4292fd233e..24699a7d9771b45717027d2cb73001615e83f8cc 100755
--- a/include/asterisk/channel.h
+++ b/include/asterisk/channel.h
@@ -843,6 +843,8 @@ static inline int ast_select(int nfds, fd_set *rfds, fd_set *wfds, fd_set *efds,
 									c->blocking = -1; \
 									} }
 
+extern unsigned int ast_get_group(char *s);
+
 #if defined(__cplusplus) || defined(c_plusplus)
 }
 #endif
diff --git a/include/asterisk/parking.h b/include/asterisk/parking.h
index 78515369627fa6fd3cec8293deaa52de0c1a93fd..4b98595928f9cb20ffbd0b0a9358178e1f88f475 100755
--- a/include/asterisk/parking.h
+++ b/include/asterisk/parking.h
@@ -48,8 +48,6 @@ extern char *ast_pickup_ext(void);
 
 extern int ast_bridge_call(struct ast_channel *chan, struct ast_channel *peer, int allowredirect_in, int allowredirect_out, int allowdisconnect);
 
-extern unsigned int ast_get_group(char *s);
-
 extern int ast_pickup_call(struct ast_channel *chan);
 
 
diff --git a/res/res_parking.c b/res/res_parking.c
index 5c80498226fa1b11c31b1aa7701670203b1e786d..2f54ee048015515e25dc4c1993f7bc96b1b343c0 100755
--- a/res/res_parking.c
+++ b/res/res_parking.c
@@ -749,40 +749,6 @@ int ast_pickup_call(struct ast_channel *chan)
 	return res;
 }
 
-unsigned int ast_get_group(char *s)
-{
-	char *copy;
-	char *piece;
-	char *c=NULL;
-	int start=0, finish=0,x;
-	unsigned int group = 0;
-	copy = ast_strdupa(s);
-	if (!copy) {
-		ast_log(LOG_ERROR, "Out of memory\n");
-		return 0;
-	}
-	c = copy;
-	
-	while((piece = strsep(&c, ","))) {
-		if (sscanf(piece, "%d-%d", &start, &finish) == 2) {
-			/* Range */
-		} else if (sscanf(piece, "%d", &start)) {
-			/* Just one */
-			finish = start;
-		} else {
-			ast_log(LOG_ERROR, "Syntax error parsing '%s' at '%s'.  Using '0'\n", s,piece);
-			return 0;
-		}
-		for (x=start;x<=finish;x++) {
-			if ((x > 31) || (x < 0)) {
-				ast_log(LOG_WARNING, "Ignoring invalid group %d\n", x);
-			} else
-				group |= (1 << x);
-		}
-	}
-	return group;
-}
-
 int unload_module(void)
 {
 	STANDARD_HANGUP_LOCALUSERS;