diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp
index 6f0b7df9350c63696e466f4a3985c3fdaacdeb84..d59a7d752e4ea56978cf576e36ff8a15fffcae50 100644
--- a/indra/newview/llpanelclassified.cpp
+++ b/indra/newview/llpanelclassified.cpp
@@ -1166,6 +1166,7 @@ LLPanelClassifiedInfo::LLPanelClassifiedInfo()
  , mTeleportClicksNew(0)
  , mMapClicksNew(0)
  , mProfileClicksNew(0)
+ , mSnapshotCtrl(NULL)
 {
 	sAllPanels.push_back(this);
 }
@@ -1195,7 +1196,8 @@ BOOL LLPanelClassifiedInfo::postBuild()
 	mScrollingPanelMinHeight = mScrollContainer->getScrolledViewRect().getHeight();
 	mScrollingPanelWidth = mScrollingPanel->getRect().getWidth();
 
-	mSnapshotRect = getChild<LLUICtrl>("classified_snapshot")->getRect();
+	mSnapshotCtrl = getChild<LLTextureCtrl>("classified_snapshot");
+	mSnapshotRect = getDefaultSnapshotRect();
 
 	return TRUE;
 }
@@ -1229,7 +1231,8 @@ void LLPanelClassifiedInfo::reshape(S32 width, S32 height, BOOL called_from_pare
 		mScrollingPanel->reshape(mScrollingPanelWidth + scrollbar_size, scroll_height);
 	}
 
-	mSnapshotRect = getChild<LLUICtrl>("classified_snapshot")->getRect();
+	mSnapshotRect = getDefaultSnapshotRect();
+	stretchSnapshot();
 }
 
 void LLPanelClassifiedInfo::onOpen(const LLSD& key)
@@ -1249,6 +1252,7 @@ void LLPanelClassifiedInfo::onOpen(const LLSD& key)
 
 	resetData();
 	resetControls();
+	scrollToTop();
 
 	setClassifiedId(key["classified_id"]);
 	setClassifiedName(key["name"]);
@@ -1359,12 +1363,7 @@ void LLPanelClassifiedInfo::setClassifiedLocation(const std::string& location)
 
 void LLPanelClassifiedInfo::setSnapshotId(const LLUUID& id)
 {
-	childSetValue("classified_snapshot", id);
-	if(!mSnapshotStreched)
-	{
-		LLUICtrl* snapshot = getChild<LLUICtrl>("classified_snapshot");
-		snapshot->setRect(mSnapshotRect);
-	}
+	mSnapshotCtrl->setValue(id);
 	mSnapshotStreched = false;
 }
 
@@ -1374,7 +1373,10 @@ void LLPanelClassifiedInfo::draw()
 
 	// Stretch in draw because it takes some time to load a texture,
 	// going to try to stretch snapshot until texture is loaded
-	stretchSnapshot();
+	if(!mSnapshotStreched)
+	{
+		stretchSnapshot();
+	}
 }
 
 LLUUID LLPanelClassifiedInfo::getSnapshotId()
@@ -1474,10 +1476,9 @@ void LLPanelClassifiedInfo::stretchSnapshot()
 	// *NOTE dzaporozhan
 	// Could be moved to LLTextureCtrl
 
-	LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>("classified_snapshot");
-	LLViewerFetchedTexture* texture = texture_ctrl->getTexture();
+	LLViewerFetchedTexture* texture = mSnapshotCtrl->getTexture();
 
-	if(!texture || mSnapshotStreched)
+	if(!texture)
 	{
 		return;
 	}
@@ -1485,11 +1486,16 @@ void LLPanelClassifiedInfo::stretchSnapshot()
 	if(0 == texture->getOriginalWidth() || 0 == texture->getOriginalHeight())
 	{
 		// looks like texture is not loaded yet
-		llinfos << "Missing image size" << llendl;
 		return;
 	}
 
 	LLRect rc = mSnapshotRect;
