diff --git a/e107_plugins/forum/forum_viewforum.php b/e107_plugins/forum/forum_viewforum.php
new file mode 100644
index 000000000..7d940d289
--- /dev/null
+++ b/e107_plugins/forum/forum_viewforum.php
@@ -0,0 +1,565 @@
+url->getUrl('forum', 'forum', array('func' => 'view', 'id'=>$_POST['forumjump'])));
+ exit;
+}
+
+if (!e_QUERY)
+{
+ header('Location:'.$e107->url->getUrl('forum', 'forum', array('func' => 'main')));
+ exit;
+}
+
+$view = 25;
+$threadFrom = (isset($_REQUEST['p']) ? $_REQUEST['p'] * $view : 0);
+
+/*
+else
+{
+ $tmp = explode('.', e_QUERY);
+ $forum_id = (int)$tmp[0];
+ $thread_from = (isset($tmp[1]) ? (int)$tmp[1] : 0);
+}
+
+if(is_numeric(e_MENU))
+{
+ $thread_from = (intval(e_MENU)-1)*$view;
+}
+*/
+
+require_once(e_PLUGIN.'forum/forum_class.php');
+$forum = new e107forum;
+
+$STARTERTITLE = LAN_54;
+$THREADTITLE = LAN_53;
+$REPLYTITLE = LAN_55;
+$LASTPOSTITLE = LAN_57;
+$VIEWTITLE = LAN_56;
+
+global $forum_info, $FORUM_CRUMB;
+
+$forumId = (int)$_REQUEST['id'];
+
+if (!$forum->checkPerm($forumId, 'view'))
+{
+ header('Location:'.$e107->url->getUrl('forum', 'forum', array('func' => 'main')));
+ exit;
+}
+
+$forumInfo = $forum->forum_get($forumId);
+
+if (!$FORUM_VIEW_START)
+{
+ if (file_exists(THEME.'forum_viewforum_template.php'))
+ {
+ require_once(THEME.'forum_viewforum_template.php');
+ }
+ elseif (file_exists(THEME.'forum_template.php'))
+ {
+ require_once(THEME.'forum_template.php');
+ }
+ else
+ {
+ require_once(e_PLUGIN.'forum/templates/forum_viewforum_template.php');
+ }
+}
+
+$forumInfo['forum_name'] = $e107->tp->toHTML($forumInfo['forum_name'], true, 'no_hook, emotes_off');
+$forumInfo['forum_description'] = $e107->tp->toHTML($forumInfo['forum_description'], true, 'no_hook');
+
+$_forum_name = (substr($forumInfo['forum_name'], 0, 1) == '*' ? substr($forumInfo['forum_name'], 1) : $forumInfo['forum_name']);
+define('e_PAGETITLE', LAN_01.' / '.$_forum_name);
+//define('MODERATOR', $forum_info['forum_moderators'] != '' && check_class($forum_info['forum_moderators']));
+//$modArray = $forum->forum_getmods($forum_info['forum_moderators']);
+
+$modArray = $forum->forum_getmods($thread->forum_info['forum_moderators']);
+define('MODERATOR', (USER && is_array($modArray) && in_array(USERID, array_keys($modArray))));
+
+$message = '';
+if (MODERATOR)
+{
+ if ($_POST)
+ {
+ require_once(e_PLUGIN.'forum/forum_mod.php');
+ $message = forum_thread_moderate($_POST);
+ }
+}
+
+if(varset($pref['track_online']))
+{
+ $member_users = $sql->db_Count('online', '(*)', "WHERE online_location REGEXP('viewforum.php.id=$forumId\$') AND online_user_id != 0");
+ $guest_users = $sql->db_Count('online', '(*)', "WHERE online_location REGEXP('viewforum.php.id=$forumId\$') AND online_user_id = 0");
+ $users = $member_users+$guest_users;
+}
+
+require_once(HEADERF);
+$text='';
+if ($message)
+{
+ $ns->tablerender('', $message, array('forum_viewforum', 'msg'));
+}
+
+$threadCount = $forumInfo['forum_threads'];
+
+if ($threadCount > $view)
+{
+ $pages = ceil($threadCount/$view);
+}
+else
+{
+ $pages = false;
+}
+
+//echo "pages = $pages
";
+
+if ($pages)
+{
+ if(strpos($FORUM_VIEW_START, 'THREADPAGES') !== false || strpos($FORUM_VIEW_END, 'THREADPAGES') !== false)
+ {
+ $parms = "{$threadCount},{$view},{$threadFrom},".e_SELF.'?'.$forumId.'.[FROM],off';
+ $THREADPAGES = $tp->parseTemplate("{NEXTPREV={$parms}}");
+ }
+}
+
+if($forum->checkPerm($forumId, 'post'))
+{
+ $NEWTHREADBUTTON = " 'nt', 'id' => $forumId))."'>".IMAGE_newthread.'';
+}
+
+if(substr($forumInfo['forum_name'], 0, 1) == '*')
+{
+ $forum_info['forum_name'] = substr($forum_info['forum_name'], 1);
+ $container_only = true;
+}
+else
+{
+ $container_only = false;
+}
+
+if(substr($forum_info['sub_parent'], 0, 1) == '*')
+{
+ $forum_info['sub_parent'] = substr($forum_info['sub_parent'], 1);
+}
+
+$forum->set_crumb(); // set $BREADCRUMB (and $BACKLINK)
+
+$FORUMTITLE = $forumInfo['forum_name'];
+$MODERATORS = LAN_404.': '.implode(', ', $modArray);
+$BROWSERS = '';
+if(varset($pref['track_online']))
+{
+ $BROWSERS = $users.' '.($users == 1 ? LAN_405 : LAN_406).' ('.$member_users.' '.($member_users == 1 ? LAN_407 : LAN_409).", ".$guest_users." ".($guest_users == 1 ? LAN_408 : LAN_410).')';
+}
+
+
+$ICONKEY = "
+
+
+ ".IMAGE_new_small." |
+ ".LAN_79." |
+ ".IMAGE_nonew_small." |
+ ".LAN_80." |
+ ".IMAGE_sticky_small." |
+ ".LAN_202." |
+ ".IMAGE_announce_small." |
+ ".LAN_396." |
+
+
+ ".IMAGE_new_popular_small." |
+ ".LAN_79." ".LAN_395." |
+ ".IMAGE_nonew_popular_small." |
+ ".LAN_80." ".LAN_395." |
+ ".IMAGE_stickyclosed_small." |
+ ".LAN_203." |
+ ".IMAGE_closed_small." |
+ ".LAN_81." |
+
+
";
+
+$SEARCH = "
+ ";
+
+if($forum->checkPerm($forumId, 'post'))
+{
+ $PERMS = LAN_204.' - '.LAN_206.' - '.LAN_208;
+}
+else
+{
+ $PERMS = LAN_205.' - '.LAN_207.' - '.LAN_209;
+}
+
+$sticky_threads = 0;
+$stuck = false;
+$reg_threads = 0;
+$unstuck = false;
+
+$threadList = $forum->forumGetThreads($forumId, $threadFrom, $view);
+$subList = $forum->forum_getsubs($forum_id);
+//print_a($sub_list);
+$gen = new convert;
+
+$SUBFORUMS = '';
+if(is_array($sub_list))
+{
+ $newflag_list = $forum->forum_newflag_list();
+ $sub_info = '';
+ foreach($sub_list as $sub)
+ {
+ $sub_info .= parse_sub($sub);
+ }
+ $SUBFORUMS = $FORUM_VIEW_SUB_START.$sub_info.$FORUM_VIEW_SUB_END;
+}
+
+if (count($threadList) )
+{
+// foreach($threadList as $thread_info)
+// {
+// $idArray[] = $thread_info['thread_id'];
+// }
+// $inList = '('.implode(',', $idArray).')';
+ foreach($threadList as $thread_info)
+ {
+ if($thread_info['thread_options'])
+ {
+ $thread_info['thread_options'] = unserialize($thread_info['thread_options']);
+ }
+ else
+ {
+ $thread_info['thread_options'] = array();
+ }
+ if ($thread_info['thread_s'])
+ {
+ $sticky_threads ++;
+ }
+ if ($sticky_threads > 0 && !$stuck && $pref['forum_hilightsticky'])
+ {
+ if($FORUM_IMPORTANT_ROW)
+ {
+ $forum_view_forum .= $FORUM_IMPORTANT_ROW;
+ }
+ else
+ {
+ $forum_view_forum .= "
";
+ }
+ $stuck = true;
+ }
+ if (!$thread_info['thread_s'])
+ {
+ $reg_threads ++;
+ }
+ if ($reg_threads == '1' && !$unstuck && $stuck)
+ {
+ if($FORUM_NORMAL_ROW)
+ {
+ $forum_view_forum .= $FORUM_NORMAL_ROW;
+ }
+ else
+ {
+ $forum_view_forum .= "
";
+ }
+ $unstuck = true;
+ }
+ $forum_view_forum .= parse_thread($thread_info);
+ }
+}
+else
+{
+ $forum_view_forum .= "
";
+}
+
+//$sql->db_Select('forum', '*', "forum_parent !=0 AND forum_class != '255' ");
+$FORUMJUMP = forumjump();
+$TOPLINK = "".LAN_02.'';
+
+if($container_only)
+{
+ $FORUM_VIEW_START = ($FORUM_VIEW_START_CONTAINER ? $FORUM_VIEW_START_CONTAINER : $FORUM_VIEW_START);
+ $FORUM_VIEW_END = ($FORUM_VIEW_END_CONTAINER ? $FORUM_VIEW_END_CONTAINER : $FORUM_VIEW_END);
+ $forum_view_forum = '';
+}
+
+$forum_view_start = preg_replace("/\{(.*?)\}/e", '$\1', $FORUM_VIEW_START);
+$forum_view_end = preg_replace("/\{(.*?)\}/e", '$\1', $FORUM_VIEW_END);
+
+
+if ($pref['forum_enclose'])
+{
+ $ns->tablerender($pref['forum_title'], $forum_view_start.$forum_view_subs.$forum_view_forum.$forum_view_end, array('forum_viewforum', 'main1'));
+}
+else
+{
+ echo $forum_view_start.$forum_view_forum.$forum_view_end;
+}
+
+echo "";
+
+require_once(FOOTERF);
+
+
+function parse_thread($thread_info)
+{
+ global $forum, $tp, $FORUM_VIEW_FORUM, $FORUM_VIEW_FORUM_STICKY, $FORUM_VIEW_FORUM_ANNOUNCE, $gen, $pref, $forum_id, $menu_pref;
+ $e107 = e107::getInstance();
+ $text = '';
+
+ $threadId = $thread_info['thread_id'];
+ $forumId = $thread_info['thread_forum_id'];
+
+ $VIEWS = $thread_info['thread_views'];
+ $REPLIES = $thread_info['thread_total_replies'];
+
+ if ($REPLIES)
+ {
+ $lastpost_datestamp = $gen->convert_date($thread_info['thread_lastpost'], 'forum');
+ if($thread_info['lastpost_username'])
+ {
+ $LASTPOST = "".$thread_info['lastpost_username']."";
+ }
+ else
+ {
+ if(!$thread_info['thread_lastuser'])
+ {
+ $LASTPOST = $tp->toHTML($thread_info['thread_lastuser_anon']);
+ }
+ else
+ {
+ $LASTPOST = FORLAN_19;
+ }
+ }
+ $LASTPOST .= '
'.$lastpost_datestamp;
+ }
+
+ $newflag = false;
+ if (USER)
+ {
+ if ($thread_info['thread_lastpost'] > USERLV && !$forum->threadViewed($thread_info['thread_id']))
+ {
+ $newflag = true;
+ }
+ }
+
+ $THREADDATE = $gen->convert_date($thread_info['thread_datestamp'], 'forum');
+ $ICON = ($newflag ? IMAGE_new : IMAGE_nonew);
+ if ($REPLIES >= $pref['forum_popular'])
+ {
+ $ICON = ($newflag ? IMAGE_new_popular : IMAGE_nonew_popular);
+ }
+
+ $THREADTYPE = '';
+ if ($thread_info['thread_s'] == 1)
+ {
+ $ICON = ($thread_info['thread_active'] ? IMAGE_sticky : IMAGE_stickyclosed);
+ $THREADTYPE = '['.LAN_202.']
';
+ }
+ elseif($thread_info['thread_s'] == 2)
+ {
+ $ICON = IMAGE_announce;
+ $THREADTYPE = '['.LAN_396.']
';
+ }
+ elseif(!$thread_info['thread_active'])
+ {
+ $ICON = IMAGE_closed;
+ }
+
+
+ $thread_name = strip_tags($tp->toHTML($thread_info['thread_name'], false, 'no_hook, emotes_off'));
+ if(isset($thread_info['thread_options']['poll']))
+ {
+ $thread_name = '['.FORLAN_23.'] ' . $thread_name;
+ }
+// if (strtoupper($THREADTYPE) == strtoupper(substr($thread_name, 0, strlen($THREADTYPE))))
+// {
+// $thread_name = substr($thread_name, strlen($THREADTYPE));
+// }
+ if ($pref['forum_tooltip'])
+ {
+ $thread_thread = strip_tags($tp->toHTML($thread_info['thread_thread'], true, 'no_hook'));
+ $tip_length = ($pref['forum_tiplength'] ? $pref['forum_tiplength'] : 400);
+ if (strlen($thread_thread) > $tip_length)
+ {
+ $thread_thread = substr($thread_thread, 0, $tip_length).' '.$menu_pref['newforumposts_postfix'];
+ }
+ $thread_thread = str_replace("'", ''', $thread_thread);
+ $title = "title='".$thread_thread."'";
+ }
+ else
+ {
+ $title = '';
+ }
+ $THREADNAME = "{$thread_name}";
+
+ $pages = ceil(($REPLIES+1)/$pref['forum_postspage']);
+ if ($pages > 1)
+ {
+ if($pages > 6)
+ {
+ for($a = 0; $a <= 2; $a++)
+ {
+ $PAGES .= $PAGES ? ' ' : '';
+ $PAGES .= "".($a+1)."";
+ }
+ $PAGES .= ' ... ';
+ for($a = $pages-3; $a <= $pages-1; $a++)
+ {
+ $PAGES .= $PAGES ? " " : "";
+ $PAGES .= "".($a+1)."";
+ }
+ }
+ else
+ {
+ for($a = 0; $a <= ($pages-1); $a++)
+ {
+ $PAGES .= $PAGES ? ' ' : '';
+ $PAGES .= "".($a+1)."";
+ }
+ }
+ $PAGES = LAN_316.' [ '.$PAGES.' ]';
+ }
+ else
+ {
+ $PAGES = '';
+ }
+
+ if (MODERATOR)
+ {
+// $thread_id = $thread_info['thread_id'];
+// $e107->url->getUrl('forum', 'thread', array('func' => 'last', 'id' => $tmp[1]))
+ $ADMIN_ICONS = "
+
+ ";
+ }
+
+ $text .= "
+