+	// *HACK dzaporozhan
+	// LLTextureCtrl uses BTN_HEIGHT_SMALL as bottom for texture which causes
+	// drawn texture to be smaller than expected. (see LLTextureCtrl::draw())
+	// Lets increase texture height to force texture look as expected.
+	rc.mBottom -= BTN_HEIGHT_SMALL;
+
 	F32 t_width = texture->getFullWidth();
 	F32 t_height = texture->getFullHeight();
 
@@ -1499,11 +1505,26 @@ void LLPanelClassifiedInfo::stretchSnapshot()
 	t_height *= ratio;
 
 	rc.setCenterAndSize(rc.getCenterX(), rc.getCenterY(), llfloor(t_width), llfloor(t_height));
-	texture_ctrl->setRect(rc);
+	mSnapshotCtrl->setShape(rc);
 
 	mSnapshotStreched = true;
 }
 
+LLRect LLPanelClassifiedInfo::getDefaultSnapshotRect()
+{
+	// Using scroll container makes getting default rect a hard task
+	// because rect in postBuild() and in first reshape() is not the same.
+	// Using snapshot_panel makes it easier to reshape snapshot.
+	return getChild<LLUICtrl>("snapshot_panel")->getLocalRect();
+}
+
+void LLPanelClassifiedInfo::scrollToTop()
+{
+	LLScrollContainer* scrollContainer = findChild<LLScrollContainer>("profile_scroll");
+	if (scrollContainer)
+		scrollContainer->goToTop();
+}
+
 void LLPanelClassifiedInfo::onMapClick()
 {
 	LLFloaterWorldMap::getInstance()->trackLocation(getPosGlobal());
@@ -1536,6 +1557,7 @@ LLPanelClassifiedEdit::LLPanelClassifiedEdit()
  : LLPanelClassifiedInfo()
  , mIsNew(false)
  , mCanClose(false)
+ , mPublishFloater(NULL)
 {
 }
 
@@ -1587,6 +1609,8 @@ BOOL LLPanelClassifiedEdit::postBuild()
 	childSetAction("save_changes_btn", boost::bind(&LLPanelClassifiedEdit::onSaveClick, this));
 	childSetAction("set_to_curr_location_btn", boost::bind(&LLPanelClassifiedEdit::onSetLocationClick, this));
 
+	mSnapshotCtrl->setOnSelectCallback(boost::bind(&LLPanelClassifiedEdit::onTextureSelected, this));
+
 	return TRUE;
 }
 
@@ -1596,6 +1620,8 @@ void LLPanelClassifiedEdit::onOpen(const LLSD& key)
 
 	mIsNew = classified_id.isNull();
 
+	scrollToTop();
+
 	if(mIsNew)
 	{
 		setAvatarId(gAgent.getID());
@@ -1641,6 +1667,9 @@ void LLPanelClassifiedEdit::onOpen(const LLSD& key)
 		enableEditing(false);
 	}
 
+	std::string save_btn_label = isNew() ? getString("publish_label") : getString("save_label");
+	childSetLabelArg("save_changes_btn", "[LABEL]", save_btn_label);
+
 	resetDirty();
 	setInfoLoaded(false);
 }
@@ -1709,12 +1738,12 @@ void LLPanelClassifiedEdit::resetDirty()
 	getChild<LLUICtrl>("price_for_listing")->resetDirty();
 }
 
-void LLPanelClassifiedEdit::setSaveCallback(const commit_callback_t& cb)
+void LLPanelClassifiedEdit::setSaveCallback(const commit_signal_t::slot_type& cb)
 {
-	getChild<LLButton>("save_changes_btn")->setClickedCallback(cb);
+	mSaveButtonClickedSignal.connect(cb);
 }
 
-void LLPanelClassifiedEdit::setCancelCallback(const commit_callback_t& cb)
+void LLPanelClassifiedEdit::setCancelCallback(const commit_signal_t::slot_type& cb)
 {
 	getChild<LLButton>("cancel_btn")->setClickedCallback(cb);
 }
@@ -1734,6 +1763,22 @@ bool LLPanelClassifiedEdit::canClose()
 	return mCanClose;
 }
 
+void LLPanelClassifiedEdit::draw()
+{
+	LLPanel::draw();
+
+	// Need to re-stretch on every draw because LLTextureCtrl::onSelectCallback
+	// does not trigger callbacks when user navigates through images.
+	stretchSnapshot();
+}
+
+void LLPanelClassifiedEdit::stretchSnapshot()
+{
+	LLPanelClassifiedInfo::stretchSnapshot();
+
+	getChild<LLUICtrl>("edit_icon")->setShape(mSnapshotCtrl->getRect());
+}
+
 void LLPanelClassifiedEdit::sendUpdate()
 {
 	LLAvatarClassifiedInfo c_data;
@@ -1821,6 +1866,11 @@ S32 LLPanelClassifiedEdit::getPriceForListing()
 	return childGetValue("price_for_listing").asInteger();
 }
 
+void LLPanelClassifiedEdit::setPriceForListing(S32 price)
+{
+	childSetValue("price_for_listing", price);
+}
+
 void LLPanelClassifiedEdit::onSetLocationClick()
 {
 	setPosGlobal(gAgent.getPositionGlobal());
@@ -1864,9 +1914,45 @@ void LLPanelClassifiedEdit::onSaveClick()
 		}
 	}
 
+	if(isNew())
+	{
+		mPublishFloater = LLFloaterReg::findTypedInstance<LLPublishClassifiedFloater>(
+			"publish_classified", LLSD());
+
+		if(!mPublishFloater)
+		{
+			mPublishFloater = LLFloaterReg::getTypedInstance<LLPublishClassifiedFloater>(
+				"publish_classified", LLSD());
+
+			mPublishFloater->setPublishClickedCallback(boost::bind
+				(&LLPanelClassifiedEdit::onPublishFloaterPublishClicked, this));
+		}
+
+		// set spinner value before it has focus or value wont be set
+		mPublishFloater->setPrice(getPriceForListing());
+		mPublishFloater->openFloater(mPublishFloater->getKey());
+		mPublishFloater->center();
+	}
+	else
+	{
+		doSave();
+	}
+}
+
+void LLPanelClassifiedEdit::doSave()
+{
 	mCanClose = true;
 	sendUpdate();
 	resetDirty();
+
+	mSaveButtonClickedSignal(this, LLSD());
+}
+
+void LLPanelClassifiedEdit::onPublishFloaterPublishClicked()
+{
+	setPriceForListing(mPublishFloater->getPrice());
+
+	doSave();
 }
 
 std::string LLPanelClassifiedEdit::getLocationNotice()
@@ -1913,4 +1999,52 @@ void LLPanelClassifiedEdit::onTexturePickerMouseLeave(LLUICtrl* ctrl)
 	ctrl->setVisible(FALSE);
 }
 
+void LLPanelClassifiedEdit::onTextureSelected()
+{
+	setSnapshotId(mSnapshotCtrl->getValue().asUUID());
+}
+
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+
+LLPublishClassifiedFloater::LLPublishClassifiedFloater(const LLSD& key)
+ : LLFloater(key)
+{
+}
+
+LLPublishClassifiedFloater::~LLPublishClassifiedFloater()
+{
+}
+
+BOOL LLPublishClassifiedFloater::postBuild()
+{
+	LLFloater::postBuild();
+
+	childSetAction("publish_btn", boost::bind(&LLFloater::closeFloater, this, false));
+	childSetAction("cancel_btn", boost::bind(&LLFloater::closeFloater, this, false));
+
+	return TRUE;
+}
+
+void LLPublishClassifiedFloater::setPrice(S32 price)
+{
+	childSetValue("price_for_listing", price);
+}
+
+S32 LLPublishClassifiedFloater::getPrice()
+{
+	return childGetValue("price_for_listing").asInteger();
+}
+
+void LLPublishClassifiedFloater::setPublishClickedCallback(const commit_signal_t::slot_type& cb)
+{
+	getChild<LLButton>("publish_btn")->setClickedCallback(cb);
+}
+
+void LLPublishClassifiedFloater::setCancelClickedCallback(const commit_signal_t::slot_type& cb)
+{
+	getChild<LLButton>("cancel_btn")->setClickedCallback(cb);
+}
+
 //EOF
diff --git a/indra/newview/llpanelclassified.h b/indra/newview/llpanelclassified.h
index 43b47d4e3e59c5fafbdf7ff309ca82742ee0ae5f..78f095a9bb31086f3917b75e3357c03206e6a6d9 100644
--- a/indra/newview/llpanelclassified.h
+++ b/indra/newview/llpanelclassified.h
@@ -202,6 +202,23 @@ class LLFloaterPriceForListing
 	void* mUserData;
 };
 
+class LLPublishClassifiedFloater : public LLFloater
+{
+public:
+	LLPublishClassifiedFloater(const LLSD& key);
+	virtual ~LLPublishClassifiedFloater();
+
+	/*virtual*/ BOOL postBuild();
+
+	void setPrice(S32 price);
+	S32 getPrice();
+
+	void setPublishClickedCallback(const commit_signal_t::slot_type& cb);
+	void setCancelClickedCallback(const commit_signal_t::slot_type& cb);
+
+private:
+};
+
 class LLPanelClassifiedInfo : public LLPanel, public LLAvatarPropertiesObserver
 {
 public:
@@ -280,10 +297,18 @@ class LLPanelClassifiedInfo : public LLPanel, public LLAvatarPropertiesObserver
 
 	void stretchSnapshot();
 
+	LLRect getDefaultSnapshotRect();
+
+	void scrollToTop();
+
 	void onMapClick();
 	void onTeleportClick();
 	void onExit();
 
+	bool mSnapshotStreched;
+	LLRect mSnapshotRect;
+	LLTextureCtrl* mSnapshotCtrl;
+
 private:
 
 	LLUUID mAvatarId;
@@ -292,9 +317,6 @@ class LLPanelClassifiedInfo : public LLPanel, public LLAvatarPropertiesObserver
 	LLUUID mParcelId;
 	bool mInfoLoaded;
 
-	bool mSnapshotStreched;
-	LLRect mSnapshotRect;
-
 	LLScrollContainer*		mScrollContainer;
 	LLPanel*				mScrollingPanel;
 
@@ -331,9 +353,9 @@ class LLPanelClassifiedEdit : public LLPanelClassifiedInfo
 
 	/*virtual*/ void resetDirty();
 
-	void setSaveCallback(const commit_callback_t& cb);
+	void setSaveCallback(const commit_signal_t::slot_type& cb);
 
-	void setCancelCallback(const commit_callback_t& cb);
+	void setCancelCallback(const commit_signal_t::slot_type& cb);
 
 	/*virtual*/ void resetControls();
 
@@ -341,6 +363,10 @@ class LLPanelClassifiedEdit : public LLPanelClassifiedInfo
 
 	bool canClose();
 
+	void draw();
+
+	void stretchSnapshot();
+
 protected:
 
 	LLPanelClassifiedEdit();
@@ -357,6 +383,8 @@ class LLPanelClassifiedEdit : public LLPanelClassifiedInfo
 
 	S32 getPriceForListing();
 
+	void setPriceForListing(S32 price);
+
 	U8 getFlags();
 
 	std::string getLocationNotice();
@@ -369,12 +397,22 @@ class LLPanelClassifiedEdit : public LLPanelClassifiedInfo
 	void onChange();
 	void onSaveClick();
 
+	void doSave();
+
+	void onPublishFloaterPublishClicked();
+
 	void onTexturePickerMouseEnter(LLUICtrl* ctrl);
 	void onTexturePickerMouseLeave(LLUICtrl* ctrl);
 
+	void onTextureSelected();
+
 private:
 	bool mIsNew;
 	bool mCanClose;
+
+	LLPublishClassifiedFloater* mPublishFloater;
+
+	commit_signal_t mSaveButtonClickedSignal;
 };
 
 #endif // LL_LLPANELCLASSIFIED_H
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 8370c98470d03136673844335f76b7acee38d708..65e9d8971a88e925d87481f861cacbd28f45bb0e 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -117,6 +117,7 @@
 #include "llmoveview.h"
 #include "llnearbychat.h"
 #include "llpanelblockedlist.h"
+#include "llpanelclassified.h"
 #include "llpreviewanim.h"
 #include "llpreviewgesture.h"
 #include "llpreviewnotecard.h"
@@ -219,6 +220,7 @@ void LLViewerFloaterReg::registerFloaters()
 	LLFloaterReg::add("preview_sound", "floater_preview_sound.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewSound>, "preview");
 	LLFloaterReg::add("preview_texture", "floater_preview_texture.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewTexture>, "preview");
 	LLFloaterReg::add("properties", "floater_inventory_item_properties.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterProperties>);
+	LLFloaterReg::add("publish_classified", "floater_publish_classified.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPublishClassifiedFloater>);
 
 	LLFloaterReg::add("telehubs", "floater_telehub.xml",&LLFloaterReg::build<LLFloaterTelehub>);
 	LLFloaterReg::add("test_inspectors", "floater_test_inspectors.xml",
diff --git a/indra/newview/skins/default/xui/en/floater_publish_classified.xml b/indra/newview/skins/default/xui/en/floater_publish_classified.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3225843d09bffdab2a14e07a1664a18d4f72115a
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_publish_classified.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ legacy_header_height="18"
+ can_minimize="false"
+ height="200"
+ layout="topleft"
+ name="publish_classified"
+ help_topic="price_for_listing"
+ title="Publishing Classified"
+ width="320">
+    <text
+     top="20"
+     follows="top|left"
+     font="SansSerif"
+     height="60"
+     layout="topleft"
+     left="15"
+     word_wrap="true"
+     name="explanation_text">
+     
+Your classified ad will run for one week from the date it is published.
+        
+Remember, Classified fees are non-refundable.
+
+    </text>
+    <spinner
+     decimal_digits="0"
+     follows="left|top"
+     halign="left"
+     height="23"
+     increment="1"
+     label_width="70"
+     label="Price for Ad: "
+     v_pad="10"
+     layout="topleft"
+     left="15"
+     value="50"
+     min_val="50"
+     max_val="99999"
+     name="price_for_listing"
+     top_pad="10"
+     tool_tip="Price for listing."
+     width="150" />
+    <text
+     follows="top|left"
+     font="SansSerif"
+     height="60"
+     layout="topleft"
+     left_pad="5"
+     top_delta="0"
+     word_wrap="true"
+     value="L$"
+     name="l$_text" />
+    <text
+     follows="top|right"
+     font="SansSerif"
+     height="20"
+     layout="topleft"
+     left="15"
+     name="more_info_text"
+     top_pad="-20"
+     width="300">
+More info (link to classified help)
+    </text>
+    <button
+     follows="top|left"
+     height="22"
+     label="Publish"
+     layout="topleft"
+     left="105"
+     name="publish_btn"
+     top="160"
+     width="100" />
+    <button
+     follows="top|left"
+     height="22"
+     label="Cancel"
+     layout="topleft"
+     left_pad="5"
+     name="cancel_btn"
+     width="100" />
+</floater>
diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml
index a8c72e03bd11eb46fb01966e3931574a5175a19a..30546d32a11eb3bbdf2a547e29b316a83e5eb8bb 100644
--- a/indra/newview/skins/default/xui/en/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_classified_info.xml
@@ -66,15 +66,26 @@
      height="610"
      left="0"
      width="285">
+        <panel
+         name="snapshot_panel"
+         layout="topleft"
+         follows="left|top|right"
+         height="197"
+         left="10"
+         top="10"
+         width="275"
+        >
         <texture_picker
          enabled="false"
          follows="left|top|right"
          height="197"
          width="272"
          layout="topleft"
-         left="11"
+         left="0"
          name="classified_snapshot"
-         top="10" />
+         top="0"
+         width="275" />
+        </panel>
         <text_editor
          allow_scroll="false"
          bg_visible="false"
@@ -86,7 +97,7 @@
          font="SansSerifBig"
          font.style="BOLD"
          left="10"
-         top_pad="10"
+         top_pad="5"
          name="classified_name"
          read_only="true"
          text_color="white"
@@ -170,6 +181,33 @@
          top_pad="5"
          v_pad="0"
          value="[category]" />
+        <text
+         follows="left|top"
+         font.style="BOLD"
+         height="10"
+         layout="topleft"
+         left="10"
+         name="creation_date_label"
+         text_color="white"
+         top_pad="0"
+         value="Creation date:"
+         width="140" />
+        <text_editor
+         allow_scroll="false"
+         bg_visible="false"
+         follows="left|top"
+         h_pad="0"
+         halign="left"
+         height="16"
+         layout="topleft"
+         left_pad="0"
+         name="creation_date"
+         read_only="true"
+         top_pad="-10"
+         tool_tip="Creation date"
+         v_pad="0"
+         value="[date]"
+         width="150" />
         <text
          follows="left|top"
          font.style="BOLD"
@@ -207,6 +245,44 @@
          top_pad="5"
          width="290"
          height="250">
+         <layout_panel
+          auto_resize="false"
+          name="clickthrough_layout_panel"
+          layout="topleft"
+          follows="top|left"
+          left="0"
+          top="0"
+          width="290"
+          height="26"
+          user_resize="false">
+        <text
+         follows="left|top"
+         font.style="BOLD"
+         height="10"
+         layout="topleft"
+         left="0"
+         name="click_through_label"
+         text_color="white"
+         top_pad="0"
+         value="Clicks:"
+         width="140" />
+        <text_editor
+         allow_scroll="false"
+         bg_visible="false"
+         follows="left|top"
+         h_pad="0"
+         halign="left"
+         height="16"
+         layout="topleft"
+         left_pad="0"
+         name="click_through_text"
+         read_only="true"
+         top_pad="-10"
+         tool_tip="Click through data"
+         v_pad="0"
+         value="[clicks]"
+         width="150" />
+         </layout_panel>
          <layout_panel
           auto_resize="false"
           name="price_layout_panel"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_classified.xml b/indra/newview/skins/default/xui/en/panel_edit_classified.xml
index 6cc6c51fe0701a74f412fa5b0db16ec7b8458b3c..c1b352031fb1a2b9fa29ceda424669d38635e757 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_classified.xml
@@ -16,6 +16,12 @@
   name="location_notice">
     (will update after save)
  </panel.string>
+ <string name="publish_label">
+  Publish
+ </string>
+ <string name="save_label">
+  Save
+ </string>
   <button
      follows="top|right"
      height="23"
@@ -62,24 +68,33 @@
      height="690"
      left="0"
      width="285">
+      <panel
+         name="snapshot_panel"
+         layout="topleft"
+         follows="left|top|right"
+         height="197"
+         left="10"
+         top="10"
+         width="272">
       <texture_picker
        follows="left|top|right"
        height="197"
        width="272"
        layout="topleft"
-       top="10"
-       left="11"
+       top="0"
+       left="0"
        name="classified_snapshot" />
-          <icon
+       <icon
            height="197"
            image_name="spacer24.tga"
            layout="topleft"
            name="edit_icon"
            label=""
            tool_tip="Click to select an image"
-           top="10"
-           left="11"
-           width="286" />
+           top="0"
+           left="0"
+           width="272" />
+       </panel>
         <text
          type="string"
          length="1"
@@ -272,7 +287,7 @@
         <button
          follows="bottom|left"
          height="23"
-         label="Save"
+         label="[LABEL]"
          layout="topleft"
          name="save_changes_btn"
          left="0"